/* ============================================================
   Editorial Layout & Components
   Tokens werden in puppet-tokens.css definiert (vor dieser Datei geladen).
   ============================================================ */

*,*::before,*::after { box-sizing: border-box; }

html, body {
  background: var(--bg);
  color: var(--ink);
  font-family: var(--serif);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.puppet-app { font-family: var(--serif); max-width: 1180px; margin: 0 auto; padding: 0 32px; color: var(--ink); }

/* App-Shell-Modus für /profile/edit — alles passt in 100vh, kein vertikales Scrollen */
body:has(.profile-editor-shell) { overflow: hidden; }
.puppet-app:has(.profile-editor-shell) {
  min-height: 100vh;
  max-height: 100vh;
  display: flex;
  flex-direction: column;
}
.puppet-app:has(.profile-editor-shell) main {
  flex: 1;
  min-height: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}
.profile-editor-shell {
  flex: 1;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
.puppet-app > header { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--ink-faint); font-family: var(--sans); font-size: 0.88rem; letter-spacing: 0.02em; text-transform: none; flex: 0 0 auto; }
.puppet-app .logo { font-family: var(--serif); font-style: italic; font-size: 1.35rem; letter-spacing: -0.02em; text-transform: none; color: var(--ink); text-decoration: none; font-weight: 400; }
.puppet-app .logo em { color: var(--accent); font-style: normal; padding: 0 0.04em; font-weight: 400; }
.puppet-app > header > nav { display: flex; gap: 20px; align-items: baseline; }
.puppet-app nav a { color: var(--ink); text-decoration: none; margin: 0; }
.puppet-app nav a:hover { color: var(--accent); text-decoration: none; }
.puppet-app nav span[aria-hidden] { color: var(--ink-faint); }
.puppet-app > main { padding: 0 0 40px; }
.puppet-app > footer { margin-top: 0; padding: 8px 0; border-top: 1px solid var(--ink-faint); font-family: var(--sans); font-size: 0.78rem; letter-spacing: 0; text-transform: none; color: var(--ink-muted); text-align: center; flex: 0 0 auto; }
/* Impressum · Datenschutz · Über (seit Umzug auf screenpuppets.com, 2026-09) */
.puppet-app > footer .sp-footer-links { display: block; margin-top: 6px; }
.puppet-app > footer .sp-footer-links a { color: inherit; text-decoration: none; border-bottom: 1px solid var(--ink-faint); }
.puppet-app > footer .sp-footer-links a:hover { color: var(--accent); border-bottom-color: var(--accent); }
/* Verzeichnis (screenpuppets.aicappella.com/?tab=...) — Catalogue-Raisonné-Look.
   Eleganz aus Spacing, Hierarchie, animiertem Filet — nicht aus Ornament.
   Gescoped unter .puppet-directory damit generische Klassen woanders unberuehrt
   bleiben. */
.puppet-directory {
  padding: 12px 0 24px;
}

/* Tabs: kleine Caps-Labels mit Rust-Underline statt schwerer Border. */
.puppet-directory .tabs {
  display: flex;
  justify-content: center;
  gap: 56px;
  margin: 0 0 44px;
  padding: 8px 4px 0;
  border-bottom: 1px solid var(--line);
}
.puppet-directory .tabs .tab {
  padding: 10px 4px 14px;
  color: var(--ink-muted);
  text-decoration: none;
  font-family: var(--sans);
  font-size: 0.74rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  position: relative;
  transition: color 0.18s ease;
}
.puppet-directory .tabs .tab:hover { color: var(--ink); }
.puppet-directory .tabs .tab.active { color: var(--ink); border-bottom: none; }
.puppet-directory .tabs .tab.active::after {
  content: "";
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  bottom: -1px;
  width: 32px;
  height: 2px;
  background: var(--accent);
}

.puppet-directory .grid {
  display: grid;
  gap: 56px 36px;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  padding: 12px 4px 20px;
  max-width: 1100px;
  margin: 0 auto;
}

/* Karte = Mini-Monografie. */
.puppet-directory .card {
  position: relative;
  display: grid;
  grid-template-rows: auto auto;
  gap: 0;
  padding: 0;
  text-decoration: none;
  color: inherit;
  background: var(--bg);
  border: 0;
  border-radius: 0;
  overflow: visible;
  transition: transform 0.32s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.puppet-directory .card:hover { transform: translateY(-3px); }

/* Foto-Block: Passepartout-Schatten + Vignette + Print-Grain. */
.puppet-directory .card__media {
  position: relative;
  margin: 0 0 22px;
  background: var(--bg-alt);
  /* edler Rahmen wie bei Produktions-Kacheln */
  box-shadow:
    0 0 0 4px var(--bg),
    0 0 0 5px var(--ink-faint),
    0 18px 36px -18px rgba(26, 21, 18, 0.4);
  transition: box-shadow 0.32s ease;
  overflow: hidden;
}
.puppet-directory .card:hover .card__media {
  box-shadow:
    0 0 0 4px var(--bg),
    0 0 0 5px var(--accent),
    0 26px 50px -18px rgba(26, 21, 18, 0.46);
}
.puppet-directory .card__media img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  display: block;
  border-radius: 0;
  margin: 0;
  transition: transform 0.6s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.puppet-directory .card:hover .card__media img { transform: scale(1.02); }
/* Vignette + zarter Print-Grain (Lichtverlauf von oben + dunkler Boden). */
.puppet-directory .card__vignette {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(ellipse at 50% 0%, rgba(255, 255, 255, 0.18) 0%, rgba(255, 255, 255, 0) 45%),
    radial-gradient(ellipse at 50% 100%, rgba(26, 21, 18, 0.32) 0%, rgba(26, 21, 18, 0) 55%),
    /* Mikro-Grain via SVG-Noise — sehr leicht, gibt Print-Charakter. */
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.06 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  background-size: cover, cover, 160px 160px;
  mix-blend-mode: multiply;
  opacity: 0.85;
}
/* Platzhalter wenn kein Bild — gestreifter Print-Look. */
.puppet-directory .card__media:not(:has(img))::before {
  content: "";
  display: block;
  width: 100%;
  aspect-ratio: 4 / 5;
  background: repeating-linear-gradient(45deg, var(--bg-alt) 0 6px, var(--bg-tint) 6px 12px);
}

/* Body: zentrierte Hierarchie. Eyebrow → Name → Filet → Headline → Location. */
.puppet-directory .card__body {
  text-align: center;
  padding: 0 6px;
}
.puppet-directory .card__eyebrow {
  margin: 0 0 8px;
  font-family: var(--sans);
  font-size: 0.62rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-muted);
  text-align: center;
}
.puppet-directory .card__name {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: 1.45rem;
  line-height: 1.15;
  color: var(--ink);
  margin: 0;
  letter-spacing: 0.005em;
}

/* Filet: zarte Hairline unter dem Namen, waechst im Hover.
   Klassisches Magazin-Detail aus der franzoesischen Buchgestaltung. */
.puppet-directory .card__filet {
  display: block;
  margin: 12px auto 12px;
  width: 24px;
  height: 1px;
  background: var(--ink-faint);
  transition: width 0.45s cubic-bezier(0.2, 0.7, 0.2, 1), background 0.3s ease;
}
.puppet-directory .card:hover .card__filet {
  width: 56px;
  background: var(--accent);
}

.puppet-directory .card__headline {
  font-family: var(--sans);
  font-size: 0.78rem;
  line-height: 1.45;
  color: var(--ink-muted);
  margin: 0 0 10px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.puppet-directory .card__loc {
  font-family: var(--sans);
  font-size: 0.62rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-faint);
  margin: 6px 0 0;
}
.puppet-directory .card .badge {
  display: inline-block;
  margin: 16px 0 0;
  padding: 4px 10px;
  font-family: var(--sans);
  font-size: 0.58rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-muted);
  background: transparent;
  border: 1px solid var(--line);
  border-radius: 0;
}

