/* ==========================================================================
   ProjectRow — die EINE kanonische Projektzeilen-Grammatik von StarYou.
   Ein UI-Contract, zwei Renderer: das PHP-Partial (_partials/project-list.php)
   und der JS-Zwilling im Workspace emittieren exakt dieselben Klassen. Diese
   Datei ist die einzige Quelle der Wahrheit für Spacing, Typo und Hover — sie
   wird von öffentlichen Landing-Flächen UND vom Cockpit/Workspace eingebunden.
   Beide Kontexte definieren dieselben Tokens (--ink/--ink2/--ink3/--line/
   --line2/--accent-text/--mono), daher rendert die Zeile überall identisch.

   Baseline-Zeile:  title · core_skills · rahmen · provider · arrow
   Optionale Slots (rein datengetrieben, KEINE neue Layout-Variante):
     .prj-relevance  persönliche Passung (nur personalisierte Freelancer-Views)
     .prj-activity   Reaktion/Einreichung (z. B. „✓ Interesse gezeigt · Datum“)
     .prj-bookmark   dezentes Merken-Icon (nur eingeloggter Freelancer-Workspace)
   ========================================================================== */

.prjlist{border-top:1px solid var(--line)}
.prj-row{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:32px;align-items:center;padding:22px 0;border-bottom:1px solid var(--line)}
/* Orientierung „zuletzt geöffnet" = SEHR leise: nur ein 2px Cyan-Marker im linken Gutter.
   KEINE Flächenfüllung, KEIN blauer Titel/Pfeil im Ruhezustand → keine Kollision mit Hover
   (Hover = Interaktion, gehört allein der aktuell gehoverten Row). Bleibt bis zum nächsten Öffnen.
   Nach Rückkehr kurz (~1s) ganz leicht aufhellen, dann auf den reinen Marker zurückfaden. */
.prj-row.is-current::before{content:"";position:absolute;left:-16px;top:14px;bottom:14px;width:2px;border-radius:1px;background:var(--accent,#1FB5E8)}
@media(max-width:820px){.prj-row.is-current::before{left:-10px}}
.prj-row.is-current.flash{animation:prjFlash 1.1s ease-out}
@keyframes prjFlash{0%{background:color-mix(in srgb,var(--accent,#1FB5E8) 10%,transparent)}100%{background:transparent}}
@media(prefers-reduced-motion:reduce){.prj-row.is-current.flash{animation:none}}
.prj-link{position:absolute;inset:0;z-index:1;text-decoration:none}
.prj-main{min-width:0}
.prj-main b{font-size:18px;font-weight:600;letter-spacing:-.018em;display:block;margin-bottom:7px;color:var(--ink);transition:color .12s}
.prj-row:hover .prj-main b{color:var(--accent-text)}
.prj-main .sk{font-size:13.5px;color:var(--ink2)}
.prj-main .meta{font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--ink3);margin-top:7px;text-transform:uppercase}
.prj-prov{position:relative;z-index:2;display:inline-block;font-size:13px;color:var(--ink2);margin-top:8px;text-decoration:none}
a.prj-prov:hover{color:var(--accent-text);text-decoration:underline}

/* Rechte Spalte: optionales Merken-Icon + Pfeil. Ohne Bookmark bleibt nur .prj-go. */
.prj-side{display:flex;align-items:center;gap:14px}
.prj-go{color:var(--ink3);font-size:16px;transition:color .12s,transform .15s;flex:0 0 auto;line-height:0}
.prj-row:hover .prj-go{color:var(--accent-text);transform:translateX(3px)}

/* Slot: persönliche Passung — nur wo der Betrachter ein eingeloggter Freelancer ist.
   Erklärbare Zeile („Teilweise passend · 4 von 11 belegt"), KEIN Score. */
.prj-relevance{display:block;margin-top:9px;font-size:12.5px;line-height:1.45;color:var(--ink2)}
.prj-relevance svg,.prj-relevance .bi{flex:0 0 auto;color:var(--accent-text)}
.prj-relevance b{font:inherit;font-weight:600;color:var(--ink);margin:0}
/* Slot: offene Muss-Anforderungen (kontextuell, personalisierte Views) — leiser Warn-Ton. */
.prj-open{margin-top:6px;font-size:12.5px;line-height:1.45;color:var(--warn-ink,#9A6A13)}

/* Slot: Aktivität/Einreichung — echter fachlicher Status, deutlich lesbar (stärker als Meta),
   eigene Zeile zwischen Anbieter und Passung. Dezenter grüner Haken, Text dunkel; KEIN Pill/Badge. */
.prj-activity{display:flex;align-items:center;gap:7px;margin-top:9px;font-size:13px;color:var(--ink2)}
.prj-activity svg,.prj-activity .bi{flex:0 0 auto;color:var(--ink3);font-size:1.02em}
.prj-activity.is-done{color:var(--ink);font-weight:500}
.prj-activity.is-done svg,.prj-activity.is-done .bi{color:var(--success,#2D9C3F)}

/* Slot: Merken — dezentes Icon, klickbar über dem Stretched-Link (z-index:2). Bewusst LEISE:
   erscheint erst bei Zeilen-Hover/Fokus; dauerhaft sichtbar NUR wenn wirklich gemerkt. Sonst
   läse ein Lesezeichen auf jeder Zeile wie „alles gemerkt". */
.prj-bookmark{position:relative;z-index:2;flex:0 0 auto;display:grid;place-items:center;width:34px;height:34px;padding:0;border:none;border-radius:999px;background:none;color:var(--ink3);cursor:pointer;opacity:0;transition:opacity .14s,color .12s,background .12s}
.prj-row:hover .prj-bookmark,.prj-bookmark:focus-visible,.prj-bookmark.is-saved{opacity:1}
.prj-bookmark:hover{color:var(--ink);background:rgba(0,0,0,.05)}
.prj-bookmark.is-saved{color:var(--accent-text)}
.prj-bookmark .bi{font-size:16px;line-height:1}
/* Touch (kein Hover): Icon dauerhaft dezent zeigen, damit Merken erreichbar bleibt. */
@media(hover:none){.prj-bookmark{opacity:1;color:var(--ink3)}}

@media(max-width:820px){.prj-row{grid-template-columns:1fr;gap:10px}.prj-side{gap:10px}}

/* Editorialer Inline-Einschub (Conversion-Moment in öffentlichen Listen) —
   keine Card/kein Banner, feine Linien + Weißraum. */
.prj-interject{display:flex;align-items:center;justify-content:space-between;gap:28px;flex-wrap:wrap;padding:34px 0;border-top:1px solid var(--line2);border-bottom:1px solid var(--line2)}
.prj-interject b{font-size:18px;font-weight:600;letter-spacing:-.015em;display:block;color:var(--ink)}
.prj-interject p{font-size:14px;color:var(--ink2);margin:6px 0 0;max-width:470px;line-height:1.55}
