/* =====================================================================
   NATOKGHOR — DARK PROFILE THEME
   Used by group.html (public profile) and group-edit.html (dashboard).
   Merged from the uploaded Open Space design.
   ===================================================================== */
@import url('https://fonts.googleapis.com/css2?family=Tiro+Bangla&display=swap');
.dk{
  --read:'Playfair Display','Tiro Bangla',Georgia,serif;
  --bg:#0c0c0c; --surface:#161616; --surface-2:#1f1f1f; --border:#2a2a2a; --border-strong:#3a3a3a;
  --maroon:#922B3E; --maroon-dark:#6e1f2e; --gold:#D4AF37; --gold-dim:#a88820;
  /* --gold is the ink gold (light mode darkens it to clear 4.5:1 on cream), so
     anything that FILLS a surface with gold and puts dark type on it uses this
     one instead — otherwise those chips go dark-on-dark in light mode. */
  --gold-fill:#D4AF37;
  /* --text-dim was #6a6a6a: 3.3:1 on --surface, which is what made the small
     "Duration" / "Showtimes" labels read as barely there */
  --text:#f5f1e8; --text-muted:#9a9a9a; --text-dim:#8b857d;
  /* Status and form colours for the dashboards. They live here rather than as
     literals in admin/group-edit/person-edit because those pages set them from
     inline style attributes, which no stylesheet can override — a var() in an
     inline style, though, resolves against whatever the theme declares. */
  --danger:#ff9b9b; --danger-strong:#ff6b6b; --danger-bg:#3a1414; --danger-bd:#6b2222;
  --ok:#4CC08A; --warn:#D9A24A;
  --input-bg:#1a1a1a; --input-ink:#eee;
  --track:rgba(245,241,232,.12);   /* unfilled part of a meter / progress bar */
  background:var(--bg); color:var(--text);
  font-family:'Inter',system-ui,sans-serif; min-height:100vh;
  /* the dashboards don't load style.css, so they declare it here too */
  color-scheme:dark;
}
/* the dashboards don't load style.css, which is where the public pages declare
   this on :root — repeat it so their scrollbars and native widgets follow too */
html[data-theme="dark"]{color-scheme:dark;}
html[data-theme="light"]{color-scheme:light;}
html[data-theme="light"] .dk{color-scheme:light;}

/* ---- the date / time picker button -------------------------------------
   The browser draws this glyph itself in a shadow root, and on the dark
   dashboards it came out near-black on a near-black field — the calendar
   beside "Add a date" looked like it wasn't there. Inverting it with a filter
   is not safe: `color-scheme: dark` above already asks Chrome to draw it
   light, so on a browser that honours both you'd invert a white glyph back to
   black. So the native one is made transparent (opacity:0 keeps it clickable,
   unlike display:none) and the input paints its own icon in the same spot.
   Deterministic in every browser and both themes. */
/* body.dk rather than .dk so this outweighs `.dk .field input` and the
   `.dtp-mini` rules datepick.js injects, both of which set the background
   shorthand and would otherwise wipe the icon out. */
body.dk input[type="date"],
body.dk input[type="time"],
body.dk input[type="datetime-local"],
body.dk input[type="month"]{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23E2C45C' stroke-width='2' stroke-linecap='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M3 10h18M8 3v4M16 3v4'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  /* sits on top of the real button. opacity:0 does not affect layout, so the
     native indicator still reserves its own space at the end of the field and
     the two line up — no extra padding, or the icon would drift off it. */
  background-position:right 11px center;
  background-size:15px 15px;
}
body.dk input[type="date"]::-webkit-calendar-picker-indicator,
body.dk input[type="time"]::-webkit-calendar-picker-indicator,
body.dk input[type="datetime-local"]::-webkit-calendar-picker-indicator,
body.dk input[type="month"]::-webkit-calendar-picker-indicator{
  opacity:0;cursor:pointer;
}
html[data-theme="light"] body.dk input[type="date"],
html[data-theme="light"] body.dk input[type="time"],
html[data-theme="light"] body.dk input[type="datetime-local"],
html[data-theme="light"] body.dk input[type="month"]{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237E6110' stroke-width='2' stroke-linecap='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M3 10h18M8 3v4M16 3v4'/%3E%3C/svg%3E");
}
.dk .display{font-family:'Playfair Display',Georgia,serif;letter-spacing:-0.01em;}
.dk .bn{font-family:'Noto Sans Bengali','Hind Siliguri',sans-serif;}
.dk .wrap{max-width:1000px;margin:0 auto;padding:0 1.25rem;}
/* :where() so this weighs nothing. As `.dk a` it tied with .menu-pop a,
   .nav-links a, .ng-crumbs a and .f-links a in style.css and — loading second —
   won, dragging the shared nav, breadcrumbs and footer to the page's text
   colour. On light mode that painted the ☰ menu's links near-white on a cream
   popup, so the menu opened empty. Page content still picks this up. */