/* Empty-State. */
.puppet-directory .grid:empty::after {
  content: "Noch keine Profile in diesem Bereich.";
  display: block;
  grid-column: 1 / -1;
  padding: 56px 4px;
  font-family: var(--serif);
  font-style: italic;
  color: var(--ink-faint);
  text-align: center;
}
.profile { max-width: 720px; margin: 0 auto; }
.profile-header { display: flex; gap: 1rem; align-items: center; margin-bottom: 1rem; }
.profile-header img { width: 120px; height: 120px; border-radius: 50%; object-fit: cover; }
.profile-header h1 { margin: 0; }
.profile-header .loc { margin: 0; color: #6b7280; }
.reels { list-style: none; padding: 0; }
.reels li { padding: .5rem 0; border-bottom: 1px solid #f3f4f6; }
.werkgalerie { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fill, minmax(200px,1fr)); }
.werkgalerie figure { margin: 0; }
.werkgalerie img { width: 100%; aspect-ratio: 4/3; object-fit: cover; border-radius: 4px; }
.werkgalerie figcaption { font-size: .875rem; color: #6b7280; margin-top: .25rem; }
.contact-form { display: grid; gap: .75rem; margin-top: 2rem; padding: 1rem; background: #f9fafb; border-radius: 8px; }
.contact-form label { display: grid; gap: .25rem; font-size: .875rem; }
.contact-form input, .contact-form textarea { padding: .5rem; border: 1px solid #d1d5db; border-radius: 4px; font: inherit; }
.contact-form .hp { position: absolute; left: -9999px; }
.contact-form button { justify-self: start; padding: .5rem 1.25rem; background: #1f2937; color: white; border: 0; border-radius: 4px; cursor: pointer; }
.contact-form button:hover { background: #111827; }
.login-shell { max-width: 420px; margin: 3rem auto; }
.login-shell form { display: grid; gap: .75rem; }
.login-shell input { padding: .5rem; border: 1px solid #d1d5db; border-radius: 4px; font: inherit; }
.login-shell button { padding: .5rem; background: #1f2937; color: white; border: 0; border-radius: 4px; cursor: pointer; }
.login-shell .error, .error { background: #fee2e2; color: #991b1b; padding: .5rem .75rem; border-radius: 4px; font-size: .875rem; }
.login-signup-hint { margin-top: 1.25rem; text-align: center; font-size: .95rem; color: #4b5563; }
.login-signup-hint a { color: #1f2937; font-weight: 600; }

.profile-editor { display: grid; gap: .75rem; max-width: 640px; }
.profile-editor label { display: grid; gap: .25rem; font-size: .875rem; }
.profile-editor input, .profile-editor textarea { padding: .5rem; border: 1px solid #d1d5db; border-radius: 4px; font: inherit; }
.profile-editor input[type="checkbox"] { width: auto; display: inline-block; margin-right: .5rem; justify-self: start; padding: 0; }
.profile-editor button { justify-self: start; padding: .5rem 1.25rem; background: #1f2937; color: white; border: 0; border-radius: 4px; cursor: pointer; }

table { width: 100%; border-collapse: collapse; margin: 1rem 0; }
th, td { padding: .5rem; text-align: left; border-bottom: 1px solid #e5e7eb; }
th { background: #f9fafb; font-weight: 600; font-size: .875rem; }

.dashboard-nav { display: flex; gap: 1rem; flex-wrap: wrap; margin-top: 1.5rem; }
.dashboard-nav a { color: #1f2937; text-decoration: underline; }

/* Storage-Quota-Bar */
.sp-quota { margin: 1rem 0; }
.sp-quota__label { font-size: 0.9rem; color: #5A4F44; margin-bottom: 0.4rem; }
.sp-quota__track { height: 8px; background: rgba(26,21,18,0.1); border-radius: 4px; overflow: hidden; }
.sp-quota__fill  { height: 100%; background: #1A1512; transition: width 0.2s ease; }
.sp-quota[data-level="warn"] .sp-quota__fill { background: #E08A3C; }
.sp-quota[data-level="full"] .sp-quota__fill { background: #B83A1F; }
.sp-quota[data-level="warn"] .sp-quota__label::after { content: ' — Speicher fast voll'; color: #E08A3C; }
.sp-quota[data-level="full"] .sp-quota__label::after { content: ' — Speicher voll'; color: #B83A1F; }

/* Profile Editor */
.profile-editor-shell { max-width: 840px; margin: 2rem auto; padding: 0 1.25rem; font-family: Georgia, serif; color: #1A1512; }
.profile-editor__header h1 { font-size: 2rem; font-weight: 400; margin: 0 0 0.5rem; }
.profile-editor__hint { background: #fff3f0; border: 1px solid #B83A1F; color: #B83A1F; padding: 12px 16px; margin-bottom: 1.5rem; }
.profile-editor__section { padding: 1.5rem 0; border-top: 1px solid rgba(26,21,18,0.12); }
.profile-editor__section h2 { font-size: 1.3rem; font-weight: 400; margin: 0 0 1rem; }
.stammdaten-grid { display: grid; grid-template-columns: 140px 1fr; gap: 1.25rem; align-items: start; }
.stammdaten-grid .avatar-block img { width: 140px; height: 140px; object-fit: cover; border-radius: 4px; background: rgba(26,21,18,0.08); }
.stammdaten-grid .fields label { display: block; margin-bottom: 0.75rem; font-size: 0.88rem; color: #5A4F44; }
.stammdaten-grid .fields [contenteditable] { display: block; padding: 0.3rem 0.5rem; border: 1px dashed rgba(26,21,18,0.2); min-height: 1.4em; color: #1A1512; font-size: 1rem; }
.stammdaten-grid .fields [contenteditable]:focus { outline: 2px solid #B83A1F; outline-offset: 0; }
.stammdaten-grid .readonly { display: inline-block; padding: 0.3rem 0.5rem; color: #1A1512; font-size: 1rem; }
.btn { padding: 0.5rem 1rem; border: 1px solid #1A1512; background: #1A1512; color: #F6F1E7; font-family: inherit; font-size: 0.95rem; cursor: pointer; border-radius: 2px; }
.btn:hover { background: #B83A1F; border-color: #B83A1F; }
.btn--ghost { background: transparent; color: #1A1512; }
.profile-fields label { display: block; margin-bottom: 0.75rem; font-size: 0.88rem; color: #5A4F44; }
.profile-fields [contenteditable] { display: block; padding: 0.3rem 0.5rem; border: 1px dashed rgba(26,21,18,0.2); min-height: 1.4em; }
.profile-fields [contenteditable][data-multiline] { min-height: 5em; }
.visibility-block { margin-top: 1rem; padding: 1rem; background: #FBF7EE; border: 1px solid rgba(26,21,18,0.12); }
.visibility-status { margin-bottom: 0.6rem; color: #5A4F44; font-size: 0.95rem; }
.media-subsection { margin-top: 1.5rem; }
.error { color: #B83A1F; }

/* Editor Media Sections */
.media-subsection h3 { font-size: 1.05rem; font-weight: 400; margin: 1rem 0 0.5rem; text-transform: uppercase; letter-spacing: 0.08em; color: #5A4F44; }
.reels-list, .works-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1rem; margin-bottom: 1rem; }
.reel-card, .work-card, .production-card {
  background: #FBF7EE; border: 1px solid rgba(26,21,18,0.12); padding: 0.75rem; border-radius: 4px;
  display: flex; flex-direction: column; gap: 0.5rem;
}
.reel-card__title, .work-card__title, .production-card__title { font-size: 1rem; font-weight: 600; }
.reel-card__meta, .work-card__mats, .production-card__meta { font-size: 0.85rem; color: #5A4F44; }
.reel-card__toggle, .work-card label, .production-card label { font-size: 0.9rem; color: #5A4F44; }
.work-card img, .production-card img { width: 100%; height: 160px; object-fit: cover; border-radius: 2px; }

/* Public page productions */
.productions { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1.5rem; margin: 1rem 0 2rem; }
.production img { width: 100%; height: 200px; object-fit: cover; }
.production figcaption { padding: 0.5rem 0; }
.production__meta { font-size: 0.85rem; color: #5A4F44; margin-top: 0.3rem; }
.production__role { font-size: 0.95rem; color: #1A1512; margin-top: 0.2rem; }
.materials { list-style: none; padding: 0; margin: 0.5rem 0 0; display: flex; flex-wrap: wrap; gap: 0.4rem; }
.materials li { background: rgba(26,21,18,0.08); padding: 0.15rem 0.6rem; border-radius: 12px; font-size: 0.8rem; }
.reels iframe, .reels video { width: 100%; max-width: 640px; aspect-ratio: 16/9; border: 0; margin-top: 0.5rem; }
.production__gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 0.4rem; margin-top: 0.6rem; }
.production__gallery img { width: 100%; height: 90px; object-fit: cover; border-radius: 4px; }

/* ============================================================
   Profile-Edit V3 — Masthead + Sidebar + nummerierte Sections
   Shell-Klasse .profile-editor-shell wird hiervon überschrieben
   (selber Wrapper, alter Style in edit.blade.php).
   ============================================================ */

.profile-editor-shell {
  max-width: none;
  margin: 0;
  padding: 0;
  font-family: var(--serif);
  color: var(--ink);
}

/* Masthead — kompakt, damit Gesamthöhe unter 100vh bleibt */
.pe-masthead { border-bottom: 1px solid var(--ink-faint); padding: 16px 0 12px; }
.pe-masthead__inner { display: grid; grid-template-columns: 1fr auto; align-items: end; gap: 20px; }
.pe-eyebrow { font-family: var(--sans); font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); margin: 0 0 2px; }
.pe-headline { font-family: var(--serif); font-style: normal; font-weight: 400; font-size: clamp(1.3rem, 2.4vw, 1.9rem); line-height: 1.1; letter-spacing: -0.01em; margin: 0; color: var(--ink); }
.pe-headline em { color: var(--ink); font-style: italic; font-weight: 400; }
.pe-meta { font-family: var(--sans); font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-muted); text-align: right; }
.pe-meta strong { display: block; font-family: var(--serif); font-style: italic; font-weight: 400; font-size: 1.2rem; color: var(--ink); text-transform: none; letter-spacing: 0; margin-top: 6px; }

/* Publish-Banner aus edit.blade.php (id=publish-banner) editorial und kompakt */
#publish-banner,
.profile-editor__hint {
  display: block;
  background: transparent;
  border: 0;
  border-left: 3px solid var(--accent);
  padding: 6px 14px;
  margin: 10px 0 0;
  font-family: var(--serif);
  font-style: italic;
  color: var(--ink-muted);
  font-size: 0.88rem;
  line-height: 1.4;
}
#publish-banner[hidden] { display: none; }

/* Zweispalter — füllt genau den restlichen Viewport */
.pe-layout {
  display: grid;
  grid-template-columns: 240px 1fr;
  gap: 48px;
  padding: 18px 0 16px;
  min-width: 0;
  flex: 1;
  min-height: 0;
}
.pe-layout > * { min-width: 0; min-height: 0; }

/* ── Sidebar ───────────────────────────────────────────── */
.pe-aside {
  position: static;
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: visible; /* Select-Popover (Gender) darf aus dem Sidebar herausklappen. */
}
.pe-aside > .profile-editor__section {
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: visible;
}

.pe-avatar {
  position: relative;
  width: 100%;
  max-width: 180px;
  align-self: center;
  aspect-ratio: 1 / 1;
  background: var(--bg-alt);
  border: 0;
  border-radius: 50%;
  overflow: hidden;
  /* clip-path zuesaetzlich zu border-radius — overflow:hidden klippt
     transform:scale()-Kinder nicht zuverlaessig (Browser-Bug). inset(0 round 50%)
     klippt nur den INHALT, Box-Shadow bleibt aussen sichtbar. */
  clip-path: inset(0 round 50%);
  margin: 6px auto 22px;
  flex: 0 0 auto;
  /* Stark betonte 3D-Tiefe: aussen breiter Cast-Shadow + zweiter, kuerzerer
     Bodenkontakt-Schatten. Innen oben Highlight-Kante, unten markante Schatten-
     Kante fuer Linsen-/Medaillon-Look. */
  box-shadow:
    0 2px 0 rgba(255, 255, 255, 0.65) inset,
    0 -16px 26px -12px rgba(26, 21, 18, 0.55) inset,
    0 2px 3px rgba(26, 21, 18, 0.28),
    0 6px 12px -2px rgba(26, 21, 18, 0.22),
    0 22px 42px -12px rgba(26, 21, 18, 0.45),
    0 36px 60px -28px rgba(26, 21, 18, 0.42);
  transition: box-shadow 0.28s ease, transform 0.28s ease;
}
.pe-avatar:hover {
  transform: translateY(-2px);
  box-shadow:
    0 2px 0 rgba(255, 255, 255, 0.7) inset,
    0 -18px 28px -12px rgba(26, 21, 18, 0.58) inset,
    0 3px 4px rgba(26, 21, 18, 0.3),
    0 10px 18px -2px rgba(26, 21, 18, 0.25),
    0 28px 50px -12px rgba(26, 21, 18, 0.5),
    0 44px 68px -28px rgba(26, 21, 18, 0.46);
}
.pe-avatar::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  /* Linsen-Effekt: oben weicher Glanz, unten subtiler Schatten-Kissen. */
  background:
    radial-gradient(ellipse at 50% 0%, rgba(255, 255, 255, 0.28) 0%, rgba(255, 255, 255, 0) 55%),
    radial-gradient(ellipse at 50% 100%, rgba(26, 21, 18, 0.18) 0%, rgba(26, 21, 18, 0) 55%);
  box-shadow: 0 0 0 1px rgba(26, 21, 18, 0.22) inset;
  pointer-events: none;
  z-index: 2;
}

.pe-avatar img,
.pe-avatar #stammdaten-avatar {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: none;
  border: 0;
  border-radius: 0;
  background: var(--bg-alt);
}
.pe-avatar.pe-avatar--has-image img,
.pe-avatar.pe-avatar--has-image #stammdaten-avatar { display: block; }
.pe-avatar__placeholder {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--serif);
  font-style: italic;
  color: var(--ink-faint);
  font-size: 1rem;
  pointer-events: none;
}
.pe-avatar.pe-avatar--has-image .pe-avatar__placeholder { display: none; }
.pe-avatar__overlay {
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: rgba(26, 21, 18, 0.7);
  color: var(--bg);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: opacity 0.2s ease;
  cursor: pointer;
  z-index: 3;
  font-family: var(--sans);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border: 0;
}
.pe-avatar:hover .pe-avatar__overlay,
.pe-avatar:focus-within .pe-avatar__overlay { opacity: 1; }

.pe-avatar-actions { display: flex; flex-wrap: wrap; gap: 6px 14px; justify-content: center; align-items: baseline; margin-bottom: 14px; font-family: var(--sans); font-size: 0.78rem; letter-spacing: 0; text-transform: none; }
.pe-avatar-actions a, .pe-avatar-actions button {
  background: transparent; border: 0; padding: 0; cursor: pointer;
  font-family: inherit; font-size: inherit; letter-spacing: inherit; text-transform: inherit;
  color: var(--ink-muted);
}
.pe-avatar-actions a:hover, .pe-avatar-actions button:hover { color: var(--accent); }
/* Der bestehende Upload-Button ist über dem Overlay redundant → optisch verstecken,
   aber klickbar (JS ruft ihn per Click weiterhin), Delete-Link bleibt sichtbar */
#avatar-upload-btn { position: absolute; left: -9999px; opacity: 0; pointer-events: none; }

.pe-stammdaten-fields { display: grid; gap: 8px; margin-top: 0; overflow: visible; }

/* Editorial Select-Popover (Gender-Dropdown in Stammdaten). Die Styles in artist.css
   gelten nur im Artist-CSS; Puppet lädt sie nicht, deshalb hier dedizierte Regeln. */
.sp-select-popover {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  z-index: 200;
  background: var(--bg);
  border: 1px solid var(--ink-faint);
  border-radius: 2px;
  padding: 4px;
  min-width: 160px;
  box-shadow: 0 12px 28px rgba(26, 21, 18, 0.14);
  font-family: var(--serif);
}
.sp-select-option {
  padding: 8px 12px;
  cursor: pointer;
  font-size: 0.95rem;
  color: var(--ink);
  transition: background 0.12s ease;
}
.sp-select-option:hover,
.sp-select-option.selected { background: var(--bg-alt); }

/* Editorialer Toast — unten rechts, Creme mit Rust-Akzent.
   Ersetzt alert() fuer kleine Bestaetigungen (Upload, Crop, Delete). */
.pe-toast-host {
  position: fixed;
  right: 24px;
  bottom: 24px;
  z-index: 1100;
  display: flex;
  flex-direction: column-reverse;
  gap: 10px;
  pointer-events: none;
}
.pe-toast {
  pointer-events: auto;
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 260px;
  max-width: 380px;
  padding: 12px 18px 12px 16px;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--serif, Georgia, serif);
  font-size: 0.95rem;
  line-height: 1.35;
  font-style: italic;
  border-left: 3px solid var(--accent);
  box-shadow:
    0 0 0 1px var(--ink-faint),
    0 14px 32px -14px rgba(26, 21, 18, 0.32);
  opacity: 0;
  transform: translateX(18px);
  transition:
    opacity 0.38s cubic-bezier(0.45, 0, 0.25, 1),
    transform 0.38s cubic-bezier(0.45, 0, 0.25, 1);
}
.pe-toast.is-in {
  opacity: 1;
  transform: translateX(0);
}
.pe-toast.is-out {
  opacity: 0;
  transform: translateX(18px);
  transition-duration: 0.3s;
}
.pe-toast__dot {
  flex: none;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 0 3px rgba(184, 92, 56, 0.18);
}
.pe-toast__text {
  flex: 1;
  font-family: var(--serif, Georgia, serif);
}
.pe-toast--error {
  border-left-color: #a8342b;
}
.pe-toast--error .pe-toast__dot {
  background: #a8342b;
  box-shadow: 0 0 0 3px rgba(168, 52, 43, 0.2);
}
/* Eigener Host fuer den Fortschritts-Toast (Häppchen 2b-Nachtrag 2,
   2026-08-28): oben mittig statt unten rechts wie der normale Toast-Host —
   Benno sah den Ladebalken sonst nicht. Normale Erfolgs-/Fehler-Toasts
   bleiben unten rechts, nur der Ladebalken zieht um. */
.pe-progress-toast-host {
  position: fixed;
  top: 24px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 1100;
  display: flex;
  flex-direction: column;
  gap: 10px;
  pointer-events: none;
}
/* Fortschritts-Toast fuer Video-Uploads (Häppchen 2b-Nachtrag, 2026-08-28):
   bleibt offen, bis remove() aufgerufen wird — kein Auto-Dismiss-Timer wie
   beim normalen puppetToast, daher Spalten- statt Zeilen-Layout fuer den
   Balken darunter. */
.pe-toast--progress {
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
}
.pe-upload-progress {
  width: 100%;
  height: 6px;
  background: var(--ink-faint);
  border-radius: 3px;
  overflow: hidden;
}
.pe-upload-progress__fill {
  height: 100%;
  width: 0%;
  background: var(--accent);
  transition: width 0.2s ease;
}
@media (prefers-reduced-motion: reduce) {
  .pe-toast {
    transition: opacity 0.2s linear;
    transform: none;
  }
  .pe-toast.is-in, .pe-toast.is-out { transform: none; }
}

/* Editorial Modal — ersetzt die browser-nativen prompt()-Kaskaden
   beim Anlegen / Bearbeiten einer Produktion. */
.pe-modal-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(26, 21, 18, 0.52);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.pe-modal {
  background: var(--bg);
  border: 1px solid var(--ink-faint);
  width: min(760px, calc(100vw - 32px));
  max-height: min(90vh, 860px);
  display: flex;
  flex-direction: column;
  box-shadow: 0 36px 90px rgba(26, 21, 18, 0.22);
  font-family: var(--serif);
  position: relative;
}
.pe-modal--form,
.pe-modal:has(.pe-form-photo),
.pe-modal:has(.pe-gallery-strip),
.pe-modal:has(.pe-video-strip) {
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr) auto auto;
  height: min(90vh, 860px);
  max-height: min(90vh, 860px);
  overflow: hidden;
}
.pe-modal--form > .pe-modal__head,
.pe-modal:has(.pe-form-photo) > .pe-modal__head,
.pe-modal:has(.pe-gallery-strip) > .pe-modal__head,
.pe-modal:has(.pe-video-strip) > .pe-modal__head {
  grid-row: 1;
}
.pe-modal--form > .pe-modal__error,
.pe-modal:has(.pe-form-photo) > .pe-modal__error,
.pe-modal:has(.pe-gallery-strip) > .pe-modal__error,
.pe-modal:has(.pe-video-strip) > .pe-modal__error {
  grid-row: 2;
}
.pe-modal--form > .pe-modal__body,
.pe-modal:has(.pe-form-photo) > .pe-modal__body,
.pe-modal:has(.pe-gallery-strip) > .pe-modal__body,
.pe-modal:has(.pe-video-strip) > .pe-modal__body {
  grid-row: 3;
}
.pe-modal--form > .pe-modal__extra,
.pe-modal:has(.pe-form-photo) > .pe-modal__extra,
.pe-modal:has(.pe-gallery-strip) > .pe-modal__extra,
.pe-modal:has(.pe-video-strip) > .pe-modal__extra {
  grid-row: 4;
  overflow-y: auto;
  min-height: 0;
  max-height: min(44vh, 430px);
}
.pe-modal--form > .pe-modal__foot,
.pe-modal:has(.pe-form-photo) > .pe-modal__foot,
.pe-modal:has(.pe-gallery-strip) > .pe-modal__foot,
.pe-modal:has(.pe-video-strip) > .pe-modal__foot {
  grid-row: 5;
}
@supports (height: 1dvh) {
  .pe-modal--form,
  .pe-modal:has(.pe-form-photo),
  .pe-modal:has(.pe-gallery-strip),
  .pe-modal:has(.pe-video-strip) {
    height: min(90dvh, 860px);
    max-height: min(90dvh, 860px);
  }
}
.pe-modal__head {
  /* kompakter seit 2026-08-30 — Dialog soll ohne Scrollen auskommen */
  padding: 16px 72px 12px 32px;
  border-bottom: 1px solid var(--ink-faint);
  display: block;
  position: relative;
  flex-shrink: 0;
}
.pe-modal__close {
  position: absolute;
  top: 14px;
  right: 18px;
  width: 34px;
  height: 34px;
  padding: 0;
  border: 1px solid var(--ink-faint);
  border-radius: 50%;
  background: transparent;
  color: var(--ink-muted);
  font-family: var(--sans);
  font-size: 1.08rem;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.1s ease;
}
.pe-modal__close:hover {
  background: var(--ink);
  border-color: var(--ink);
  color: var(--bg);
}
.pe-modal__close:active {
  transform: scale(0.94);
}
.pe-modal__eyebrow {
  font-family: var(--sans);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0 0 6px;
}
.pe-modal__title {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: 1.4rem;
  line-height: 1.15;
  margin: 0;
  color: var(--ink);
  overflow-wrap: break-word;
  word-break: break-word;
  white-space: normal;
}
.pe-modal__body {
  padding: 14px 32px;
  overflow-y: auto;
  display: grid;
  gap: 9px;
  flex: 1 1 auto;
  min-height: 0;
}
.pe-modal__row {
  display: grid;
  gap: 4px;
}
.pe-modal__row--double {
  grid-template-columns: 1fr 1fr;
  column-gap: 18px;
}
.pe-modal__row--double > label { display: grid; gap: 4px; }
.pe-modal label {
  font-family: var(--sans);
  font-size: 0.76rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ink-muted);
}
.pe-modal input,
.pe-modal textarea {
  font-family: var(--serif);
  font-size: 1rem;
  color: var(--ink);
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--ink-faint);
  padding: 6px 0 7px;
  outline: none;
  transition: border-color 0.15s ease;
  width: 100%;
  box-sizing: border-box;
}
.pe-modal textarea {
  border: 1px solid var(--ink-faint);
  padding: 8px 12px;
  min-height: 3em;
  resize: vertical;
  background: var(--bg);
}
.pe-modal input:focus,
.pe-modal textarea:focus { border-color: var(--accent); }

/* Extra-Slot im Modal (zwischen Formular und Footer) — aktuell fuer Galerie-Strip. */
.pe-modal__extra {
  padding: 4px 32px 12px;
}

/* Inline-Foto-Picker im Add-Dialog (vor dem Anlegen wählbar). */
.pe-form-photo {
  margin-top: 12px;
  padding: 14px 16px;
  /* Dauerhaft gestrichelt wie die Strips im Bearbeiten-Dialog (Runde 10,
     2026-08-30): die Dropzone soll schon beim ersten Oeffnen als solche
     erkennbar sein, nicht erst beim Drueberziehen. */
  border: 1px dashed rgba(128, 128, 128, 0.4);
  border-radius: var(--r-md);
  background: #fff;
}
.pe-form-photo__row { display: flex; align-items: center; gap: 12px; margin-top: 10px; }
.pe-form-photo__preview {
  width: 72px;
  height: 44px;
  object-fit: cover;
  display: block;
  flex: 0 0 auto;
  border-radius: 4px;
  border: 1px solid rgba(26, 21, 18, 0.15);
}
.pe-form-photo__preview--icon {
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(40, 30, 20, 0.85);
  color: #fff;
  border: 0;
  font-size: 15px;
}
/* display:block/flex oben wuerde das hidden-Attribut ueberstimmen —
   ohne Auswahl soll die Vorschau-Box unsichtbar sein. */
.pe-form-photo__preview[hidden] { display: none; }
.pe-form-photo__label {
  font-family: var(--sans);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin: 0 0 10px;
}
.pe-form-photo__btn {
  font-family: var(--sans);
}
.pe-form-photo__status {
  font-family: var(--sans);
  font-size: 0.85rem;
  color: var(--ink-muted);
  margin: 8px 0 0;
}

/* Galerie-Thumbnail-Strip im Bearbeiten-Dialog. */
.pe-gallery-strip { margin-top: 4px; }
.pe-gallery-strip__actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
/* Drop-Zonen sichtbar machen (2026-08-30, Benno): gestrichelter Rahmen
   signalisiert "hier kann man Dateien hineinziehen". */
.pe-gallery-strip,
.pe-video-strip {
  border: 1px dashed rgba(128, 128, 128, 0.4);
  border-radius: 6px;
  padding: 10px 14px 12px;
}
.pe-strip-drophint {
  font-size: 0.78em;
  font-style: italic;
  font-weight: 400;
  color: var(--ink-muted);
  text-transform: none;
  letter-spacing: normal;
}
.pe-gallery-strip__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 10px;
}
.pe-gallery-strip__label {
  margin: 0;
  font-family: var(--serif, Georgia, serif);
  font-style: italic;
  font-size: 0.92rem;
  color: var(--ink-muted);
  letter-spacing: 0.02em;
}
.pe-gallery-strip__add {
  flex: 0 0 auto;
  padding: 7px 13px;
  font-size: 0.76rem;
  line-height: 1.1;
  border-color: var(--ink-faint);
}
.pe-gallery-strip__add:hover {
  background: var(--ink);
  border-color: var(--ink);
  color: var(--bg);
}
.pe-gallery-strip__list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
}
.pe-gallery-strip__cell {
  position: relative;
  width: 160px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.pe-gallery-strip__cell--hero {
  width: 64px;
}
.pe-gallery-strip__thumb {
  position: relative;
  width: 64px;
  height: 64px;
  border-radius: 2px;
  overflow: hidden;
  background: var(--bg-alt);
  box-shadow: 0 0 0 1px var(--ink-faint);
}
.pe-gallery-strip__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.pe-gallery-strip__delete {
  position: absolute;
  top: 2px;
  right: 2px;
  width: 20px;
  height: 20px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: rgba(30, 20, 10, 0.72);
  color: var(--bg);
  font-size: 0.72rem;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.12s ease, transform 0.1s ease;
}
.pe-gallery-strip__delete:hover {
  background: var(--accent);
  transform: scale(1.08);
}
.pe-gallery-strip__delete:active {
  transform: scale(0.94);
}
.pe-gallery-strip__crop {
  position: absolute;
  left: 2px;
  bottom: 2px;
  width: 22px;
  height: 22px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: rgba(255, 250, 241, 0.88);
  color: var(--ink);
  font-size: 0.8rem;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 0 0 1px rgba(30, 20, 10, 0.18);
  transition: background 0.12s ease, transform 0.1s ease;
}
.pe-gallery-strip__crop:hover {
  background: var(--bg);
  transform: scale(1.08);
}
.pe-gallery-strip__crop:active {
  transform: scale(0.94);
}
.pe-gallery-strip__empty {
  margin: 0;
  font-size: 0.82rem;
  color: var(--ink-muted);
  font-style: italic;
  overflow-wrap: anywhere;
}

/* Video-Strip — analog zur Galerie, eigene Thumbnails mit Play-Overlay. */
.pe-video-strip { margin-top: 18px; }
.pe-video-strip__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
  flex-wrap: wrap;
}
.pe-video-strip__label {
  margin: 0;
  font-family: var(--serif, Georgia, serif);
  font-style: italic;
  font-size: 0.92rem;
  color: var(--ink-muted);
  letter-spacing: 0.02em;
}
.pe-video-strip__actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.pe-video-strip__list {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 12px;
}
.pe-video-strip__cell {
  position: relative;
  width: 120px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.pe-video-strip__thumb {
  position: relative;
  width: 120px;
  height: 68px;
  border-radius: 3px;
  overflow: hidden;
  background: var(--bg-alt);
  box-shadow: 0 0 0 1px var(--ink-faint);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  color: var(--ink-muted);
}
.pe-video-strip__thumb img {
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.pe-video-strip__thumb--placeholder { font-size: 28px; }
.pe-video-strip__play {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  color: #fff;
  text-shadow: 0 1px 4px rgba(0,0,0,.5);
  pointer-events: none;
}
.pe-video-strip__meta {
  font-size: 0.74rem;
  color: var(--ink-muted);
  font-style: italic;
  line-height: 1.25;
  overflow-wrap: anywhere;
}
.pe-video-strip__empty {
  margin: 0;
  font-size: 0.82rem;
  color: var(--ink-muted);
  font-style: italic;
  overflow-wrap: anywhere;
}
/* Hero-Thumbnail: bekommt einen Rust-Rand + „Titel"-Badge, damit klar ist,
   dass es das Cover der Produktion ist. */
.pe-gallery-strip__cell--hero .pe-gallery-strip__thumb {
  box-shadow: 0 0 0 2px var(--accent);
}

/* Caption-Input für Story-Mode — kleines textarea unter jedem Slide. */
.pe-caption {
  width: 100%;
}
.pe-caption__input {
  width: 100%;
  box-sizing: border-box;
  font-family: inherit;
  font-size: 0.78rem;
  line-height: 1.3;
  padding: 5px 7px;
  border: 1px solid var(--ink-faint);
  border-radius: 2px;
  background: var(--bg);
  color: var(--ink);
  resize: vertical;
  min-height: 38px;
}
.pe-caption__input::placeholder {
  font-style: italic;
  color: var(--ink-muted);
  opacity: 0.7;
}
.pe-caption__input:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 1px var(--accent);
}
.pe-caption__input--filled {
  border-color: var(--accent);
  background: rgba(180, 99, 46, 0.04);
}

.pe-gallery-strip__badge {
  position: absolute;
  bottom: 2px;
  left: 2px;
  padding: 1px 6px;
  background: var(--accent);
  color: var(--bg);
  font-family: var(--serif, Georgia, serif);
  font-style: italic;
  font-size: 0.62rem;
  letter-spacing: 0.04em;
  line-height: 1.3;
  border-radius: 2px;
}

/* Confirm-Dialog (alertdialog) — kleiner als das Formular-Modal, mit
   prominenter Nachricht und roten/neutralen Action-Buttons. */
.pe-confirm {
  max-width: 460px;
}
.pe-confirm__body {
  padding: 22px 48px 24px;
}
.pe-confirm__message {
  margin: 0;
  font-family: var(--serif, Georgia, serif);
  font-size: 1rem;
  line-height: 1.5;
  color: var(--ink);
}
.btn--danger {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
  color: var(--bg) !important;
}
.btn--danger:hover {
  filter: brightness(0.9);
}
.btn--danger:active {
  filter: brightness(0.82);
  transform: translateY(1px);
}

.pe-modal__foot {
  padding: 12px 32px 14px;
  border-top: 1px solid var(--ink-faint);
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 12px;
  flex-shrink: 0;
}
.pe-modal__foot-left {
  margin-right: auto;
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.pe-voice-hint {
  margin: 0;
  font-size: 0.8rem;
  color: var(--ink-muted);
}
.pe-modal__foot .btn--ghost {
  background: transparent;
  color: var(--ink-muted);
  border: 1px solid transparent;
}
/* Globales .btn--ghost:hover macht Background + Border ink-dunkel — in Modals unerwünscht.
   Explizit zurückholen, damit „Abbrechen" beim Hover lesbar bleibt. */
.pe-modal__foot .btn--ghost:hover {
  background: var(--bg-alt);
  color: var(--ink);
  border-color: var(--ink-faint);
}
.pe-modal__error {
  color: var(--accent);
  font-size: 0.85rem;
  margin: 0 28px 12px;
  display: none;
}
.pe-modal__error.is-visible { display: block; }

@media (max-width: 560px) {
  .pe-modal-backdrop {
    padding: 12px;
    align-items: flex-start;
  }
  .pe-modal {
    width: calc(100vw - 24px);
    max-height: calc(100vh - 24px);
  }
  .pe-modal--form,
  .pe-modal:has(.pe-form-photo),
  .pe-modal:has(.pe-gallery-strip),
  .pe-modal:has(.pe-video-strip) {
    height: calc(100vh - 24px);
    max-height: calc(100vh - 24px);
  }
  @supports (height: 1dvh) {
    .pe-modal--form,
    .pe-modal:has(.pe-form-photo),
    .pe-modal:has(.pe-gallery-strip),
    .pe-modal:has(.pe-video-strip) {
      height: calc(100dvh - 24px);
      max-height: calc(100dvh - 24px);
    }
  }
  .pe-modal__head {
    padding: 22px 64px 16px 24px;
  }
  .pe-modal__close {
    top: 16px;
    right: 20px;
  }
  .pe-modal__body {
    padding: 20px 24px;
  }
  .pe-modal__row--double {
    grid-template-columns: 1fr;
    row-gap: 14px;
  }
  .pe-modal__extra {
    padding: 0 24px 16px;
  }
  .pe-modal__foot {
    padding: 18px 24px 22px;
    align-items: stretch;
    flex-wrap: wrap;
  }
  .pe-modal__foot-left {
    width: 100%;
  }
  .pe-gallery-strip__head {
    align-items: flex-start;
    flex-direction: column;
    gap: 8px;
  }
}

/* Crop-Editor fuer Titelbild/Galerie: Footer bleibt sichtbar, Body scrollt. */
.pe-modal--crop {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto;
  height: min(90vh, 820px);
  max-height: min(90vh, 820px);
  overflow: hidden;
}
@supports (height: 1dvh) {
  .pe-modal--crop {
    height: min(90dvh, 820px);
    max-height: min(90dvh, 820px);
  }
}
.pe-modal--crop .pe-crop-body {
  gap: 16px;
  min-height: 0;
  overflow-y: auto;
}
.pe-modal--crop .pe-modal__foot {
  background: var(--bg);
  position: relative;
  z-index: 1;
}
.pe-crop-preview {
  width: 100%;
  max-width: min(360px, 48vh);
  margin: 0 auto;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border: 1px solid var(--ink);
  background: var(--bg-tint);
  cursor: grab;
  user-select: none;
  position: relative;
  box-shadow: 0 0 0 4px var(--bg), 0 0 0 5px var(--ink-faint);
}
.pe-crop-preview img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  pointer-events: none;
  will-change: transform, object-position;
  /* Ueber dem absolut positionierten Blur-Backdrop halten — positionierte
     Elemente malen sonst ueber das Bild im normalen Fluss. */
  position: relative;
}
/* Blur-Backdrop im "Ganzes Bild"-Modus — gleiche Optik wie
   .production-card__media-backdrop auf der Live-Kachel (WYSIWYG). */
.pe-crop-backdrop {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  filter: blur(18px) saturate(1.05);
  transform: scale(1.18);
  pointer-events: none;
}
/* Umschalter "Ganzes Bild / Buendig fuellen" ueber der Vorschau. */
.pe-crop-mode {
  display: flex;
  gap: 8px;
  justify-content: center;
  margin: 0 0 14px;
}
.pe-crop-mode__btn.is-active {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
/* Avatar-Crop: Vorschau als Kreis (entspricht runder Anzeige im Profil).
   Border + Passepartout-Shadows aus der Base-Klasse abwaehlen, sonst zeichnen
   sie das Quadrat hinter dem Kreis. */
.pe-crop-preview--circle {
  border-radius: 50%;
  border: 0;
  /* inset(0 round 50%) klippt INHALT (auch transform:scale-Kinder) zuverlaessig
     rund, laesst aber Box-Shadow nach aussen — anders als circle(), das alles
     beschneidet. */
  clip-path: inset(0 round 50%);
  box-shadow:
    0 0 0 1px rgba(26, 21, 18, 0.22) inset,
    0 14px 28px -10px rgba(26, 21, 18, 0.32);
}
/* 16:9-Vorschau fuer Production-Hero-Crops — Preview spiegelt damit die
   Aspect-Ratio der Live-Story-Card, sodass der gewaehlte Ausschnitt 1:1
   uebernommen wird. Breiter als die quadratische Default-Preview, weil
   16:9 sonst nur sehr wenig Hoehe haette + weil die User-Wahrnehmung des
   gewaehlten Crops bei kleiner Preview kaum den echten Beschnitt zeigt.
   Doppelte Klasse, um die spaeter definierte @supports-Regel auf
   .pe-crop-preview zu uebersteuern. */
.pe-crop-preview.pe-crop-preview--16-9 {
  aspect-ratio: 16 / 9;
  max-width: min(720px, 90vw);
}
/* 21:9-Vorschau fuer den Blickpunkt des grossen Profil-Kopfbilds (Kinosaal). */
.pe-crop-preview.pe-crop-preview--21-9 {
  aspect-ratio: 21 / 9;
  max-width: min(760px, 90vw);
}
.pe-crop-help {
  font-family: var(--sans);
  font-size: 0.78rem;
  color: var(--ink-muted);
  text-align: center;
  margin: 0;
}
.pe-crop-zoom {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}
.pe-crop-zoom label {
  flex: 1;
  min-width: 240px;
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: var(--sans);
  font-size: 0.78rem;
  color: var(--ink-muted);
}
.pe-crop-zoom input[type="range"] {
  flex: 1;
  accent-color: var(--accent);
  background: transparent;
}
.pe-crop-save {
  flex: 0 0 auto;
}
@supports (height: 1dvh) {
  .pe-crop-preview {
    max-width: min(360px, 48dvh);
  }
}
.pe-stammdaten-fields label {
  display: grid; gap: 1px;
  font-family: var(--sans); font-size: 0.72rem; font-weight: 600;
  letter-spacing: 0.02em; text-transform: none;
  color: var(--ink-muted);
}
.pe-stammdaten-fields [contenteditable],
.pe-stammdaten-fields .readonly {
  display: block;
  padding: 2px 0 3px;
  border: 0;
  border-bottom: 1px solid var(--ink-faint);
  background: transparent;
  font-family: var(--serif);
  font-style: normal;
  font-size: 0.95rem;
  color: var(--ink);
  min-height: 1.3em;
  line-height: 1.3;
  outline: none;
  transition: border-color 0.15s ease;
}
.pe-stammdaten-fields [contenteditable]:focus { border-bottom-color: var(--accent); border-bottom-width: 2px; padding-bottom: 4px; }
.pe-stammdaten-fields .readonly { color: var(--ink-muted); }

/* ── Formular als Storymode (horizontaler Snap-Scroll) ─── */
.pe-story-hint {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0 0 6px;
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.88rem;
  color: var(--ink-muted);
}
.pe-story-hint__arrow {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  font-family: var(--sans);
  font-style: normal;
  font-size: 0.8rem;
  letter-spacing: 0.04em;
  color: var(--accent);
  animation: pe-hint-drift 2.4s ease-in-out infinite;
}
@keyframes pe-hint-drift {
  0%, 100% { transform: translateX(0); }
  50%      { transform: translateX(6px); }
}
@media (prefers-reduced-motion: reduce) {
  .pe-story-hint__arrow { animation: none; }
}

.pe-storynav {
  display: flex;
  align-items: center;
  gap: 14px;
  margin: 0 0 10px;
  font-family: var(--sans);
  font-size: 0.9rem;
  color: var(--ink-muted);
}
.pe-storynav__dots { display: flex; gap: 8px; flex: 1; }
.pe-storynav__dot {
  width: 24px;
  height: 2px;
  background: var(--ink-faint);
  border: 0;
  padding: 0;
  cursor: pointer;
  transition: background 0.2s ease, width 0.2s ease;
  border-radius: 1px;
}
.pe-storynav__dot:hover { background: var(--ink-muted); }
.pe-storynav__dot[aria-current="true"] {
  background: var(--accent);
  width: 48px;
}
.pe-storynav__arrow {
  background: transparent;
  border: 1px solid var(--ink-faint);
  border-radius: 2px;
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--serif);
  font-size: 1rem;
  color: var(--ink);
  cursor: pointer;
  transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
}
.pe-storynav__arrow:hover { border-color: var(--ink); background: var(--ink); color: var(--bg); }
.pe-storynav__arrow:disabled { opacity: 0.35; cursor: not-allowed; background: transparent; color: var(--ink); border-color: var(--ink-faint); }
.pe-storynav__label {
  font-family: var(--serif);
  font-style: italic;
  color: var(--ink-muted);
  font-size: 0.95rem;
  white-space: nowrap;
}

.pe-form-wrap {
  display: flex;
  flex-direction: column;
  min-height: 0;
  min-width: 0;
}
.pe-form {
  min-width: 0;
  display: flex;
  overflow-x: auto;
  overflow-y: hidden;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  flex: 1;
  min-height: 0;
  gap: 0;
  border: 1px solid var(--ink-faint);
  border-radius: 2px;
  background: var(--bg);
  scrollbar-width: thin;
  scrollbar-color: var(--ink-faint) transparent;
  position: relative; /* fixes nav: offsetLeft-Anker für scrollIntoView-Fallbacks */
  overflow-anchor: none; /* verhindert, dass der Browser beim Un-Hide von Kapiteln zur vorigen Ankerposition (Kapitel III) zurückspringt */
}
.pe-form::-webkit-scrollbar { height: 6px; }
.pe-form::-webkit-scrollbar-track { background: transparent; }
.pe-form::-webkit-scrollbar-thumb { background: var(--ink-faint); border-radius: 3px; }

.pe-form > .profile-editor__section {
  flex: 0 0 100%;
  width: 100%;
  scroll-snap-align: start;
  scroll-snap-stop: always;
  overflow-y: auto;
  padding: 16px 28px 20px;
  position: relative;
  scrollbar-width: thin;
  scrollbar-color: var(--ink-faint) transparent;
  display: block; /* natürlicher Flow — Flex-Column hat Overlap verursacht */
}
/* Kapitel-Felder: schlanke Einzelspalte. Auto-Shrink im JS passt die Bio-Schriftgröße
   an, damit ohne Produktionen alles auf eine Fläche passt. Mit Produktionen darf das
   Panel scrollen — das ist natürlich für eine wachsende Liste. */
.pe-form .profile-fields {
  display: block;
  margin-bottom: 18px;
}
.pe-form .profile-fields label { margin: 0 0 14px !important; display: block; }
.pe-form .profile-fields [contenteditable][data-multiline] {
  min-height: 3.2em !important;
  transition: font-size 0.12s ease;
}
.pe-form .pe-chapter-intro { padding: 2px 0 10px; margin-bottom: 14px; }
.pe-form .pe-chapter-title { font-size: clamp(1.3rem, 2.2vw, 1.7rem) !important; }
.pe-form .visibility-block { margin-top: 22px; padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.pe-form .visibility-status { margin-bottom: 0; font-size: 0.88rem; }

/* Produktionen in Kapitel I: kompaktes Kachel-Grid statt breiter Stapel.
   Public-View nutzt denselben Grid-Look via .productions-grid--public. */
#productions-puppeteer-list,
#productions-builder-list,
.productions-grid--public {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(128px, 1fr));
  gap: 14px;
  margin-bottom: 12px;
  padding: 6px 4px 8px; /* Platz für Passepartout-Schatten der Kacheln */
}

/* Public-Modifier: kein Edit/Toggle/Delete — Action-Row entfaellt. */
.pe-form .production-card--public {
  grid-template-areas:
    "hero"
    "title"
    "meta";
  grid-template-columns: 1fr;
  grid-template-rows: auto auto auto;
}
.pe-form .production-card {
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0;
  background: var(--bg);
  border: 1px solid var(--ink);
  border-radius: 0;
  overflow: hidden;
  font-size: 0.8rem;
  /* edler Rahmen: dünne Rust-Linie aussen + Creme-Spacer als Passepartout-Effekt */
  box-shadow:
    0 0 0 4px var(--bg),
    0 0 0 5px var(--ink-faint),
    0 14px 32px -18px rgba(26, 21, 18, 0.35);
  transition: box-shadow 0.2s ease, transform 0.2s ease;
}
.pe-form .production-card:hover {
  box-shadow:
    0 0 0 4px var(--bg),
    0 0 0 5px var(--accent),
    0 20px 38px -18px rgba(26, 21, 18, 0.4);
  transform: translateY(-1px);
}
.pe-form .production-card > img {
  width: 100%;
  aspect-ratio: 1 / 1;
  height: auto !important;
  object-fit: cover;
  border-radius: 0;
  display: block;
}
/* Media-Stack: Hero + Galerie-Bilder uebereinander, nur das aktive mit Opacity 1. */
.pe-form .production-card__media {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  background: var(--bg-alt);
}
.pe-form .production-card__media-frame {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  /* 1.4s Crossfade mit weichem Ein/Aus-Easing — kein harter Start, kein
     abgehacktes Ende. cubic-bezier(0.45, 0, 0.25, 1) fuehlt sich "analog" an. */
  transition: opacity 1.4s cubic-bezier(0.45, 0, 0.25, 1);
  display: block;
  will-change: opacity;
}
.pe-form .production-card__media-frame.is-active {
  opacity: 1;
}
@media (prefers-reduced-motion: reduce) {
  .pe-form .production-card__media-frame {
    transition: none;
  }
}
/* Platzhalter-Kachel (ohne Bilder) — damit die Grid-Struktur konsistent bleibt. */
.pe-form .production-card:not(:has(> img)):not(:has(> .production-card__media))::before {
  content: '';
  display: block;
  width: 100%;
  aspect-ratio: 1 / 1;
  background:
    repeating-linear-gradient(45deg, var(--bg-alt) 0 6px, var(--bg-tint) 6px 12px);
}
.pe-form .production-card__title {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: 0.82rem;
  line-height: 1.15;
  padding: 6px 8px 1px;
  color: var(--ink);
}
.pe-form .production-card__meta {
  font-family: var(--sans);
  font-size: 0.6rem;
  letter-spacing: 0.04em;
  color: var(--ink-muted);
  padding: 0 8px 4px;
  line-height: 1.3;
  min-height: 1em;
}
/* Buttons und Toggle kompakt in eine Reihe am Fuß der Kachel.
   Info-Button ist ausgenommen — der liegt absolut auf dem Hero. */
.pe-form .production-card > button:not(.production-card__info-btn),
.pe-form .production-card > label {
  all: unset;
  box-sizing: border-box;
  flex: 1 0 0;
  padding: 5px 4px;
  font-family: var(--sans);
  font-size: 0.58rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ink-muted);
  cursor: pointer;
  text-align: center;
  border-top: 1px solid var(--line);
  background: transparent;
  transition: background 0.14s ease, color 0.14s ease, transform 0.08s ease;
}
.pe-form .production-card > button:not(.production-card__info-btn):hover { background: var(--bg-alt); color: var(--ink); }
.pe-form .production-card > button:not(.production-card__info-btn):active { transform: translateY(1px); background: var(--ink-faint); }
.pe-form .production-card > label { display: flex; align-items: center; justify-content: center; gap: 4px; }
.pe-form .production-card > label:active { transform: translateY(1px); background: var(--ink-faint); }
.pe-form .production-card > label input[type="checkbox"] { margin: 0; accent-color: var(--accent); }
/* Letzte Aktion bekommt eine Trenner-Linie oben, aber wir haben drei nebeneinander.
   Die drei Actions werden per Flex-Wrapper gruppiert. */
/* Kachel-Struktur: Hero oben, Titel + Meta in der Mitte, Aktionen in einer
   dezenten Fuß-Leiste unten. Keine Overlays — alles immer sichtbar, aber
   typografisch leise, damit das Bild das visuelle Gewicht behält. */
.pe-form .production-card {
  display: grid;
  grid-template-areas:
    "hero hero hero"
    "title title title"
    "meta meta meta"
    "edit toggle del";
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: auto auto auto auto;
  min-width: 0;
}
.pe-form .production-card > * { min-width: 0; }
.pe-form .production-card__title { padding: 7px 8px 2px; font-size: 0.88rem; line-height: 1.18; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-style: italic; grid-area: title; }
.pe-form .production-card__meta { padding: 0 8px 7px; font-size: 0.66rem; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-height: 0; grid-area: meta; }

.pe-form .production-card > button:not(.production-card__info-btn),
.pe-form .production-card > label {
  all: unset;
  box-sizing: border-box;
  min-width: 0;
  padding: 6px 4px;
  font-family: var(--sans);
  font-size: 0.62rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ink-muted);
  cursor: pointer;
  text-align: center;
  border-top: 1px solid var(--line);
  background: transparent;
  transition: background 0.12s ease, color 0.12s ease;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.pe-form .production-card > button:not(.production-card__info-btn):hover {
  background: var(--bg-alt);
  color: var(--ink);
}
.pe-form .production-card > button:not(.production-card__info-btn):active {
  background: var(--ink-faint);
  transform: translateY(1px) scale(0.97);
  transition-duration: 0.05s;
}
.pe-form .production-card__edit-btn {
  grid-area: edit;
  font-size: 1rem; /* Stift-Glyphe prominent */
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.pe-form .production-card__edit-btn:hover {
  color: var(--ink) !important;
  letter-spacing: 0; /* ruhiger Hover, Icon springt nicht */
}
.pe-form .production-card > label {
  grid-area: toggle;
  border-left: 1px solid var(--line);
  display: flex;
  align-items: center;
  justify-content: center;
}
/* Checkbox visuell versteckt — das Auge-Icon wird als sichtbares Toggle-Feedback genutzt. */
.pe-form .production-card > label input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
  width: 0;
  height: 0;
}
.pe-form .production-card__visibility-icon {
  font-size: 1rem;
  line-height: 1;
  color: var(--ink-muted);
  transition: color 0.14s ease, transform 0.14s ease;
  display: inline-block;
}
.pe-form .production-card > label:has(input:checked) .production-card__visibility-icon {
  color: var(--ink);
}
.pe-form .production-card > label:hover { background: var(--bg-alt); }
.pe-form .production-card > label:hover .production-card__visibility-icon {
  transform: scale(1.12);
}
.pe-form .production-card__delete-btn {
  grid-area: del;
  border-left: 1px solid var(--line);
  color: var(--accent);
  font-size: 1rem;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.pe-form .production-card__delete-btn:hover {
  background: var(--accent) !important;
  color: var(--bg) !important;
}
.pe-form .production-card__delete-btn:active {
  background: var(--accent) !important;
  filter: brightness(0.9);
}
.pe-form .production-card > img,
.pe-form .production-card > .production-card__media,
.pe-form .production-card::before { grid-area: hero; }

/* Info-Button: kleines ⓘ oben rechts auf dem Hero, öffnet Details-Overlay. */
.pe-form .production-card { position: relative; }
.pe-form .production-card__info-btn {
  position: absolute !important; /* override the older > button { all: unset } */
  top: 8px !important;
  right: 8px !important;
  z-index: 4 !important; /* ueber dem Details-Overlay, damit Toggle zurueckgeht */
  width: 24px !important;
  height: 24px !important;
  padding: 0 !important;
  border: none !important;
  border-top: none !important;
  border-radius: 50% !important;
  background: rgba(248, 243, 232, 0.88) !important;
  color: var(--ink) !important;
  font-size: 0.92rem !important;
  line-height: 1 !important;
  font-family: var(--sans) !important;
  font-weight: 500 !important;
  cursor: pointer !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex: none !important;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  box-shadow: 0 1px 4px rgba(30, 20, 10, 0.2), inset 0 0 0 1px rgba(30, 20, 10, 0.08);
  transition: background 0.16s ease, transform 0.12s ease, color 0.16s ease, box-shadow 0.16s ease;
}
.pe-form .production-card__info-btn:hover {
  background: var(--ink) !important;
  color: var(--bg) !important;
  transform: translateY(-1px) scale(1.06);
  box-shadow: 0 4px 10px rgba(30, 20, 10, 0.28), inset 0 0 0 1px rgba(30, 20, 10, 0.2);
}
.pe-form .production-card__info-btn:active {
  transform: translateY(0) scale(0.96);
  transition-duration: 0.06s;
}
.pe-form .production-card.is-details-open .production-card__info-btn {
  background: var(--ink) !important;
  color: var(--bg) !important;
}

/* Details-Overlay: liegt über Hero+Titel+Meta, Action-Zeile bleibt frei.
   Wird per .is-details-open sichtbar. Inhalt scrollt intern. */
.pe-form .production-card__details {
  position: absolute;
  inset: 0; /* ueberdeckt die ganze Karte, Aktionen sind beim Lesen ausgeblendet */
  background: var(--bg);
  opacity: 0;
  pointer-events: none;
  transform: translateY(-4px);
  transition: opacity 0.16s ease, transform 0.16s ease;
  z-index: 3;
  overflow: hidden;
  display: flex;
}
.pe-form .production-card.is-details-open .production-card__details {
  opacity: 1;
  pointer-events: auto;
  transform: none;
}
.pe-form .production-card__details-inner {
  flex: 1;
  padding: 10px 12px 12px;
  overflow-y: auto;
  font-family: var(--sans);
  color: var(--ink);
  position: relative;
}
.pe-form .production-card__details-close {
  position: absolute;
  top: 4px;
  right: 6px;
  width: 20px;
  height: 20px;
  padding: 0;
  border: none;
  background: transparent;
  color: var(--ink-muted);
  font-size: 0.78rem;
  cursor: pointer;
  line-height: 1;
  border-radius: 50%;
  transition: background 0.12s ease, color 0.12s ease;
}
.pe-form .production-card__details-close:hover { background: var(--bg-alt); color: var(--ink); }
.pe-form .production-card__details-list {
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 2px 8px;
  font-size: 0.68rem;
  line-height: 1.35;
}
.pe-form .production-card__details-list dt {
  font-family: var(--serif, Georgia, serif);
  font-style: italic;
  color: var(--ink-muted);
  font-size: 0.66rem;
  letter-spacing: 0.02em;
}
.pe-form .production-card__details-list dd {
  margin: 0;
  color: var(--ink);
  overflow-wrap: anywhere;
}
.pe-form .production-card__details-list dd a {
  color: var(--accent);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
}
.pe-form .production-card__details-desc {
  grid-column: 1 / -1;
  margin-top: 4px !important;
  padding-top: 4px;
  border-top: 1px dotted var(--line);
  font-size: 0.7rem;
  line-height: 1.4;
  color: var(--ink);
  white-space: pre-wrap;
}
.pe-form .production-card__details-empty {
  margin: 0;
  font-size: 0.72rem;
  color: var(--ink-muted);
  font-style: italic;
}

/* Produktionen-Sektion: Überschrift und Add-Button im kompakten Maßstab. */
.pe-form .pe-productions { margin-top: 8px; }
.pe-form .pe-productions h3 {
  font-size: 0.92rem;
  font-style: italic;
  margin: 0 0 10px;
}
.pe-form #add-production-puppeteer-btn,
.pe-form #add-production-builder-btn {
  font-size: 0.78rem;
  padding: 7px 14px;
}
.pe-form > .profile-editor__section::-webkit-scrollbar { width: 6px; }
.pe-form > .profile-editor__section::-webkit-scrollbar-track { background: transparent; }
.pe-form > .profile-editor__section::-webkit-scrollbar-thumb { background: var(--ink-faint); border-radius: 3px; }
.pe-form > .profile-editor__section[hidden] { display: none; }

/* Kapitel-Eintrag: „Kapitel I — Puppenspieler" */
.pe-chapter-intro {
  padding: 8px 0 20px;
  margin-bottom: 20px;
  border-bottom: 1px solid var(--ink-faint);
}
.pe-chapter-label {
  font-family: var(--sans);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ink-faint);
  margin-bottom: 6px;
}
.pe-chapter-title {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.6rem, 3vw, 2.2rem);
  line-height: 1.1;
  letter-spacing: -0.01em;
  color: var(--ink);
  margin: 0;
}

.pe-section {
  padding-bottom: 40px;
  margin-bottom: 40px;
  border-bottom: 1px solid var(--ink-faint);
}
.pe-section:last-of-type { border-bottom: 0; }
.pe-section__head {
  display: flex;
  align-items: baseline;
  justify-content: flex-start;
  margin-bottom: 24px;
  gap: 16px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--ink-faint);
}
.pe-section__num {
  font-family: var(--sans);
  font-style: normal;
  font-weight: 700;
  color: var(--ink-faint);
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  line-height: 1;
}
.pe-section__title {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: 1.4rem;
  letter-spacing: 0;
  text-transform: none;
  color: var(--ink);
}

/* Die bestehenden .profile-fields label werden dort editorial umgesetzt */
.profile-editor__section .profile-fields label,
.pe-form .profile-fields label {
  display: grid;
  gap: 6px;
  margin: 0 0 20px;
  font-family: var(--sans);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: none;
  color: var(--ink-muted);
}
.profile-editor__section .profile-fields [contenteditable],
.pe-form .profile-fields [contenteditable] {
  display: block;
  padding: 6px 0 7px;
  border: 0;
  border-bottom: 1px solid var(--ink-faint);
  background: transparent;
  font-family: var(--serif);
  font-style: normal;
  font-size: 1.1rem;
  line-height: 1.45;
  color: var(--ink);
  min-height: 1.4em;
  outline: none;
  transition: border-color 0.15s ease;
}
.profile-editor__section .profile-fields [contenteditable][data-multiline],
.pe-form .profile-fields [contenteditable][data-multiline] {
  font-size: 1rem;
  min-height: 5em;
  border: 1px solid var(--ink-faint);
  padding: 12px 14px;
  background: var(--bg);
  transition: border-color 0.15s ease;
}
.profile-editor__section .profile-fields [contenteditable]:focus,
.pe-form .profile-fields [contenteditable]:focus {
  border-bottom-color: var(--accent);
  border-bottom-width: 2px;
  padding-bottom: 6px;
}
.profile-editor__section .profile-fields [contenteditable][data-multiline]:focus,
.pe-form .profile-fields [contenteditable][data-multiline]:focus {
  border-color: var(--accent);
  padding-bottom: 14px;
}

/* Visibility-Block (Publish-Status + Button) */
.visibility-block {
  margin-top: 20px;
  padding: 20px;
  background: var(--bg-alt);
  border: 1px solid var(--line);
  border-radius: 2px;
}
.visibility-status {
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.95rem;
  letter-spacing: 0;
  text-transform: none;
  color: var(--ink-muted);
  margin-bottom: 12px;
}

/* btn und btn--ghost: Editorialer Auftritt */
.btn {
  display: inline-block;
  font-family: var(--sans);
  font-size: 0.9rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  text-transform: none;
  padding: 10px 20px;
  background: var(--ink);
  color: var(--bg);
  border: 1px solid var(--ink);
  border-radius: 2px;
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
  text-decoration: none;
}
.btn:hover { background: var(--accent); border-color: var(--accent); color: var(--bg); }
.btn--ghost { background: transparent; color: var(--ink); border-color: var(--line); }
.btn--ghost:hover { background: var(--ink); color: var(--bg); border-color: var(--ink); }
.btn:disabled,
.btn:disabled:hover {
  opacity: 0.45;
  cursor: default;
  background: var(--ink);
  border-color: var(--ink);
  color: var(--bg);
}
.btn--ghost:disabled,
.btn--ghost:disabled:hover {
  background: transparent;
  border-color: var(--line);
  color: var(--ink);
}

/* Media-Section (Reels, Works, Productions) — behält bestehende Grids,
   bekommt aber editoriale Cards */
.reel-card, .work-card, .production-card {
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: 14px 16px;
}
.reel-card__title, .work-card__title, .production-card__title {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: 1.1rem;
}
.reel-card__meta, .work-card__mats, .production-card__meta {
  font-family: var(--sans);
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  color: var(--ink-muted);
}
.media-subsection h3 {
  font-family: var(--serif);
  font-style: italic;
  font-size: 1.1rem;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  color: var(--ink);
  margin: 24px 0 12px;
}

/* Mobile */
@media (max-width: 880px) {
  .pe-masthead { padding: 40px 0 28px; }
  .pe-masthead__inner { grid-template-columns: 1fr; gap: 16px; }
  .pe-meta { text-align: left; }
  .pe-layout { grid-template-columns: 1fr; gap: 40px; padding: 28px 0 60px; }
  .pe-aside { position: static; max-width: 320px; }
  /* Storymode fällt auf Mobile in vertikale Stapelung zurück */
  .pe-storynav { display: none; }
  .pe-form {
    display: block;
    overflow: visible;
    scroll-snap-type: none;
    height: auto;
    min-height: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
  }
  .pe-form > .profile-editor__section {
    flex: none;
    width: auto;
    overflow: visible;
    padding: 32px 0;
    border-bottom: 1px solid var(--ink-faint);
    scroll-snap-align: none;
  }
  .pe-form > .profile-editor__section:last-child { border-bottom: 0; }
}
@media (max-width: 480px) {
  .puppet-app { padding: 0 20px; }
  .pe-form .profile-fields [contenteditable] { font-size: 1.15rem; }
  .pe-form .profile-fields [contenteditable][data-multiline] { font-size: 1.02rem; }
}

/* ── Utility ────────────────────────────────────────────── */
.hidden { display: none !important; }

/* ── „Öffentliche Ansicht"-Link im Editor-Masthead ────── */
.pe-preview-link {
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.95rem;
  color: var(--ink-muted);
  padding: 6px 12px;
  border: 1px solid var(--ink-faint);
  border-radius: 2px;
  white-space: nowrap;
  text-decoration: none;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
  align-self: end;
}
.pe-preview-link:hover {
  background: var(--ink);
  color: var(--bg);
  border-color: var(--ink);
}
.pe-preview-link span {
  font-style: normal;
  color: var(--accent);
  margin-left: 4px;
  transition: color 0.15s ease;
}
.pe-preview-link:hover span { color: var(--bg); }

@media (max-width: 880px) {
  .pe-masthead__inner { grid-template-columns: 1fr; }
  .pe-preview-link { justify-self: start; align-self: start; }
}

/* ── Login 2FA/TOTP-Block (puppet/login.blade.php) ──────── */
.login-shell__totp-lead {
  font-family: var(--serif);
  font-style: italic;
  color: var(--ink-muted);
  font-size: 0.95rem;
  margin: 24px 0 12px;
  line-height: 1.45;
}
#totp-block .login-form { margin-top: 0; }
#totp-code {
  font-family: 'SFMono-Regular', Menlo, Consolas, monospace;
  font-size: 1.2rem;
  letter-spacing: 0.3em;
  text-align: center;
}

/* ── Public-Profil (Editorial-Twin der Editor-Ansicht) ─────────────────── */
/*
 * Wiederverwendung: .profile-editor-shell, .pe-masthead, .pe-layout,
 * .pe-aside, .pe-avatar, .pe-form-wrap, .pe-storynav, .pe-form,
 * .pe-chapter-intro, .pe-chapter-label, .pe-chapter-title.
 *
 * Public-spezifisch: alles unter .pp-* . Die Klassen liegen unter dem
 * Wrapper .pp-public, damit sich Edit-Styles (Hover-States für
 * contenteditable, Aktion-Buttons) nicht ausversehen ins Public-Markup
 * verirren.
 */
.pp-public { padding-bottom: 80px; }

.pp-headline-sub {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: 1.05rem;
  color: var(--ink-muted);
  margin: 6px 0 0;
  line-height: 1.4;
  max-width: 50ch;
}

.pp-aside-card { padding-top: 0 !important; }

.pp-meta {
  margin: 18px 0 0;
  font-family: var(--sans);
  font-size: 0.88rem;
  line-height: 1.55;
  color: var(--ink);
  display: grid;
  gap: 12px;
}
.pp-meta dt.pp-meta__label,
.pp-meta__label {
  display: block;
  font-size: 0.7rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin: 0 0 2px;
  font-weight: 400;
}
.pp-meta dd {
  margin: 0;
  padding: 0;
}
.pp-tag-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 6px;
}
.pp-tag {
  display: inline-block;
  padding: 3px 10px;
  background: rgba(184, 58, 31, 0.08);
  border: 1px solid rgba(184, 58, 31, 0.25);
  color: var(--accent);
  font-family: var(--sans);
  font-size: 0.75rem;
  letter-spacing: 0.02em;
  border-radius: 2px;
}

.pp-bio {
  font-family: var(--serif);
  font-size: 1.08rem;
  line-height: 1.7;
  color: var(--ink);
  max-width: 60ch;
  margin: 0 0 32px;
}
.pp-bio br + br { line-height: 0.6; }

.pp-block {
  margin: 36px 0 0;
}
.pp-block__title {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: 1.4rem;
  letter-spacing: -0.005em;
  color: var(--ink);
  margin: 0 0 18px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(26, 21, 18, 0.12);
}

/* Reels */
.pp-reels {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 28px;
}
.pp-reel { display: grid; gap: 8px; }
.pp-reel__head strong {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 1.05rem;
  display: block;
}
.pp-reel__desc {
  font-family: var(--sans);
  font-size: 0.85rem;
  color: var(--ink-muted);
  line-height: 1.55;
  display: block;
  margin-top: 2px;
}
.pp-reel iframe,
.pp-reel video {
  width: 100%;
  aspect-ratio: 16 / 9;
  border: 0;
  background: #000;
  display: block;
}

/* Werkgalerie */
.pp-werkgalerie {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 20px;
}
.pp-werk { margin: 0; display: flex; flex-direction: column; gap: 8px; }
.pp-werk img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
  background: rgba(26, 21, 18, 0.06);
}
.pp-werk figcaption strong {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 1rem;
}
.pp-werk figcaption p {
  font-family: var(--sans);
  font-size: 0.85rem;
  color: var(--ink-muted);
  margin: 4px 0 6px;
  line-height: 1.5;
}
.pp-materials {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  list-style: none;
  padding: 0;
  margin: 0;
}
.pp-materials li {
  font-family: var(--sans);
  font-size: 0.72rem;
  letter-spacing: 0.04em;
  color: var(--ink-muted);
  padding: 2px 8px;
  border: 1px solid rgba(26, 21, 18, 0.18);
}

/* Productions */
.pp-productions {
  display: grid;
  gap: 28px;
}
.pp-production {
  margin: 0;
  display: grid;
  grid-template-columns: minmax(200px, 320px) 1fr;
  gap: 24px;
  padding-bottom: 28px;
  border-bottom: 1px solid rgba(26, 21, 18, 0.08);
}
.pp-production:last-child { border-bottom: none; }
.pp-production__hero img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
  background: rgba(26, 21, 18, 0.06);
}
.pp-production__body { display: flex; flex-direction: column; gap: 6px; }
.pp-production__title {
  font-family: var(--serif);
  font-style: normal;
  font-weight: 400;
  font-size: 1.2rem;
  line-height: 1.25;
  color: var(--ink);
}
.pp-production__year {
  font-style: italic;
  color: var(--ink-muted);
  font-size: 0.9em;
  margin-left: 4px;
}
.pp-production__meta {
  font-family: var(--sans);
  font-size: 0.8rem;
  letter-spacing: 0.02em;
  color: var(--ink-muted);
  text-transform: uppercase;
}
.pp-production__role {
  font-family: var(--serif);
  font-style: italic;
  color: var(--ink);
  font-size: 0.95rem;
}
.pp-production__desc {
  font-family: var(--serif);
  font-size: 0.95rem;
  line-height: 1.55;
  color: var(--ink);
  margin: 4px 0 0;
}
.pp-production__mediathek {
  align-self: flex-start;
  font-family: var(--sans);
  font-size: 0.78rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--accent);
  margin-top: 6px;
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  padding-bottom: 1px;
}
.pp-production__mediathek:hover { color: var(--ink); }
.pp-production__gallery {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 8px;
  margin-top: 4px;
}
.pp-production__gallery img {
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  display: block;
  background: rgba(26, 21, 18, 0.06);
}

@media (max-width: 740px) {
  .pp-production {
    grid-template-columns: 1fr;
    gap: 14px;
  }
  .pp-production__hero img { aspect-ratio: 16 / 9; }
}

/* Kontakt-Trigger (Aside) */
.pp-contact-trigger {
  font-family: var(--serif);
  font-style: italic;
  font-size: 1.02rem;
  letter-spacing: 0.005em;
  background: var(--accent);
  color: var(--bg, #F6F1E7);
  border: 1px solid var(--accent);
  padding: 14px 24px;
  cursor: pointer;
  transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;
}
.pp-contact-trigger:hover {
  background: var(--ink);
  border-color: var(--ink);
  transform: translateY(-1px);
}
.pp-contact-trigger:active { transform: translateY(0); }
.pp-contact-trigger--aside {
  display: block;
  width: 100%;
  margin-top: 28px;
  text-align: center;
}

/* Kontakt-Dialog (nativ <dialog>) */
.pp-contact-dialog {
  border: none;
  background: var(--bg, #F6F1E7);
  color: var(--ink);
  padding: 0;
  max-width: 560px;
  width: calc(100% - 32px);
  max-height: calc(100vh - 64px);
  overflow: hidden auto;
  box-shadow: 0 30px 60px -20px rgba(26, 21, 18, 0.45),
              0 12px 24px rgba(26, 21, 18, 0.15);
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  margin: 0;
}
.pp-contact-dialog::backdrop {
  background: rgba(26, 21, 18, 0.55);
  backdrop-filter: blur(2px);
}
.pp-contact-dialog__close {
  position: absolute;
  top: 14px;
  right: 18px;
  background: transparent;
  border: none;
  font-size: 1.6rem;
  line-height: 1;
  color: var(--ink-muted);
  cursor: pointer;
  padding: 6px 10px;
  transition: color 0.15s ease;
}
.pp-contact-dialog__close:hover { color: var(--accent); }
.pp-contact-dialog__title {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  font-size: 1.5rem;
  margin: 0;
  padding: 36px 48px 6px;
  line-height: 1.25;
}
.pp-contact-dialog__lead {
  font-family: var(--serif);
  font-size: 0.98rem;
  color: var(--ink-muted);
  line-height: 1.55;
  margin: 0;
  padding: 0 48px 20px;
}
.pp-contact-dialog__body {
  padding: 0 48px 36px;
}
.pp-contact-dialog .contact-form { display: grid; gap: 12px; }
.pp-contact-dialog .contact-form .hp { display: none; }
.pp-contact-dialog .contact-form label {
  display: grid;
  gap: 4px;
  font-family: var(--sans);
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.pp-contact-dialog .contact-form input,
.pp-contact-dialog .contact-form textarea {
  font-family: var(--serif);
  font-size: 1rem;
  /* Dunkles Feld auf dunklem Dialog — die Schriftfarbe ist Creme (--ink),
     ein heller Hintergrund macht sie unlesbar (Fund Echt-Test 2026-09-01). */
  background: var(--bg-input, rgba(255, 255, 255, 0.08));
  border: 1px solid var(--ink-faint, rgba(255, 255, 255, 0.25));
  padding: 10px 12px;
  color: var(--ink);
  text-transform: none;
  letter-spacing: normal;
}
.pp-contact-dialog .contact-form input::placeholder,
.pp-contact-dialog .contact-form textarea::placeholder {
  color: var(--ink-subtle, rgba(255, 255, 255, 0.45));
}
.pp-contact-dialog .contact-form input:focus,
.pp-contact-dialog .contact-form textarea:focus {
  outline: none;
  border-color: var(--accent);
  background: var(--bg-input, rgba(255, 255, 255, 0.08));
}
.pp-contact-dialog .contact-form button[type="submit"] {
  margin-top: 6px;
  justify-self: start;
  font-family: var(--serif);
  font-style: italic;
  font-size: 1rem;
  background: var(--accent);
  color: var(--bg, #F6F1E7);
  border: 1px solid var(--accent);
  padding: 12px 28px;
  cursor: pointer;
  transition: background 0.15s ease;
}
.pp-contact-dialog .contact-form button[type="submit"]:hover {
  background: var(--ink);
  border-color: var(--ink);
}
.pp-contact-dialog .contact-form .status {
  margin: 0;
  padding: 10px 12px;
  background: rgba(184, 58, 31, 0.08);
  border-left: 2px solid var(--accent);
  font-family: var(--serif);
  font-style: italic;
  color: var(--accent);
  font-size: 0.95rem;
}

@media (max-width: 740px) {
  .pp-contact-dialog__title { padding: 28px 28px 6px; font-size: 1.3rem; }
  .pp-contact-dialog__lead { padding: 0 28px 16px; }
  .pp-contact-dialog__body { padding: 0 28px 28px; }
}

/* ── Public-Profil V2 — Screenpuppets Design-Mockup, horizontales Dossier ─── */
body.puppet-app:has(.pp-profile-page) {
  /* Aliase auf Stamm-Tokens (puppet-tokens.css). Werte mit eigener Bedeutung
     bleiben Hardcode (--pp-paper-soft, --pp-rust-dark, --pp-line, --pp-gold). */
  --pp-paper: var(--bg);
  --pp-paper-soft: #fffaf1;
  --pp-paper-deep: var(--bg-alt);
  --pp-rust: var(--accent);
  --pp-rust-dark: #8f341f;
  --pp-ink: var(--ink);
  --pp-muted: var(--ink-muted);
  --pp-line: rgba(96, 69, 45, 0.22);
  --pp-gold: #d99e3e;
  max-width: none;
  min-height: 100vh;
  height: 100vh;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  background:
    radial-gradient(circle at 30% 0%, rgba(255,255,255,0.85), rgba(255,255,255,0) 30rem),
    linear-gradient(90deg, #f4ead8 0%, var(--pp-paper-soft) 42%, #fbf5ea 100%);
  color: var(--pp-ink);
  overflow: hidden;
}

body.puppet-app:has(.pp-profile-page)::before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  opacity: 0.16;
  z-index: 0;
  background-image:
    radial-gradient(circle at 10% 20%, rgba(117, 89, 56, 0.22) 0 1px, transparent 1px),
    radial-gradient(circle at 70% 80%, rgba(117, 89, 56, 0.14) 0 1px, transparent 1px);
  background-size: 22px 22px, 31px 31px;
  mix-blend-mode: multiply;
}

body.puppet-app:has(.pp-profile-page) header {
  position: relative;
  z-index: 20;
  margin-left: 92px;
  padding: 22px 32px 14px;
  border-bottom: 1px solid var(--pp-line);
  background: rgba(250, 244, 233, 0.9);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  font-family: var(--serif);
  font-size: 1rem;
}

body.puppet-app:has(.pp-profile-page) .logo {
  font-size: clamp(1.65rem, 2.3vw, 2.15rem);
  line-height: 1;
}

body.puppet-app:has(.pp-profile-page) nav {
  gap: clamp(18px, 3vw, 42px);
}

body.puppet-app:has(.pp-profile-page) nav span[aria-hidden] {
  display: none;
}

body.puppet-app:has(.pp-profile-page) nav a {
  position: relative;
  padding: 6px 0 12px;
}

body.puppet-app:has(.pp-profile-page) nav a:hover::after,
body.puppet-app:has(.pp-profile-page) nav a[href="/mein-profil"]::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 3px;
  background: var(--pp-rust);
  border-radius: 999px;
}

body.puppet-app:has(.pp-profile-page) main {
  position: relative;
  z-index: 1;
  padding: 0;
  min-height: 0;
  overflow: hidden;
}

/* ">" ist Absicht (2026-08-27): "footer" ohne Kindselektor traf JEDES <footer>
   im body, auch die per JS ins <body> gehaengten Modal-Footer (Confirm-Dialoge,
   "Video loeschen?" etc.) — deren Buttons wurden dadurch unsichtbar und
   unklickbar. Direkter Kind-Selektor trifft nur noch den echten Seiten-Footer. */
body.puppet-app:has(.pp-profile-page) > footer {
  display: none;
}

.pp-profile-page {
  position: relative;
  height: 100%;
  min-height: 0;
  isolation: isolate;
  font-family: var(--serif);
}

.pp-profile-rail {
  position: fixed;
  inset: 0 auto 0 0;
  width: 92px;
  z-index: 25;
  background:
    linear-gradient(180deg, rgba(255,255,255,0.08), rgba(255,255,255,0) 34%),
    linear-gradient(90deg, rgba(82, 31, 18, 0.22), rgba(255,255,255,0.04) 48%, rgba(68, 20, 12, 0.18)),
    var(--pp-rust);
  box-shadow: 1px 0 0 rgba(80, 41, 24, 0.2), 10px 0 30px rgba(69, 32, 16, 0.08);
}

.pp-profile-rail::after {
  content: "";
  position: absolute;
  inset: 0;
  opacity: 0.18;
  background:
    repeating-linear-gradient(65deg, transparent 0 9px, rgba(255,255,255,0.12) 9px 10px),
    radial-gradient(circle at 50% 20%, rgba(255,255,255,0.26), transparent 16rem);
  mix-blend-mode: soft-light;
}

.pp-profile-rail__mark {
  position: absolute;
  top: 72px;
  left: 20px;
  width: 52px;
  height: 116px;
  z-index: 1;
  background-image: url("/assets/screenpuppets/profile-design/rail-marionette.png");
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center top;
  opacity: 0.92;
}

.pp-profile-shell {
  position: relative;
  width: min(calc(100% - 92px), 1440px);
  height: 100%;
  min-height: 0;
  margin: 0 auto 0 92px;
  display: grid;
  grid-template-columns: minmax(280px, 340px) minmax(0, 1fr);
  border-left: 1px solid rgba(94, 66, 42, 0.14);
}

.pp-profile-sidebar {
  position: relative;
  align-self: stretch;
  height: 100%;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-width: thin;
  scrollbar-color: rgba(189, 71, 38, 0.45) transparent;
  padding: clamp(30px, 4vw, 54px) 28px 42px;
  border-right: 1px solid var(--pp-line);
  background:
    linear-gradient(180deg, rgba(255,255,255,0.24), rgba(255,255,255,0)),
    rgba(248, 241, 228, 0.52);
}

.pp-profile-portrait {
  position: relative;
  width: min(100%, 190px);
  margin: 0 auto 24px;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  padding: 8px;
  background:
    radial-gradient(circle, rgba(255,255,255,0.8) 0 54%, transparent 55%),
    repeating-conic-gradient(from -20deg, rgba(188, 168, 133, 0.42) 0 8deg, transparent 8deg 16deg);
  box-shadow: 0 14px 34px -24px rgba(31, 20, 12, 0.65);
}

.pp-profile-portrait::before {
  content: "";
  position: absolute;
  inset: -7px;
  border-radius: inherit;
  border: 2px solid rgba(190, 168, 134, 0.58);
  clip-path: polygon(0 5%, 100% 0, 96% 100%, 3% 96%);
}

/* Clip-Schicht nur ums Bild: haelt den per transform:scale() gezoomten Avatar
   im Kreis (sonst quillt er bei scale>1 ueber Container, Name und Deko-Ring).
   Bewusst um das Bild statt um den Container, damit der Ring (::before /
   Hintergrund) und der Crop-/Overlay-Button (Geschwister) sichtbar bleiben. */
.pp-profile-portrait__clip {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  overflow: hidden;
}

.pp-profile-portrait img,
.pp-profile-portrait__placeholder {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 100%;
  border-radius: 50%;
}

.pp-profile-portrait img {
  display: none;
  object-fit: cover;
  filter: grayscale(1) contrast(1.05);
  background: var(--pp-paper-deep);
}

.pp-profile-portrait-crop {
  position: absolute;
  bottom: 4px;
  right: 4px;
  z-index: 3;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  border: 2px solid var(--pp-paper-deep);
  background: var(--ink);
  color: #fff;
  font-size: 0.9rem;
  display: grid;
  place-items: center;
  cursor: pointer;
  opacity: 0.86;
  transition: opacity 120ms ease, transform 120ms ease;
}
.pp-profile-portrait-crop:hover { opacity: 1; transform: scale(1.06); }
.pp-profile-portrait-crop:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  opacity: 1;
}

.pp-profile-portrait--has-image img {
  display: block;
}

.pp-profile-portrait__placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--pp-muted);
  background: var(--pp-paper-deep);
  font-style: italic;
}

.pp-profile-portrait--has-image .pp-profile-portrait__placeholder {
  display: none;
}

.pp-profile-sidebar__identity {
  text-align: center;
  margin-bottom: 24px;
}

.pp-profile-sidebar__identity h1 {
  margin: 0;
  font-size: clamp(2rem, 3vw, 2.45rem);
  line-height: 1.05;
  font-weight: 400;
  letter-spacing: 0;
}

.pp-profile-sidebar__identity p {
  margin: 9px 0 0;
  font-family: var(--sans);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--pp-rust);
}

.pp-profile-quote {
  position: relative;
  margin: 0 10px 30px;
  padding: 6px 16px;
  border: 0;
  color: var(--pp-ink);
}

.pp-profile-quote::before,
.pp-profile-quote::after {
  position: absolute;
  color: var(--pp-rust);
  font-size: 1.8rem;
  line-height: 1;
}

.pp-profile-quote::before {
  content: "“";
  top: 0;
  left: -6px;
}

.pp-profile-quote::after {
  content: "”";
  right: -4px;
  bottom: -4px;
}

.pp-profile-quote p {
  margin: 0;
  font-size: 1.18rem;
  line-height: 1.65;
  font-style: italic;
}

.pp-profile-facts {
  display: grid;
  gap: 17px;
  margin: 0 0 30px;
}

.pp-profile-fact {
  position: relative;
  min-height: 40px;
  padding-left: 54px;
}

.pp-profile-fact::before {
  content: "";
  position: absolute;
  left: 7px;
  top: 0;
  width: 30px;
  height: 30px;
  border: 1.5px solid var(--pp-ink);
  background: var(--pp-paper-soft);
}

.pp-profile-fact--location::before {
  border-radius: 50% 50% 50% 0;
  transform: rotate(-45deg);
  box-shadow: inset 0 0 0 8px var(--pp-gold);
}

.pp-profile-fact--person::before {
  border-radius: 50% 50% 4px 4px;
  box-shadow: inset 0 12px 0 var(--pp-gold);
}

.pp-profile-facts dt {
  margin: 0 0 3px;
  font-family: var(--sans);
  font-size: 0.7rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--pp-muted);
}

.pp-profile-facts dd {
  margin: 0;
  font-family: var(--sans);
  font-size: 0.95rem;
  line-height: 1.35;
}

.pp-profile-contact-card {
  padding: 20px 20px 22px;
  border: 1px solid rgba(139, 95, 55, 0.24);
  border-radius: 6px;
  background: rgba(255, 250, 241, 0.58);
  box-shadow: 0 18px 34px -26px rgba(67, 39, 20, 0.48);
}

.pp-profile-contact-card h2 {
  margin: 0 0 10px;
  font-size: 1.18rem;
  line-height: 1.25;
  font-style: italic;
  font-weight: 400;
  color: var(--pp-rust);
}

.pp-profile-contact-card p {
  margin: 0 0 18px;
  font-family: var(--sans);
  font-size: 0.94rem;
  line-height: 1.55;
}

.pp-profile-main {
  position: relative;
  min-width: 0;
  height: 100%;
  min-height: 0;
  display: flex;
  overflow-x: auto;
  overflow-y: hidden;
  padding: 0;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: thin;
  scrollbar-color: rgba(189, 71, 38, 0.55) rgba(218, 201, 172, 0.32);
}

.pp-profile-back {
  position: absolute;
  top: 24px;
  left: clamp(28px, 5vw, 72px);
  z-index: 8;
  display: inline-flex;
  color: var(--pp-rust);
  font-family: var(--sans);
  font-size: 0.9rem;
  text-decoration: none;
}

.pp-profile-back:hover {
  color: var(--pp-ink);
}

.pp-profile-topnav {
  position: absolute;
  top: 56px;
  left: 340px;
  right: 0;
  z-index: 18;
  height: 40px;
  pointer-events: none;
}

.pp-profile-topnav__arrow {
  position: absolute;
  top: 0;
  width: 34px;
  height: 34px;
  display: inline-grid;
  place-items: center;
  border: 1px solid rgba(46, 38, 30, 0.32);
  border-radius: 50%;
  background: rgba(255, 250, 241, 0.84);
  color: var(--pp-ink);
  font-family: var(--serif);
  font-size: 1rem;
  line-height: 1;
  cursor: pointer;
  pointer-events: auto;
  box-shadow: 0 14px 28px -22px rgba(54, 31, 15, 0.58);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;
}

.pp-profile-topnav__arrow--prev {
  left: clamp(28px, 5vw, 72px);
}

.pp-profile-topnav__arrow--next {
  right: clamp(28px, 5vw, 72px);
}

.pp-profile-topnav__arrow:hover:not(:disabled) {
  background: var(--pp-rust);
  border-color: var(--pp-rust);
  color: var(--pp-paper-soft);
  transform: translateY(-1px);
}

.pp-profile-topnav__arrow:disabled {
  opacity: 0.34;
  cursor: default;
}

.pp-profile-topnav__label {
  position: absolute;
  top: 8px;
  left: 50%;
  transform: translateX(-50%);
  color: var(--pp-muted);
  font-family: var(--sans);
  font-size: 0.72rem;
  letter-spacing: 0.12em;
  text-align: center;
  text-transform: uppercase;
}

.pp-profile-panel {
  scrollbar-width: thin;
  scrollbar-color: rgba(189, 71, 38, 0.55) rgba(218, 201, 172, 0.2);
}

.pp-profile-hero {
  flex: 0 0 100%;
  min-width: 0;
  height: 100%;
  overflow-y: auto;
  scroll-snap-align: start;
  scroll-snap-stop: always;
  display: grid;
  grid-template-columns: minmax(0, 0.96fr) minmax(320px, 0.9fr);
  gap: clamp(28px, 6vw, 66px);
  align-items: center;
  padding: clamp(74px, 8vw, 104px) clamp(28px, 5vw, 72px) 72px;
  border-right: 1px solid var(--pp-line);
}

.pp-profile-kicker {
  margin: 0 0 11px;
  font-family: var(--sans);
  font-size: 0.8rem;
  color: var(--pp-rust);
}

.pp-profile-hero h2 {
  margin: 0;
  font-size: clamp(2.65rem, 5vw, 4.35rem);
  line-height: 0.94;
  font-weight: 400;
  letter-spacing: 0;
}

.pp-profile-role {
  margin: 8px 0 20px;
  color: var(--pp-rust);
  font-size: clamp(1.35rem, 2.45vw, 1.82rem);
  line-height: 1.08;
  font-style: italic;
}

.pp-profile-hero__copy::after,
.pp-profile-section > h2::after,
.pp-profile-section__head h2::after {
  content: "";
  display: block;
  width: min(100%, 390px);
  height: 7px;
  margin: 12px 0 22px;
  background:
    linear-gradient(90deg, var(--pp-rust), rgba(189, 71, 38, 0) 100%);
  clip-path: polygon(0 44%, 80% 32%, 100% 58%, 0 70%);
}

.pp-profile-intro {
  max-width: 55ch;
  font-family: var(--sans);
  font-size: clamp(0.94rem, 1.15vw, 1rem);
  line-height: 1.66;
  color: #2f2923;
}

.pp-profile-tags {
  list-style: none;
  padding: 0;
  margin: 26px 0 0;
  display: flex;
  flex-wrap: wrap;
  gap: 10px 12px;
}

.pp-profile-tags li {
  padding: 7px 16px;
  border: 1px solid rgba(102, 72, 43, 0.24);
  border-radius: 999px;
  background: rgba(235, 221, 198, 0.64);
  color: #3d352e;
  font-family: var(--sans);
  font-size: 0.88rem;
  line-height: 1;
}

.pp-profile-hero__media {
  --pp-rough-outer: polygon(
    1% 6%, 7% 4%, 15% 5%, 24% 2%, 36% 4%, 48% 2%,
    61% 4%, 72% 1%, 86% 4%, 99% 2%, 98% 17%, 100% 31%,
    97% 44%, 99% 58%, 97% 72%, 99% 94%, 88% 97%, 73% 95%,
    61% 99%, 48% 96%, 34% 98%, 21% 95%, 8% 98%, 2% 92%,
    4% 76%, 1% 63%, 3% 48%, 1% 34%, 4% 19%
  );
  --pp-rough-inner: polygon(
    0 4%, 8% 1%, 18% 3%, 31% 0, 44% 2%, 57% 0,
    70% 3%, 84% 1%, 100% 4%, 98% 19%, 100% 34%, 97% 49%,
    100% 64%, 97% 79%, 99% 100%, 83% 97%, 68% 100%,
    54% 97%, 39% 100%, 24% 97%, 9% 99%, 1% 94%, 3% 78%,
    0 62%, 2% 45%, 0 28%
  );
  position: relative;
  min-height: 260px;
  margin: 0;
  overflow: hidden;
  padding: 11px;
  background:
    linear-gradient(135deg, rgba(255, 251, 241, 0.94), rgba(217, 188, 145, 0.84) 48%, rgba(255, 250, 241, 0.88)),
    var(--pp-paper-deep);
  box-shadow:
    0 20px 48px -34px rgba(62, 35, 18, 0.55),
    inset 0 0 0 1px rgba(91, 62, 35, 0.12);
  clip-path: var(--pp-rough-outer);
}

.pp-profile-hero__media::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    radial-gradient(circle at 12% 8%, rgba(126, 87, 44, 0.14), transparent 24%),
    radial-gradient(circle at 92% 88%, rgba(126, 87, 44, 0.12), transparent 22%),
    linear-gradient(90deg, rgba(255, 250, 241, 0.34), rgba(126, 87, 44, 0.16), rgba(255, 250, 241, 0.24));
  mix-blend-mode: multiply;
  clip-path: var(--pp-rough-outer);
}

.pp-profile-hero__media::after {
  content: "";
  position: absolute;
  inset: 11px;
  z-index: 3;
  pointer-events: none;
  background:
    radial-gradient(circle at 50% 14%, rgba(255,255,255,0.2), transparent 36%),
    linear-gradient(0deg, rgba(35, 18, 7, 0.2), transparent 50%),
    linear-gradient(90deg, rgba(255,255,255,0.18), transparent 18%, transparent 82%, rgba(255,255,255,0.12));
  box-shadow:
    inset 0 0 0 1px rgba(255, 248, 235, 0.34),
    inset 0 0 24px rgba(255, 248, 235, 0.18);
  clip-path: var(--pp-rough-inner);
}

.pp-profile-hero__media img {
  position: relative;
  z-index: 2;
  width: 100%;
  height: 100%;
  min-height: 260px;
  display: block;
  object-fit: cover;
  filter: sepia(0.2) saturate(0.94) contrast(0.98);
  clip-path: var(--pp-rough-inner);
}

.pp-profile-hero__media span {
  position: absolute;
  inset: 26%;
  border-radius: 50%;
  background: rgba(255,255,255,0.34);
  box-shadow:
    -90px 70px 0 24px rgba(167, 137, 98, 0.2),
    90px 58px 0 42px rgba(152, 120, 82, 0.18);
}

.pp-profile-section {
  flex: 0 0 100%;
  min-width: 0;
  height: 100%;
  overflow-y: auto;
  scroll-snap-align: start;
  scroll-snap-stop: always;
  position: relative;
  padding: clamp(76px, 8vw, 104px) clamp(28px, 5vw, 72px) 72px;
  border-right: 1px solid var(--pp-line);
}

.pp-profile-discipline {
  background:
    radial-gradient(circle at 72% 28%, rgba(216, 164, 84, 0.12), transparent 18rem),
    linear-gradient(90deg, rgba(255, 250, 241, 0.18), rgba(255, 250, 241, 0));
}

.pp-profile-section h2,
.pp-profile-section__head h2 {
  margin: 0;
  font-size: clamp(1.42rem, 2.05vw, 1.78rem);
  line-height: 1.15;
  font-weight: 400;
  font-style: italic;
}

.pp-profile-section__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 24px;
}

.pp-profile-section__head h2 span {
  font-size: 0.82em;
  font-style: normal;
}

.pp-profile-text {
  max-width: 72ch;
  font-family: var(--sans);
  font-size: 0.96rem;
  line-height: 1.68;
  color: #2f2923;
}

.pp-profile-text p {
  margin: 0 0 1em;
}

.pp-dossier-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(18px, 3vw, 30px);
  margin-top: 20px;
}

.pp-dossier-card {
  min-height: 220px;
  padding: clamp(22px, 3vw, 32px);
  border: 1px solid var(--accent-line);
  border-radius: var(--r-md);
  background: rgba(255, 250, 241, 0.62);
  box-shadow: 0 18px 36px -32px rgba(54, 31, 15, 0.48);
}

.pp-dossier-card--tint {
  background:
    linear-gradient(135deg, rgba(216, 198, 166, 0.42), rgba(255, 250, 241, 0.74)),
    rgba(255, 250, 241, 0.68);
}

.pp-dossier-card__eyebrow {
  margin: 0 0 12px;
  color: var(--pp-rust);
  font-family: var(--sans);
  font-size: 0.76rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.pp-dossier-card h3,
.pp-dossier-media h3,
.pp-dossier-list h3 {
  margin: 0 0 12px;
  font-size: clamp(1.22rem, 1.75vw, 1.58rem);
  line-height: 1.12;
  font-weight: 400;
  font-style: italic;
}

.pp-dossier-card p,
.pp-dossier-list p {
  margin: 0;
  color: var(--ink);
  font-family: var(--sans);
  font-size: 0.92rem;
  line-height: 1.62;
}

.pp-profile-tags--compact {
  margin-top: 18px;
}

.pp-dossier-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
  margin-top: 22px;
}

.pp-dossier-list article {
  padding: 18px 20px;
  border-left: 3px solid var(--pp-rust);
  background: rgba(255, 250, 241, 0.5);
}

.pp-dossier-media {
  margin-top: 28px;
}

.pp-profile-page .productions-grid--public {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(18px, 2.2vw, 26px);
  margin: 12px 0 0;
  padding: 0;
}

.pp-profile-page .production-card--public {
  position: relative;
  display: grid;
  grid-template-rows: auto auto auto auto 1fr auto;
  min-width: 0;
  padding: 14px 16px 18px;
  border: 1px solid rgba(111, 75, 38, 0.18);
  border-radius: 2px;
  background: #fffdf6;
  box-shadow:
    0 14px 28px rgba(26, 21, 18, 0.08),
    0 4px 8px rgba(26, 21, 18, 0.06);
  transition: transform 0.32s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.32s ease;
}

.pp-profile-page .production-card--public:hover {
  transform: translateY(-3px);
  box-shadow:
    0 22px 40px rgba(26, 21, 18, 0.12),
    0 6px 12px rgba(26, 21, 18, 0.08);
}

.pp-profile-page .production-card__media {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--pp-paper-deep);
}

.pp-profile-page .production-card__year {
  position: absolute;
  bottom: 10px; left: 10px;
  font-family: var(--serif);
  font-size: 0.95rem;
  font-weight: 500;
  color: #fffdf6;
  /* Dunkles Schildchen statt nackter Zahl (Wunsch 2026-08-30) — die blosse
     Ziffer ging auf unruhigen/warmen Fotos unter. */
  background: rgba(20, 14, 10, 0.72);
  padding: 3px 10px;
  letter-spacing: 0.02em;
  z-index: 2;
  pointer-events: none;
}

/* Zeitraum "von–bis" im Schildchen (2026-08-31, Wunsch Bodo Schulte).
   Das Schildchen selbst bleibt im Lesemodus klick-durchlaessig (siehe
   pointer-events: none oben) — es liegt ueber dem Titelbild und soll den Klick
   auf Foto/Video nicht abfangen. Im Edit-Modus muessen die beiden Jahresfelder
   den Klick aber annehmen; ohne diese Ausnahme war das Jahr per Maus GAR NICHT
   editierbar (Befund 2026-08-31). */
.pp-profile-v2--editable .production-card__year {
  pointer-events: auto;
}

.pp-profile-page .production-card__year-dash {
  /* Etwas Luft um den Halbgeviertstrich, damit "2019–2022" nicht klebt und die
     beiden Klickflaechen im Edit-Modus unterscheidbar bleiben. */
  margin: 0 0.15em;
  opacity: 0.75;
}

/* Leeres End-Jahr im Edit-Modus: der Platzhalter "bis" darf das Schildchen
   nicht sprengen, deshalb kleiner und zurueckgenommen. */
.pp-profile-v2--editable .production-card__year-to:empty::before {
  font-size: 0.85em;
}

/* Drag&Drop-Ziel im Produktions-Editor (2026-08-30): Bild-Datei ueber dem
   Galerie-Strip bzw. dem Foto-Bereich → gestrichelter Rahmen als Einladung. */
.pe-gallery-strip.is-dragover,
.pe-video-strip.is-dragover,
.pe-form-photo.is-dragover {
  outline: 2px dashed rgba(111, 75, 38, 0.55);
  outline-offset: 4px;
}

/* Galerie-Kacheln per Drag&Drop umsortieren (Runde 10, 2026-08-30). */
.pe-gallery-strip__cell--draggable { cursor: grab; }
.pe-gallery-strip__cell--draggable.is-dragging { opacity: 0.4; }
.pe-gallery-strip__cell--draggable.is-drop-before { box-shadow: -3px 0 0 0 rgba(111, 75, 38, 0.7); }
.pe-gallery-strip__cell--draggable.is-drop-after { box-shadow: 3px 0 0 0 rgba(111, 75, 38, 0.7); }
/* Galerie-Kachel ueber der Titel-Kachel: Tausch wird angeboten (Runde 11). */
.pe-gallery-strip__cell--hero.is-drop-swap { outline: 2px dashed rgba(111, 75, 38, 0.7); outline-offset: 3px; }

.pp-profile-page .production-card__caption {
  order: 2;
  margin: 14px 2px 0;
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.86rem;
  color: var(--pp-muted);
  line-height: 1.4;
}

.pp-profile-page .production-card__media--empty {
  background:
    radial-gradient(circle at 20% 26%, rgba(120, 93, 57, 0.16) 0 10%, transparent 10.2%),
    linear-gradient(135deg, rgba(214, 190, 151, 0.65), rgba(245, 236, 218, 0.8));
}

.pp-profile-page .production-card__media--empty::before {
  content: "";
  position: absolute;
  inset: auto 0 0;
  height: 52%;
  background:
    linear-gradient(135deg, transparent 0 38%, rgba(145, 112, 72, 0.22) 38.5% 70%, transparent 70.5%),
    linear-gradient(35deg, rgba(135, 106, 69, 0.18) 0 55%, transparent 55.5%);
}

.pp-profile-page .production-card__media-frame {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  opacity: 0;
  transition: opacity 1.4s cubic-bezier(0.45, 0, 0.25, 1);
}

.pp-profile-page .production-card__media-frame.is-active {
  opacity: 1;
}

/* Ganzes Bild statt 16:9-Beschnitt (Fund Bodo Schulte 2026-09-01): Frames ohne
   gespeicherten ⌖-Crop zeigen das komplette Foto; die Letterbox-Raender fuellt
   der unscharfe Backdrop aus dem Titelbild. Mit Crop bleibt cover (Default oben). */
.pp-profile-page .production-card__media-frame--full {
  object-fit: contain;
}
.pp-profile-page .production-card__media-backdrop {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  filter: blur(18px) saturate(1.05);
  /* Vergroessern, sonst schimmert am Kachelrand der transparente Blur-Saum
     des Backdrops durch (blur() frisst sich ueber die Elementkante). */
  transform: scale(1.18);
}

.pp-profile-page .production-card__title {
  order: 3;
  padding: 18px 6px 4px;
  font-family: var(--serif);
  font-size: clamp(1.6rem, 2vw, 2rem);
  line-height: 1.08;
  font-weight: 500;
  font-style: normal;
  color: var(--pp-ink);
  letter-spacing: -0.008em;
  margin: 0;
}

/* Rolle direkt unter dem Titel (2026-08-30) — gleiche order wie der Titel,
   die DOM-Reihenfolge stellt sie dahinter. */
.pp-profile-page .production-card__role {
  order: 3;
  margin: 6px 6px 0;
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.98rem;
  color: var(--pp-muted);
  line-height: 1.35;
}

.pp-profile-page .production-card__summary {
  order: 4;
  margin: 12px 6px 0;
  padding: 0;
  font-family: var(--serif);
  font-style: italic;
  font-size: 1rem;
  color: var(--pp-muted);
  line-height: 1.5;
}

/* Laengenstufen: je mehr Text, desto kleiner (Wunsch Benno 2026-09-01).
   Jenseits von --xs klammt --clamped auf 6 Zeilen, der Toggle-Button
   darunter klappt auf (is-open kommt aus puppet-public-productions.js). */
.pp-profile-page .production-card__summary--sm { font-size: 0.88rem; }
.pp-profile-page .production-card__summary--xs { font-size: 0.8rem; line-height: 1.45; }
.pp-profile-page .production-card__summary--clamped:not(.is-open) {
  display: -webkit-box;
  -webkit-line-clamp: 6;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.pp-profile-page .production-card__summary-toggle {
  order: 4;
  align-self: flex-start;
  margin: 4px 6px 0;
  padding: 0;
  border: 0;
  background: none;
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.85rem;
  color: var(--pp-rust);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
  cursor: pointer;
}
.pp-profile-page .production-card__summary-toggle:hover { text-decoration-thickness: 2px; }

.pp-profile-page .production-card__credits {
  order: 5;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px 32px;
  margin: 16px 6px 0;
  padding-top: 14px;
  border-top: 1px solid rgba(26, 21, 18, 0.06);
}

.pp-profile-page .production-card__credits > div {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
}

.pp-profile-page .production-card__credits dt {
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.78rem;
  color: var(--pp-muted);
  font-weight: 400;
}

.pp-profile-page .production-card__credits dd {
  margin: 0;
  color: var(--pp-ink);
  font-family: var(--sans);
  font-size: 0.95rem;
  font-weight: 400;
  overflow-wrap: anywhere;
}

.pp-profile-page .production-card__info-btn {
  order: 7;
  justify-self: start;
  margin: 16px 6px 0;
  padding: 12px 0 0;
  border: 0;
  border-top: 1px solid rgba(26, 21, 18, 0.06);
  border-radius: 0;
  background: transparent;
  color: var(--pp-rust);
  font-family: var(--serif);
  font-size: 1rem;
  text-decoration: underline;
  text-underline-offset: 4px;
  text-decoration-thickness: 1px;
  cursor: pointer;
  align-self: end;
  width: calc(100% - 12px);
  text-align: left;
  transition: text-decoration-thickness 0.18s ease;
}

.pp-profile-page .production-card__info-btn:hover {
  text-decoration-thickness: 2px;
  background: transparent;
  color: var(--pp-rust);
  transform: none;
}

.pp-profile-page .production-card__info-btn span {
  color: var(--pp-rust);
  margin-left: 4px;
}

.pp-profile-page .production-card__details {
  position: absolute;
  inset: 0;
  z-index: 6;
  display: flex;
  opacity: 0;
  pointer-events: none;
  transform: translateY(6px);
  transition: opacity 0.18s ease, transform 0.18s ease;
  background: rgba(255, 250, 241, 0.98);
}

.pp-profile-page .production-card.is-details-open .production-card__details {
  opacity: 1;
  pointer-events: auto;
  transform: none;
}

.pp-profile-page .production-card__details-inner {
  position: relative;
  flex: 1;
  padding: 26px 24px 24px;
  overflow-y: auto;
}

.pp-profile-page .production-card__details-close {
  position: absolute;
  top: 10px;
  right: 12px;
  border: 0;
  background: transparent;
  color: var(--pp-muted);
  font-size: 1rem;
  cursor: pointer;
}

.pp-profile-page .production-card__details-list {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 8px 14px;
  margin: 0;
  font-family: var(--sans);
  font-size: 0.92rem;
  line-height: 1.45;
}

.pp-profile-page .production-card__details-list dt {
  color: var(--pp-rust);
  font-family: var(--serif);
  font-style: italic;
}

.pp-profile-page .production-card__details-list dd {
  margin: 0;
}

.pp-profile-page .production-card__details-desc {
  grid-column: 1 / -1;
  padding-top: 10px;
  border-top: 1px solid var(--pp-line);
  white-space: pre-wrap;
}

.pp-profile-deco-puppet {
  position: absolute;
  top: 74px;
  right: -68px;
  width: 145px;
  height: 280px;
  pointer-events: none;
  background-image: url("/assets/screenpuppets/profile-design/ornaments.png");
  background-size: 700px auto;
  background-position: -78px -34px;
  mix-blend-mode: multiply;
  opacity: 0.82;
}

.pp-profile-finale {
  display: grid;
  place-items: center;
}

.pp-profile-finale > div {
  width: min(640px, 100%);
}

.pp-contact-trigger--panel {
  width: auto;
  margin-top: 22px;
  padding-left: 34px;
  padding-right: 34px;
}

.pp-profile-chapter-nav {
  position: absolute;
  left: clamp(28px, 5vw, 72px);
  right: clamp(28px, 5vw, 72px);
  bottom: 20px;
  z-index: 10;
  display: flex;
  align-items: center;
  gap: 12px;
  pointer-events: none;
  transform: translateX(var(--pp-profile-scroll-x, 0px));
}

.pp-profile-chapter-nav__arrow,
.pp-profile-chapter-nav__dot {
  pointer-events: auto;
}

.pp-profile-chapter-nav__arrow {
  width: 34px;
  height: 34px;
  border: 1px solid rgba(46, 38, 30, 0.32);
  border-radius: 50%;
  background: rgba(255, 250, 241, 0.78);
  color: var(--pp-ink);
  font-family: var(--serif);
  font-size: 1.35rem;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 10px 22px -18px rgba(54, 31, 15, 0.55);
}

.pp-profile-chapter-nav__arrow:hover:not(:disabled) {
  background: var(--pp-ink);
  color: var(--pp-paper);
}

.pp-profile-chapter-nav__arrow:disabled {
  opacity: 0.36;
  cursor: default;
}

.pp-profile-chapter-nav__dots {
  display: flex;
  gap: 8px;
  pointer-events: auto;
}

.pp-profile-chapter-nav__dot {
  width: 9px;
  height: 9px;
  padding: 0;
  border: 1px solid rgba(46, 38, 30, 0.4);
  border-radius: 50%;
  background: rgba(255, 250, 241, 0.74);
  cursor: pointer;
}

.pp-profile-chapter-nav__dot.is-active {
  background: var(--pp-rust);
  border-color: var(--pp-rust);
}

.pp-profile-chapter-nav__label {
  min-width: 128px;
  color: var(--pp-muted);
  font-family: var(--sans);
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  pointer-events: none;
}

.pp-profile-page .pp-contact-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  width: 100%;
  border-radius: 5px;
  box-shadow: 0 12px 22px -18px rgba(93, 36, 19, 0.8);
}

.pp-profile-page .pp-contact-trigger--panel {
  width: auto;
}

.pp-reels,
.pp-werkgalerie {
  margin-top: 18px;
}

.pp-profile-page .pp-werkgalerie {
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
}

.pp-profile-page .pp-werk {
  margin: 0;
  padding: 14px;
  border: 1px solid var(--pp-line);
  border-radius: 6px;
  background: rgba(255, 250, 241, 0.62);
}

.pp-profile-page .pp-werk img {
  border-radius: 4px;
}

@media (max-width: 1180px) {
  .pp-profile-shell {
    grid-template-columns: minmax(250px, 300px) minmax(0, 1fr);
  }

  .pp-profile-topnav {
    left: 300px;
  }

  .pp-profile-hero {
    grid-template-columns: 1fr;
  }

  .pp-profile-hero__media {
    min-height: 320px;
  }

  .pp-profile-page .productions-grid--public {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .pp-dossier-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 860px) {
  body.puppet-app:has(.pp-profile-page) {
    height: auto;
    min-height: 100vh;
    display: block;
    overflow-x: hidden;
    overflow-y: auto;
  }

  body.puppet-app:has(.pp-profile-page) header {
    position: sticky;
    top: 0;
    margin-left: 0;
    padding: 18px 18px 12px;
    display: grid;
    gap: 12px;
  }

  body.puppet-app:has(.pp-profile-page) nav {
    justify-content: flex-start;
    gap: 18px;
    overflow-x: auto;
    padding-bottom: 4px;
  }

  body.puppet-app:has(.pp-profile-page) > footer {
    display: block;
    margin-left: 0;
  }

  body.puppet-app:has(.pp-profile-page) main {
    overflow: visible;
  }

  .pp-profile-rail {
    display: none;
  }

  .pp-profile-page {
    height: auto;
  }

  .pp-profile-shell {
    width: 100%;
    height: auto;
    margin-left: 0;
    grid-template-columns: 1fr;
    border-left: 0;
  }

  .pp-profile-sidebar {
    position: relative;
    top: auto;
    height: auto;
    min-height: 0;
    overflow: visible;
    border-right: 0;
    border-bottom: 1px solid var(--pp-line);
    padding: 30px 22px;
  }

  .pp-profile-main {
    height: auto;
    display: block;
    overflow: visible;
    padding: 30px 22px 56px;
  }

  .pp-profile-back {
    position: static;
    margin-bottom: 24px;
  }

  .pp-profile-hero,
  .pp-profile-section {
    height: auto;
    overflow: visible;
    padding: 0 0 36px;
    border-right: 0;
    border-bottom: 1px solid var(--pp-line);
  }

  .pp-profile-section {
    padding-top: 36px;
  }

  .pp-profile-finale {
    display: block;
  }

  .pp-profile-topnav,
  .pp-profile-chapter-nav {
    display: none;
  }

  .pp-profile-quote {
    max-width: 34rem;
    margin-left: auto;
    margin-right: auto;
  }

  .pp-profile-facts {
    max-width: 34rem;
    margin-left: auto;
    margin-right: auto;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .pp-profile-contact-card {
    max-width: 34rem;
    margin: 0 auto;
  }

  .pp-profile-page .productions-grid--public {
    grid-template-columns: 1fr;
  }

  .pp-profile-deco-puppet {
    display: none;
  }
}

@media (max-width: 560px) {
  .pp-profile-facts {
    grid-template-columns: 1fr;
  }

  .pp-profile-hero h2 {
    font-size: 2.6rem;
  }

  .pp-profile-hero__media {
    min-height: 230px;
  }

  .pp-profile-tags li {
    font-size: 0.82rem;
  }
}

/* ── Public-Look Profil-Editor -------------------------------------------- */
body.puppet-app:has(.pp-profile-editor) nav a[href="/mein-profil"]::after {
  content: none;
}

body.puppet-app:has(.pp-profile-editor) nav a[href="/profile/edit"]::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 3px;
  background: var(--pp-rust);
  border-radius: 999px;
}

.pp-profile-editor .pp-profile-sidebar > section[hidden],
.pp-profile-editor .pp-profile-main > section[hidden] {
  display: none;
}

.pp-profile-editor .pp-profile-main.pe-form {
  flex: initial;
  border: 0;
  border-radius: 0;
  background: transparent;
}

.pp-profile-editor .pp-profile-main.pe-form::-webkit-scrollbar {
  height: 6px;
}

.pp-profile-editor .pp-profile-main.pe-form > .pp-profile-hero,
.pp-profile-editor .pp-profile-main.pe-form > .pp-profile-section {
  flex: 0 0 100%;
  width: 100%;
  min-width: 0;
  scroll-snap-align: start;
  scroll-snap-stop: always;
}

.pp-profile-editor .pp-profile-main.pe-form > .pp-profile-hero {
  padding: clamp(74px, 8vw, 104px) clamp(28px, 5vw, 72px) 72px;
}

.pp-profile-editor .pp-profile-main.pe-form > .pp-profile-section {
  padding: clamp(76px, 8vw, 104px) clamp(28px, 5vw, 72px) 72px;
}

.pp-profile-editor-portrait {
  isolation: isolate;
}

.pp-profile-editor-portrait__overlay {
  position: absolute;
  inset: auto 18px 18px;
  z-index: 4;
  padding: 8px 12px;
  border: 1px solid rgba(255, 250, 241, 0.74);
  border-radius: 999px;
  background: rgba(26, 21, 18, 0.74);
  color: var(--pp-paper-soft);
  font-family: var(--sans);
  font-size: 0.76rem;
  cursor: pointer;
  opacity: 0;
  transform: translateY(4px);
  transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease;
}

.pp-profile-editor-portrait:hover .pp-profile-editor-portrait__overlay,
.pp-profile-editor-portrait:focus-within .pp-profile-editor-portrait__overlay {
  opacity: 1;
  transform: none;
}

.pp-profile-editor-portrait__overlay:hover {
  background: var(--pp-rust);
}

#avatar-upload-btn {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}

.pp-profile-editor-avatar-actions {
  margin-top: -10px;
  margin-bottom: 22px;
}

.pp-profile-editor-avatar-actions button,
.pp-profile-editor-preview-link {
  color: var(--pp-rust);
}

.pp-profile-editor-identity h1 {
  min-height: 2.2em;
}

.pp-profile-editor-quote[hidden] {
  display: none;
}

.pp-profile-editor-quote p {
  min-height: 4.8em;
}

.pp-profile-editor-facts .pp-profile-fact--link::before {
  border-radius: 8px;
  box-shadow:
    inset 0 0 0 8px rgba(217, 158, 62, 0.78),
    inset 0 0 0 14px var(--pp-paper-soft);
}

.pp-profile-editor-status-card {
  display: grid;
  gap: 12px;
}

.pp-profile-editor-status-card .profile-editor__hint {
  margin: 0;
  padding: 10px 12px;
  border-radius: 5px;
  font-family: var(--sans);
  font-size: 0.86rem;
  line-height: 1.45;
}

.pp-profile-editor-status-card .profile-editor__hint[hidden] {
  display: none;
}

.pp-profile-editor-status-card .readonly {
  display: inline;
  color: var(--pp-muted);
}

.pp-profile-editor-preview-link {
  width: 100%;
  justify-content: center;
  margin-top: 0;
}

.pp-editable {
  min-width: 2ch;
  border-radius: 5px;
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
  cursor: text;
  transition: background 0.16s ease, box-shadow 0.16s ease, color 0.16s ease;
}

.pp-editable:hover,
.pp-editable:focus {
  background: rgba(255, 250, 241, 0.72);
  box-shadow: 0 0 0 5px rgba(255, 250, 241, 0.72), 0 0 0 6px rgba(189, 71, 38, 0.26);
}

.pp-editable:focus {
  outline: none;
}

.pp-editable[data-placeholder]:empty::before {
  content: attr(data-placeholder);
  color: rgba(100, 88, 77, 0.72);
  font-style: italic;
}

.pp-editable--display {
  display: inline;
}

.pp-editable--block {
  display: block;
  min-height: 9.4em;
  padding: 2px 0;
  white-space: pre-wrap;
}

.pp-profile-editor .pp-profile-intro .pp-editable--block {
  font: inherit;
  line-height: inherit;
}

.pp-editor-field-label {
  display: grid;
  gap: 7px;
  margin: 0 0 18px;
  color: var(--pp-rust);
  font-family: var(--sans);
  font-size: 0.76rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.pp-editor-field-label .pp-editable {
  color: #2f2923;
  font-family: var(--sans);
  font-size: 1rem;
  letter-spacing: 0;
  line-height: 1.62;
  text-transform: none;
}

.pp-profile-editor-visibility {
  width: min(100%, 560px);
  margin-top: 28px;
  padding: 14px 16px;
  border: 1px solid rgba(139, 95, 55, 0.24);
  border-radius: 6px;
  background: rgba(255, 250, 241, 0.62);
  font-family: var(--sans);
}

.pp-profile-editor-visibility .visibility-status {
  color: var(--pp-muted);
}

.pp-profile-editor-hero-media img {
  min-height: 300px;
}

.pp-profile-editor-hero-media--workshop img {
  filter: sepia(0.28) saturate(0.9) contrast(0.96);
}

.pp-profile-editor-media .pp-profile-section__head {
  margin-bottom: 16px;
}

.pp-profile-editor-subhead {
  margin: 30px 0 12px;
  padding-top: 20px;
  border-top: 1px solid var(--pp-line);
}

.pp-profile-editor-subhead h3 {
  margin: 0;
  font-family: var(--serif);
  font-size: clamp(1.2rem, 2vw, 1.55rem);
  font-style: italic;
  font-weight: 400;
  line-height: 1.15;
}

.pp-profile-editor-subhead h3 span {
  color: var(--pp-muted);
  font-family: var(--sans);
  font-size: 0.72rem;
  font-style: normal;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.pp-profile-editor .media-subsection {
  margin-top: 0;
}

.pp-profile-editor #productions-puppeteer-list,
.pp-profile-editor #productions-builder-list {
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 16px;
  padding: 6px 0 10px;
}

.pp-profile-editor .reels-list,
.pp-profile-editor .works-list {
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
}

.pp-profile-editor .reel-card,
.pp-profile-editor .work-card,
.pp-profile-editor .production-card {
  border-color: rgba(111, 75, 38, 0.18);
  border-radius: 6px;
  background: rgba(255, 250, 241, 0.68);
  box-shadow: 0 18px 36px -32px rgba(54, 31, 15, 0.48);
}

.pp-profile-editor .sp-quota {
  max-width: 560px;
  margin: 0 0 20px;
}

.pp-profile-editor .sp-quota__track {
  background: rgba(111, 75, 38, 0.16);
}

.pp-profile-editor .sp-quota__fill {
  background: var(--pp-rust);
}

.pp-profile-editor .sp-select-popover {
  z-index: 30;
  min-width: 190px;
  padding: 6px;
  border: 1px solid var(--pp-line);
  border-radius: 6px;
  background: var(--pp-paper-soft);
  box-shadow: 0 18px 34px -26px rgba(67, 39, 20, 0.58);
}

.pp-profile-editor .sp-select-option {
  padding: 8px 10px;
  border-radius: 4px;
  font-family: var(--sans);
  font-size: 0.88rem;
}

.pp-profile-editor .sp-select-option:hover,
.pp-profile-editor .sp-select-option.selected {
  background: rgba(189, 71, 38, 0.12);
  color: var(--pp-rust);
}

@media (max-width: 860px) {
  .pp-profile-editor .pp-profile-main.pe-form {
    display: block;
    overflow: visible;
    border: 0;
  }

  .pp-profile-editor .pp-profile-main.pe-form > .pp-profile-hero,
  .pp-profile-editor .pp-profile-main.pe-form > .pp-profile-section {
    width: auto;
    padding: 0 0 36px;
  }

  .pp-profile-editor .pp-profile-main.pe-form > .pp-profile-section {
    padding-top: 36px;
  }

  .pp-editable--block {
    min-height: 6.5em;
  }

  .pp-profile-editor-subhead {
    align-items: flex-start;
    flex-direction: column;
  }
}

/* ============================================================
   Feedback-FAB — Änderungsvorschläge (alle Puppet-Seiten)
   ============================================================ */
#sp-feedback-fab {
  position: fixed;
  right: 24px;
  bottom: 24px;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  border: none;
  background: var(--accent);
  color: #fff;
  font-family: var(--serif);
  font-size: 32px;
  font-weight: 700;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 6px 18px rgba(26, 21, 18, 0.25);
  z-index: 9998;
  transition: transform 120ms ease, box-shadow 120ms ease;
}
#sp-feedback-fab:hover,
#sp-feedback-fab:focus-visible {
  transform: translateY(-2px);
  box-shadow: 0 10px 24px rgba(26, 21, 18, 0.32);
  outline: none;
}

.sp-feedback-modal {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
}
.sp-feedback-modal[hidden] { display: none; }
.sp-feedback-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(26, 21, 18, 0.55);
}
.sp-feedback-modal__panel {
  position: relative;
  background: var(--bg);
  color: var(--ink);
  width: min(560px, calc(100% - 32px));
  max-height: calc(100vh - 48px);
  overflow-y: auto;
  border: 1px solid var(--line);
  padding: 32px 36px 28px;
  font-family: var(--serif);
  box-shadow: 0 18px 48px rgba(0, 0, 0, 0.3);
}
.sp-feedback-modal__close {
  position: absolute;
  top: 8px;
  right: 12px;
  background: none;
  border: none;
  font-size: 28px;
  line-height: 1;
  color: var(--ink-muted);
  cursor: pointer;
  padding: 4px 8px;
}
.sp-feedback-modal__close:hover { color: var(--ink); }
.sp-feedback-modal h2 {
  margin: 0 0 8px;
  font-size: 26px;
  font-weight: 400;
  letter-spacing: 0.01em;
}
.sp-feedback-modal__intro {
  margin: 0 0 20px;
  color: var(--ink-muted);
  font-size: 15px;
  line-height: 1.5;
}
.sp-feedback-field {
  display: block;
  margin-bottom: 14px;
}
.sp-feedback-field > span {
  display: block;
  font-size: 13px;
  font-family: var(--sans);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin-bottom: 4px;
}
.sp-feedback-field input,
.sp-feedback-field textarea {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--ink-faint);
  background: var(--bg-input);
  font-family: var(--serif);
  font-size: 15px;
  color: var(--ink);
  border-radius: 0;
}
.sp-feedback-field textarea { resize: vertical; min-height: 120px; }
.sp-feedback-field input:focus,
.sp-feedback-field textarea:focus {
  outline: 2px solid var(--accent);
  outline-offset: 1px;
  border-color: var(--accent);
}
.sp-feedback-error {
  margin: 8px 0 0;
  color: var(--accent);
  font-size: 14px;
}
.sp-feedback-success {
  margin: 8px 0 0;
  color: var(--ok);
  font-size: 15px;
}
.sp-feedback-actions {
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  margin-top: 18px;
}
.sp-btn-primary,
.sp-btn-secondary {
  font-family: var(--sans);
  font-size: 14px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 10px 18px;
  border-radius: 0;
  cursor: pointer;
  border: 1px solid var(--ink);
}
.sp-btn-primary {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
.sp-btn-primary:hover:not(:disabled) { background: #9c2f17; border-color: #9c2f17; }
.sp-btn-primary:disabled { opacity: 0.6; cursor: default; }
.sp-btn-secondary {
  background: transparent;
  color: var(--ink);
}
.sp-btn-secondary:hover { background: var(--bg-alt); }

@media (max-width: 540px) {
  #sp-feedback-fab { right: 16px; bottom: 16px; width: 48px; height: 48px; font-size: 26px; }
  .sp-feedback-modal__panel { padding: 24px 20px 20px; }
}

/* Feedback-Liste & Resolve im Modal */
.sp-feedback-list-section { margin-bottom: 18px; border-bottom: 1px solid var(--bg-tint); padding-bottom: 18px; }
.sp-feedback-list-header { display: flex; align-items: baseline; gap: 12px; margin-bottom: 10px; }
.sp-feedback-list-header h3 { margin: 0; font-size: 17px; font-weight: 400; }
.sp-feedback-list { max-height: 360px; overflow-y: auto; padding-right: 4px; }
.sp-feedback-list__loading,
.sp-feedback-list__empty { color: var(--ink-muted); font-style: italic; margin: 8px 0; }
.sp-feedback-item {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 10px 0; border-top: 1px solid var(--bg-alt);
}
.sp-feedback-item:first-child { border-top: none; }
.sp-feedback-item.is-done { opacity: 0.55; }
.sp-feedback-item__resolve {
  flex: 0 0 auto; width: 28px; height: 28px; border-radius: 50%;
  border: 1px solid var(--ink-faint); background: #fff; color: var(--ink-muted);
  font-size: 16px; line-height: 1; cursor: pointer; padding: 0;
}
.sp-feedback-item__resolve:hover { border-color: var(--accent); color: var(--accent); }
.sp-feedback-item__resolve.is-done { background: var(--ok); border-color: var(--ok); color: #fff; }
.sp-feedback-item__badge {
  flex: 0 0 auto; width: 28px; height: 28px; border-radius: 50%;
  background: var(--ok); color: #fff; display: inline-flex; align-items: center; justify-content: center;
  font-size: 14px;
}
.sp-feedback-item__body { flex: 1 1 auto; }
.sp-feedback-item__body header { display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; }
.sp-feedback-item__body header strong { font-weight: 600; font-size: 14px; }
.sp-feedback-item__date { color: var(--ink-faint); font-size: 12px; font-family: var(--sans); }
.sp-feedback-item__resolved { color: var(--ok); font-size: 12px; font-family: var(--sans); }
.sp-feedback-item__body p { margin: 4px 0 0; font-size: 14px; line-height: 1.45; white-space: pre-wrap; }

.sp-feedback-item__comments { margin: 10px 0 0 38px; display: flex; flex-direction: column; gap: 10px; }
.sp-feedback-comments { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
.sp-feedback-comment { padding-top: 8px; border-top: 1px dashed var(--bg-alt); }
.sp-feedback-comments > .sp-feedback-comment:first-child { border-top: none; padding-top: 0; }
.sp-feedback-comment__meta {
  display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap;
  font-family: var(--sans); font-size: 12px; color: var(--ink-muted);
}
.sp-feedback-comment__meta strong { font-weight: 600; color: var(--ink); font-family: inherit; }
.sp-feedback-comment__date { color: var(--ink-faint); }
.sp-feedback-comment__body { margin: 2px 0 0; font-size: 13px; line-height: 1.45; white-space: pre-wrap; }
.sp-feedback-comment-form { display: flex; gap: 6px; align-items: stretch; }
.sp-feedback-comment-form__input {
  flex: 1 1 auto; min-height: 36px; resize: vertical;
  font: inherit; font-size: 13px;
  border: 1px solid var(--ink-faint); padding: 6px 8px;
  background: #fff; color: var(--ink);
}
.sp-feedback-comment-form__input:focus { border-color: var(--accent); outline: none; }
.sp-feedback-comment-form__submit {
  flex: 0 0 auto;
  font-family: var(--sans); font-size: 12px; letter-spacing: 0.04em; text-transform: uppercase;
  padding: 0 12px; border: 1px solid var(--ink); background: var(--ink); color: #fff;
  cursor: pointer;
}
.sp-feedback-comment-form__submit:hover { background: var(--accent); border-color: var(--accent); }
.sp-feedback-comment-form__submit:disabled { opacity: 0.5; cursor: default; }

.sp-feedback-newform { margin-top: 4px; }
.sp-feedback-newform > summary {
  cursor: pointer; font-family: var(--sans); font-size: 13px; letter-spacing: 0.04em;
  text-transform: uppercase; color: var(--ink-muted); padding: 4px 0; margin-bottom: 10px;
  list-style: none;
}
.sp-feedback-newform > summary::-webkit-details-marker { display: none; }
.sp-feedback-newform > summary::before { content: '+ '; color: var(--accent); font-weight: 600; }
.sp-feedback-newform[open] > summary::before { content: '− '; }

/* ============================================================
   Feedback-Modal v2 — Topic-Style Karten (Backstage-Übernahme)
   Plan: docs/plans/2026-05-11-screenpuppets-feedback-modal-topic-style.md
   ============================================================ */

.sp-feedback-pills {
  display: flex;
  gap: 8px;
  margin: 0 0 14px;
}
.sp-feedback-pill {
  appearance: none;
  border: 1px solid var(--ink-faint);
  background: transparent;
  color: var(--ink-muted);
  font-family: var(--sans);
  font-size: 13px;
  letter-spacing: 0.02em;
  padding: 6px 16px;
  border-radius: 999px;
  cursor: pointer;
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
}
.sp-feedback-pill:hover { color: var(--ink); border-color: var(--ink); }
.sp-feedback-pill.is-active {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}

.sp-feedback-new-button {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  padding: 14px 18px;
  margin: 0 0 18px;
  background: var(--bg-alt);
  border: 1.5px dashed var(--accent);
  color: var(--accent);
  font-family: var(--sans);
  font-size: 14px;
  letter-spacing: 0.03em;
  cursor: pointer;
  border-radius: 6px;
  transition: background 120ms ease, color 120ms ease;
}
.sp-feedback-new-button:hover {
  background: var(--accent);
  color: #fff;
}
.sp-feedback-new-button__icon {
  font-size: 20px;
  font-weight: 600;
  line-height: 1;
}

.sp-feedback-cards {
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-height: 420px;
  overflow-y: auto;
  padding-right: 4px;
  margin-bottom: 12px;
}

.sp-feedback-card {
  border: 1px solid var(--bg-tint);
  /* Kinosaal-Nachzug 2026-08-31: hier stand hart `#fff`. Seit Welle 3 gibt es
     nur noch den dunklen Token-Satz — weisse Flaeche + `--ink` (Creme) war
     unlesbar. Plan: docs/plans/2026-08-31-puppet-feedback-modal-dunkel.md */
  background: var(--bg-alt);
  border-radius: 6px;
  transition: border-color 120ms ease, box-shadow 120ms ease;
}
.sp-feedback-card:hover { border-color: var(--ink-faint); }
.sp-feedback-card.is-expanded {
  border-color: var(--accent);
  box-shadow: 0 6px 18px -12px rgba(184, 58, 31, 0.4);
}
.sp-feedback-card.is-done { opacity: 0.7; }

.sp-feedback-card__head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 14px;
}
.sp-feedback-card__resolve {
  flex: 0 0 auto;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: 1.5px solid var(--ink-faint);
  background: transparent;
  color: var(--ink-muted);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  display: grid;
  place-items: center;
}
.sp-feedback-card__resolve:not(:disabled):hover {
  border-color: var(--ok, #2d8a4d);
  color: var(--ok, #2d8a4d);
}
.sp-feedback-card__resolve.is-done {
  background: var(--ok, #2d8a4d);
  border-color: var(--ok, #2d8a4d);
  color: #fff;
}
.sp-feedback-card__resolve:disabled { cursor: default; }

.sp-feedback-card__toggle {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: 1 1 auto;
  min-width: 0;
  cursor: pointer;
  padding: 2px 0;
}
.sp-feedback-card__toggle:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: 3px;
}
.sp-feedback-card__chev {
  flex: 0 0 auto;
  font-size: 11px;
  color: var(--ink-muted);
  width: 14px;
  text-align: center;
}
.sp-feedback-card__titleblock {
  min-width: 0;
  flex: 1 1 auto;
}
.sp-feedback-card__title {
  font-family: var(--serif);
  font-size: 16px;
  font-weight: 500;
  color: var(--ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sp-feedback-card__meta {
  font-family: var(--sans);
  font-size: 12px;
  color: var(--ink-muted);
  margin-top: 2px;
}

.sp-feedback-card__badge {
  flex: 0 0 auto;
  font-family: var(--sans);
  font-size: 11px;
  letter-spacing: 0.04em;
  padding: 4px 10px;
  border-radius: 999px;
  white-space: nowrap;
}
.sp-feedback-card__badge--open {
  background: var(--accent-soft);
  color: var(--accent-hi);
  border: 1px solid var(--accent-line);
}
.sp-feedback-card__badge--done {
  background: rgba(127, 191, 106, 0.16);
  color: var(--ok);
  border: 1px solid rgba(127, 191, 106, 0.42);
}

.sp-feedback-card__addbtn {
  flex: 0 0 auto;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 1px solid var(--ink-faint);
  background: transparent;
  /* --accent-hi statt --accent: ohne die weisse Flaeche darunter (siehe oben)
     faellt das Rost auf Fast-Schwarz auf Kontrast 3.2 ab. */
  color: var(--accent-hi);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  display: grid;
  place-items: center;
}
.sp-feedback-card__addbtn:hover {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}

.sp-feedback-card__body {
  padding: 0 14px 14px 48px;
  border-top: 1px solid var(--bg-tint);
}

.sp-feedback-card__orig,
.sp-feedback-card__comment {
  padding: 12px 0;
  border-bottom: 1px solid var(--bg-tint);
}
.sp-feedback-card__orig:last-of-type,
.sp-feedback-card__comment:last-of-type { border-bottom: none; }

.sp-feedback-card__orig-meta,
.sp-feedback-card__comment-meta {
  display: flex;
  align-items: baseline;
  gap: 10px;
  font-family: var(--sans);
  font-size: 12px;
  color: var(--ink-muted);
  margin-bottom: 6px;
}
.sp-feedback-card__orig-meta strong,
.sp-feedback-card__comment-meta strong {
  color: var(--ink);
  font-weight: 600;
  font-family: var(--serif);
  font-size: 14px;
}
.sp-feedback-card__orig-resolved {
  color: var(--ok, #2d8a4d);
  font-style: italic;
}

.sp-feedback-card__fullbody,
.sp-feedback-card__comment-body {
  margin: 0;
  font-family: var(--serif);
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--ink);
  white-space: pre-wrap;
}

.sp-feedback-card__replyform {
  display: flex;
  gap: 8px;
  margin-top: 12px;
  align-items: flex-end;
}
.sp-feedback-card__replyinput {
  flex: 1 1 auto;
  min-height: 38px;
  padding: 8px 10px;
  font-family: var(--serif);
  font-size: 14px;
  border: 1px solid var(--ink-faint);
  background: var(--bg-input);
  color: var(--ink);
  border-radius: 4px;
  resize: vertical;
}
.sp-feedback-card__replyinput:focus {
  outline: none;
  border-color: var(--accent);
}
.sp-feedback-card__replysend {
  flex: 0 0 auto;
  padding: 9px 18px;
  font-family: var(--sans);
  font-size: 12px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  background: var(--accent);
  color: #fff;
  border: none;
  cursor: pointer;
  border-radius: 4px;
}
.sp-feedback-card__replysend:hover { background: var(--accent-hi); }
.sp-feedback-card__replysend:disabled { opacity: 0.5; cursor: default; }

/* "Neue Meldung schreiben"-Block (eingeklappt) */
.sp-feedback-newform[hidden] { display: none; }
.sp-feedback-newform {
  margin-top: 6px;
  padding-top: 16px;
  border-top: 1px solid var(--bg-tint);
}

/* ============================================================
   pp-profile-v2 — Unified Profile Layout (vertical stacking)
   Plan: docs/plans/2026-05-09-screenpuppets-profile-unified-view.md
   Ablöst horizontalen Kapitel-Scroller durch vertikales Stacking
   plus horizontalen Sektion-Scroller pro Sektion (adaptiv).
   ============================================================ */

.pp-profile-v2 .pp-profile-v2-main {
  display: flex;
  flex-direction: column;
  gap: 40px;
  height: 100%;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 14px 56px 96px;
  scrollbar-width: thin;
  scrollbar-color: rgba(189, 71, 38, 0.45) transparent;
}

.pp-profile-v2 .pp-profile-back {
  font-family: var(--sans);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-muted);
  text-decoration: none;
  align-self: flex-start;
  padding: 6px 0;
}
.pp-profile-v2 .pp-profile-back:hover { color: var(--accent); }

.pp-profile-owner-tools {
  display: inline-flex;
  align-items: center;
  align-self: flex-end;
  gap: 6px;
  padding: 4px;
  border: 1px solid var(--accent-line);
  border-radius: 999px;
  background: rgba(255, 250, 241, 0.86);
  box-shadow: 0 14px 28px -24px rgba(54, 31, 15, 0.55);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  font-family: var(--sans);
}

.pp-profile-owner-tools__state {
  padding: 0 6px 0 8px;
  color: var(--pp-muted);
  font-size: 0.62rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
}

.pp-profile-owner-tools__button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 26px;
  padding: 5px 11px;
  border-radius: 999px;
  background: var(--pp-rust);
  color: var(--pp-paper-soft);
  font-size: 0.72rem;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
}

.pp-profile-owner-tools__button:hover {
  background: var(--pp-rust-dark);
  color: var(--pp-paper-soft);
}

.pp-profile-v2-section {
  position: relative;
  padding: 0;
  margin: 0;
}

.pp-profile-v2-section__head {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin-bottom: 24px;
  padding-bottom: 12px;
  border-bottom: 1px solid rgba(26, 21, 18, 0.12);
}
.pp-profile-v2-section__head h2 {
  font-family: var(--serif);
  font-size: clamp(1.6rem, 2.2vw, 2.1rem);
  font-weight: 600;
  letter-spacing: 0.01em;
  margin: 0;
  color: var(--ink);
}
.pp-profile-v2-section__head h2 span {
  font-size: 0.78em;
  font-weight: 400;
  color: var(--ink-faint);
  font-style: italic;
}

/* --- Hero (Bio + Polaroid-Foto) ----------------------------- */
.pp-profile-v2-section--hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 380px);
  gap: 56px;
  align-items: start;
}

.pp-profile-v2-hero__copy { min-width: 0; }
.pp-profile-v2-hero__copy .pp-profile-kicker {
  font-family: var(--sans);
  font-size: 0.72rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0 0 12px;
}
.pp-profile-v2-hero__copy h2 {
  font-family: var(--serif);
  font-size: clamp(2rem, 3.5vw, 3.2rem);
  font-weight: 600;
  line-height: 1.05;
  margin: 0 0 8px;
  color: var(--ink);
}
.pp-profile-v2-hero__copy .pp-profile-role {
  font-family: var(--sans);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-faint);
  margin: 0 0 24px;
}

.pp-profile-v2-bio {
  font-family: var(--serif);
  font-size: 1.02rem;
  line-height: 1.7;
  color: var(--ink);
  white-space: pre-wrap;
}
.pp-profile-v2-bio p { margin: 0 0 1em; }
.pp-profile-v2-bio p:last-child { margin-bottom: 0; }

/* Empty-State Placeholder im Edit-Modus (Schritt 5 ergänzt das Markup);
   greift auch im Public-Modus nicht, weil dort der Bio-Block @if-gegated ist. */
.pp-profile-v2-bio[contenteditable="true"]:empty::before {
  content: attr(data-placeholder);
  color: var(--ink-faint);
  font-style: italic;
  opacity: 0.6;
}

.pp-profile-v2-hero__media {
  position: relative;
  margin: 0;
  padding: 14px 14px 36px;
  background: #fffdf6;
  border: 1px solid rgba(26, 21, 18, 0.12);
  box-shadow: 0 14px 28px rgba(26, 21, 18, 0.12), 0 4px 8px rgba(26, 21, 18, 0.08);
  transform: rotate(-1.2deg);
  transform-origin: center top;
}
.pp-profile-v2-hero__media img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  background: var(--bg-tint);
}
.pp-profile-v2-hero__media .sp-hero-tape {
  /* Tape-Aufkleber wird durch existierende .sp-hero-tape Regel gestylt */
}
.pp-profile-v2-hero__media:not(.pp-profile-v2-hero__media--has-image) {
  aspect-ratio: 4 / 5;
  display: grid;
  place-items: center;
  background: var(--bg-tint);
}
.pp-profile-v2-hero__media:not(.pp-profile-v2-hero__media--has-image)::after {
  content: 'Foto';
  font-family: var(--sans);
  font-size: 0.72rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-faint);
}

/* Polaroid-Beschriftung unter dem Cover-Foto: handgeschrieben-italisch,
   sitzt im Bottom-Padding des Polaroids und kann bei Bedarf nach unten wachsen. */
.pp-profile-v2-hero__caption {
  margin: 10px 0 -16px;
  padding: 0 4px;
  font-family: var(--serif, Georgia, serif);
  font-style: italic;
  font-size: 0.95rem;
  line-height: 1.35;
  color: var(--ink-muted);
  text-align: center;
  word-wrap: break-word;
}
.pp-profile-v2-hero__caption:empty::before {
  content: attr(data-placeholder);
  color: var(--ink-faint);
  opacity: 0.7;
}

/* --- Horizontaler Sektion-Scroller (Werke + Werkgalerie) ----- */
.pp-profile-v2-scroller {
  position: relative;
  /* Die productions-grid wird zum horizontalen Strip, override default Grid: */
}

/* Wunsch 2026-08-29 (Feinschliff): Viererreihe in Bearbeiten- UND
   oeffentlicher Ansicht — vorher horizontaler Strip mit 540px-Karten. */
.pp-profile-v2-scroller .productions-grid--public {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 18px;
  overflow-x: visible;
  padding: 8px 4px 16px;
}
@media (max-width: 1280px) {
  .pp-profile-v2-scroller .productions-grid--public {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}
@media (max-width: 960px) {
  .pp-profile-v2-scroller .productions-grid--public {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 620px) {
  .pp-profile-v2-scroller .productions-grid--public {
    grid-template-columns: 1fr;
  }
}

/* Werkgalerie (Builder-Werke) als horizontale Strip */
.pp-profile-v2-werkgalerie {
  display: flex;
  flex-wrap: nowrap;
  gap: 24px;
  overflow-x: auto;
  overflow-y: visible;
  scroll-snap-type: x proximity;
  padding: 8px 4px 16px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
  scrollbar-color: rgba(189, 71, 38, 0.45) transparent;
}
.pp-profile-v2-werkgalerie .pp-werk {
  flex: 0 0 auto;
  width: 220px;
  scroll-snap-align: start;
  margin: 0;
  padding: 12px 12px 28px;
  background: #fffdf6;
  border: 1px solid rgba(26, 21, 18, 0.10);
  box-shadow: 0 8px 18px rgba(26, 21, 18, 0.08);
}
.pp-profile-v2-werkgalerie .pp-werk img {
  display: block;
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  background: var(--bg-tint);
}
.pp-profile-v2-werkgalerie .pp-werk figcaption {
  margin-top: 10px;
  font-size: 0.88rem;
}
.pp-profile-v2-werkgalerie .pp-werk figcaption strong {
  display: block;
  color: var(--ink);
  font-weight: 600;
  margin-bottom: 4px;
}
.pp-profile-v2-werkgalerie .pp-werk figcaption p {
  margin: 0;
  color: var(--ink-muted);
  font-size: 0.82rem;
  line-height: 1.4;
}

/* Gradient-Fade-Edge bei aktivem horizontalen Scroller — Affordance „mehr da rechts" */
.pp-profile-v2-section--werke,
.pp-profile-v2-section--werkstatt {
  position: relative;
}
.pp-profile-v2-section--werke::after,
.pp-profile-v2-section--werkstatt::after {
  content: '';
  position: absolute;
  right: 0;
  bottom: 16px;
  width: 48px;
  top: 64px; /* unter section__head start */
  background: linear-gradient(to right, transparent, var(--bg) 80%);
  pointer-events: none;
  opacity: 0.9;
}

/* --- Kontakt-Sektion ---------------------------------------- */
.pp-profile-v2-section--kontakt {
  background: var(--bg-tint);
  padding: 32px 36px;
  border: 1px solid rgba(26, 21, 18, 0.10);
}
.pp-profile-v2-section--kontakt .pp-profile-kicker {
  font-family: var(--sans);
  font-size: 0.72rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0 0 8px;
}
.pp-profile-v2-section--kontakt h2 {
  font-family: var(--serif);
  font-size: clamp(1.4rem, 2vw, 1.9rem);
  font-weight: 600;
  margin: 0 0 16px;
  color: var(--ink);
}
.pp-profile-v2-section--kontakt .pp-profile-text {
  margin-bottom: 20px;
  color: var(--ink-muted);
  line-height: 1.55;
}

/* --- Mobile (≤640px) ---------------------------------------- */
@media (max-width: 640px) {
  .pp-profile-v2 .pp-profile-v2-main {
    padding: 24px 20px 64px;
    gap: 40px;
    height: auto;
    overflow-y: visible;
  }
  .pp-profile-owner-tools {
    align-self: stretch;
    justify-content: space-between;
    border-radius: 6px;
  }
  .pp-profile-owner-tools__state,
  .pp-profile-owner-tools__button {
    white-space: normal;
  }
  .pp-profile-v2-section--hero {
    grid-template-columns: 1fr;
    gap: 32px;
  }
  .pp-profile-v2-hero__media {
    max-width: 280px;
    margin: 0 auto;
  }
  .pp-profile-v2-section--werke::after,
  .pp-profile-v2-section--werkstatt::after {
    width: 32px;
  }
  .pp-profile-v2-section--kontakt {
    padding: 24px 20px;
  }
}

/* --- Tablet (641–1024px) — Hero schmaler ------------------- */
@media (min-width: 641px) and (max-width: 1024px) {
  .pp-profile-v2 .pp-profile-v2-main {
    padding: 28px 36px 80px;
    gap: 48px;
  }
  .pp-profile-v2-section--hero {
    grid-template-columns: minmax(0, 1fr) minmax(220px, 300px);
    gap: 40px;
  }
}

/* --- pp-profile-v2 Edit-Affordances (nur in .pp-profile-v2--editable) -- */
.pp-profile-v2--editable [data-edit-field] {
  cursor: text;
  border-radius: 3px;
  transition: background-color 120ms ease, box-shadow 120ms ease;
}
.pp-profile-v2--editable [data-edit-field]:hover {
  background: rgba(184, 58, 31, 0.06);
  box-shadow: 0 0 0 4px rgba(184, 58, 31, 0.06);
}
.pp-profile-v2--editable [data-edit-field]:focus {
  background: rgba(184, 58, 31, 0.10);
  box-shadow: 0 0 0 2px var(--accent);
  outline: none;
}
.pp-profile-v2--editable [data-edit-field]:empty::before {
  content: attr(data-placeholder);
  color: var(--ink-faint);
  font-style: italic;
  opacity: 0.6;
}

/* Per-Field Save-Indicator (vom Bootstrap-Loader gesetzt nach Erfolg) */
.pp-profile-v2--editable [data-edit-field].is-saved::after {
  content: '✓';
  color: var(--ok);
  margin-left: 0.4em;
  font-size: 0.85em;
  animation: pp-profile-v2-fade 1.5s ease forwards;
}
@keyframes pp-profile-v2-fade {
  0%   { opacity: 0; transform: translateY(-2px); }
  20%  { opacity: 1; transform: translateY(0); }
  80%  { opacity: 1; }
  100% { opacity: 0; }
}

/* Image-Upload-Overlay: schwebt über Avatar / Hero-Foto */
.pp-profile-v2-upload-overlay {
  position: absolute;
  bottom: 8px;
  right: 8px;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: none;
  background: var(--ink);
  color: #fff;
  font-size: 1rem;
  cursor: pointer;
  display: grid;
  place-items: center;
  opacity: 0.78;
  transition: opacity 120ms ease, transform 120ms ease;
  z-index: 2;
}
.pp-profile-v2-upload-overlay:hover { opacity: 1; transform: scale(1.06); }
.pp-profile-v2-upload-overlay:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
.pp-profile-v2-upload-overlay--crop { right: 52px; }

/* Klickbares Bild im Edit-Mode: dezenter Hover-Hint */
.pp-profile-v2--editable .pp-profile-portrait,
.pp-profile-v2--editable .pp-profile-v2-hero__media {
  transition: filter 140ms ease;
}
.pp-profile-v2--editable .pp-profile-portrait:hover,
.pp-profile-v2--editable .pp-profile-v2-hero__media:hover {
  filter: brightness(0.96);
}
.pp-profile-v2--editable .pp-profile-portrait:focus-visible,
.pp-profile-v2--editable .pp-profile-v2-hero__media:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 4px;
}

/* Inline-Select für gender etc. — sitzt direkt im <dd> */
.pp-profile-v2-edit-select {
  font-family: inherit;
  font-size: inherit;
  color: var(--ink);
  background: var(--bg-alt);
  border: 1px solid var(--accent-line);
  border-radius: var(--r-sm);
  padding: 4px 8px;
  cursor: pointer;
  outline: none;
}
.pp-profile-v2-edit-select:focus { border-color: var(--accent); }

/* Empty-Hint für Select-Felder ohne Wert */
[data-edit-type="select"].is-empty { color: var(--ink-subtle); font-style: italic; }

.pp-profile-portrait { position: relative; }
.pp-profile-v2-hero__media { position: relative; }

/* Toast-Helper für globale Fehlermeldungen (vom Bootstrap-Loader benutzt) */
.pp-profile-v2-toast {
  position: fixed;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--ink);
  color: #fff;
  padding: 12px 18px;
  border-radius: 6px;
  font-family: var(--sans);
  font-size: 0.88rem;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
  z-index: 9999;
  display: flex;
  align-items: center;
  gap: 12px;
}
.pp-profile-v2-toast--error { background: var(--accent); }
.pp-profile-v2-toast button {
  background: rgba(255, 255, 255, 0.15);
  border: none;
  color: #fff;
  padding: 4px 10px;
  border-radius: 4px;
  font: inherit;
  cursor: pointer;
}
.pp-profile-v2-toast button:hover { background: rgba(255, 255, 255, 0.25); }

/* Mobile Edit-Sheet (≤640px) — Bottom-Sheet mit textarea + Save/Cancel */
.pp-profile-v2-edit-sheet {
  position: fixed;
  inset: auto 0 0 0;
  background: #fff;
  border-radius: 16px 16px 0 0;
  padding: 20px 20px 28px;
  box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.18);
  z-index: 9998;
  transform: translateY(100%);
  transition: transform 200ms ease;
  font-family: var(--sans);
}
.pp-profile-v2-edit-sheet.is-open { transform: translateY(0); }
.pp-profile-v2-edit-sheet__label {
  display: block;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin-bottom: 8px;
}
.pp-profile-v2-edit-sheet textarea,
.pp-profile-v2-edit-sheet input {
  width: 100%;
  font-family: var(--serif);
  font-size: 1rem;
  border: 1px solid rgba(26, 21, 18, 0.18);
  border-radius: 6px;
  padding: 12px;
  resize: vertical;
  min-height: 60px;
}
.pp-profile-v2-edit-sheet__actions {
  display: flex;
  gap: 10px;
  margin-top: 14px;
  justify-content: flex-end;
}
.pp-profile-v2-edit-sheet__actions button {
  padding: 10px 18px;
  border-radius: 6px;
  font: inherit;
  cursor: pointer;
  border: 1px solid var(--ink);
  background: transparent;
  color: var(--ink);
}
.pp-profile-v2-edit-sheet__actions button[data-edit-sheet-save] {
  background: var(--ink);
  color: #fff;
}
.pp-profile-v2-edit-sheet__backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.32);
  z-index: 9997;
}
.pp-profile-v2-edit-sheet__toolbar {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
  flex-wrap: wrap;
}
.pp-profile-v2-edit-sheet__tb {
  width: 32px;
  height: 32px;
  border-radius: 6px;
  border: 1px solid rgba(26, 21, 18, 0.18);
  background: transparent;
  color: var(--ink);
  cursor: pointer;
  font-family: var(--serif);
  font-size: 0.95rem;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.pp-profile-v2-edit-sheet__tb:hover {
  background: rgba(26, 21, 18, 0.06);
}
.pp-profile-v2-edit-sheet__hint {
  font-size: 0.75rem;
  color: var(--ink-muted);
  font-style: italic;
  flex: 1;
  min-width: 0;
}

/* Floating Markdown-Toolbar: erscheint ueber der Selektion im
   contenteditable-Bio-Block. Erst sichtbar wenn .is-visible gesetzt. */
.pp-rich-toolbar {
  position: absolute;
  top: 0; left: 0;
  display: none;
  align-items: center;
  gap: 2px;
  padding: 4px;
  background: #1a1512;
  color: #fff;
  border-radius: 6px;
  box-shadow: 0 6px 20px rgba(0,0,0,0.28);
  transform: translateX(-50%);
  z-index: 9998;
  pointer-events: auto;
}
.pp-rich-toolbar.is-visible { display: flex; }
.pp-rich-toolbar::after {
  content: '';
  position: absolute;
  bottom: -5px; left: 50%;
  width: 10px; height: 10px;
  background: #1a1512;
  transform: translateX(-50%) rotate(45deg);
  z-index: -1;
}
.pp-rich-toolbar__btn {
  width: 30px;
  height: 30px;
  padding: 0;
  border: 0;
  background: transparent;
  color: #fff;
  cursor: pointer;
  border-radius: 4px;
  font-size: 0.92rem;
  display: flex;
  align-items: center;
  justify-content: center;
}
.pp-rich-toolbar__btn:hover {
  background: rgba(255,255,255,0.14);
}

/* --- pp-profile-v2 layout-overrides for legacy collisions ---------- */
/* Back-Link: Old rule sets position:absolute (Z. 2627), unsere v2 muss zurueckdruecken */
.pp-profile-v2 .pp-profile-back {
  position: static;
  top: auto;
  left: auto;
  z-index: auto;
}

/* Vita ohne Cover-Foto: einspaltig, Text ueber die volle Breite.
   (Cover-Media-Spalte entfernt — Produktionen stehen ohnehin oben.) */
.pp-profile-v2-section--hero {
  display: grid !important;
  grid-template-columns: 1fr !important;
  gap: 44px;
  align-items: start;
}
.pp-profile-v2-hero__media {
  width: 100%;
  max-width: 300px;
  justify-self: start;
}

/* Verschachtelte main: vendor stylesheet mag main { display:block } default
   dazwischen funken. Sicherstellen dass mein flex-column layout greift. */
main.pp-profile-v2-main {
  display: flex;
  flex-direction: column;
}

/* Mobile: Hero einspaltig, Polaroid darf mittig */
@media (max-width: 640px) {
  .pp-profile-v2-section--hero {
    grid-template-columns: 1fr !important;
  }
  .pp-profile-v2-hero__media {
    margin: 0 auto;
  }
}

/* --- pp-profile-v2 Werke-Card-Edit ---------------------------------- */
/* Production-Cards im Edit-Modus: Hover-Delete + Add-Card am Ende */

.productions-grid--editable .production-card {
  position: relative;
}

/* Hover-Delete-X oben rechts */
.pp-profile-v2-card-delete {
  position: absolute;
  top: 6px;
  right: 6px;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: none;
  background: rgba(26, 21, 18, 0.55);
  color: #fff;
  font-size: 0.95rem;
  line-height: 1;
  cursor: pointer;
  opacity: 0;
  transition: opacity 120ms ease, background-color 120ms ease;
  z-index: 4;
  display: grid;
  place-items: center;
}
.production-card:hover .pp-profile-v2-card-delete,
.pp-profile-v2-card-delete:focus { opacity: 0.9; }
.pp-profile-v2-card-delete:hover { background: var(--accent); opacity: 1; }

/* Hover-Edit-Stift oben links — öffnet Modal mit allen Werk-Infos */
.pp-profile-v2-card-edit {
  position: absolute;
  top: 6px;
  left: 6px;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: none;
  background: rgba(26, 21, 18, 0.55);
  color: #fff;
  font-size: 0.85rem;
  line-height: 1;
  cursor: pointer;
  opacity: 0;
  transition: opacity 120ms ease, background-color 120ms ease;
  z-index: 4;
  display: grid;
  place-items: center;
  font-family: var(--serif);
}
.production-card:hover .pp-profile-v2-card-edit,
.pp-profile-v2-card-edit:focus { opacity: 0.9; }
.pp-profile-v2-card-edit:hover { background: var(--accent); opacity: 1; }

/* Hover-Crop-Hotspot rechts unten am Hero im Editor-Modus.
   Sichtbar nur, wenn ein Hero-Bild vorhanden ist (Blade rendert den
   Button nur dann mit data-hero-src, CSS unten ohne data-hero-src
   blendet ihn aus). */
.production-card__hero-crop-btn {
  position: absolute;
  bottom: 8px;
  right: 8px;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: none;
  background: rgba(26, 21, 18, 0.55);
  color: #fff;
  font-size: 0.95rem;
  line-height: 1;
  cursor: pointer;
  opacity: 0;
  transition: opacity 120ms ease, background-color 120ms ease;
  z-index: 4;
  display: grid;
  place-items: center;
}
.production-card:hover .production-card__hero-crop-btn,
.production-card__hero-crop-btn:focus { opacity: 0.9; }
.production-card__hero-crop-btn:hover { background: var(--accent); opacity: 1; }
.production-card__hero-crop-btn[data-hero-src=""] { display: none; }

/* Inline-Confirm-Dialog (Delete) */
.pp-profile-v2-card-confirm {
  position: absolute;
  inset: auto 8px 8px 8px;
  /* --ink ist seit dem Kinosaal-Umbau Creme — als Hintergrund mit weisser
     Schrift unlesbar. Dunkles Panel + Creme-Text wie der Rest der App. */
  background: var(--bg-alt);
  color: var(--ink);
  border: 1px solid var(--line);
  padding: 10px 12px;
  border-radius: 6px;
  font-family: var(--sans);
  font-size: 0.82rem;
  z-index: 5;
  box-shadow: 0 8px 18px rgba(0,0,0,0.3);
}
.pp-profile-v2-card-confirm p {
  margin: 0 0 8px;
  text-align: center;
}
.pp-profile-v2-card-confirm button {
  display: inline-block;
  margin: 0 4px;
  padding: 5px 10px;
  border-radius: 4px;
  font: inherit;
  cursor: pointer;
  border: 1px solid var(--line);
  background: transparent;
  color: var(--ink);
}
.pp-profile-v2-card-confirm__yes {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
  color: #fff !important;
}
.pp-profile-v2-card-confirm button:hover { opacity: 0.85; }

/* Upload-Overlay-Variante für Production-Cards (kleiner als Avatar/Hero) */
.pp-profile-v2-upload-overlay--card {
  width: 28px;
  height: 28px;
  bottom: auto;
  top: 50%;
  right: 50%;
  transform: translate(50%, -50%);
  font-size: 0.85rem;
  opacity: 0;
}
.production-card__media:hover .pp-profile-v2-upload-overlay--card { opacity: 0.85; }

/* Add-Card "+ Werk hinzufügen" — Polaroid-Slot, leicht zurückgenommen
   damit er als „leerer Platz für ein Werk" lesbar ist. */
.production-card--add {
  flex: 0 0 auto;
  width: 240px;
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  min-height: 280px;
  padding: 24px;
  background: linear-gradient(180deg, #FCF7EC 0%, #F8F1E1 100%);
  border: none;
  border-radius: 0;
  color: var(--ink-muted);
  cursor: pointer;
  font-family: var(--sans);
  filter: drop-shadow(0 10px 22px rgba(70,40,20,0.10))
          drop-shadow(0 2px 4px rgba(70,40,20,0.06));
  opacity: 0.78;
  transition: opacity 160ms ease, color 160ms ease, transform 160ms ease;
}
.production-card--add:hover,
.production-card--add:focus-visible {
  opacity: 1;
  color: var(--accent);
  transform: translateY(-2px);
}
.pp-profile-v2-add-glyph {
  font-size: 2.4rem;
  line-height: 1;
  font-weight: 300;
}
.pp-profile-v2-add-label {
  font-size: 0.82rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

/* Empty-Card fuer Werke-Sektion ohne Items im Edit-Modus */
.pp-profile-v2-section--werke .productions-grid--editable:has(> :only-child) {
  /* Wenn nur die Add-Card existiert, mittig setzen */
  justify-content: center;
}

/* ============================================================
   Production-Videos: Thumbnails in Details-Box + Lightbox
   ============================================================ */
.production-card__videos {
  margin-top: 14px;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 10px;
}
.production-video {
  appearance: none;
  border: 0;
  background: transparent;
  padding: 0;
  cursor: pointer;
  text-align: left;
  font: inherit;
  color: inherit;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.production-video__thumb {
  position: relative;
  display: block;
  aspect-ratio: 16 / 9;
  border-radius: 3px;
  overflow: hidden;
  background: rgba(40, 30, 20, 0.85);
  box-shadow: 0 1px 4px rgba(0,0,0,0.18);
  transition: transform .15s ease, box-shadow .15s ease;
}
.production-video:hover .production-video__thumb,
.production-video:focus-visible .production-video__thumb {
  transform: translateY(-1px);
  box-shadow: 0 3px 10px rgba(0,0,0,0.22);
}
.production-video__thumb img {
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.production-video__placeholder {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: 30px;
  color: rgba(255, 250, 241, 0.85);
}
.production-video__play {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: 26px;
  color: #fff;
  text-shadow: 0 1px 6px rgba(0,0,0,0.55);
  pointer-events: none;
}
.production-video__caption {
  font-size: 0.78rem;
  color: var(--pp-muted, #6f6357);
  line-height: 1.3;
  overflow-wrap: anywhere;
}

/* Video direkt im Karten-Bild-Stapel (Häppchen 3, 2026-08-27) — gleiche Groesse
   wie die Bild-Frames, aber als klickbarer Button mit Play-Icon, damit ein
   Video schon auf der Karte erkennbar ist statt erst in "Story ansehen". */
.production-card__video-frame {
  appearance: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  background: rgba(40, 30, 20, 0.85);
}
.production-card__video-frame img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.production-card__video-play {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 44px;
  color: #fff;
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.6);
  pointer-events: none;
}

.production-video-lightbox {
  position: fixed; inset: 0;
  z-index: 100;
  background: rgba(0, 0, 0, 0.86);
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
}
.production-video-lightbox__frame {
  position: relative;
  width: min(960px, 100%);
  aspect-ratio: 16 / 9;
  background: #000;
  box-shadow: 0 20px 60px rgba(0,0,0,0.6);
}
.production-video-lightbox__player {
  width: 100%; height: 100%; border: 0; display: block;
}
.production-video-lightbox__close {
  position: absolute;
  top: -12px; right: -12px;
  width: 36px; height: 36px;
  border-radius: 50%;
  border: 0;
  background: #fff;
  color: #1a1a1a;
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 4px 12px rgba(0,0,0,0.4);
}
.production-video-lightbox__close:hover { background: #f0f0f0; }
/* Pfeil-Navigation bei mehreren Videos (Playlist, Runde 7 2026-08-30). */
.production-video-lightbox__nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 2;
  width: 44px; height: 44px;
  border-radius: 50%;
  border: 0;
  background: #fff;
  color: #1a1a1a;
  font-size: 26px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 4px 12px rgba(0,0,0,0.4);
}
.production-video-lightbox__nav:hover { background: #f0f0f0; }
.production-video-lightbox__nav--prev { left: -22px; }
.production-video-lightbox__nav--next { right: -22px; }
.production-video-lightbox__counter {
  position: absolute;
  left: 50%; bottom: -36px;
  transform: translateX(-50%);
  color: rgba(255, 255, 255, 0.85);
  font-size: 0.85rem;
  font-family: var(--sans);
}
@media (max-width: 640px) {
  .production-video-lightbox { padding: 12px; }
  .production-video-lightbox__close { top: 8px; right: 8px; }
  .production-video-lightbox__nav--prev { left: 6px; }
  .production-video-lightbox__nav--next { right: 6px; }
}

/* Projektfoto gross (Wunsch Benno 2026-09-28): Tipp aufs Kartenfoto.
   Knoepfe haengen am Fenster, nicht am Foto — Fotos haben jedes Seiten-
   verhaeltnis, und auf dem Handy muss das × immer erreichbar bleiben. */
.pp-profile-page .production-card__media:has(img[data-lightbox-photo]) {
  cursor: zoom-in;
}
.production-photo-lightbox {
  position: fixed; inset: 0;
  z-index: 100;
  background: rgba(0, 0, 0, 0.9);
  overscroll-behavior: contain;
}
.production-photo-lightbox__stage {
  position: absolute;
  inset: 56px 72px;
  display: flex; align-items: center; justify-content: center;
}
.production-photo-lightbox__img {
  display: block;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);
  user-select: none;
  -webkit-user-select: none;
}
/* Gedrehtes Foto: Groesse setzt fitRotatedBox() per JS, die max-Grenzen
   wuerden sonst die ungedrehte Breite kappen. Bis dahin unsichtbar, damit es
   nicht kurz in Originalgroesse aufblitzt. */
.production-photo-lightbox__img.is-rotated { max-width: none; max-height: none; }
.production-photo-lightbox__img.is-rotated:not(.is-fitted) { visibility: hidden; }
.production-photo-lightbox__close,
.production-photo-lightbox__nav {
  position: absolute;
  z-index: 2;
  border-radius: 50%;
  border: 0;
  background: #fff;
  color: #1a1a1a;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
}
.production-photo-lightbox__close {
  top: 12px; right: 12px;
  width: 40px; height: 40px;
  font-size: 24px;
}
.production-photo-lightbox__nav {
  top: 50%;
  transform: translateY(-50%);
  width: 44px; height: 44px;
  font-size: 26px;
}
.production-photo-lightbox__close:hover,
.production-photo-lightbox__nav:hover { background: #f0f0f0; }
.production-photo-lightbox__nav--prev { left: 14px; }
.production-photo-lightbox__nav--next { right: 14px; }
.production-photo-lightbox__counter {
  position: absolute;
  left: 50%; bottom: 18px;
  transform: translateX(-50%);
  color: rgba(255, 255, 255, 0.85);
  font-size: 0.85rem;
  font-family: var(--sans);
}
@media (max-width: 640px) {
  /* Handy: Foto nutzt die volle Breite, geblaettert wird per Wischen —
     die Pfeile liegen klein am Rand ueber dem Foto. */
  .production-photo-lightbox__stage { inset: 60px 0 48px; }
  .production-photo-lightbox__nav {
    width: 36px; height: 36px;
    font-size: 22px;
    background: rgba(255, 255, 255, 0.82);
  }
  .production-photo-lightbox__nav--prev { left: 6px; }
  .production-photo-lightbox__nav--next { right: 6px; }
}

/* Story-Mode-Button im Details-Overlay einer Produktion. */
.production-card__story-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 0 0 14px;
  padding: 9px 18px;
  background: transparent;
  color: var(--sp-tan, var(--accent));
  border: 1px solid currentColor;
  border-radius: 2px;
  font: italic 0.92rem/1 var(--serif, Georgia, serif);
  letter-spacing: 0.02em;
  cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease;
}
.production-card__story-btn:hover {
  background: var(--sp-tan, var(--accent));
  color: #fff;
}


/* ============================================================ *
 *  Sprachdemos — bis zu 8 pro Profil, nativ <audio> mit Skin.
 *  Plan: docs/plans/2026-05-13-sprachdemos.md
 * ============================================================ */

.pp-profile-v2-section--voice {
  margin-bottom: 48px;
}

.voice-demos {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.voice-demo-row {
  display: grid;
  grid-template-columns: auto auto minmax(0, 1fr) minmax(220px, 320px) auto;
  align-items: center;
  gap: 14px;
  padding: 14px 16px;
  background: var(--pp-paper-soft, #efe3cd);
  border: 1px solid rgba(26, 21, 18, 0.12);
  box-shadow: 0 1px 0 rgba(26, 21, 18, 0.06);
}

.voice-demos--editable .voice-demo-row {
  cursor: default;
}

.voice-demo-row__handle {
  appearance: none;
  border: none;
  background: transparent;
  color: var(--ink-faint, #8a7e72);
  font-size: 18px;
  line-height: 1;
  padding: 4px 2px;
  cursor: grab;
  user-select: none;
}
.voice-demo-row__handle:active { cursor: grabbing; }

.voice-demo-row__icon {
  font-size: 18px;
  line-height: 1;
  color: var(--accent, #b6562f);
  flex: 0 0 auto;
}

.voice-demo-row__meta {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.voice-demo-row__title {
  font-family: var(--serif, Georgia, serif);
  font-size: 1.05rem;
  font-weight: 500;
  color: var(--ink, #1a1512);
  margin: 0;
  line-height: 1.25;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.voice-demos--editable .voice-demo-row__title,
.voice-demos--editable .voice-demo-row__category {
  cursor: text;
  border-radius: 2px;
  padding: 0 2px;
  margin: 0 -2px;
}
.voice-demos--editable .voice-demo-row__title:hover,
.voice-demos--editable .voice-demo-row__title:focus,
.voice-demos--editable .voice-demo-row__category:hover,
.voice-demos--editable .voice-demo-row__category:focus {
  background: rgba(26, 21, 18, 0.06);
  outline: none;
}

.voice-demo-row__sub {
  font-family: var(--sans, system-ui);
  font-size: 0.78rem;
  color: var(--ink-faint, #6a5a48);
  margin: 0;
  display: flex;
  gap: 6px;
  align-items: baseline;
}

.voice-demo-row__category {
  letter-spacing: 0.02em;
}

.voice-demo-row__player {
  width: 100%;
  height: 36px;
  filter: sepia(0.15) saturate(0.85);
}

.voice-demo-row__delete {
  appearance: none;
  border: 1px solid rgba(26, 21, 18, 0.2);
  background: transparent;
  color: var(--ink-faint, #6a5a48);
  width: 28px;
  height: 28px;
  border-radius: 50%;
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s ease, color 0.15s ease;
}
.voice-demo-row__delete:hover {
  background: rgba(182, 86, 47, 0.12);
  color: var(--accent, #b6562f);
  border-color: var(--accent, #b6562f);
}

.voice-demo-add {
  appearance: none;
  border: 1px dashed rgba(26, 21, 18, 0.28);
  background: transparent;
  color: var(--ink, #1a1512);
  padding: 12px 16px;
  font-family: var(--sans, system-ui);
  font-size: 0.9rem;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  align-self: flex-start;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.voice-demo-add:hover {
  background: rgba(26, 21, 18, 0.04);
  border-color: rgba(26, 21, 18, 0.5);
}
.voice-demo-add__hint {
  color: var(--ink-faint, #6a5a48);
  font-size: 0.78rem;
  margin-left: auto;
}

.voice-demo-row.is-dragging {
  opacity: 0.5;
}

@media (max-width: 720px) {
  .voice-demo-row {
    grid-template-columns: auto auto minmax(0, 1fr) auto;
    grid-template-areas:
      "handle icon meta delete"
      "player player player player";
    row-gap: 8px;
  }
  .voice-demo-row__handle { grid-area: handle; }
  .voice-demo-row__icon { grid-area: icon; }
  .voice-demo-row__meta { grid-area: meta; }
  .voice-demo-row__delete { grid-area: delete; }
  .voice-demo-row__player,
  .voice-demo-row__waveform { grid-area: player; }
}

/* Waveform-Player: Play-Button + 120 Balken + verstecktes <audio>.
   Played-Overlay ist absolut positioniert auf den Bars und wird via
   clip-path basierend auf --progress (0..1) enthuellt. */
.voice-demo-row__waveform {
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: center;
  gap: 10px;
  width: 100%;
  height: 36px;
}

.voice-demo-row__playbtn {
  appearance: none;
  border: none;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--accent, #b6562f);
  color: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  padding: 0;
  transition: background 0.15s ease, transform 0.1s ease;
}
.voice-demo-row__playbtn:hover {
  background: var(--accent-strong, #a04a26);
}
.voice-demo-row__playbtn:active {
  transform: scale(0.95);
}
.voice-demo-row__playbtn-icon {
  font-size: 11px;
  line-height: 1;
  display: inline-block;
  transform: translateX(1px); /* optisch zentrieren */
}
.voice-demo-row__waveform.is-playing .voice-demo-row__playbtn-icon {
  transform: none;
  font-size: 10px;
  letter-spacing: -1px;
}

.voice-demo-row__bars {
  position: relative;
  display: flex;
  align-items: center;
  gap: 1px;
  width: 100%;
  height: 100%;
  cursor: pointer;
  user-select: none;
  --progress: 0;
}
.voice-demo-row__bars:focus-visible {
  outline: 2px solid var(--accent, #b6562f);
  outline-offset: 2px;
}

.voice-demo-row__bar {
  flex: 1 1 0;
  min-width: 1px;
  height: calc(var(--h, 0.1) * 100%);
  min-height: 2px;
  background: rgba(26, 21, 18, 0.28);
  border-radius: 1px;
  transition: background 0.15s ease;
}

.voice-demo-row__bars-played {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  gap: 1px;
  pointer-events: none;
  clip-path: inset(0 calc((1 - var(--progress, 0)) * 100%) 0 0);
}

.voice-demo-row__bar--played {
  background: var(--accent, #b6562f);
}

.voice-demo-row__audio {
  display: none;
}

/* Upload-Modal für Sprachdemos — explizites Grid wie beim Crop-Editor,
   damit Footer (Cancel/Hochladen) garantiert sichtbar bleibt. */
.pe-modal--voice-upload {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto;
  max-height: min(90vh, 720px);
  overflow: hidden;
}
@supports (height: 1dvh) {
  .pe-modal--voice-upload {
    max-height: min(90dvh, 720px);
  }
}
.pe-modal--voice-upload .pe-modal__body {
  display: flex;
  flex-direction: column;
  gap: 16px;
  overflow-y: auto;
  min-height: 0;
}

.pe-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-family: var(--sans, system-ui);
  font-size: 0.82rem;
  color: var(--ink-faint, #6a5a48);
}

.pe-field input[type="text"],
.pe-field input[type="file"],
.pe-field select {
  font: inherit;
  color: var(--ink, #1a1512);
  background: #fff;
  border: 1px solid rgba(26, 21, 18, 0.25);
  padding: 8px 10px;
  font-size: 0.95rem;
}

.pe-field input[type="text"]:focus,
.pe-field select:focus {
  outline: none;
  border-color: var(--accent, #b6562f);
}

.pe-voice-preview {
  background: var(--pp-paper-soft, #efe3cd);
  padding: 10px 12px;
  border: 1px solid rgba(26, 21, 18, 0.12);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.pe-voice-preview audio { width: 100%; height: 34px; }
.pe-voice-preview__meta {
  margin: 0;
  font-family: var(--sans, system-ui);
  font-size: 0.78rem;
  color: var(--ink-faint, #6a5a48);
}

.pe-error {
  margin: 0;
  font-family: var(--sans, system-ui);
  font-size: 0.85rem;
  color: #a23a1f;
}

.voice-demo-row__title-input {
  font: inherit;
  font-family: var(--serif, Georgia, serif);
  font-size: 1.05rem;
  font-weight: 500;
  color: var(--ink, #1a1512);
  background: #fff;
  border: 1px solid var(--accent, #b6562f);
  padding: 2px 4px;
  width: 100%;
  min-width: 0;
}
.voice-demo-row__category-input {
  font: inherit;
  font-size: 0.78rem;
  background: #fff;
  border: 1px solid var(--accent, #b6562f);
  padding: 0 2px;
  min-width: 80px;
}

/* ============================================================ *
 *  Bewegt-Hero — MP4/MOV-Video im Polaroid-Rahmen.
 *  Plan: docs/plans/2026-05-13-bewegt-hero.md
 * ============================================================ */

.pp-profile-v2-hero__media video {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  background: var(--bg-tint);
}

/* Video-Hotspot links neben Crop. crop=52px, video=96px (von rechts). */
.pp-profile-v2-upload-overlay--video {
  right: 96px;
}
/* Wenn Video aktiv ist, gibt es keinen Crop-Hotspot — Video rückt nach. */
.pp-profile-v2-hero__media--has-video .pp-profile-v2-upload-overlay--video {
  right: 52px;
}

/* ============================================================
   Showreels — bis zu 3 Embeds (YouTube/Vimeo) oder Uploads
   Plan: docs/plans/2026-05-13-showreels.md
   ============================================================ */

.showreels {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 18px;
}

.showreel-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 10px;
  background: var(--pp-paper-soft, #efe3cd);
  border: 1px solid rgba(26, 21, 18, 0.12);
  padding: 12px;
}

.showreel-card__media {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #0e0c0a;
  overflow: hidden;
}

.showreel-card__iframe,
.showreel-card__video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}

/* Mediathek-Verweis-Karte (type=external): kein Embed moeglich, Link-Kachel. */
.showreel-card__external {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  width: 100%;
  height: 100%;
  min-height: 160px;
  text-decoration: none;
  color: inherit;
  background: rgba(127, 127, 127, 0.08);
}
.showreel-card__external-icon {
  font-size: 28px;
  opacity: 0.7;
}
.showreel-card__external-label {
  font-size: 14px;
}
.showreel-card__external-hint {
  font-size: 11px;
  opacity: 0.6;
}

.showreel-card__title {
  font-family: var(--serif, Georgia, serif);
  font-size: 1rem;
  color: var(--ink, #1a1512);
  margin: 0;
  line-height: 1.3;
  min-height: 1.3em;
}

.showreels--editable .showreel-card__title {
  cursor: text;
  padding: 2px 4px;
  margin: 0 -4px;
  border-radius: 2px;
}
.showreels--editable .showreel-card__title:hover,
.showreels--editable .showreel-card__title:focus {
  background: rgba(26, 21, 18, 0.06);
  outline: none;
}
.showreel-card__title-input {
  width: 100%;
  border: 1px solid rgba(26, 21, 18, 0.3);
  padding: 4px 6px;
  font-family: var(--serif, Georgia, serif);
  font-size: 1rem;
  background: #fff;
}

.showreel-card__handle {
  position: absolute;
  top: 8px;
  left: 8px;
  z-index: 2;
  appearance: none;
  border: none;
  background: rgba(255, 255, 255, 0.85);
  color: var(--ink-faint, #6a5a48);
  font-size: 14px;
  line-height: 1;
  padding: 4px 6px;
  cursor: grab;
  user-select: none;
  border-radius: 2px;
}
.showreel-card__handle:active { cursor: grabbing; }

.showreel-card__delete {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 2;
  appearance: none;
  border: 1px solid rgba(26, 21, 18, 0.2);
  background: rgba(255, 255, 255, 0.92);
  color: var(--ink-faint, #6a5a48);
  width: 28px;
  height: 28px;
  border-radius: 50%;
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s ease, color 0.15s ease;
}
.showreel-card__delete:hover {
  background: var(--accent, #b6562f);
  color: #fff;
  border-color: var(--accent, #b6562f);
}

.showreel-card.is-dragging {
  opacity: 0.5;
}

.showreel-add {
  appearance: none;
  border: 1px dashed rgba(26, 21, 18, 0.28);
  background: transparent;
  color: var(--ink, #1a1512);
  padding: 16px;
  font-family: var(--sans, system-ui);
  font-size: 0.9rem;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  gap: 6px;
  min-height: 180px;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.showreel-add:hover {
  background: rgba(26, 21, 18, 0.04);
  border-color: rgba(26, 21, 18, 0.5);
}
.showreel-add__label {
  font-size: 1rem;
  font-family: var(--serif, Georgia, serif);
}
.showreel-add__hint {
  color: var(--ink-faint, #6a5a48);
  font-size: 0.78rem;
  font-family: var(--sans, system-ui);
}

/* Modal: Tab-Switch Link ↔ Datei */
.pe-modal--showreel {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto;
  max-height: min(90vh, 720px);
  overflow: hidden;
}
@supports (height: 1dvh) {
  .pe-modal--showreel { max-height: min(90dvh, 720px); }
}
.pe-modal--showreel .pe-modal__body {
  display: flex;
  flex-direction: column;
  gap: 16px;
  overflow-y: auto;
  min-height: 0;
}

.pe-tabs {
  display: flex;
  gap: 0;
  border-bottom: 1px solid rgba(26, 21, 18, 0.15);
}
.pe-tab {
  appearance: none;
  border: none;
  background: transparent;
  padding: 10px 14px;
  font-family: var(--sans, system-ui);
  font-size: 0.9rem;
  color: var(--ink-faint, #6a5a48);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
}
.pe-tab--active {
  color: var(--ink, #1a1512);
  border-bottom-color: var(--accent, #b6562f);
}

.pe-pane {
  display: none;
  flex-direction: column;
  gap: 10px;
}
.pe-pane--active {
  display: flex;
}

.pe-hint {
  font-size: 0.78rem;
  color: var(--ink-faint, #6a5a48);
  margin: 0;
}

/* --- Mobile (≤860px): Kontakt-CTA ans Ende ----------------------------
   Ab 860px stapelt die Sidebar über den Inhalt, wodurch die Kontakt-Karte
   vor Vita + Projekten erscheint. display:contents löst die Sidebar-Kinder
   zu direkten Shell-Flex-Items auf, sodass per order die Reihenfolge
   Identität → Inhalt → Kontakt entsteht. Desktop bleibt unberührt. */
@media (max-width: 860px) {
  .pp-profile-v2 .pp-profile-shell {
    display: flex;
    flex-direction: column;
  }
  .pp-profile-v2 .pp-profile-sidebar {
    display: contents;
  }
  /* Die Sidebar-Box (mit ihrem Padding) ist durch display:contents weg —
     horizontalen Rand den geflatteten Kindern zurückgeben. */
  .pp-profile-v2 .pp-profile-sidebar > * {
    padding-left: 22px;
    padding-right: 22px;
  }
  .pp-profile-v2 .pp-profile-portrait {
    margin-top: 30px;
  }
  .pp-profile-v2 .pp-profile-v2-main {
    order: 1;
  }
  .pp-profile-v2 .pp-profile-contact-card {
    order: 2;
    margin-bottom: 40px;
  }
}

/* === Onboarding-Wizard (puppet-onboarding.js) =========================
   Spec: docs/superpowers/specs/2026-06-13-screenpuppets-onboarding-design.md */
body.sp-ob-lock { overflow: hidden; }

.sp-ob {
  position: fixed; inset: 0; z-index: 1200;
  background: rgba(30, 24, 18, 0.18);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  display: flex; align-items: center; justify-content: center;
  padding: 16px;
}
.sp-ob__panel {
  position: relative;
  background: var(--bg, #F5EDE0);
  border-radius: 14px;
  width: 100%; max-width: 460px;
  max-height: 92vh; overflow-y: auto;
  padding: 40px 28px 32px;
  text-align: center;
}
.sp-ob__close {
  position: absolute; top: 10px; right: 14px;
  appearance: none; border: none; background: transparent;
  font-size: 26px; line-height: 1; color: var(--sp-ink-muted);
  cursor: pointer;
}
.sp-ob__dots { display: flex; gap: 6px; justify-content: center; margin-bottom: 22px; }
.sp-ob__dots i { width: 28px; height: 4px; border-radius: 2px; background: #e3dcd2; }
.sp-ob__dots i.is-on { background: var(--sp-accent); }
.sp-ob__title { font-family: var(--serif); font-style: italic; font-weight: 400; font-size: 1.6rem; margin: 0 0 8px; }
.sp-ob__lead { color: var(--sp-ink-muted); font-size: 0.95rem; margin: 0 0 20px; }
.sp-ob__circle {
  width: 140px; height: 140px; border-radius: 50%;
  border: 2px dashed var(--sp-accent); background: transparent;
  color: var(--sp-accent); font: inherit; cursor: pointer;
  margin: 0 auto 8px; display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.sp-ob__circle--filled { border-style: solid; }
.sp-ob__circle img { width: 100%; height: 100%; object-fit: cover; }
.sp-ob__input {
  width: 100%; box-sizing: border-box;
  border: 1px solid #e3dcd2; border-radius: 8px;
  padding: 12px 14px; font: inherit; font-size: 1rem;
  margin-bottom: 12px; background: #fff;
}
.sp-ob__chips { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-bottom: 8px; }
.sp-ob__chip {
  appearance: none; border: 1px solid #e3dcd2; border-radius: 999px;
  background: #fff; color: var(--sp-ink-muted);
  padding: 6px 14px; font: inherit; font-size: 0.85rem; cursor: pointer;
}
.sp-ob__chip:hover { border-color: var(--sp-accent); color: var(--sp-accent); }
.sp-ob__photo {
  appearance: none; width: 100%; box-sizing: border-box;
  border: 2px dashed #e3dcd2; border-radius: 10px;
  background: transparent; color: var(--sp-ink-muted);
  padding: 18px 14px; font: inherit; font-size: 0.95rem; cursor: pointer;
}
.sp-ob__photo--picked { border-color: var(--sp-accent); color: var(--sp-accent); border-style: solid; }
.sp-ob__croplink {
  appearance: none; border: none; background: transparent;
  color: var(--sp-accent); font: inherit; font-size: 0.82rem;
  text-decoration: underline; cursor: pointer; margin-top: 2px;
}
.sp-ob__error { color: #b00020; font-size: 0.85rem; min-height: 1.2em; margin: 10px 0 0; }
.sp-ob__actions { margin-top: 18px; display: flex; flex-direction: column; gap: 10px; align-items: center; }
.sp-ob__skip {
  appearance: none; border: none; background: transparent;
  color: var(--sp-ink-muted); font: inherit; font-size: 0.85rem;
  text-decoration: underline; cursor: pointer;
}
.sp-ob__textarea {
  width: 100%; box-sizing: border-box;
  border: 1px solid #e3dcd2; border-radius: 8px;
  padding: 12px 14px; font: inherit; font-size: 1rem;
  margin-bottom: 12px; background: #fff; resize: vertical; min-height: 120px;
}
.sp-ob__subfields { margin-top: 4px; }
select.sp-ob__input { cursor: pointer; }
.sp-ob__dismiss {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  margin-top: 18px; color: var(--sp-ink-muted); font-size: 0.82rem; cursor: pointer;
}
.sp-ob__dismiss input { accent-color: var(--sp-accent); cursor: pointer; }

/* Fortschrittszeile (A#1) */
.sp-ob__progress {
  margin: 0 0 10px; color: var(--sp-ink-muted);
  font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase;
}

/* Belohnung pro erfolgreichem Schritt — nicht-blockierend, self-removing.
   Pro Schritt: Funken-Aufstieg (#5). Finale beim Veröffentlichen: Konfetti (#1). */
.sp-ob__dots i.sp-ob__dot--pop { animation: sp-ob-dot-pop 0.5s ease; }
@keyframes sp-ob-dot-pop {
  0% { transform: scaleY(1); }
  45% { transform: scaleY(2.4); }
  100% { transform: scaleY(1); }
}
.sp-ob__sparkle {
  position: absolute; pointer-events: none; line-height: 1;
  text-shadow: 0 0 4px #fff, 0 0 9px #ffd86b, 0 0 16px #ffb84a, 0 0 28px rgba(255,180,70,0.7);
  will-change: transform, opacity;
  animation: sp-ob-sparkle 0.95s ease-out forwards;
}
@keyframes sp-ob-sparkle {
  0%   { opacity: 0; transform: translate(-50%, -50%) translate(0, 0) scale(0.2) rotate(0deg); }
  25%  { opacity: 1; transform: translate(-50%, -50%) translate(calc(var(--dx) * 0.4), calc(var(--rise) * -0.4)) scale(1.35) rotate(35deg); }
  100% { opacity: 0; transform: translate(-50%, -50%) translate(var(--dx), calc(var(--rise) * -1)) scale(0.5) rotate(95deg); }
}
/* Lichtblitz fürs „Gleißen" — heller radialer Bloom aus dem erledigten Punkt */
.sp-ob__flash {
  position: absolute; pointer-events: none;
  width: 20px; height: 20px; border-radius: 50%;
  background: radial-gradient(circle, rgba(255,255,255,0.97) 0%, rgba(255,216,110,0.78) 34%, rgba(255,190,70,0) 72%);
  will-change: transform, opacity;
  animation: sp-ob-flash 0.6s ease-out forwards;
}
@keyframes sp-ob-flash {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(0.3); }
  30%  { opacity: 1; transform: translate(-50%, -50%) scale(1.8); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(4); }
}
/* Vollbild-Schicht fürs Finale — über dem Wizard-Overlay (.sp-ob = z-index 1200) */
.sp-ob__confetti-layer {
  position: fixed; inset: 0; z-index: 1300;
  pointer-events: none; overflow: hidden;
}
.sp-ob__confetti {
  position: absolute; top: -12vh;
  pointer-events: none; border-radius: 1px;
  width: 12px; height: 18px;          /* Fallback; JS überschreibt pro Schnipsel */
  will-change: transform, opacity;
  animation: sp-ob-confetti 1.6s linear forwards;
}
@keyframes sp-ob-confetti {
  0%   { opacity: 0; transform: translateY(0) translateX(0) rotate(0deg); }
  8%   { opacity: 1; }
  90%  { opacity: 1; }
  100% { opacity: 0; transform: translateY(var(--fall)) translateX(var(--drift)) rotate(var(--rot)); }
}
@media (prefers-reduced-motion: reduce) {
  .sp-ob__dots i.sp-ob__dot--pop { animation: none; }
  .sp-ob__sparkle, .sp-ob__confetti, .sp-ob__confetti-layer, .sp-ob__flash { display: none; }
}

/* === Sprechende Leerzustände (nur $editable) ========================== */
.pp-profile-portrait--invite { border: 2px dashed var(--sp-accent); cursor: pointer; }
.pp-profile-portrait__placeholder--invite { color: var(--sp-accent); font-size: 0.9rem; }
.pp-profile-v2-add-hint { display: block; font-size: 0.75rem; color: var(--sp-ink-muted); margin-top: 4px; }
.production-card--add-prominent { border-width: 2px; border-color: var(--sp-accent); }
.production-card--add-prominent .pp-profile-v2-add-label { color: var(--sp-accent); }

/* === Concierge-Onboarding === */
.pp-concierge-overlay { position: fixed; inset: 0; z-index: 9000; display: grid; place-items: center;
  background: rgba(26,21,18,0.18); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); padding: 24px; }
.pp-concierge-card-wrap { background: var(--bg, #fffdf6); border-radius: 4px; padding: 32px;
  max-width: 680px; width: 100%; }
.pp-concierge-title { font-family: var(--serif); font-size: clamp(1.4rem,3vw,2rem); margin: 0 0 24px; }
.pp-concierge-choices { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 560px) { .pp-concierge-choices { grid-template-columns: 1fr; } }
.pp-concierge-choice { display: grid; gap: 6px; padding: 24px; text-align: left; cursor: pointer;
  border: 1px solid rgba(111,75,38,0.25); border-radius: 3px; background: #fff; }
.pp-concierge-choice:hover { border-color: var(--accent, #B83A1F); }
.pp-concierge-choice__h { font-family: var(--serif); font-size: 1.15rem; }
.pp-concierge-choice__s { font-size: 0.9rem; color: var(--ink-muted, #6b5b4d); }
.pp-concierge-banner { display: flex; gap: 12px; align-items: center; justify-content: space-between;
  flex-wrap: wrap; padding: 14px 18px; margin: 0 0 18px; border-radius: 3px;
  background: #fff7e6; border: 1px solid rgba(184,58,31,0.25); }
.pp-concierge-banner__btn { padding: 8px 16px; cursor: pointer; border: 0; border-radius: 3px;
  background: var(--accent, #B83A1F); color: #fff; }
/* Status-Banner muss die fixe 92px-Profil-Rail freiräumen (sonst links verdeckt). Mirror von .pp-profile-shell. */
.pp-profile-page > .pp-concierge-banner { margin-left: 92px; }
@media (max-width: 860px) { .pp-profile-page > .pp-concierge-banner { margin-left: 0; } }
/* Und es muss sich seine Hoehe NEHMEN, nicht dazuaddieren.
   .pp-profile-page ist ein Layout mit fester Hoehe: `main` hat overflow:hidden,
   die Seite und .pp-profile-shell je height:100%. Ein per prepend eingesetztes
   Banner war deshalb eine zusaetzliche Zeile, die Schale bestand weiter auf
   volle Hoehe und rutschte unten heraus — abgeschnittener Inhalt (Meldung
   2026-08-27). Zwei Rasterzeilen loesen das: das Banner bekommt `auto`, die
   Schale den Rest. minmax(0,1fr) statt 1fr, weil ein Kind mit height:100%
   sonst seine Mindestgroesse behaelt und weiter herausschiebt. :has() haelt
   die Aenderung auf Seiten MIT Banner begrenzt — ohne Banner bleibt alles
   unveraendert. */
.pp-profile-page:has(> .pp-concierge-banner) { display: grid; grid-template-rows: auto minmax(0, 1fr); }
/* Owner-Button in der Sidebar: Aufbau-Auswahl (Wizard vs. Sammelbecken) erneut öffnen */
.pp-rebuild-trigger { display: block; width: 100%; margin-top: 18px; font-family: var(--sans); font-size: .82rem; font-weight: 600; padding: 9px 14px; cursor: pointer; background: none; color: var(--accent); border: 1px solid var(--accent-line); border-radius: 4px; }
.pp-rebuild-trigger:hover { background: var(--accent-soft); border-color: var(--accent); }
/* Hinweiszeile im Sammelbecken, wenn schon eine Abgabe beim Team liegt */
.pp-intake-followup { margin: 0 0 14px; padding: 10px 14px; border-radius: 3px; font-family: var(--sans);
  font-size: .86rem; color: var(--ink-muted, #6b5b4d); background: #fff7e6;
  border: 1px solid rgba(184,58,31,0.22); }
.pp-intake-file { display: none; }  /* versteckter Input innerhalb der Dropzone-Label */
.pp-intake-list { list-style: none; margin: 0 0 16px; padding: 0; display: grid; gap: 6px; }
.pp-intake-list li { display: flex; justify-content: space-between; font-size: 0.9rem; }
.pp-intake-del { border: 0; background: none; cursor: pointer; color: var(--accent, #B83A1F); }
.pp-intake-note { width: 100%; font-family: var(--serif); font-size: .9rem; padding: 10px 12px; margin-top: 10px; background: var(--bg-input); border: 1px solid var(--ink-subtle); border-radius: 4px; color: var(--ink); resize: none; }
.pp-intake-note::placeholder { color: var(--ink-subtle); }
.pp-intake-msg { color: var(--accent, #B83A1F); min-height: 1.2em; }
.pp-concierge-actions { display: flex; justify-content: flex-end; }
.pp-intake-rights { display: flex; gap: 8px; align-items: center; margin: 16px 0; font-size: 0.9rem; }
.pp-intake-suggestion { display: flex; align-items: center; gap: 12px; }
.pp-intake-suggestion__thumb { width: 64px; height: 64px; object-fit: cover; border-radius: 2px; flex-shrink: 0; }
/* Concierge: Schließen + Zurück */
.pp-concierge-card-wrap { position: relative; }
.pp-concierge-close {
  position: absolute; top: 10px; right: 12px; width: 32px; height: 32px;
  border: 0; border-radius: 50%; cursor: pointer; line-height: 1;
  font-size: 1rem; background: transparent; color: var(--ink-muted, #6b5b4d);
}
.pp-concierge-close:hover { background: rgba(26,21,18,0.08); color: var(--ink, #1a1512); }
.pp-concierge-actions { gap: 12px; align-items: center; }
.pp-concierge-back {
  margin-right: auto; border: 0; background: transparent; cursor: pointer;
  font: inherit; color: var(--ink-muted, #6b5b4d); padding: 8px 4px;
}
.pp-concierge-back:hover { color: var(--accent, #B83A1F); }

/* Sammelbecken User-Maske „Von Hand gebaut" (renderDropzone, 2026-06-28-sammelbecken-user-mockup.html).
   --hair (rgba(150,133,113,.4)) ist kein Token → inline. */
.pp-intake-card { max-width: 600px; }
.pp-intake-concierge { display: flex; gap: 16px; align-items: center; padding: 16px; background: var(--bg-tint); border-radius: 8px; margin: 0 0 20px; }
.pp-intake-photo { width: 60px; height: 60px; border-radius: 999px; flex: 0 0 auto; border: 1px solid var(--accent-line); background: var(--accent-soft); display: grid; place-items: center; }
.pp-intake-photo svg { width: 34px; height: 34px; color: var(--accent); }
.pp-intake-who { font-family: var(--serif); font-size: 1.05rem; color: var(--ink-strong); }
.pp-intake-who small { display: block; font-family: var(--sans); font-size: .78rem; color: var(--ink-muted); margin-top: 3px; }
.pp-intake-pledge { font-family: var(--serif); font-style: italic; font-size: 1.16rem; line-height: 1.45; color: var(--ink); text-align: center; margin: 6px 0 22px; text-wrap: balance; }
.pp-intake-pledge b { font-style: normal; color: var(--accent); }
.pp-intake-steps { display: flex; gap: 10px; margin: 0 0 22px; }
@media (max-width: 520px) { .pp-intake-steps { flex-direction: column; } }
.pp-intake-step { flex: 1; text-align: center; background: var(--bg-alt); border-radius: 6px; padding: 12px 8px; }
.pp-intake-step .n { display: block; font-family: var(--sans); font-size: .66rem; letter-spacing: .12em; text-transform: uppercase; color: var(--accent); font-weight: 700; }
.pp-intake-step .t { display: block; font-family: var(--serif); font-size: .84rem; color: var(--ink); margin-top: 4px; }
.pp-intake-dz { border: 2px dashed var(--accent-line); border-radius: 10px; background: var(--bg-alt); padding: 22px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 6px; cursor: pointer; transition: border-color .15s; }
.pp-intake-dz:hover { border-color: var(--accent); }
/* Datei schwebt ueber der Karte — gesetzt von puppet-concierge.js. */
.pp-intake-dz.is-drag-over { border-color: var(--accent); border-style: solid; background: var(--bg); }
.pp-intake-dz svg { width: 38px; height: 38px; color: var(--accent); }
.pp-intake-dz__s { font-family: var(--serif); font-size: 1rem; color: var(--ink-strong); }
.pp-intake-dz__s .link { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; }
.pp-intake-dz__h { font-family: var(--sans); font-size: .74rem; color: var(--ink-subtle); }
.pp-intake-files { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 0; }
.pp-intake-files li { display: flex; align-items: center; gap: 10px; font-family: var(--sans); font-size: .84rem; color: var(--ink); padding: 8px 2px; border-bottom: 1px dotted rgba(150,133,113,.4); }
.pp-intake-files li .fi { width: 15px; height: 15px; color: var(--ink-subtle); flex: 0 0 auto; }
.pp-intake-files li .nm { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-intake-files li .x { border: 0; background: none; color: var(--ink-subtle); cursor: pointer; font-size: .9rem; padding: 2px 4px; }
.pp-intake-files li .x:hover { color: var(--accent); }
/* Laufender Upload: Name links, Balken rechts (puppet-concierge.js). Bei 200 MB
   dauert das je nach Leitung Minuten — ohne Balken sieht das aus wie ein Absturz. */
.pp-intake-pending .nm { color: var(--ink-subtle); }
.pp-intake-bar { flex: 0 0 90px; height: 4px; border-radius: 2px; background: var(--bg-alt); overflow: hidden; }
.pp-intake-bar__fill { display: block; width: 0; height: 100%; background: var(--accent); transition: width .12s linear; }
.pp-intake-note-toggle { display: block; margin: 16px 0 0; font-family: var(--sans); font-size: .82rem; color: var(--accent); background: none; border: 0; cursor: pointer; padding: 0; text-decoration: underline; text-underline-offset: 2px; }

/* ── Sammelbecken Bau-Wizard (puppet-intake-wizard.js) ─────────────────────
   Cream/Georgia-Look aus 2026-06-28-admin-wizard-mockup.html, .pi--Präfix.
   --hair (rgba(150,133,113,.4)) ist kein Token → inline. */
.pi-wiz { max-width: 1000px; margin: 0 auto; padding: 8px 0 40px; }

/* Liste (/sammelbecken) */
.pi-h { font-family: var(--serif); font-weight: 400; font-size: 1.45rem; color: var(--ink-strong); margin: 12px 0 16px; }
.pi-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.pi-list a { display: block; font-family: var(--sans); font-size: .92rem; color: var(--ink); text-decoration: none; background: var(--bg-alt); border: 1px solid rgba(150,133,113,.4); border-radius: 6px; padding: 12px 14px; }
.pi-list a:hover { border-color: var(--accent); color: var(--accent); }

/* Breadcrumb + Status-Pill */
.pi-crumb { display: flex; align-items: center; gap: 10px; font-family: var(--sans); font-size: .8rem; color: var(--ink-muted); margin-bottom: 14px; flex-wrap: wrap; }
.pi-crumb .sep { color: var(--ink-subtle); }
.pi-crumb .here { color: var(--ink-strong); font-weight: 600; }
.pi-pill { font-family: var(--sans); font-size: .66rem; letter-spacing: .06em; text-transform: uppercase; font-weight: 700; padding: 4px 10px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); }
.pi-title { font-family: var(--serif); font-size: 1.45rem; font-weight: 400; color: var(--ink-strong); margin: 0 0 18px; }
.pi-typehint { font-family: var(--sans); font-size: .82rem; color: var(--ink-muted); margin: -10px 0 18px; }
.pi-typehint strong { color: var(--ink-strong); font-weight: 600; }
.pi-typeswitch { display: inline-flex; border: 1px solid var(--ink-subtle); border-radius: 999px; overflow: hidden; margin: -6px 0 18px; }
.pi-typeswitch .pi-type { font-family: var(--sans); font-size: .82rem; font-weight: 600; padding: 6px 16px; border: 0; background: var(--bg); color: var(--ink-muted); cursor: pointer; }
.pi-typeswitch .pi-type:hover { color: var(--accent); }
.pi-typeswitch .pi-type.active { background: var(--accent); color: #fff; }

/* Stepper */
.pi-stepper { display: flex; align-items: center; margin: 0 0 24px; flex-wrap: wrap; }
.pi-stp { display: flex; align-items: center; gap: 9px; flex: 0 0 auto; }
.pi-stp .dot { width: 26px; height: 26px; border-radius: 999px; display: grid; place-items: center; font-family: var(--sans); font-size: .78rem; font-weight: 700; border: 1.5px solid var(--ink-subtle); color: var(--ink-subtle); background: var(--bg); }
.pi-stp .lbl { font-family: var(--sans); font-size: .82rem; color: var(--ink-subtle); white-space: nowrap; }
.pi-stp.done .dot { background: var(--ok); border-color: var(--ok); color: #fff; }
.pi-stp.done .lbl { color: var(--ink-muted); }
.pi-stp.now .dot { background: var(--accent); border-color: var(--accent); color: #fff; }
.pi-stp.now .lbl { color: var(--ink-strong); font-weight: 600; }
.pi-conn { flex: 1 1 18px; height: 1.5px; background: var(--ink-subtle); margin: 0 10px; min-width: 14px; opacity: .5; }
@media (max-width: 760px) { .pi-stp .lbl { display: none; } .pi-conn { min-width: 8px; } }

/* Body-Grid: Material-Schiene | Arbeitsbereich */
.pi-body { display: grid; grid-template-columns: 300px 1fr; gap: 20px; align-items: start; }
@media (max-width: 760px) { .pi-body { grid-template-columns: 1fr; } }
.pi-panel { background: var(--bg-alt); border: 1px solid rgba(150,133,113,.4); border-radius: 8px; padding: 16px; }
.pi-panel h3 { font-family: var(--sans); font-size: .7rem; letter-spacing: .12em; text-transform: uppercase; color: var(--accent); margin: 0 0 12px; font-weight: 700; }
.pi-sub { font-family: var(--sans); font-size: .66rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-subtle); margin: 16px 0 8px; font-weight: 700; }
.pi-sub:first-of-type { margin-top: 0; }

/* Material-Schiene */
.pi-gallery { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
.pi-gallery .pi-ph { display: block; aspect-ratio: 1; border-radius: 4px; border: 1px solid var(--ink-subtle); cursor: pointer; background: linear-gradient(135deg, var(--bg-input), var(--bg-tint)); background-size: cover; background-position: center; }
.pi-doc { display: flex; align-items: center; gap: 10px; background: var(--bg); border: 1px solid rgba(150,133,113,.4); border-radius: 6px; padding: 10px; margin-bottom: 6px; }
.pi-doc .nm { font-family: var(--sans); font-size: .84rem; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pi-doc .open { font-family: var(--sans); font-size: .74rem; color: var(--accent); text-decoration: underline; white-space: nowrap; }
.pi-quote { font-family: var(--serif); font-style: italic; font-size: .88rem; color: var(--ink-muted); background: var(--bg); border-left: 2px solid var(--accent); border-radius: 0 6px 6px 0; padding: 10px 12px; }
.pi-links { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 5px; }
.pi-links a { font-family: var(--sans); font-size: .8rem; color: var(--accent); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pi-links a:hover { text-decoration: underline; }

/* Arbeits-Panel */
.pi-work { min-height: 200px; }
.pi-step-h { font-family: var(--serif); font-size: 1.15rem; color: var(--ink-strong); margin: 0 0 4px; }
.pi-step-s { font-family: var(--sans); font-size: .84rem; color: var(--ink-muted); margin: 0 0 18px; }

/* Schritt-Felder + Navigation (Task 6) */
.pi-field { margin: 0 0 16px; }
.pi-field label { display: block; font-family: var(--sans); font-size: .78rem; color: var(--ink-muted); margin: 0 0 6px; }
.pi-field input, .pi-field textarea { width: 100%; font-family: var(--serif); font-size: .92rem; background: var(--bg-input); border: 1px solid var(--ink-subtle); border-radius: 4px; color: var(--ink); padding: 10px 12px; resize: none; }
.pi-field input::placeholder, .pi-field textarea::placeholder { color: var(--ink-subtle); }
.pi-field input:focus, .pi-field textarea:focus { outline: 2px solid var(--accent); outline-offset: 0; border-color: var(--accent); }

/* Bild-Auswahl (Schritt 2) */
.pi-pick { display: grid; grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)); gap: 10px; margin: 0 0 16px; }
.pi-pick-item { display: grid; gap: 6px; cursor: pointer; font-family: var(--sans); font-size: .72rem; color: var(--ink-muted); text-align: center; }
.pi-pick-item input { margin: 0 auto; accent-color: var(--accent); }
.pi-pick-item .pi-ph { aspect-ratio: 1; border-radius: 4px; border: 1px solid var(--ink-subtle); background: linear-gradient(135deg, var(--bg-input), var(--bg-tint)); background-size: cover; background-position: center; }
.pi-pick-item .cap { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pi-pick-item input:checked ~ .pi-ph { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-soft); }

/* Footer + Buttons */
.pi-foot { display: flex; align-items: center; gap: 12px; margin-top: 22px; padding-top: 18px; border-top: 1px solid rgba(150,133,113,.4); flex-wrap: wrap; }
.pi-btn { font-family: var(--sans); font-size: .88rem; border-radius: 3px; padding: 9px 16px; cursor: pointer; border: 1px solid var(--ink-subtle); background: var(--bg); color: var(--ink); font-weight: 600; text-decoration: none; display: inline-block; }
.pi-btn:hover { border-color: var(--accent); color: var(--accent); }
.pi-btn.ghost { background: none; border: 0; color: var(--ink-muted); font-weight: 500; }
.pi-btn.ghost:hover { color: var(--accent); }
.pi-btn.primary { background: var(--accent); color: #fff; border-color: var(--accent); }
.pi-btn.primary:hover { color: #fff; opacity: .92; }
.pi-spacer { margin-left: auto; }
.pi-msg { font-family: var(--sans); font-size: .78rem; color: var(--ink-muted); margin: 0; width: 100%; }

/* ── Profil-Orientierungs-Tour (puppet-profile-tour.js) ───────────────────── */
.pp-tour-lock { overflow: hidden; }
.pp-tour { position: fixed; inset: 0; z-index: 9999; }
/* Dim verschwommen statt dunkel; clip-path (per JS) spart den Spot aus → Spot bleibt scharf.
   Klicks im Loch fängt der Container .pp-tour ab (liegt über dem Seiten-Element). */
.pp-tour-dim { position: absolute; inset: 0; pointer-events: none;
  background: rgba(26,21,18,.12); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
  transition: clip-path .2s ease; }
.pp-tour-spot { position: fixed; border-radius: 8px; z-index: 10000; pointer-events: none;
  box-shadow: 0 0 0 1px var(--accent), 0 0 0 5px var(--accent-soft); transition: all .2s ease; }
.pp-tour-card { position: fixed; z-index: 10001; max-width: min(340px, calc(100vw - 24px));
  background: var(--bg); color: var(--ink); border: 1px solid var(--ink); border-radius: 6px;
  padding: 16px 18px; box-shadow: 0 18px 48px rgba(0,0,0,.4); font-family: var(--sans); }
.pp-tour-h { font-family: var(--serif); font-size: 1.1rem; color: var(--ink-strong); margin: 0 0 6px; }
.pp-tour-b { font-size: .88rem; color: var(--ink-muted); margin: 0 0 16px; line-height: 1.5; }
.pp-tour-foot { display: flex; align-items: center; gap: 10px; }
.pp-tour-foot .pp-tour-count { font-size: .76rem; color: var(--ink-subtle); margin-left: auto; }
.pp-tour-foot button { font-family: var(--sans); font-size: .84rem; border-radius: 3px; cursor: pointer;
  padding: 7px 13px; border: 1px solid var(--ink-subtle); background: var(--bg); color: var(--ink); }
.pp-tour-skip { border: 0 !important; background: none !important; color: var(--ink-muted) !important; padding-left: 0 !important; }
.pp-tour-skip:hover { color: var(--accent) !important; }
.pp-tour-primary { background: var(--accent) !important; color: #fff !important; border-color: var(--accent) !important; font-weight: 600; }
@media (prefers-reduced-motion: reduce) { .pp-tour-spot, .pp-tour-dim { transition: none; } }

/* ==========================================================================
   Anzeigen-Serife (Fraunces) für Überschriften
   --------------------------------------------------------------------------
   Muss am DATEIENDE stehen: Die Selektoren unten setzen weiter oben bereits
   font-family: var(--serif). Bei gleicher Spezifität gewinnt der spätere
   Block — eine blosse `h1, h2, h3`-Regel würde gegen `.pe-headline` & Co.
   verlieren, egal wo sie steht.

   Fliesstext bleibt bewusst Georgia (--serif): Fraunces ist eine Display-
   Serife mit hohem Strichkontrast und ermuedet ueber lange Biografien.
   ========================================================================== */
h1, h2, h3,
.puppet-app .logo,
.puppet-directory .card__name,
.pe-headline,
.pe-modal__title,
.pe-chapter-title,
.pe-section__title,
.pe-form .production-card__title,
.reel-card__title, .work-card__title, .production-card__title,
.media-subsection h3,
.pp-headline-sub,
.pp-block__title,
.pp-production__title,
.pp-contact-dialog__title,
.pp-profile-page .production-card__title,
.pp-profile-editor-subhead h3,
.pp-profile-v2-section__head h2,
.pp-profile-v2-hero__copy h2,
.pp-profile-v2-section--kontakt h2,
.pp-concierge-title,
.sp-feedback-card__title,
.sp-ob__title,
.pi-title {
  font-family: var(--display);
}
/* Bewusst NUR font-family: Mehrere dieser Selektoren tragen eine eigene,
   gesetzte Laufweite (.media-subsection h3 = 0.08em fuer ein Versalien-Label,
   .pp-profile-v2-section__head h2 = 0.01em). Ein pauschales letter-spacing
   haette die ueberschrieben und die Labels zusammengezogen. */

/* --- Rubriken/Spezialisierungen (Plan 2026-08-29) ----------------------- */
.sp-dir-rubriken { margin-top: 10px; }
.sp-pill--rubrik { font-size: 0.85em; opacity: 0.9; }
.pc-still__spez {
  display: inline-block;
  margin: 2px 6px 0 0;
  padding: 1px 8px;
  border: 1px solid var(--sp-accent, currentColor);
  border-radius: 999px;
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--sp-accent, inherit);
}
.pp-profile-v2-checklist {
  margin-top: 6px;
  padding: 10px 12px;
  border: 1px solid var(--sp-line, rgba(0,0,0,0.15));
  border-radius: 8px;
  background: var(--sp-bg, #fff);
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-width: 320px;
}
.pp-profile-v2-checklist__row { display: flex; align-items: center; gap: 6px; font-size: 14px; cursor: pointer; }
.pp-profile-v2-checklist__hint { font-size: 12px; color: #b4232a; }
.pp-profile-v2-checklist__actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; }
.pp-profile-v2-checklist__actions button {
  appearance: none;
  border: 1px solid var(--sp-line, rgba(0,0,0,0.2));
  border-radius: 6px;
  background: transparent;
  padding: 4px 12px;
  font: inherit;
  font-size: 13px;
  cursor: pointer;
}
.pp-profile-v2-checklist__actions button:last-child { border-color: var(--sp-accent, currentColor); color: var(--sp-accent, inherit); }
.sp-ob__checks { display: flex; flex-direction: column; gap: 10px; margin: 6px 0 4px; text-align: left; }
.sp-ob__check { display: flex; align-items: center; gap: 8px; font-size: 15px; cursor: pointer; }

/* ============================================================ *
 *  Wuensche 2026-08-29 (Plan docs/plans/2026-08-29-puppet-wuensche.md)
 * ============================================================ */

/* 1) Viererreihe: siehe .pp-profile-v2-scroller .productions-grid--public
   weiter oben — gilt seit dem Feinschliff fuer Bearbeiten UND oeffentlich. */

/* 3) Play-Kreis mittig auf der Projektkarte — ersetzt den kleinen
   Video-Chip unten rechts (Schaufenster 2026-08-29, beim Rueckbau
   2026-08-30 behalten). Video -> Lightbox/Details, Mediathek-Link -> ↗. */
.pp-profile-page .production-card__play {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 3;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 2px;
  width: 62px;
  height: 62px;
  padding: 0 0 0 4px; /* ▶ optisch zentrieren */
  border: 1px solid rgba(255, 255, 255, 0.55);
  border-radius: 50%;
  background: rgba(10, 7, 5, 0.55);
  color: #fff;
  font-size: 1.3rem;
  line-height: 1;
  cursor: pointer;
  text-decoration: none;
  transition: background 0.2s ease, border-color 0.2s ease;
}
.pp-profile-page .production-card__play:hover,
.pp-profile-page .production-card__play:focus-visible {
  background: rgba(10, 7, 5, 0.82);
  border-color: rgba(255, 255, 255, 0.85);
}
.pp-profile-page .production-card__play-count,
.pp-profile-page .production-card__play-ext {
  font-size: 0.72rem;
  font-family: var(--sans);
}

/* 5) Sichtbarkeits-Schalter prominent am Kopf der Hauptspalte. */
.pp-profile-visibility {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin: 14px 0 30px;
}
.pp-profile-visibility__row {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  padding: 12px 16px;
  border: 1px solid rgba(26, 21, 18, 0.14);
  border-left: 3px solid var(--accent);
  background: rgba(255, 250, 241, 0.6);
}
.pp-profile-visibility__label {
  font-family: var(--sans);
  font-weight: 600;
  font-size: 0.92rem;
}
.pp-profile-visibility__status {
  font-family: var(--sans);
  font-size: 0.88rem;
  color: var(--ink-muted);
}
.pp-profile-visibility__btn {
  margin-left: auto;
  appearance: none;
  cursor: pointer;
  font-family: var(--sans);
  font-size: 0.85rem;
  padding: 8px 16px;
  border-radius: 4px;
  border: 1px solid rgba(26, 21, 18, 0.25);
  background: #fff;
  color: inherit;
}
/* Noch nicht oeffentlich: der Schalter soll ins Auge fallen. */
.pp-profile-visibility__row[data-public="0"] {
  background: rgba(180, 99, 46, 0.08);
}
.pp-profile-visibility__row[data-public="0"] .pp-profile-visibility__status {
  color: var(--accent);
  font-weight: 600;
}
.pp-profile-visibility__row[data-public="0"] .pp-profile-visibility__btn {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
.pp-profile-visibility__btn:disabled {
  opacity: 0.5;
  cursor: progress;
}

/* Werke + Werkstatt sind direkte Shell-Grid-Items (Blade-Umbau 2026-08-29) —
   auch im Basis-Theme volle Breite als eigene Zeile. */
.pp-profile-shell > .pp-profile-v2-section--werke,
.pp-profile-shell > .pp-profile-v2-section--werkstatt { grid-column: 1 / -1; }

/* Fotografen-Name unter dem runden Portraet (Wurf 14, 2026-08-30). */
.pp-profile-portrait-credit {
  margin: 0.35rem 0 0.6rem;
  font-size: 0.74rem;
  color: var(--ink-muted);
  text-align: center;
}
.pp-profile-portrait-credit__label { margin-right: 0.25em; }

/* @-Mentions (Wurf 15, 2026-08-30): Link im Text + Autocomplete-Menue. */
.puppet-mention {
  color: inherit;
  text-decoration: underline;
  text-decoration-color: rgba(111, 75, 38, 0.55);
  text-underline-offset: 2px;
}
.puppet-mention-menu {
  position: absolute;
  z-index: 1200;
  display: flex;
  flex-direction: column;
  min-width: 200px;
  padding: 0.25rem;
  background: #fff;
  border: 1px solid rgba(26, 21, 18, 0.15);
  border-radius: 8px;
  box-shadow: 0 8px 24px rgba(26, 21, 18, 0.14);
}
.puppet-mention-menu__item {
  border: 0;
  background: none;
  text-align: left;
  padding: 0.4rem 0.6rem;
  border-radius: 6px;
  cursor: pointer;
  font: inherit;
  color: #1a1512;
}
.puppet-mention-menu__item.is-active,
.puppet-mention-menu__item:hover { background: rgba(111, 75, 38, 0.12); }

/* Sammelbecken-Admin: Aktionen unterm Material (Wurf 17, 2026-08-30). */
.pi-material-actions { display: flex; gap: 0.5rem; margin-top: 1.2rem; flex-wrap: wrap; align-items: center; }
.pi-danger { color: #8c2f22; }
.pi-danger:hover { color: #6e2015; }

/* ============================================================ *
 *  iOS-Zoom-Riegel bei Eingabefeldern (2026-08-31)
 *
 *  Safari auf iOS zoomt die GANZE Seite rein, sobald ein Feld mit
 *  font-size < 16px den Fokus bekommt — und zoomt danach nicht von
 *  selbst wieder raus. Der Nutzer sitzt in einer verschobenen Seite.
 *
 *  Der naheliegende "Fix" waere maximum-scale=1 im viewport-Meta
 *  (layouts/puppet.blade.php:5). Der ist bewusst NICHT gewaehlt: er
 *  verbietet Zoom komplett und sperrt damit sehbehinderte Nutzer aus.
 *
 *  Deshalb hier: die betroffenen Felder bekommen auf schmalen Fenstern
 *  16px. Auf dem Desktop bleibt die feinere Abstufung unangetastet.
 *  Eine Sammelregel statt fuenf Einzelaenderungen, damit der Grund an
 *  EINER Stelle steht. Sie muss am Dateiende stehen: gleiche
 *  Spezifitaet wie die Originalregeln, gewinnt also nur ueber die
 *  Reihenfolge.
 *
 *  Gemessen 2026-08-31 auf screenpuppets.aicappella.com, 375px:
 *  Meldeformular 15px, Melde-Thread 13,3px, Melde-Karte 14px,
 *  Sammelbecken-Notiz 14,4px, Onboarding-Wizard 14,7px.
 *  Nicht betroffen: das Verzeichnis-Suchfeld (puppet-cinema.css:126
 *  setzt dort font: inherit -> 16px).
 * ============================================================ */
@media (max-width: 768px) {
  .sp-feedback-field input,
  .sp-feedback-field textarea,
  .sp-feedback-comment-form__input,
  .sp-feedback-card__replyinput,
  .pp-intake-note,
  .pi-field input,
  .pi-field textarea {
    font-size: 16px;
  }
}