:where(.dk) a{color:inherit;text-decoration:none;}
.dk .icon{width:16px;height:16px;flex-shrink:0;}

/* hero */
.dk .hero{background:linear-gradient(180deg,#141414,#0c0c0c);border-bottom:1px solid var(--border);padding:2.4rem 0 2rem;}
.dk .hero-inner{display:flex;gap:1.6rem;align-items:flex-start;flex-wrap:wrap;}
.dk .theatre-avatar{width:96px;height:96px;border-radius:50%;background:var(--maroon);display:flex;align-items:center;justify-content:center;flex-shrink:0;border:2px solid var(--gold);}
.dk .theatre-avatar .initials{font-family:'Playfair Display',serif;font-size:2.2rem;font-weight:700;color:var(--text);}
/* contain, never cover — a round frame filled by a wide wordmark cropped the
   ends clean off. No padding: logos sit edge to edge as they were designed. */
.dk .theatre-avatar img{width:100%;height:100%;border-radius:50%;object-fit:contain;}
.dk .hero-meta{flex:1;min-width:260px;}
.dk .eyebrow{display:flex;align-items:center;gap:7px;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--gold);font-weight:600;margin-bottom:.5rem;}
.dk .verified-dot{width:8px;height:8px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 3px rgba(212,175,55,.2);}
.dk .theatre-name{font-size:2.4rem;font-weight:700;line-height:1.05;}
.dk .theatre-name-bn{font-size:1rem;color:var(--text-muted);margin-top:.2rem;}
.dk .theatre-university{font-size:1.15rem;font-weight:600;color:var(--gold);margin-top:.35rem;line-height:1.3;}
.dk .theatre-tagline{font-size:.95rem;color:var(--text-muted);line-height:1.6;margin:.9rem 0;max-width:640px;}
.dk .hero-info{display:flex;gap:1.4rem;flex-wrap:wrap;margin-bottom:1.1rem;}
.dk .hero-info-item{display:flex;align-items:center;gap:7px;font-size:.82rem;color:var(--text-muted);}
.dk .hero-actions{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center;margin-bottom:1.3rem;}
/* Half the buttons on these pages are <a> and half <button>: an anchor inherits
   the page's 1.55 line-height while a button resets to `normal`, so identical
   padding produced different boxes — a 33px review link beside a 30px share
   button in the hero, and the very same .ng-share at 36.3px in the hero but
   38px inside a review card. One line-height for every .btn settles it.
   No min-height here: the dashboards' compact .btn variants are ~24px by
   design, and a floor would inflate every one of them. */
.dk .btn{line-height:1.2;}
/* The hero row is the one place buttons must read as a set, so it also gets a
   floor and centred labels. Width still follows the label — that's the point. */
.dk .hero-actions .btn{min-height:34px;box-sizing:border-box;justify-content:center;}
.dk .btn{display:inline-flex;align-items:center;gap:7px;padding:9px 18px;border-radius:7px;font-size:.85rem;font-weight:600;cursor:pointer;font-family:inherit;border:1px solid transparent;transition:all .15s;}
.dk .btn-primary{background:var(--maroon);color:#fff;}
.dk .btn-primary:hover{background:var(--maroon-dark);}
.dk .btn-outline{background:transparent;border-color:var(--border-strong);color:var(--text);}
.dk .btn-outline:hover{border-color:var(--gold);color:var(--gold);}
.dk .btn-gold{background:var(--gold);color:#0c0c0c;}
.dk .btn-gold:hover{background:var(--gold-dim);}

/* ---- action row under the poster (production page + group profile) ----
   These were plain .btn-outline: fully transparent, which next to the filled
   maroon primary read as disabled rather than secondary. They get a raised
   surface and a gold label here, so they look like the theme instead of like
   holes in it. Scoped to .hero-actions on purpose — the dashboards keep the
   quiet ghost button, which is right for a dense form toolbar. */
.dk .hero-actions .btn-outline{background:var(--surface-2);border-color:var(--border-strong);color:var(--gold);}
.dk .hero-actions .btn-outline:hover{background:#2b2b2c;border-color:var(--gold);color:var(--gold-light,#E2C45C);}
.dk .hero-actions .btn-outline:focus-visible{outline:2px solid var(--gold);outline-offset:2px;}
/* Saved / Following: the state has to be readable at a glance, not just in the
   label text, so the button fills gold and inverts its ink. */
.dk .hero-actions .btn-outline.is-on{background:var(--gold);border-color:var(--gold);color:#221a0c;}
.dk .hero-actions .btn-outline.is-on:hover{background:var(--gold-dim);border-color:var(--gold-dim);color:#1a1206;}
.dk .rating-bar{display:flex;gap:1.4rem;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1rem 1.2rem;max-width:480px;}
.dk .rating-score{display:flex;align-items:baseline;gap:3px;}
.dk .rating-score .num{font-size:2.1rem;font-weight:700;color:var(--gold);}
.dk .rating-score .denom{font-size:.9rem;color:var(--text-dim);}
.dk .rating-stars{color:var(--gold);font-size:.95rem;letter-spacing:2px;}
.dk .rating-meta{font-size:.78rem;color:var(--text-muted);line-height:1.5;}
.dk .rating-meta strong{color:var(--text);}

/* tabs */
.dk .tabs{border-bottom:1px solid var(--border);position:sticky;top:0;background:rgba(12,12,12,.92);backdrop-filter:blur(8px);z-index:50;}
.dk .tabs-inner{max-width:1000px;margin:0 auto;padding:0 1.25rem;display:flex;gap:1.6rem;overflow-x:auto;scrollbar-width:none;}
.dk .tabs-inner::-webkit-scrollbar{display:none;}
.dk .tab{padding:14px 0;font-size:.85rem;color:var(--text-muted);cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent;transition:all .15s;}
.dk .tab:hover{color:var(--text);}
.dk .tab.active{color:var(--gold);border-bottom-color:var(--gold);}

/* sections */
.dk .section{padding:2.2rem 0;}
.dk .section-title{font-family:'Playfair Display',serif;font-size:1.6rem;font-weight:700;margin-bottom:.2rem;}
.dk .section-subtitle{font-size:.88rem;color:var(--text-muted);margin-bottom:1.4rem;}

/* stats */
.dk .stats{display:flex;gap:2.4rem;flex-wrap:wrap;border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:1.4rem 0;}
.dk .stat-num{font-family:'Playfair Display',serif;font-size:1.9rem;font-weight:700;color:var(--gold);}
.dk .stat-label{font-size:.74rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;}

/* ticket stub */
.dk .ticket{display:flex;background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden;flex-wrap:wrap;}
.dk .ticket-main{flex:1;min-width:280px;padding:1.6rem 1.8rem;}
.dk .ticket-eyebrow{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gold);font-weight:600;}
.dk .ticket-title{font-size:1.7rem;font-weight:700;margin:.3rem 0;}
.dk .ticket-author{font-size:.86rem;color:var(--text-muted);margin-bottom:.6rem;}
.dk .ticket-license{display:inline-block;font-size:.72rem;color:var(--gold);border:1px solid var(--gold-dim);border-radius:20px;padding:3px 11px;margin-bottom:1rem;}
.dk .ticket-details{display:flex;gap:2rem;flex-wrap:wrap;}
.dk .ticket-detail .label{font-size:.7rem;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;margin-bottom:2px;}
.dk .ticket-detail .value{font-size:.88rem;color:var(--text);line-height:1.4;}
/* a filled maroon block, so the muted/dim tokens have to be on-dark here even
   on the dark theme — #9a9a9a on #922B3E is 2.8:1 */
.dk .ticket-stub{--text-muted:rgba(255,255,255,.8);--text-dim:rgba(255,255,255,.72);--gold-ink:#F4E3AE;
  background:var(--maroon);color:#fff;padding:1.6rem;display:flex;flex-direction:column;justify-content:space-between;gap:1.4rem;min-width:170px;position:relative;}
.dk .ticket-stub::before{content:"";position:absolute;left:-8px;top:0;bottom:0;width:16px;background:radial-gradient(circle at left,transparent 0 7px,var(--maroon) 7px);background-size:16px 22px;}
.dk .ticket-stub-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;opacity:.8;}
.dk .ticket-stub-date .day{font-family:'Playfair Display',serif;font-size:2.6rem;font-weight:700;line-height:1;}
.dk .ticket-stub-date .month{font-size:.8rem;opacity:.85;}
.dk .ticket-cta{background:var(--gold);color:#0c0c0c;text-align:center;padding:9px;border-radius:7px;font-weight:700;font-size:.82rem;}
/* Free entry states a fact; it must not read as the gold button beside it.
   Named twice so it outranks .ticket-cta wherever this sits in the file. */
.dk .ticket-cta.ticket-cta-free{background:rgba(76,192,138,.16);color:#7FDCAE;
  border:1px solid rgba(76,192,138,.55);cursor:default;pointer-events:none;}
html[data-theme="light"] .dk .ticket-cta.ticket-cta-free{background:rgba(31,110,74,.1);color:#1F6E4A;}
/* Tickets at the hall: also a fact, not a button — nothing here to click */
.dk .ticket-cta.ticket-cta-hall{background:transparent;color:var(--gold);border:1px solid var(--gold);cursor:default;pointer-events:none;}

/* about */
.dk .about-grid{display:grid;grid-template-columns:1.7fr 1fr;gap:1.6rem;}
.dk .about-text p{font-size:.92rem;line-height:1.7;margin-bottom:.9rem;}
.dk .about-text .muted{color:var(--text-muted);}
.dk .info-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.2rem 1.3rem;height:fit-content;}
.dk .info-row{display:flex;justify-content:space-between;padding:.55rem 0;border-bottom:1px solid var(--border);font-size:.84rem;}
.dk .info-row:last-child{border-bottom:none;}
.dk .info-row .label{color:var(--text-muted);}

/* productions */
.dk .productions{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:1.1rem;}
.dk .production-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden;transition:all .2s;}
.dk .production-card:hover{border-color:var(--gold-dim);transform:translateY(-3px);}
/* the whole card opens the play, so it has to look and focus like a link */
.dk .production-card[data-card-href]{cursor:pointer;}
.dk .production-card[data-card-href]:focus-visible{outline:2px solid var(--gold);outline-offset:2px;}
@media (prefers-reduced-motion:reduce){.dk .production-card{transition:none;}.dk .production-card:hover{transform:none;}}
.dk .production-cover{height:120px;position:relative;display:flex;align-items:flex-end;padding:10px;}
.dk .production-cover.c1{background:linear-gradient(135deg,#922B3E,#4a1622);}
.dk .production-cover.c2{background:linear-gradient(135deg,#2a4a6e,#13243a);}
.dk .production-cover.c3{background:linear-gradient(135deg,#6e5a1f,#3a2f10);}
.dk .production-cover.c4{background:linear-gradient(135deg,#2a6e5a,#103a2f);}
.dk .production-cover.c5{background:linear-gradient(135deg,#5a2a6e,#2f103a);}
.dk .production-cover.c6{background:linear-gradient(135deg,#6e3a1f,#3a1f10);}
.dk .production-cover.c7{background:linear-gradient(135deg,#3a3a3a,#1f1f1f);}
.dk .premiere-badge{position:absolute;top:10px;left:10px;font-size:.66rem;background:rgba(0,0,0,.5);color:#fff;padding:3px 9px;border-radius:12px;backdrop-filter:blur(4px);}
.dk .production-rating{position:absolute;top:10px;right:10px;font-size:.72rem;font-weight:700;background:rgba(0,0,0,.5);padding:3px 9px;border-radius:12px;backdrop-filter:blur(4px);}
.dk .production-body{padding:.9rem 1rem 1.1rem;}
.dk .production-title{font-size:1rem;font-weight:700;}
.dk .production-author{font-size:.78rem;color:var(--text-muted);margin:.15rem 0 .5rem;}
.dk .production-meta{display:flex;justify-content:space-between;font-size:.72rem;color:var(--text-dim);gap:8px;}

/* reviews */
.dk .reviews-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;}
.dk .review{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.1rem 1.2rem;}
.dk .review-head{display:flex;align-items:center;gap:10px;margin-bottom:.6rem;}
/* the disc is a filled maroon in both themes, so its initial is always light —
   inheriting --text put dark ink on maroon in light mode, 1.6:1 and unreadable */
.dk .review-av{width:36px;height:36px;border-radius:50%;background:var(--maroon);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.85rem;font-weight:600;}
.dk .review-author{font-size:.85rem;font-weight:600;}
.dk .review-role{font-size:.7rem;color:var(--gold);}
.dk .review-stars{color:var(--gold);font-size:.85rem;margin-left:auto;}
.dk .review-text{font-family:var(--read);font-size:.95rem;color:var(--text-muted);line-height:1.6;white-space:pre-line;}

/* workshops */
.dk .workshop-card{display:flex;gap:1.6rem;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.4rem 1.6rem;flex-wrap:wrap;}
.dk .workshop-eyebrow{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gold);font-weight:600;}
.dk .workshop-title{font-size:1.3rem;font-weight:700;margin:.2rem 0 .8rem;}
.dk .workshop-details{display:flex;gap:1.8rem;flex-wrap:wrap;margin-bottom:.8rem;}
.dk .workshop-detail .label{font-size:.7rem;color:var(--text-dim);text-transform:uppercase;margin-bottom:2px;}
.dk .workshop-detail .value{font-size:.85rem;}

/* founders / photos */
.dk .founders{display:flex;gap:2rem;flex-wrap:wrap;}
.dk .founder{display:flex;align-items:center;gap:12px;}
.dk .founder-photo{width:52px;height:52px;border-radius:50%;background:var(--surface-2);border:1px solid var(--border-strong);display:flex;align-items:center;justify-content:center;font-size:1rem;font-weight:600;overflow:hidden;}
.dk .founder-photo img{width:100%;height:100%;object-fit:cover;}
.dk .founder-name{font-size:1rem;font-weight:700;}
.dk .founder-role{font-size:.78rem;color:var(--text-muted);}
.dk .photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.8rem;}
.dk .photo{aspect-ratio:4/3;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;overflow:hidden;}
.dk .photo img{width:100%;height:100%;object-fit:cover;}

/* footer */
.dk .foot{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--border);padding:1.6rem 0;font-size:.8rem;color:var(--text-muted);flex-wrap:wrap;gap:1rem;}
.dk .socials{display:flex;gap:.6rem;}
.dk .social{width:36px;height:36px;border-radius:50%;border:none;display:flex;align-items:center;justify-content:center;transition:transform .15s,box-shadow .15s;}
.dk .social:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.38);}
.dk .social-fb{background:#1877F2;}
.dk .social-ig{background:radial-gradient(circle at 28% 100%,#FEDA75 0%,#FA7E1E 22%,#D62976 48%,#962FBF 72%,#4F5BD5 100%);}
.dk .social-wa{background:#25D366;}
.dk .social-yt{background:#FF0000;}

/* ===== DASHBOARD (editor) specific ===== */
.dk .dash-head{background:linear-gradient(180deg,#141414,#0c0c0c);border-bottom:1px solid var(--border);padding:1.6rem 0;}
.dk .dash-title{font-family:'Playfair Display',serif;font-size:1.5rem;font-weight:700;color:var(--gold);}
.dk .dash-sub{font-size:.82rem;color:var(--text-muted);}
.dk .ge-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.4rem;margin-bottom:1.2rem;}
.dk .ge-card h3{font-family:'Playfair Display',serif;font-size:1.15rem;color:var(--text);margin-bottom:.2rem;}
.dk .ge-card .ge-sub{font-size:.76rem;color:var(--text-muted);margin-bottom:1rem;}
.dk .ge-row{display:grid;grid-template-columns:1fr 1fr;gap:.7rem;}
.dk .field{margin-bottom:.8rem;}
.dk .field label{display:block;font-size:.74rem;font-weight:600;color:var(--text-muted);margin-bottom:4px;}
.dk .field input,.dk .field select,.dk .field textarea{width:100%;padding:10px 12px;background:var(--bg);border:1px solid var(--border-strong);border-radius:7px;font-size:.85rem;font-family:inherit;color:var(--text);outline:none;}
.dk .field input:focus,.dk .field select:focus,.dk .field textarea:focus{border-color:var(--gold);}
.dk .ge-item{background:var(--bg);border:1px solid var(--border);border-radius:9px;padding:.9rem;padding-right:5.2rem;margin-bottom:.7rem;position:relative;}
.dk .ge-item .ge-edit{position:absolute;top:.55rem;right:.6rem;background:none;border:none;color:var(--gold);font-size:.72rem;cursor:pointer;}
.dk .ge-item .ge-del{position:absolute;top:2rem;right:.6rem;background:none;border:none;color:var(--danger);font-size:.72rem;cursor:pointer;}
.dk .ge-item .ge-del[data-sched],.dk .ge-item .ge-del[data-idx]{top:.55rem;}
.dk .ge-item-title{font-weight:700;font-size:.88rem;}
.dk .ge-item-meta{font-size:.72rem;color:var(--text-muted);}
.dk .ge-add{background:none;border:1.5px dashed var(--border-strong);color:var(--gold);border-radius:9px;padding:.7rem;width:100%;font-size:.82rem;font-weight:600;cursor:pointer;font-family:inherit;}
.dk .ge-add:hover{border-color:var(--gold);}
.dk .rbar{display:inline-block;width:84px;height:8px;border-radius:5px;background:rgba(245,241,232,.14);overflow:hidden;vertical-align:middle;}
.dk .rbar-fill{display:block;height:100%;border-radius:5px;}
.dk .rbar-num{font-size:.8rem;font-weight:700;margin-left:6px;vertical-align:middle;}
.dk .ge-mini{display:none;border-top:1px solid var(--border);margin-top:.8rem;padding-top:.8rem;}
.dk .ge-mini.open{display:block;}
.dk .ge-saved{display:none;color:var(--ok);font-size:.82rem;font-weight:600;margin-top:.5rem;}
.dk .upload-hint{font-size:.7rem;color:var(--text-dim);margin-top:3px;}

/* ---- poster shapes: one chip per framing (original / portrait / wide / square) ----
   A chip turns gold with a ✓ once that shape has been framed. */
.dk .pf-row{display:flex;flex-wrap:wrap;gap:.4rem;margin:.55rem 0 .2rem;}
.dk .pf-chip{background:transparent;border:1px solid var(--border);color:var(--text-muted);border-radius:999px;padding:.34rem .8rem;font-size:.74rem;font-family:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:.32rem;transition:border-color .15s,color .15s;}
.dk .pf-chip:hover{border-color:var(--gold);color:var(--gold);}
.dk .pf-chip small{font-size:.62rem;opacity:.65;}
.dk .pf-chip.set{border-color:var(--gold);color:var(--gold);background:rgba(212,175,55,.1);}
.dk .pf-chip.set::before{content:"✓";font-size:.7rem;}
.dk .pf-chip:disabled{opacity:.45;cursor:default;}
.dk .pf-chip:disabled:hover{border-color:var(--border);color:var(--text-muted);}

@media(max-width:640px){
  .dk .about-grid{grid-template-columns:1fr;}
  .dk .ge-row{grid-template-columns:1fr;}
  .dk .theatre-name{font-size:1.9rem;}
}

/* =====================================================================
   LIGHT MODE
   Everything above is written against the tokens declared on .dk, so the
   whole sheet re-themes by re-pointing them — the alternative was that
   .dk kept forcing #f5f1e8 text while style.css turned the page cream,
   which is what made the production and group pages read as blank.
   The rules after the token block are the handful of places that
   hardcoded a dark hex instead of using a token.
   ===================================================================== */
html[data-theme="light"] .dk{
  --bg:#F5F0E8; --surface:#FFFDF8; --surface-2:#F0EADF;
  /* --border-strong outlines the form fields and the ghost buttons, so on cream
     it has to clear 3:1 against both the card and the page — the first pass at
     #CDC3AD sat at 1.7 and the fields had no visible edge. --border stays quiet;
     it is only ever a divider. */
  --border:#DED5C0; --border-strong:#968B72;
  --maroon:#8B1A1A; --maroon-dark:#5C0F0F;
  --gold:#7E6110; --gold-dim:#6E540C; --gold-fill:#C9961A;
  --text:#2A2622; --text-muted:#6B6459; --text-dim:#6F695E;
  --danger:#B3172F; --danger-strong:#96101F; --danger-bg:#FDECEC; --danger-bd:#E7B0B0;
  --ok:#12734B; --warn:#8A5A10;
  --input-bg:#FFFFFF; --input-ink:#2A2622;
  --track:rgba(42,38,34,.14);
}
/* --gold above is the ink gold, so surfaces that FILL with gold need the
   brighter brand gold back, with dark type on it */
html[data-theme="light"] .dk :is(.btn-gold,.ticket-cta,.hero-actions .btn-outline.is-on,
  .badge-managed,.ge-draft button.primary){
  background:var(--gold-fill);border-color:var(--gold-fill);color:#221a0c;}
html[data-theme="light"] .dk :is(.btn-gold:hover,.hero-actions .btn-outline.is-on:hover){
  background:#B48514;border-color:#B48514;color:#221a0c;}
html[data-theme="light"] .dk .verified-dot{background:#C9961A;box-shadow:0 0 0 3px rgba(201,150,26,.25);}
html[data-theme="light"] .dk .pf-chip.set{background:rgba(201,150,26,.16);}

/* hardcoded dark fills */
/* .hero is a maroon band on the ordinary pages, so style.css both paints it
   white-on-dark and re-points --ink/--gray to their on-dark values there. A
   .dk hero is a light band instead, so it has to take all of that back. */
html[data-theme="light"] .dk .hero{
  background:linear-gradient(180deg,#FFFDF8,#F5F0E8);
  color:var(--text);
  --ink:#2A2622; --gray:#6B6459; --gold-ink:#7E6110;
}
html[data-theme="light"] .dk .dash-head{background:linear-gradient(180deg,#FFFDF8,#F5F0E8);}
html[data-theme="light"] .dk .tabs{background:rgba(255,253,248,.92);}
html[data-theme="light"] .dk .hero-actions .btn-outline:hover{background:#E9E2D5;}
html[data-theme="light"] .dk .rbar{background:rgba(42,38,34,.14);}
/* the production-card cover keeps its dark gradient, so the chips on top of
   it stay light-on-dark whatever the page theme is */
html[data-theme="light"] .dk .production-rating{color:#fff;}
/* ticket stub is a filled maroon block in both themes */
html[data-theme="light"] .dk .ticket-stub{color:#fff;}
