/* ── The Night of Bethlehem · "Light in the Darkness" ── */
:root{
  --night:#0a0e1a; --night2:#111726; --panel:#161d30; --panel2:#1b2338;
  --lamp:#e8b563; --lamp-soft:#f2cf8a; --ember:#c9702f;
  --star:#f5ecd8; --ink:#e9e4d6; --muted:#95a0bd; --line:rgba(245,236,216,.12);
  --ok:#7fc8a0; --warn:#e8b563;
  --serif:'Noto Serif SC','Songti SC',Georgia,'Times New Roman',serif;
  --display:'Cinzel','Noto Serif SC',Georgia,serif;
  --sans:'Noto Sans SC','PingFang SC','Microsoft YaHei',-apple-system,'Segoe UI',Roboto,sans-serif;
  --wrap:960px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:var(--sans);color:var(--ink);background:var(--night);line-height:1.65;
  -webkit-font-smoothing:antialiased;min-height:100vh;overflow-x:hidden}
body.is-home{background:linear-gradient(180deg,#06090f 0%,#0a0e1a 38%,#12111c 72%,#241b12 100%)}
body.is-app{background:radial-gradient(120% 60% at 50% -10%,#141b2e 0%,#0a0e1a 60%)}
a{color:inherit;text-decoration:none}
img{max-width:100%}

/* stars */
.stars{position:fixed;inset:0;z-index:0;pointer-events:none}
.stars i{position:absolute;width:2px;height:2px;border-radius:50%;background:var(--star);
  opacity:.5;animation:tw 4s ease-in-out infinite}
@keyframes tw{0%,100%{opacity:.15}50%{opacity:.8}}

/* header */
.hd{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;
  gap:1rem;padding:.85rem clamp(1rem,4vw,2.5rem);
  background:rgba(8,11,20,.72);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.brand{font-family:var(--serif);font-weight:700;font-size:1.15rem;letter-spacing:.04em;line-height:1;display:flex;flex-direction:column;gap:.15rem}
.brand span{font-family:var(--display);font-size:.55rem;letter-spacing:.28em;color:var(--lamp);font-weight:500}
.nav{display:flex;align-items:center;gap:clamp(.6rem,2vw,1.4rem);font-size:.9rem;flex-wrap:wrap;justify-content:flex-end}
.nav a{color:var(--muted);transition:color .2s}
.nav a:hover{color:var(--star)}
.nav .lang{border:1px solid var(--line);border-radius:999px;padding:.15rem .6rem;font-size:.78rem;color:var(--lamp)}
.btn-sm{background:var(--lamp);color:#1a1206 !important;padding:.35rem .9rem;border-radius:999px;font-weight:500;font-size:.85rem}
.btn-sm:hover{background:var(--lamp-soft)}
.nav a.on{color:var(--lamp)}

/* ── section sub-tabs ── */
.subwrap{position:relative;z-index:19}
.subnav{display:flex;gap:.3rem;overflow-x:auto;position:relative;
  padding:.5rem clamp(1rem,4vw,2.5rem);background:rgba(10,14,26,.88);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);scrollbar-width:none}
.subnav::-webkit-scrollbar{display:none}
/* right-edge hint when more tabs hide off-screen (mobile) — cleared at scroll end by JS */
.subnav-more{display:none;position:absolute;top:0;bottom:1px;right:0;width:3rem;pointer-events:none;
  align-items:center;justify-content:flex-end;padding-right:.4rem;color:var(--lamp);font-size:1.25rem;font-weight:700;
  background:linear-gradient(90deg,transparent,rgba(10,14,26,.95) 60%)}
.subwrap.can-scroll .subnav-more{display:flex}
.subnav a{white-space:nowrap;padding:.35rem .95rem;border-radius:999px;color:var(--muted);
  font-size:.92rem;border:1px solid transparent;transition:.15s}
.subnav a:hover{color:var(--star)}
.subnav a.on{background:var(--panel2);color:var(--lamp);border-color:rgba(232,181,99,.35)}

main{position:relative;z-index:1}

/* buttons */
.btn,.btn-glow,.btn-ghost{display:inline-block;border:none;cursor:pointer;font-family:var(--sans);
  font-size:1rem;padding:.8rem 1.8rem;border-radius:999px;transition:.25s;text-align:center}
.btn{background:var(--panel2);color:var(--star);border:1px solid var(--line)}
.btn:hover{border-color:var(--lamp);color:var(--lamp-soft)}
.btn-glow{background:linear-gradient(180deg,var(--lamp-soft),var(--lamp));color:#241706;font-weight:600;
  box-shadow:0 0 0 rgba(232,181,99,.0),0 8px 30px rgba(232,181,99,.28)}
.btn-glow:hover{box-shadow:0 0 40px rgba(232,181,99,.5);transform:translateY(-1px)}
.btn-ghost{background:transparent;color:var(--muted);border:1px solid var(--line);padding:.6rem 1.2rem}
.btn-ghost:hover{color:var(--star);border-color:var(--muted)}

/* hero */
.hero{min-height:92vh;display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:6vh 1.2rem;position:relative}
.hero-star{width:14px;height:14px;border-radius:50%;background:var(--lamp-soft);margin-bottom:2.5rem;
  box-shadow:0 0 12px 4px rgba(242,207,138,.8),0 0 60px 20px rgba(232,181,99,.35),0 0 160px 60px rgba(232,181,99,.15);
  animation:pulse 5s ease-in-out infinite}
.hero-star.small{width:10px;height:10px;margin:1rem auto 1.5rem}
@keyframes pulse{0%,100%{transform:scale(1);opacity:.9}50%{transform:scale(1.25);opacity:1}}
.hero-eye{font-family:var(--display);letter-spacing:.35em;font-size:.7rem;color:var(--lamp);text-transform:uppercase;margin-bottom:1.6rem}
.hero-title .zh{display:block;font-family:var(--serif);font-weight:700;font-size:clamp(2rem,7vw,3.6rem);
  line-height:1.35;letter-spacing:.06em;color:var(--star)}
.hero-title .en{display:block;font-family:var(--display);font-weight:500;letter-spacing:.22em;
  font-size:clamp(.7rem,2.4vw,1rem);color:var(--muted);margin-top:1.4rem}
.hero-sub{margin-top:2rem;color:var(--ink);font-size:clamp(1rem,3vw,1.2rem);font-family:var(--serif)}
.hero-q{margin-top:1rem;font-family:var(--serif);font-size:clamp(1.15rem,4vw,1.7rem);color:var(--lamp-soft);letter-spacing:.08em}
.hero-dates{margin-top:1.8rem;color:var(--muted);letter-spacing:.1em;font-size:.9rem}
.hero .btn-glow{margin-top:2rem}
.scroll-hint{margin-top:3.5rem;color:var(--muted);font-size:.75rem;letter-spacing:.25em}
.scroll-hint span{display:block;margin-top:.4rem;animation:bob 2s ease-in-out infinite}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(6px)}}

/* journey */
.journey{max-width:720px;margin:0 auto;padding:4vh 1.5rem 14vh}
.jbeat{text-align:center;padding:12vh 0}
.jeye{font-family:var(--display);letter-spacing:.4em;font-size:.7rem;color:var(--lamp);text-transform:uppercase}
.jbeat-night .jeye{color:var(--muted)}
.jbeat-dawn .jeye{color:var(--lamp-soft)}
.jh{font-family:var(--serif);font-weight:700;font-size:clamp(1.5rem,5vw,2.4rem);margin:1.2rem 0 1rem;line-height:1.4;letter-spacing:.04em;color:var(--star)}
.jb{color:var(--muted);font-size:1.05rem;max-width:34ch;margin:0 auto;font-family:var(--serif)}
.jbeat .btn-glow{margin-top:2.2rem}
.reveal{opacity:0;transform:translateY(26px);transition:opacity .9s ease,transform .9s ease}
.reveal.in{opacity:1;transform:none}

/* generic pages */
.page{max-width:var(--wrap);margin:0 auto;padding:clamp(1rem,2.5vw,1.8rem) clamp(1.1rem,4vw,2rem) 6rem}
.page.narrow{max-width:540px}
.center{text-align:center}
.page-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.page-title{font-family:var(--serif);font-weight:700;font-size:clamp(1.6rem,5vw,2.4rem);letter-spacing:.04em;color:var(--star)}
.page-sub{font-family:var(--serif);font-size:1.3rem;margin:2.5rem 0 1rem;color:var(--star)}
.lead{color:var(--muted);margin:.8rem 0 1.8rem;font-size:1.05rem}
.muted{color:var(--muted)}
.mt{margin-top:1.4rem}

/* info */
.info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem;margin-top:1.5rem}
.info-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1.4rem}
.info-card h3{font-family:var(--serif);color:var(--lamp-soft);margin-bottom:.5rem;font-size:1.1rem}
.faq{margin-top:1rem;display:grid;gap:.8rem}
.faq-item{border-bottom:1px solid var(--line);padding-bottom:.8rem}
.faq .q{color:var(--star);font-weight:500}
.faq .a{color:var(--muted)}
.journey .center,.center>.btn-glow{margin-top:2.5rem}

/* forms */
.form{display:grid;gap:1.1rem;margin-top:1.5rem}
.form label,.form-inline label{display:grid;gap:.4rem;font-size:.9rem;color:var(--muted)}
.form input,.form select,.form-inline input{width:100%;background:var(--night2);border:1px solid var(--line);
  border-radius:10px;padding:.8rem .9rem;color:var(--star);font-family:var(--sans);font-size:1rem}
.form input:focus,.form select:focus,.form-inline input:focus{outline:none;border-color:var(--lamp);box-shadow:0 0 0 3px rgba(232,181,99,.15)}
.form .btn-glow,.form .btn{margin-top:.5rem}
.err{color:#f0a3a3;font-size:.85rem}
.alt{margin-top:1.4rem;text-align:center}
.alt a{color:var(--lamp)}
.form-inline{display:flex;gap:.6rem;margin-top:.4rem}
.form-inline input{flex:1}
.login-note{background:rgba(232,181,99,.1);border:1px solid rgba(232,181,99,.3);border-radius:10px;
  padding:.6rem .8rem;font-size:.88rem;color:var(--lamp-soft);margin:.3rem 0}
.invite-link{display:flex;gap:.5rem;margin:.6rem 0}
.invite-link input{flex:1;background:var(--night2);border:1px solid var(--lamp);border-radius:8px;
  padding:.6rem .7rem;color:var(--lamp-soft);font-size:.85rem;font-family:var(--sans)}
.invite-actions{display:flex;gap:1rem;align-items:center;margin-top:.4rem}

/* cards / rows */
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1.3rem;margin-top:1.4rem}
.card h3{font-family:var(--serif);color:var(--star);font-size:1.15rem}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:.8rem;margin-bottom:.9rem}
.row{display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.6rem 0;border-bottom:1px solid var(--line)}
.row:last-child{border-bottom:none}
.ok-tag{color:var(--ok);font-weight:500;margin-bottom:1rem}
.pending-tag{color:var(--warn)}

/* booked ref */
.ref-box{background:var(--panel);border:1px dashed var(--lamp);border-radius:14px;padding:1.4rem;margin:1.5rem auto;max-width:340px;display:grid;gap:.4rem}
.ref-label{color:var(--muted);font-size:.8rem;letter-spacing:.1em}
.ref-code{font-family:var(--display);font-size:1.7rem;letter-spacing:.12em;color:var(--lamp-soft)}
.arrive-tag{color:var(--lamp-soft);margin:.4rem 0}
.guests-block{margin:1rem 0;padding-top:1rem;border-top:1px solid var(--line)}
.guest-row{display:grid;grid-template-columns:1.2fr 1fr 1fr;gap:.5rem;margin-bottom:.5rem}
.guest-row input{background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.6rem .7rem;color:var(--star);font-size:.92rem;width:100%}
.guest-row input:focus{outline:none;border-color:var(--lamp)}
@media(max-width:520px){.guest-row{grid-template-columns:1fr}}

/* feed */
.feed{list-style:none;margin-top:1.5rem;border-left:1px solid var(--line);padding-left:1.4rem;display:grid;gap:1.4rem}
.feed-item{position:relative}
.feed-dot{position:absolute;left:-1.75rem;top:.35rem;width:9px;height:9px;border-radius:50%;background:var(--lamp);box-shadow:0 0 10px rgba(232,181,99,.6)}
.feed-msg{color:var(--star)}
.feed-meta{color:var(--muted);font-size:.82rem;margin-top:.15rem}

/* board */
.dept{margin-top:1.8rem}
.dept-head{display:flex;align-items:baseline;justify-content:space-between;gap:.8rem;border-bottom:1px solid var(--line);padding-bottom:.5rem}
.dept-head h3{font-family:var(--serif);color:var(--star);font-size:1.15rem}
.dept-cluster{font-size:.72rem;color:var(--muted);letter-spacing:.05em;margin-left:.4rem}
.dept-count{color:var(--muted);font-size:.8rem;white-space:nowrap}
.tasks{display:grid;gap:.5rem;margin-top:.8rem}
.task-chip{display:flex;align-items:center;gap:.6rem;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.6rem .8rem;transition:.2s}
.task-chip:hover{border-color:var(--lamp);transform:translateX(2px)}
.task-chip .tick{width:1.1rem;text-align:center;color:var(--muted)}
.task-chip.status-doing{border-left:3px solid var(--warn)}
.task-chip.status-done{opacity:.6}
.task-chip.status-done .task-title{text-decoration:line-through;color:var(--muted)}
.task-chip.status-done .tick{color:var(--ok)}
.task-title{flex:1}
.task-who{font-size:.75rem;color:var(--lamp);background:rgba(232,181,99,.12);padding:.1rem .5rem;border-radius:999px}
.badge{font-size:.72rem;background:var(--panel2);border:1px solid var(--line);padding:.1rem .55rem;border-radius:999px;color:var(--muted)}
.badge.status-doing{color:var(--warn)}.badge.status-done{color:var(--ok)}
.back{color:var(--muted);font-size:.85rem;display:inline-block;margin-bottom:1rem}
.inline-actions{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}

/* table */
.tbl{width:100%;border-collapse:collapse;margin-top:1.2rem}
.tbl th,.tbl td{text-align:left;padding:.7rem .5rem;border-bottom:1px solid var(--line)}
.tbl th{color:var(--muted);font-weight:500;font-size:.8rem;letter-spacing:.05em}

/* stats */
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-top:1.5rem}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1.3rem;text-align:center}
.stat-n{display:block;font-family:var(--display);font-size:2rem;color:var(--lamp-soft)}
.stat-of{font-size:1rem;color:var(--muted)}
.stat-l{color:var(--muted);font-size:.8rem}

/* flash */
.flash{max-width:var(--wrap);margin:1rem auto -1rem;padding:.8rem 1.2rem;background:rgba(127,200,160,.12);
  border:1px solid rgba(127,200,160,.35);border-radius:10px;color:var(--ok);position:relative;z-index:2}

.ft{text-align:center;color:var(--muted);font-size:.8rem;padding:3rem 1rem 2.5rem;border-top:1px solid var(--line);position:relative;z-index:1}

@media(max-width:560px){
  .brand{font-size:1rem}
  .nav{font-size:.82rem;gap:.5rem}
  .hide-mobile{display:none}
  .stats{grid-template-columns:1fr;gap:.7rem}
  .form-inline{flex-direction:column}
}
@media(prefers-reduced-motion:reduce){
  *{animation:none !important;scroll-behavior:auto}
  .reveal{opacity:1;transform:none;transition:none}
}

/* ── readability: everything a touch larger; small labels bumped more ── */
html{font-size:107%}
body{line-height:1.7}
.brand span{font-size:.64rem;letter-spacing:.2em}
.hero-eye,.jeye{font-size:.86rem}
.hero-title .en{font-size:clamp(.86rem,2.6vw,1.08rem)}
.hero-sub,.jb{font-size:1.14rem}
.hero-dates{font-size:1rem}
.scroll-hint{font-size:.88rem}
.nav{font-size:1rem}
.nav .lang{font-size:.9rem}
.btn-sm{font-size:.95rem}
.lead{font-size:1.12rem}
.card h3,.info-card h3{font-size:1.2rem}
.faq .q,.faq .a{font-size:1.05rem}
.row,.tbl td,.feed-msg{font-size:1.04rem}
.feed-meta,.dept-count,.stat-l,.tbl th,.err,.form label{font-size:.94rem}
.dept-cluster,.badge,.task-who{font-size:.86rem}
@media(max-width:560px){
  .nav{font-size:.95rem;gap:.6rem 1rem}
  .page{padding-left:1.15rem;padding-right:1.15rem}
}

/* ── hero: dark night, the CSS star sits above the kicker, real town skyline glows along the bottom ── */
.hero{overflow:hidden}
.hero > *{position:relative;z-index:1}
.hero::before{content:"";position:absolute;left:0;right:0;bottom:0;height:min(50vh,420px);z-index:0;pointer-events:none;
  background:linear-gradient(180deg,var(--night) 0%,rgba(10,14,26,.55) 26%,rgba(10,14,26,0) 60%),
             url(/assets/img/hero-bg.jpg) center 80%/cover no-repeat}
.hero .scroll-hint{margin-bottom:6vh}
/* optional photo band you can drop a real image into */
.photo-band{margin:2rem 0;border-radius:16px;overflow:hidden;border:1px solid var(--line);
  background:#0c1120 url(/assets/img/skyline.svg) center bottom/cover no-repeat;min-height:220px}

/* ── illustrated scenes (original SVG art; drop-in for real photos later) ── */
.scene{margin:1rem auto;max-width:var(--wrap);border-radius:16px;overflow:hidden;
  border:1px solid var(--line);box-shadow:0 20px 60px rgba(0,0,0,.4);line-height:0}
.scene img{width:100%;height:clamp(200px,34vw,340px);object-fit:cover;display:block}
.scene-flush{max-width:100%;margin:0 0 0;border-radius:0;border-left:none;border-right:none;border-top:none}
.journey .scene{margin:2vh auto}

.nativity-band{position:relative;margin-top:2rem;line-height:0}
.nativity-band img{width:100%;height:clamp(300px,42vw,500px);object-fit:cover;display:block}
.nativity-band .nativity-q{position:absolute;left:0;right:0;bottom:clamp(1.5rem,5vw,3.5rem);
  text-align:center;font-family:var(--serif);color:var(--lamp-soft);line-height:1.4;
  font-size:clamp(1.2rem,3.5vw,1.9rem);letter-spacing:.1em;text-shadow:0 2px 20px rgba(0,0,0,.6)}

/* ── admin management ── */
.admin-links{display:flex;gap:.7rem;flex-wrap:wrap;margin-top:1.6rem}
.btn-x{background:transparent;border:none;color:var(--muted);cursor:pointer;font-size:1rem;padding:0 .3rem;line-height:1}
.btn-x:hover{color:#f0a3a3}
.chips{display:flex;flex-wrap:wrap;gap:.5rem;margin:.4rem 0 1rem}
.chip{display:inline-flex;align-items:center;gap:.4rem;background:var(--panel2);border:1px solid var(--line);
  border-radius:999px;padding:.3rem .5rem .3rem .8rem;font-size:.92rem;color:var(--ink)}
.chip-x{display:inline}
.chip-x button{background:transparent;border:none;color:var(--muted);cursor:pointer;font-size:.85rem;padding:0}
.chip-x button:hover{color:#f0a3a3}
.assign-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.assign-row select{background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.5rem .6rem;color:var(--star);font-family:var(--sans);font-size:.92rem;flex:1;min-width:120px}
.task-chip form{display:inline;margin-left:auto}

/* ── document / backup-plan page ── */
.doc-block{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1.3rem 1.4rem;margin-top:1.2rem}
.doc-block h2{font-family:var(--serif);color:var(--lamp-soft);font-size:1.2rem;margin-bottom:.7rem}
.doc-block ul,.doc-block ol{margin:.3rem 0 0 1.2rem;display:grid;gap:.45rem}
.doc-block li{color:var(--ink)}
.doc-block .keep{color:var(--ok)}
.doc-block .cut{color:var(--muted)}
.doc-block.strike{border-color:rgba(232,181,99,.4)}
.doc-block.strike h2{color:var(--lamp)}
.doc .tbl td{vertical-align:top}
.doc .tbl td:first-child{white-space:nowrap;color:var(--lamp);font-family:var(--display);font-size:.9rem}
.small{font-size:.85rem;margin-top:1.5rem}

/* ── plans library ── */
.doc-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.8rem;margin-top:1rem}
.doc-card{display:flex;flex-direction:column;gap:.2rem;background:var(--panel);border:1px solid var(--line);
  border-radius:12px;padding:1rem 1.1rem;transition:.2s}
.doc-card:hover{border-color:var(--lamp);transform:translateY(-2px);box-shadow:0 10px 30px rgba(0,0,0,.3)}
.doc-zh{font-family:var(--serif);color:var(--star);font-size:1.08rem}
.doc-en{color:var(--muted);font-size:.85rem;letter-spacing:.03em}

/* ── rendered markdown ── */
.md{line-height:1.75}
.md h1,.md h2,.md h3,.md h4{font-family:var(--serif);color:var(--star);margin:1.6rem 0 .6rem;line-height:1.35}
.md h1{font-size:1.7rem;color:var(--lamp-soft)}.md h2{font-size:1.35rem;border-bottom:1px solid var(--line);padding-bottom:.3rem}
.md h3{font-size:1.15rem;color:var(--lamp-soft)}.md h4{font-size:1.02rem}
.md p{margin:.7rem 0;color:var(--ink)}
.md ul,.md ol{margin:.6rem 0 .6rem 1.3rem;display:grid;gap:.35rem}
.md li{color:var(--ink)}
.md strong{color:var(--star)}
.md em{color:var(--lamp-soft);font-style:normal}
.md code{background:var(--night2);border:1px solid var(--line);border-radius:5px;padding:.05rem .35rem;font-size:.9em;color:var(--lamp-soft)}
.md a{color:var(--lamp);text-decoration:underline}
.md hr{border:none;border-top:1px solid var(--line);margin:1.6rem 0}
.md blockquote{border-left:3px solid var(--lamp);background:var(--panel);padding:.7rem 1rem;margin:1rem 0;border-radius:0 8px 8px 0;color:var(--ink)}
.tbl-wrap{overflow-x:auto;margin:1rem 0;border:1px solid var(--line);border-radius:10px}
.md-tbl{width:100%;border-collapse:collapse;min-width:420px}
.md-tbl th,.md-tbl td{text-align:left;padding:.6rem .8rem;border-bottom:1px solid var(--line);vertical-align:top;font-size:.95rem}
.md-tbl th{background:var(--panel2);color:var(--lamp-soft);font-weight:500;white-space:nowrap}
.md-tbl tr:last-child td{border-bottom:none}

/* ── roles roster ── */
.role-list{display:grid;gap:.6rem;margin-top:.8rem}
.role-row{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.8rem 1rem}
.role-main{display:flex;align-items:center;justify-content:space-between;gap:.8rem}
.role-name{font-family:var(--serif);color:var(--star);font-size:1.05rem}
.role-count{font-family:var(--display);font-size:.9rem;color:var(--warn);background:rgba(232,181,99,.12);border-radius:999px;padding:.1rem .6rem;white-space:nowrap}
.role-count.ok{color:var(--ok);background:rgba(127,200,160,.14)}
.role-row .chips{margin-top:.6rem}
.chip-plain{padding:.3rem .8rem}

/* ── interactive map ── */
.sitemap{background:#0c1120;border:1px solid var(--line);
  border-radius:16px;padding:1rem;margin-top:1rem;overflow-x:auto}
.sm-backstage{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap;margin-bottom:.5rem}
.sm-tag{font-size:.78rem;color:var(--muted);margin-right:.4rem;white-space:nowrap}
.cr{flex:1;min-width:52px;text-align:center;background:var(--panel2);border:1px dashed var(--line);border-radius:6px;
  padding:.35rem 0;font-size:.8rem;color:var(--muted);font-family:var(--display)}
.sm-stage{text-align:center;background:rgba(232,181,99,.08);border:1px solid rgba(232,181,99,.2);border-radius:6px;
  padding:.35rem;font-size:.82rem;color:var(--lamp);letter-spacing:.1em;margin-bottom:.7rem}
.sm-city{display:flex;gap:.5rem;align-items:stretch;min-width:640px}
.sm-edge{align-self:center;font-size:.75rem;color:var(--muted);white-space:nowrap;letter-spacing:.05em}
.sm-zone{flex:1;display:flex;flex-direction:column;gap:.25rem;background:var(--panel);border:1px solid var(--line);
  border-radius:12px;padding:.9rem .7rem;text-align:center;transition:.2s;min-width:104px}
.sm-zone:hover{border-color:var(--lamp);transform:translateY(-2px)}
.sm-zone.active{border-color:var(--lamp);background:rgba(232,181,99,.12);box-shadow:0 0 0 1px var(--lamp) inset}
.sm-ico{font-size:1.6rem;line-height:1}
.sm-name{font-family:var(--serif);color:var(--star);font-size:.92rem;line-height:1.3}
.sm-where{font-size:.72rem;color:var(--muted)}

.flow{display:flex;align-items:center;gap:.4rem;overflow-x:auto;padding:.8rem 0 1rem;margin-top:.5rem}
.flow-step{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:.3rem;background:var(--panel);
  border:1px solid var(--line);border-radius:12px;padding:.7rem .9rem;min-width:92px;text-align:center;transition:.2s}
.flow-step:hover{border-color:var(--lamp)}
.flow-step.active{border-color:var(--lamp);background:rgba(232,181,99,.12)}
.flow-ico{font-size:1.4rem}
.flow-name{font-size:.8rem;color:var(--ink);line-height:1.25}
.flow-arrow{color:var(--lamp);flex:0 0 auto}

.focus{scroll-margin-top:80px;margin-top:1.5rem;min-height:60px}
.focus-empty{text-align:center;padding:2rem;border:1px dashed var(--line);border-radius:14px}
.focus-head{display:flex;align-items:center;gap:1rem;margin-bottom:.6rem}
.focus-ico{font-size:2.4rem}
.focus-head h2{font-family:var(--serif);color:var(--star);font-size:1.4rem}
.focus-desc{color:var(--ink);font-size:1.05rem;margin-bottom:1rem}
.focus-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem}
.focus-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1.1rem}
.focus-card h3{font-family:var(--serif);color:var(--lamp-soft);font-size:1.05rem;margin-bottom:.7rem}
.doc-link{display:block;color:var(--lamp);padding:.35rem 0;font-size:.95rem}
.doc-link:hover{text-decoration:underline}
.prow{display:flex;flex-direction:column;gap:.1rem;padding:.4rem 0;border-bottom:1px solid var(--line)}
.prow:last-of-type{border-bottom:none}
.tasklink{transition:.15s}.tasklink:hover{color:var(--lamp)}
.tasklink.status-done span{color:var(--muted);text-decoration:line-through}

/* ── role hint tooltip ── */
.hint{position:relative;display:inline-flex;align-items:center;justify-content:center;width:1.15rem;height:1.15rem;
  margin-left:.4rem;border:1px solid var(--line);border-radius:50%;font-size:.72rem;color:var(--muted);cursor:help;vertical-align:middle}
.hint:hover,.hint:focus{border-color:var(--lamp);color:var(--lamp);outline:none}
.hint-pop{position:absolute;left:50%;top:140%;transform:translateX(-50%);z-index:30;width:min(260px,72vw);
  background:var(--panel2);border:1px solid var(--lamp);border-radius:10px;padding:.7rem .8rem;
  box-shadow:0 12px 34px rgba(0,0,0,.5);opacity:0;visibility:hidden;transition:.15s;pointer-events:none;text-align:left}
.hint:hover .hint-pop,.hint:focus .hint-pop{opacity:1;visibility:visible}
.hint-w{display:block;color:var(--lamp-soft);font-size:.85rem;margin-bottom:.3rem}
.hint-d{display:block;color:var(--ink);font-size:.85rem;line-height:1.5}

/* ── role badges (age/gender/difficulty) ── */
.role-meta{display:flex;flex-wrap:wrap;gap:.4rem;margin:.5rem 0}
.rb{font-size:.78rem;padding:.12rem .5rem;border-radius:999px;border:1px solid var(--line);color:var(--muted);white-space:nowrap}
.rb-age{background:rgba(127,160,200,.1)}
.rb-gen{background:rgba(200,127,180,.08)}
.rb-ht{background:rgba(127,200,160,.10)}
.rb-diff{background:var(--panel2)}
.rb-diff .stars{letter-spacing:-1px;color:var(--lamp)}
.rb-diff.d1 .stars,.rb-diff.d2 .stars{color:var(--ok)}
.rb-diff.d4 .stars,.rb-diff.d5 .stars{color:#e89a63}

/* ── availability + night chips ── */
.avail{margin:1rem 0;padding-top:1rem;border-top:1px solid var(--line)}
.avail-t{color:var(--star);font-family:var(--serif)}
.night-row{display:flex;flex-wrap:wrap;gap:.5rem;margin:.7rem 0}
.night-chk{display:inline-flex;align-items:center;gap:.35rem;background:var(--night2);border:1px solid var(--line);
  border-radius:999px;padding:.35rem .8rem;cursor:pointer;font-size:.9rem;color:var(--ink)}
.night-chk input{accent-color:var(--lamp)}
.night-chk.sm{padding:.25rem .6rem;font-size:.82rem}
.night-pick{display:flex;flex-wrap:wrap;gap:.35rem}
.night-tag{font-size:.72rem;background:rgba(232,181,99,.16);color:var(--lamp);border-radius:999px;padding:.05rem .45rem}
.cast-form{flex-direction:column;align-items:stretch;gap:.6rem}
.page-head-actions{display:flex;gap:.5rem}
.btn-sm.ghost{background:transparent;border:1px solid var(--line);color:var(--ink) !important}
.btn-sm.ghost:hover{color:var(--lamp) !important;border-color:var(--lamp)}
/* WhatsApp send button — green, readable on dark */
a.btn-sm.ghost[href*="wa.me"]{color:#4bd07f !important;border-color:#25955a !important}
a.btn-sm.ghost[href*="wa.me"]:hover{background:rgba(37,149,90,.14);color:#7fe0a4 !important}

/* ── duty roster grid ── */
.duty-tbl{width:100%;border-collapse:collapse;min-width:560px}
.duty-tbl th,.duty-tbl td{border:1px solid var(--line);padding:.5rem .6rem;vertical-align:top;text-align:left;font-size:.9rem}
.duty-tbl th{background:var(--panel2);color:var(--lamp-soft);font-weight:500;white-space:nowrap}
.duty-tbl .sticky{position:sticky;left:0;background:var(--panel);z-index:2;min-width:130px}
.duty-role{display:block;color:var(--star)}
.duty-need{display:block;font-size:.72rem;color:var(--muted)}
.duty-name{display:block;color:var(--ink);font-size:.85rem}
.cell-tag{display:inline-block;margin-top:.2rem;font-size:.7rem;padding:.02rem .4rem;border-radius:999px}
.cell-gap{background:rgba(232,120,99,.06)}
.cell-gap .cell-tag{background:rgba(232,120,99,.18);color:#e89a63}
.cell-ok .cell-tag{background:rgba(127,200,160,.16);color:var(--ok)}

/* ── readiness dashboard ── */
.kpis{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:.8rem;margin-top:1.2rem}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1.1rem;text-align:center;display:flex;flex-direction:column;justify-content:center;gap:.3rem}
.kpi-n{font-family:var(--display);font-size:1.8rem;color:var(--lamp-soft)}
.kpi-of{font-size:.95rem;color:var(--muted)}
.kpi-l{font-size:.82rem;color:var(--muted)}
.kpi-pend{color:var(--warn);font-size:.78rem}
.kpi-big{gap:.5rem}
.ring{--p:0;width:76px;height:76px;border-radius:50%;margin:0 auto;display:grid;place-items:center;
  background:conic-gradient(var(--lamp) calc(var(--p)*1%),var(--panel2) 0)}
.ring span{width:58px;height:58px;border-radius:50%;background:var(--panel);display:grid;place-items:center;
  font-family:var(--display);color:var(--lamp-soft);font-size:1.05rem}
.dash-cols{display:grid;grid-template-columns:1.5fr 1fr;gap:1rem;margin-top:1rem;align-items:start}
.dash-side{display:grid;gap:1rem}
.dash-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1.2rem;margin-top:1rem}
.dash-cols .dash-card{margin-top:0}
.dash-card h3{font-family:var(--serif);color:var(--lamp-soft);font-size:1.1rem;margin-bottom:.8rem}
.bar-row{display:grid;grid-template-columns:1fr 2fr auto;align-items:center;gap:.6rem;padding:.32rem 0}
.bar-l{font-size:.85rem;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar{height:8px;background:var(--night2);border-radius:999px;overflow:hidden}
.bar-fill{display:block;height:100%;background:var(--ok);border-radius:999px;transition:width .5s}
.bar-fill.amber{background:var(--lamp)}
.bar-n{font-size:.78rem;color:var(--muted);white-space:nowrap;font-family:var(--display)}
@media(max-width:720px){.kpis{grid-template-columns:1fr 1fr}.dash-cols{grid-template-columns:1fr}}

/* ── comments, announcements, bell ── */
.bell{position:relative;font-size:1.05rem}
.bell-dot{position:absolute;top:-6px;right:-8px;background:#d94a4a;color:#fff;font-size:.62rem;
  min-width:15px;height:15px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;padding:0 3px;font-family:var(--sans)}
.cmt{border-bottom:1px solid var(--line);padding:.6rem 0}
.cmt:last-of-type{border-bottom:none}
.cmt-b{color:var(--ink)}
.cmt-m{color:var(--muted);font-size:.78rem;margin-top:.15rem}
.ann{border-left:3px solid var(--lamp);background:var(--panel2);border-radius:0 8px 8px 0;padding:.7rem .9rem;margin-bottom:.6rem}
.ann-b{color:var(--star)}
.ann-m{color:var(--muted);font-size:.78rem;margin-top:.3rem}
.card textarea{width:100%;background:var(--night2);border:1px solid var(--line);border-radius:10px;padding:.7rem;
  color:var(--star);font-family:var(--sans);font-size:1rem;margin:.6rem 0;resize:vertical}
.card textarea:focus{outline:none;border-color:var(--lamp)}

/* ── materials ── */
.mat-kpis{grid-template-columns:repeat(4,1fr);margin-bottom:1rem}
.add-box{margin:1rem 0}
.add-box summary{display:inline-block;list-style:none;cursor:pointer}
.add-box summary::-webkit-details-marker{display:none}
.add-box .form{margin-top:1rem;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1.2rem}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:.8rem}
.mat-tbl{width:100%;border-collapse:collapse;min-width:640px}
.mat-tbl th,.mat-tbl td{text-align:left;padding:.55rem .6rem;border-bottom:1px solid var(--line);font-size:.92rem;vertical-align:middle}
.mat-tbl th{color:var(--muted);font-weight:500;font-size:.8rem}
.mat-got{opacity:.55}
.inline-f{display:inline}
.linkbtn{background:none;border:none;color:var(--lamp);cursor:pointer;font-size:.85rem;padding:0}
.status-sel{background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.25rem .5rem;color:var(--star);font-family:var(--sans);font-size:.85rem}
.status-sel.st-got{color:var(--ok);border-color:rgba(127,200,160,.4)}
.status-sel.st-sourcing{color:var(--warn);border-color:rgba(232,181,99,.4)}

/* ── in-app editing ── */
.dept-edit{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;padding:.4rem 0;border-bottom:1px solid var(--line)}
.dept-edit.add{border-bottom:none;margin-top:.6rem}
.dept-edit .dcode{font-family:var(--display);font-size:.78rem;color:var(--muted);min-width:34px}
.dept-edit input{background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.35rem .5rem;color:var(--star);font-size:.88rem;flex:1;min-width:90px}
.need-edit .mini{display:inline-flex;align-items:center;gap:.3rem;font-size:.78rem;color:var(--muted)}
.need-edit input{width:56px;background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.25rem .4rem;color:var(--star)}
.card-head{flex-wrap:wrap}

/* ── my night call-sheet ── */
.night-card h3{font-family:var(--serif);color:var(--lamp-soft);font-size:1.1rem;margin-bottom:.5rem}
.duty-line{display:flex;flex-direction:column;gap:.15rem;padding:.5rem 0;border-bottom:1px solid var(--line)}
.duty-line:last-child{border-bottom:none}
.duty-line .duty-role{color:var(--star);font-size:1.02rem}

/* ── attachments ── */
.att-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:.6rem;margin:.6rem 0 1rem}
.att{background:var(--night2);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.att img{width:100%;height:90px;object-fit:cover;display:block}
.att-doc{display:block;padding:1.4rem .6rem;text-align:center;color:var(--lamp);font-size:.8rem;word-break:break-word}
.att-meta{display:flex;align-items:center;justify-content:space-between;gap:.3rem;padding:.25rem .5rem}
.upload-form{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-top:.5rem}
.upload-form input[type=file]{flex:1;min-width:180px;font-size:.85rem;color:var(--muted)}
.upload-form input[type=file]::file-selector-button{background:var(--panel2);color:var(--star);border:1px solid var(--line);border-radius:8px;padding:.35rem .7rem;margin-right:.5rem;cursor:pointer}

/* ── polls ── */
.poll-closed{opacity:.75}
.poll-opt-form{margin:.4rem 0}
.poll-vote{width:100%;text-align:left;background:var(--night2);border:1px solid var(--line);border-radius:10px;
  padding:.7rem .9rem;color:var(--star);cursor:pointer;font-size:1rem;transition:.15s;font-family:var(--sans)}
.poll-vote:hover{border-color:var(--lamp);background:var(--panel2)}
.poll-res{position:relative;margin:.4rem 0;border:1px solid var(--line);border-radius:10px;overflow:hidden;padding:.7rem .9rem;display:flex;justify-content:space-between;gap:.5rem}
.poll-res.mine{border-color:var(--lamp)}
.poll-bar{position:absolute;inset:0 auto 0 0;background:rgba(232,181,99,.15);z-index:0}
.poll-lbl,.poll-pct{position:relative;z-index:1}
.poll-lbl{color:var(--star)}
.poll-pct{color:var(--muted);font-size:.85rem;white-space:nowrap;font-family:var(--display)}
.poll-foot{display:flex;align-items:center;justify-content:space-between;margin-top:.7rem}
.poll-admin{display:flex;gap:.7rem;align-items:center}

/* ── designs gallery ── */
.page.wide{max-width:1180px}
.design-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:1.6rem;margin-top:1.4rem}
.design-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:1.1rem;display:flex;flex-direction:column;gap:.5rem}
.design-card h3{font-family:var(--serif);color:var(--star);font-size:1.12rem;margin-top:.6rem}
.design-size{font-size:.8rem;color:var(--lamp)}
.design-card .btn-sm{align-self:flex-start;margin-top:.3rem}
.prev-box{display:block;position:relative;overflow:hidden;border-radius:10px;background:#181c28;border:1px solid var(--line);margin:0 auto;transition:.2s}
.prev-box:hover{border-color:var(--lamp);transform:translateY(-2px)}
.prev-inner{display:block;position:absolute;top:0;left:0;transform-origin:top left;pointer-events:none}

/* ── whatsapp share ── */
.wa-btn{margin-top:1rem;background:transparent;border:1px solid #25955a;color:#4bd07f}
.wa-btn:hover{background:rgba(37,149,90,.14);border-color:#4bd07f;color:#7fe0a4}

/* ── AI chat widget (distinct teal accent) ── */
.chatw{position:fixed;right:18px;bottom:18px;z-index:60;font-family:var(--sans);
  --chat:#3fb9a8;--chat-soft:#6fd4c6;--chat-ink:#062521}
.chat-fab{display:flex;align-items:center;gap:.5rem;background:linear-gradient(180deg,var(--chat-soft),var(--chat));
  color:var(--chat-ink);border:none;border-radius:999px;padding:.7rem 1.1rem;cursor:pointer;font-size:.95rem;font-weight:600;
  box-shadow:0 8px 30px rgba(63,185,168,.45);transition:.2s}
.chat-fab:hover{transform:translateY(-2px);box-shadow:0 10px 38px rgba(63,185,168,.6)}
.chat-fab.open .chat-fab-txt{display:none}
.chat-fab.open .chat-fab-ico{transform:rotate(45deg)}
.chat-fab-ico{font-size:1.1rem;transition:transform .2s}
.chat-teaser{position:absolute;right:0;bottom:64px;max-width:250px;background:var(--panel);color:var(--star);
  border:1px solid var(--chat);border-radius:14px 14px 4px 14px;padding:.7rem 2rem .7rem .9rem;font-size:.92rem;line-height:1.5;
  box-shadow:0 10px 30px rgba(0,0,0,.5);animation:teaseIn .4s ease;transition:opacity .6s ease}
.chat-teaser.fade{opacity:0}
.chat-teaser span{cursor:pointer;display:block}
.chat-teaser-x{position:absolute;top:.3rem;right:.4rem;background:none;border:none;color:var(--muted);cursor:pointer;font-size:.8rem;line-height:1}
.chat-teaser-x:hover{color:var(--star)}
@keyframes teaseIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.chat-panel{position:absolute;right:0;bottom:64px;width:min(370px,calc(100vw - 32px));height:min(640px,82vh);background:var(--night2);
  border:1.5px solid var(--chat);border-radius:16px;box-shadow:0 20px 60px rgba(0,0,0,.55),0 0 0 4px rgba(63,185,168,.12);display:flex;flex-direction:column;overflow:hidden}
.chat-panel[hidden]{display:none}
@media(max-width:560px){
  /* mobile: full sheet from just below the nav bar down to above the chat icon */
  .chat-panel{position:fixed;top:62px;bottom:78px;left:12px;right:12px;width:auto;height:auto}
}
.chat-head{display:flex;align-items:center;justify-content:space-between;padding:.8rem 1rem;
  background:var(--panel2);border-bottom:1px solid var(--chat);color:var(--chat-soft);font-family:var(--serif)}
.chat-x{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1rem}
.chat-log{flex:1;overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:.6rem}
.cm{max-width:85%;padding:.6rem .85rem;border-radius:14px;font-size:.95rem;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.cm-bot{align-self:flex-start;background:var(--panel);color:var(--ink);border-bottom-left-radius:4px}
.cm-me{align-self:flex-end;background:var(--chat);color:var(--chat-ink);border-bottom-right-radius:4px}
.cm-typing{opacity:.6}
.cm-book{align-self:flex-start;background:transparent;border:1px solid var(--chat);color:var(--chat-soft);
  border-radius:999px;padding:.4rem .9rem;cursor:pointer;font-size:.9rem;margin-top:-.2rem}
.cm-book:hover{background:rgba(63,185,168,.16)}
.cm-choices{display:flex;flex-direction:column;gap:.4rem;align-items:flex-start;margin-top:-.1rem}
.cm-choice{background:var(--panel2);border:1px solid var(--line);color:var(--star);border-radius:12px;
  padding:.55rem .9rem;cursor:pointer;font-size:.92rem;text-align:left;max-width:100%;transition:.15s}
.cm-choice:hover{border-color:var(--lamp);background:var(--panel)}
.cm-choice.primary{background:linear-gradient(180deg,var(--chat-soft),var(--chat));color:var(--chat-ink);border:none;font-weight:600}
.cm-choice:hover{border-color:var(--chat)}
.chat-form{display:flex;gap:.5rem;padding:.7rem;border-top:1px solid var(--line);background:var(--panel2)}
.chat-form input{flex:1;background:var(--night);border:1px solid var(--line);border-radius:999px;padding:.6rem .9rem;color:var(--star);font-size:.95rem}
.chat-form input:focus{outline:none;border-color:var(--chat)}
.chat-form button{background:var(--chat);color:var(--chat-ink);border:none;border-radius:999px;padding:.6rem 1rem;cursor:pointer;font-weight:600}
@media print{.chatw{display:none}}

/* ── rehearsal schedule / rsvp ── */
.evt-meta{color:var(--lamp-soft);font-size:.95rem;margin:.2rem 0 .5rem}
.rsvp-row{display:flex;gap:.5rem;flex-wrap:wrap;margin:.6rem 0}
.rsvp-btn{background:var(--night2);border:1px solid var(--line);border-radius:999px;padding:.45rem .9rem;
  color:var(--ink);cursor:pointer;font-size:.9rem;font-family:var(--sans);transition:.15s}
.rsvp-btn:hover{border-color:var(--muted)}
.rsvp-btn.on.r-yes{background:rgba(127,200,160,.18);border-color:var(--ok);color:var(--ok)}
.rsvp-btn.on.r-maybe{background:rgba(232,181,99,.16);border-color:var(--warn);color:var(--warn)}
.rsvp-btn.on.r-no{background:rgba(232,120,99,.14);border-color:#e0795a;color:#e89a63}
.rsvp-n{opacity:.7;font-size:.82rem}

/* ── print ── */
@media print{
  body{background:#fff !important;color:#111 !important}
  .hd,.ft,.stars,.noprint,.bell{display:none !important}
  .page{max-width:100%;padding:0}
  .card,.night-card{border:1px solid #ccc !important;background:#fff !important;break-inside:avoid}
  .page-title,.page-sub,.duty-role,.card h3{color:#111 !important}
  .muted{color:#555 !important}
  a{color:#111 !important;text-decoration:none}
  .chip,.chip-plain{border:1px solid #999 !important;color:#111 !important}
  .duty-tbl th,.duty-tbl td,.md-tbl th,.md-tbl td{border-color:#ccc !important;color:#111 !important}
  .duty-tbl th,.md-tbl th{background:#eee !important}
  .duty-tbl .sticky{background:#fff !important}
}
.multi-sel{background:var(--night2);border:1px solid var(--line);border-radius:8px;color:var(--star);padding:.3rem;min-width:180px;font-size:.9rem}
.multi-sel option{padding:.25rem .4rem}
.multi-sel option:checked{background:var(--lamp);color:#241706}

/* ── compact people manager ── */
.people-search{width:100%;background:var(--night2);border:1px solid var(--line);border-radius:10px;
  padding:.7rem .9rem;color:var(--star);font-size:1rem;margin:1rem 0}
.people-search:focus{outline:none;border-color:var(--lamp)}
.people-list{display:flex;flex-direction:column;gap:.4rem}
.prow2{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.55rem .8rem;
  display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1rem}
.prow2-main{display:flex;flex-direction:column;gap:.1rem;min-width:150px}
.prow2-name{color:var(--star);font-size:.98rem}
.prow2-tags{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;flex:1;justify-content:flex-end}
.chip-sm{font-size:.82rem;padding:.15rem .5rem}
.assign-d{position:relative}
.assign-d summary{list-style:none;cursor:pointer;color:var(--lamp);font-size:.85rem;border:1px dashed var(--line);border-radius:999px;padding:.2rem .6rem}
.assign-d summary::-webkit-details-marker{display:none}
.assign-d[open] summary{color:var(--lamp-soft)}
.assign-d .assign-row{margin-top:.5rem;flex-wrap:wrap}
.prow2 .badge{font-size:.72rem}
.mk-admin{background:transparent;border:1px solid var(--ok);color:var(--ok);border-radius:999px;padding:.15rem .55rem;cursor:pointer;font-size:.8rem}
.mk-admin:hover{background:rgba(127,200,160,.14)}
.mk-admin.is{border-color:var(--warn);color:var(--warn)}

/* ── compact registration ── */
.reg-top{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.alt-top{color:var(--lamp);font-size:.9rem;white-space:nowrap}
.reg-lead{margin:.5rem 0 1rem;font-size:.98rem}
@media(max-width:560px){
  .reg-compact .form{gap:.7rem;margin-top:1rem}
  .reg-compact .form input,.reg-compact .form select{padding:.6rem .8rem}
  .reg-compact .page-title{font-size:1.5rem}
  .reg-compact .login-note{padding:.5rem .7rem;font-size:.85rem}
}

/* register nav label: combined on mobile only */
.reg-mob{display:none}
@media(max-width:560px){.reg-desk{display:none}.reg-mob{display:inline}}

/* ── Select2 dark theme (for 人员管理 分配) ── */
.select2-container{width:100%!important;min-width:200px}
.select2-container--default .select2-selection--multiple{background:var(--night2);border:1px solid var(--line)!important;border-radius:10px;min-height:40px}
.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:var(--lamp)!important}
.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:2px 6px;display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.select2-container--default .select2-selection--multiple .select2-selection__choice{background:var(--lamp);color:#241706;border:none;border-radius:999px;padding:.12rem .3rem .12rem .6rem;font-size:.85rem;line-height:1.6;margin:0;display:inline-flex;flex-direction:row-reverse;align-items:center;gap:.15rem}
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#241706;background:none;border:none;padding:0 .25rem;margin:0;font-size:1.05rem;font-weight:700;line-height:1}
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#7a1f12;background:none}
.select2-container--default .select2-search--inline .select2-search__field{color:var(--star);margin-top:6px}
.select2-container--default .select2-search--inline .select2-search__field{color:var(--star)}
.select2-dropdown{background:var(--panel2);border:1px solid var(--lamp);color:var(--ink)}
.select2-container--default .select2-results__option{color:var(--ink);font-size:.9rem}
.select2-container--default .select2-results__option--highlighted[aria-selected]{background:var(--lamp);color:#241706}
.select2-container--default .select2-results__option[aria-selected=true]{background:var(--panel);color:var(--muted)}
.select2-search--dropdown .select2-search__field{background:var(--night2);border:1px solid var(--line);color:var(--star)}
/* single-select variant (all workspace dropdowns) */
.select2-container--default .select2-selection--single{background:var(--night2);border:1px solid var(--line);border-radius:8px;height:40px}
.select2-container--default .select2-selection--single .select2-selection__rendered{color:var(--star);line-height:38px;padding-left:.6rem;padding-right:1.9rem}
.select2-container--default .select2-selection--single .select2-selection__placeholder{color:var(--muted)}
.select2-container--default .select2-selection--single .select2-selection__arrow{height:38px;right:6px}
.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:var(--muted) transparent transparent}
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--open .select2-selection--single{border-color:var(--lamp)}
.select2-container--default .select2-results__option{padding:.4rem .6rem}
.select2-results__options{max-height:260px}
.select2-container--default .select2-results__option--selected{background:var(--panel);color:var(--muted)}
.assign-row .select2-container{flex:1;min-width:120px}

/* ── Script & flow vote (/scripts) ── */
.sc-confirmed-banner{background:var(--lamp);color:#241706;border-radius:10px;padding:.6rem .9rem;font-weight:600;margin-bottom:1rem}
.sc-card{margin-bottom:1.1rem}
.sc-card.sc-on{border:1px solid var(--lamp);box-shadow:0 0 0 1px var(--lamp) inset}
.sc-title{font-size:1.15rem;margin:0}
.sc-badge{background:var(--lamp);color:#241706}
.sc-tag{color:var(--muted);margin:.2rem 0 .6rem;font-style:italic}
.sc-body h4,.sc-body h5{margin:.6rem 0 .3rem}
.sc-flow{margin:.2rem 0 .5rem 1.1rem;padding:0;display:grid;gap:.15rem}
.sc-flow li{font-size:.92rem}
.sc-rain{background:var(--night2);border-left:3px solid var(--star);border-radius:6px;padding:.4rem .6rem;font-size:.9rem;margin:.6rem 0}
.sc-pc{display:grid;grid-template-columns:1fr 1fr;gap:.6rem;margin-top:.4rem}
.sc-pc ul{margin:.2rem 0 0 1rem;padding:0}
.sc-pc li{font-size:.88rem;color:var(--ink);margin-bottom:.15rem}
.sc-pc h5{color:var(--muted)}
.sc-vote{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:.7rem;padding-top:.7rem;border-top:1px solid var(--line)}
.sc-btn{background:var(--night2);border:1px solid var(--line);border-radius:999px;padding:.35rem .85rem;color:var(--star);cursor:pointer;font-size:.95rem;font-family:var(--sans)}
.sc-btn.up.on{background:#1f7a3d;border-color:#2c9b52;color:#fff}
.sc-btn.down.on{background:#7a1f2b;border-color:#a3384a;color:#fff}
.sc-confirm{margin-left:auto;background:var(--lamp);color:#241706;border:none;border-radius:8px;padding:.4rem .85rem;cursor:pointer;font-weight:600;font-family:var(--sans)}
.sc-confirm.is{background:var(--night2);color:var(--muted);border:1px solid var(--line)}
.sc-suggest{margin-top:.7rem}
.sc-suggest summary{cursor:pointer;color:var(--star);font-size:.9rem}
.sc-notes{margin:.5rem 0}
.sc-note{padding:.35rem 0;border-bottom:1px dashed var(--line);font-size:.9rem}
.sc-note-who{color:var(--star);font-weight:600;margin-right:.5rem}
.sc-suggest-form{display:flex;flex-direction:column;gap:.4rem;margin-top:.5rem}
.sc-suggest-form textarea{background:var(--night2);border:1px solid var(--line);border-radius:8px;color:var(--ink);padding:.5rem;font-family:var(--sans);resize:vertical}
.sc-suggest-form button{align-self:flex-start}
@media(max-width:640px){.sc-pc{grid-template-columns:1fr}}

/* ── Script suggestions (/suggestions) ── */
.sc-suggest-link{display:inline-block;margin-top:.7rem;color:var(--star);font-size:.9rem;border:1px solid var(--line);border-radius:999px;padding:.35rem .85rem}
.sc-suggest-link:hover{border-color:var(--lamp);color:var(--lamp)}
.sg-vers{display:flex;flex-wrap:wrap;gap:.4rem;margin:.5rem 0 1.2rem}
.sg-vtab{border:1px solid var(--line);border-radius:999px;padding:.35rem .8rem;font-size:.9rem;color:var(--muted);display:inline-flex;gap:.4rem;align-items:center}
.sg-vtab:hover{border-color:var(--lamp);color:var(--star)}
.sg-vtab.on{background:var(--panel2);color:var(--lamp);border-color:rgba(232,181,99,.4)}
.sg-vn{background:var(--night2);border-radius:999px;padding:0 .4rem;font-size:.78rem;font-variant-numeric:tabular-nums}
.sg-vtab.on .sg-vn{background:var(--lamp);color:#241706}
.sg-form{display:flex;flex-direction:column;gap:.7rem;margin-bottom:1.5rem}
.sg-form-row{display:flex;flex-wrap:wrap;gap:.7rem}
.sg-form-row label{display:grid;gap:.3rem;font-size:.85rem;color:var(--muted);flex:1;min-width:170px}
.sg-form textarea{background:var(--night2);border:1px solid var(--line);border-radius:10px;color:var(--ink);padding:.7rem;font-family:var(--sans);resize:vertical}
.sg-form button{align-self:flex-start}
.sg-part{margin-bottom:1.3rem}
.sg-part-h{font-size:1.02rem;color:var(--lamp-soft);border-bottom:1px solid var(--line);padding-bottom:.3rem;margin-bottom:.6rem;display:flex;align-items:center;gap:.5rem}
.sg-part-n{background:var(--night2);border-radius:999px;padding:0 .5rem;font-size:.78rem;color:var(--muted)}
.sg-item{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.6rem .8rem;margin-bottom:.5rem}
.sg-item-top{display:flex;justify-content:space-between;gap:.5rem;font-size:.82rem;margin-bottom:.25rem}
.sg-who{color:var(--star);font-weight:600}
.sg-when{color:var(--muted);font-variant-numeric:tabular-nums}
.sg-body{color:var(--ink);font-size:.95rem}

/* ── Version comparison table + sample beats (/scripts) ── */
.sv-compare-title{font-family:var(--serif);color:var(--star);font-size:1.05rem;margin:0 0 .5rem}
.sv-compare-wrap{overflow-x:auto;margin:0 0 1.6rem;border:1px solid var(--line);border-radius:12px}
.sv-compare{border-collapse:collapse;width:100%;min-width:580px;font-size:.85rem}
.sv-compare th,.sv-compare td{padding:.5rem .65rem;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
.sv-compare thead th{color:var(--lamp-soft);font-family:var(--serif);font-weight:600;background:var(--panel)}
.sv-compare tbody tr:last-child th,.sv-compare tbody tr:last-child td{border-bottom:none}
.sv-cmp-lbl{color:var(--muted);white-space:nowrap;font-weight:500}
.sv-compare td{color:var(--ink)}
.sv-beats{margin-top:.7rem}
.sv-beats summary{cursor:pointer;color:var(--star);font-size:.9rem}
.sv-beats-list{margin:.5rem 0 0 1rem;padding:0;display:grid;gap:.35rem}
.sv-beats-list li{font-size:.9rem;color:var(--ink);line-height:1.5}

/* ── Rehearsals & meetings (/schedule) — aligned date column ── */
.evt-list{display:grid;gap:.9rem;margin-top:1.3rem}
.evt2{display:grid;grid-template-columns:minmax(120px,155px) 1fr;background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.evt2-when{background:var(--night2);padding:.9rem 1rem;display:flex;flex-direction:column;gap:.3rem;justify-content:center;border-right:1px solid var(--line)}
.evt2-time{color:var(--lamp-soft);font-family:var(--serif);font-size:1.02rem;font-weight:600;line-height:1.3}
.evt2-place{color:var(--muted);font-size:.82rem}
.evt2-main{padding:.85rem 1.1rem}
.evt2-top{display:flex;justify-content:space-between;align-items:flex-start;gap:.6rem}
.evt2-title{font-family:var(--serif);font-size:1.15rem;color:var(--star);margin:0}
.evt2-notes{color:var(--muted);font-size:.9rem;margin:.35rem 0 0}
.evt2 .rsvp-row{margin:.7rem 0 0}
.evt2-who{color:var(--muted);font-size:.84rem;margin:.55rem 0 0;border-top:1px dashed var(--line);padding-top:.5rem}
.evt2-who-lbl{color:var(--ok)}
@media(max-width:560px){.evt2{grid-template-columns:1fr}.evt2-when{border-right:none;border-bottom:1px solid var(--line);flex-direction:row;align-items:center;gap:.7rem}}

.sv-fp-link{font-size:.8rem;color:var(--lamp);font-family:var(--sans);font-weight:400;margin-left:.5rem;white-space:nowrap}
.sv-fp-link:hover{color:var(--lamp-soft)}

/* ── Shared venue plan (embedded on /version) ── */
.fp-scroll{overflow-x:auto;border-radius:14px;margin-top:1rem}
.fp{position:relative;min-width:760px;width:100%;aspect-ratio:100/56;background:var(--night);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.fp .rg{position:absolute;border-radius:8px}
.fp .zc{background:rgba(120,160,120,.10);border:1.5px dashed rgba(120,160,120,.32)}
.fp .zc.al{background:rgba(232,181,99,.12);border:1.5px dashed rgba(232,181,99,.5)}
.fp .rm{position:absolute;background:var(--panel);border:1.5px solid var(--line);border-radius:7px;color:var(--ink);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2px;overflow:hidden;font-weight:600;font-size:clamp(.55rem,1.4vw,.82rem)}
.fp .rm .zh{font-size:.72em;color:var(--muted);font-weight:400;line-height:1.15;margin-top:1px}
.fp .rm.za{box-shadow:inset 0 0 0 999px rgba(232,181,99,.18)}
.fp .rm.zb{box-shadow:inset 0 0 0 999px rgba(232,181,99,.09)}
.fp .rm.ex{background:transparent;border-style:dashed;border-color:#e0795a;color:#e89a63}
.fp .rm.ex .zh{color:#e89a63}
.fp .tg{position:absolute;transform:translate(-50%,-50%);text-align:center;color:var(--muted);font-size:clamp(.5rem,1.15vw,.72rem);line-height:1.2;pointer-events:none}
.fp .tg b{color:var(--ink);display:block}
.fp .chip{position:absolute;transform:translate(-50%,-50%);font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;background:rgba(232,181,99,.14);color:var(--lamp);border:1px solid var(--lamp-soft);border-radius:999px;padding:.1rem .5rem;white-space:nowrap;pointer-events:none}
.fp .gt{position:absolute;transform:translate(-50%,-50%);text-align:center;color:var(--lamp);font-weight:700;font-size:clamp(.52rem,1.15vw,.7rem);line-height:1.15;pointer-events:none}
.fp .gt .i{font-size:1.5em;display:block}
.fp .al-lbl{position:absolute;transform:translate(-50%,-50%);color:var(--lamp);font-weight:600;font-size:clamp(.5rem,1.1vw,.68rem);white-space:nowrap;pointer-events:none}
.fp .fp-exit{position:absolute;transform:translate(-50%,-50%);background:#c9542f;color:#fff;font-weight:700;font-size:.62rem;border-radius:6px;padding:.05rem .35rem;pointer-events:none;box-shadow:0 1px 2px rgba(0,0,0,.45)}
.fp svg.fl{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:3}
.fp-key{list-style:none;margin:.8rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}
.fp-key li{display:inline-flex;align-items:center;gap:.4rem;font-size:.85rem;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:.25rem .7rem}
.fp-key .n{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;border-radius:50%;background:#6fe3a6;color:#06110b;font-weight:800;font-size:.78rem}
/* version page layout */
.ver-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-top:1.3rem}
.ver-grid .card{margin:0}
.ver-h{margin:0 0 .5rem;font-family:var(--serif);color:var(--lamp-soft);font-size:1.05rem}
.ver-actions{display:flex;flex-wrap:wrap;align-items:center;gap:1rem;justify-content:space-between;margin-top:1.2rem}
.ver-actions .sc-vote{margin:0;padding:0;border:none}
@media(max-width:720px){.ver-grid{grid-template-columns:1fr}}
/* version link on vote cards */
.sc-open-link{display:inline-block;margin-top:.7rem;margin-left:.6rem;color:var(--lamp);font-size:.9rem}
.sc-open-link:hover{color:var(--lamp-soft)}

/* ── Version page: flow breadcrumb + cafeteria zone ── */
.fp .caf{background:rgba(232,181,99,.09);border:1.5px dashed var(--lamp-soft)}
.ver-flow{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;margin:.4rem 0 1rem;padding:.7rem .8rem;background:var(--panel);border:1px solid var(--line);border-radius:12px}
.ver-step{display:inline-flex;align-items:center;gap:.4rem;font-size:.86rem;color:var(--ink)}
.ver-step-c{display:inline-flex;align-items:center;justify-content:center;min-width:1.6rem;height:1.6rem;padding:0 .35rem;border-radius:999px;background:var(--lamp);color:#241706;font-weight:800;font-size:.76rem}
.ver-arrow{color:var(--lamp);font-weight:700;font-size:1.05rem}
.ver-beats-card{margin-top:1rem}

/* ── Editable plan elements (shared render + editor) ── */
.fp .fp-box{position:absolute;box-sizing:border-box;border-radius:7px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2px;overflow:hidden}
.fp .fp-box .fp-a{font-weight:600;font-size:clamp(.55rem,1.4vw,.82rem);color:var(--ink);line-height:1.15}
.fp .fp-box .fp-b{font-size:clamp(.48rem,1.1vw,.68rem);color:var(--muted);line-height:1.15;margin-top:1px}
.fp .fp-box.bldg{background:var(--panel);border:1.5px solid var(--line)}
.fp .fp-box.za{background:var(--panel);border:1.5px solid var(--line);box-shadow:inset 0 0 0 999px rgba(232,181,99,.18)}
.fp .fp-box.zb{background:var(--panel);border:1.5px solid var(--line);box-shadow:inset 0 0 0 999px rgba(232,181,99,.09)}
.fp .fp-box.zone{background:rgba(120,160,120,.10);border:1.5px dashed rgba(120,160,120,.32)}
.fp .fp-box.caf{background:rgba(232,181,99,.09);border:1.5px dashed var(--lamp-soft)}
.fp .fp-box.alley{background:rgba(232,181,99,.12);border:1.5px dashed rgba(232,181,99,.5)}
.fp .fp-box.alley .fp-a{color:var(--lamp);font-weight:600}
.fp .fp-box.exit{background:transparent;border:1.5px dashed #e0795a}
.fp .fp-box.exit .fp-a,.fp .fp-box.exit .fp-b{color:#e89a63}
.fp .fp-mark{position:absolute;transform:translate(-50%,-50%);text-align:center;white-space:nowrap;line-height:1.15}
.fp .fp-mark .fp-a{display:block}
.fp .fp-mark .fp-b{display:block;font-size:.85em;color:var(--muted)}
.fp .fp-mark.label .fp-a{color:var(--ink);font-weight:600;font-size:clamp(.55rem,1.2vw,.76rem)}
.fp .fp-mark.chip{background:rgba(232,181,99,.14);border:1px solid var(--lamp-soft);border-radius:999px;padding:.1rem .5rem}
.fp .fp-mark.chip .fp-a{color:var(--lamp);font-size:.58rem;letter-spacing:.08em;text-transform:uppercase}
.fp .fp-mark.gate .fp-a,.fp .fp-mark.stair .fp-a{color:var(--lamp);font-weight:700;font-size:clamp(.52rem,1.15vw,.7rem)}
.fp .fp-mark.gate .fp-i,.fp .fp-mark.stair .fp-i{color:var(--lamp);font-size:clamp(.9rem,2.2vw,1.4rem);display:block}
.fp .fp-mark.ebadge{background:#c9542f;border-radius:6px;padding:.05rem .4rem;box-shadow:0 1px 2px rgba(0,0,0,.45)}
.fp .fp-mark.ebadge .fp-a{color:#fff;font-weight:700;font-size:.64rem}
.fp.edit .fp-box,.fp.edit .fp-mark{cursor:move;user-select:none}
.fp .fp-box.sel,.fp .fp-mark.sel{outline:2px solid var(--lamp);outline-offset:1px;z-index:8}
.fp .fp-rs{position:absolute;right:-5px;bottom:-5px;width:13px;height:13px;background:var(--lamp);border:1.5px solid #241706;border-radius:3px;cursor:nwse-resize;z-index:9}
.me-bar{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin:.5rem 0 1rem}
.me-bar .me-lbl{font-size:.8rem;color:var(--muted);margin-right:.2rem}
.me-panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.9rem;margin-top:1rem;display:grid;gap:.7rem}
.me-panel-row{display:flex;gap:.7rem;align-items:flex-end;justify-content:space-between}
.me-panel label{display:grid;gap:.3rem;font-size:.85rem;color:var(--muted);flex:1}
.me-panel input,.me-panel select{background:var(--night2);border:1px solid var(--line);border-radius:8px;color:var(--star);padding:.5rem .6rem;font-family:var(--sans);font-size:.95rem;width:100%}
.me-save{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center;margin-top:1.2rem}
.me-tip{font-size:.8rem;color:var(--muted);flex-basis:100%}
.me-editlink{display:inline-block;margin:.2rem 0 .6rem;color:var(--lamp);font-size:.92rem}
.sc-links{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:.9rem;align-items:center}
.sc-open-link,.sc-suggest-link{display:inline-block;margin:0;font-size:1rem;padding:.5rem 1rem;border-radius:999px;border:1px solid var(--line)}
/* PRIMARY CTA — bold gold button + gentle pulse so it's the obvious thing to click */
.sc-open-link{background:var(--lamp);border-color:var(--lamp);color:#241706 !important;font-weight:800;font-size:1.05rem;padding:.72rem 1.4rem;box-shadow:0 0 18px -5px var(--lamp);animation:scPulse 2.6s ease-in-out infinite}
.sc-open-link:hover{background:var(--lamp-soft);border-color:var(--lamp-soft);color:#241706 !important;transform:translateY(-1px)}
@keyframes scPulse{0%,100%{box-shadow:0 0 15px -6px var(--lamp)}50%{box-shadow:0 0 26px 0 rgba(232,181,99,.55)}}
@media (prefers-reduced-motion: reduce){.sc-open-link{animation:none}}
/* secondary */
.sc-suggest-link{color:var(--star);background:transparent}
.sc-suggest-link:hover{border-color:var(--lamp);color:var(--lamp-soft)}

/* ── Map editor: layers, road path, point handles, locked background ── */
.me-layers{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin:.3rem 0 .6rem}
.me-ltab{border:1px solid var(--line);border-radius:999px;padding:.35rem .8rem;font-size:.88rem;color:var(--muted)}
.me-ltab:hover{border-color:var(--lamp);color:var(--star)}
.me-ltab.on{background:var(--panel2);color:var(--lamp);border-color:rgba(232,181,99,.4)}
.me-note{color:var(--muted);font-size:.85rem;margin:.1rem 0 1rem}
.me-sep{width:1px;height:1.4rem;background:var(--line);margin:0 .3rem}
.me-bar .btn-sm.on{background:#6fe3a6;color:#06110b}
.fp .fp-bg{opacity:.4;pointer-events:none;filter:grayscale(.5)}
.fp svg.fp-paths{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:2}
.fp .fp-path{fill:none;stroke:#6fe3a6;stroke-width:.6;vector-effect:non-scaling-stroke;stroke-dasharray:2.5 2.5;stroke-linecap:round;opacity:.9}
.fp .fp-pdot{fill:#6fe3a6}
.fp .fp-pnum{fill:#06110b;font-size:2.5px;font-weight:700;font-family:var(--sans)}
.fp .fp-pt{position:absolute;transform:translate(-50%,-50%);width:18px;height:18px;border-radius:50%;background:#6fe3a6;color:#06110b;font-weight:800;font-size:.7rem;display:flex;align-items:center;justify-content:center;cursor:move;z-index:9;border:1.5px solid #06110b}
.fp.pathmode{cursor:crosshair}

/* editor: keep small markers grabbable above big boxes, with a larger hit area */
.fp.edit .fp-mark{z-index:5}
.fp.edit .fp-mark::after{content:"";position:absolute;inset:-8px;border-radius:8px}
.fp.edit .fp-box.sel,.fp.edit .fp-mark.sel{z-index:12}

/* map editor: side element list + position inputs */
.me-cols{display:grid;grid-template-columns:1fr 250px;gap:1rem;align-items:start}
@media(max-width:820px){.me-cols{grid-template-columns:1fr}}
.me-side .me-lbl{display:block;margin-bottom:.4rem}
.me-list{display:flex;flex-direction:column;gap:.25rem;max-height:60vh;overflow-y:auto;border:1px solid var(--line);border-radius:10px;padding:.4rem;background:var(--panel)}
.me-litem{display:flex;gap:.5rem;align-items:center;text-align:left;background:transparent;border:1px solid transparent;border-radius:8px;padding:.35rem .5rem;color:var(--ink);font-family:var(--sans);font-size:.85rem;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.me-litem:hover{border-color:var(--line);background:var(--night2)}
.me-litem.on{border-color:var(--lamp);background:var(--panel2);color:var(--lamp)}
.me-lt{font-size:.7rem;color:var(--muted);background:var(--night2);border-radius:4px;padding:.05rem .35rem;flex:none}
.me-litem.on .me-lt{color:var(--lamp)}
.me-pos{gap:.5rem}
.me-pos label{font-size:.8rem;flex:1}
.me-pos input{width:100%}

/* per-element label alignment (editor + render) */
.fp .fp-box.al-left{align-items:flex-start;text-align:left;padding-left:6px}
.fp .fp-box.al-right{align-items:flex-end;text-align:right;padding-right:6px}
.fp .fp-box.va-top{justify-content:flex-start;padding-top:4px}
.fp .fp-box.va-bottom{justify-content:flex-end;padding-bottom:4px}
.fp .fp-mark.al-left .fp-a,.fp .fp-mark.al-left .fp-b{text-align:left}
.fp .fp-mark.al-right .fp-a,.fp .fp-mark.al-right .fp-b{text-align:right}

/* version-page route markers: identical to the editor handles, just non-interactive */
.fp .fp-pt.view{cursor:default;pointer-events:none}

/* Scripts hub: main script + crew proposals */
.ms-card{border:1px solid var(--lamp);box-shadow:0 0 0 1px var(--lamp) inset;margin-bottom:1.6rem}
.ms-top{display:flex;justify-content:space-between;align-items:center;gap:.6rem;margin-bottom:.3rem}
.ms-badge{background:var(--lamp);color:#241706}
.ms-switch select{background:var(--night2);border:1px solid var(--line);border-radius:8px;color:var(--star);padding:.3rem .5rem;font-family:var(--sans);font-size:.85rem}
.ms-title{font-family:var(--serif);font-size:1.3rem;color:var(--star);margin:.2rem 0}
.prop-card{margin-bottom:.9rem}
.prop-top{display:flex;justify-content:space-between;align-items:baseline;gap:.6rem}
.prop-title{font-family:var(--serif);font-size:1.1rem;color:var(--star);margin:0}
.prop-body{color:var(--ink);font-size:.95rem;margin:.4rem 0 .2rem;white-space:pre-wrap}
.prop-del{margin-left:auto}

/* ── Admin feedback dashboard ── */
.fb-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.8rem;margin:1.2rem 0}
.fb-num{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.9rem;text-align:center}
.fb-n{display:block;font-family:var(--serif);font-size:1.8rem;color:var(--lamp);font-variant-numeric:tabular-nums}
.fb-l{display:block;font-size:.8rem;color:var(--muted);margin-top:.2rem}
.fb-tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:12px}
.fb-table{border-collapse:collapse;width:100%;min-width:480px;font-size:.9rem}
.fb-table th,.fb-table td{padding:.5rem .7rem;text-align:left;border-bottom:1px solid var(--line);vertical-align:middle}
.fb-table thead th{color:var(--muted);font-weight:500}
.fb-table tbody tr:last-child td{border-bottom:none}
.fb-r{text-align:right;font-variant-numeric:tabular-nums}
.fb-barh{width:34%}
.fb-bar{display:block;height:8px;background:var(--night2);border-radius:999px;overflow:hidden}
.fb-bar span{display:block;height:100%;background:var(--lamp);border-radius:999px}
.fb-votes{display:grid;gap:.35rem;margin:.5rem 0 1rem}
.fb-vrow{display:grid;grid-template-columns:1fr auto auto;gap:.8rem;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.5rem .8rem;font-size:.9rem}
.fb-vrow.main{border-color:var(--lamp)}
.fb-vname{color:var(--ink)}
.fb-vup{color:var(--ok)} .fb-vdown{color:#e89a63}
.fb-item{margin-bottom:.7rem}
.fb-item-b{color:var(--ink);font-size:.92rem;margin-top:.35rem;white-space:pre-wrap}
.fb-sug{border-bottom:1px dashed var(--line);padding:.6rem 0}
.fb-sug-h{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.25rem}
.fb-tag{background:var(--goldtint);color:var(--lamp);border:1px solid var(--lamp-soft);border-radius:999px;padding:.05rem .5rem;font-size:.75rem}
.fb-tag2{background:var(--night2);color:var(--muted);border-radius:999px;padding:.05rem .5rem;font-size:.75rem}
.fb-sug-b{color:var(--ink);font-size:.92rem;white-space:pre-wrap}

/* desktop: content 1px smaller (rem-based sizes scale with the root) */
@media(min-width:769px){html{font-size:15px}}

/* ── Version page tabs + collapsible doc sections ── */
.vtabs{display:flex;flex-wrap:wrap;gap:.4rem;margin:.4rem 0 1.1rem;border-bottom:1px solid var(--line);padding-bottom:.7rem}
.vtab{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:999px;padding:.45rem .95rem;font-size:.92rem;font-family:var(--sans);cursor:pointer}
.vtab:hover{border-color:var(--lamp);color:var(--star)}
.vtab.on{background:var(--panel2);color:var(--lamp);border-color:rgba(232,181,99,.4)}
.vpanel[hidden]{display:none}
.vt-sec{background:var(--panel);border:1px solid var(--line);border-radius:12px;margin-bottom:.7rem;overflow:hidden}
.vt-sec summary{cursor:pointer;padding:.8rem 1rem;font-family:var(--serif);font-size:1.05rem;color:var(--lamp-soft);list-style:none;display:flex;align-items:center;gap:.5rem}
.vt-sec summary::-webkit-details-marker{display:none}
.vt-sec summary::before{content:"▸";color:var(--muted);transition:transform .15s;flex:none}
.vt-sec[open] summary::before{transform:rotate(90deg)}
.vt-sec[open] summary{border-bottom:1px solid var(--line)}
.vt-body{padding:.9rem 1.1rem}
.vt-body h3{font-family:var(--serif);color:var(--star);font-size:1rem;margin:.9rem 0 .35rem}
.vt-body h3:first-child{margin-top:0}
.vt-body p{margin:.35rem 0;color:var(--ink)}
.vt-body ul,.vt-body ol{margin:.3rem 0 .5rem 1.2rem;display:grid;gap:.3rem}
.vt-body blockquote{border-left:3px solid var(--lamp-soft);padding:.4rem .8rem;margin:.5rem 0;color:var(--muted);background:var(--night2);border-radius:6px}
.vt-body .tbl-wrap{overflow-x:auto;margin:.5rem 0;border:1px solid var(--line);border-radius:10px}
.vt-body .md-tbl{border-collapse:collapse;width:100%;min-width:520px;font-size:.88rem}
.vt-body .md-tbl th,.vt-body .md-tbl td{padding:.45rem .6rem;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
.vt-body .md-tbl thead th{color:var(--lamp-soft);background:var(--night2)}
.vt-body .md-tbl tbody tr:last-child td{border-bottom:none}

/* combined version page: quick-jump pills + section anchors clear the sticky header */
.vsec-h{scroll-margin-top:5.5rem;margin-top:2.6rem}
#overview{scroll-margin-top:5.5rem}

/* interactive map → station jump */
.fp .fp-link{cursor:pointer;transition:box-shadow .15s,border-color .15s}
.fp .fp-box.fp-link:hover{border-color:var(--lamp);box-shadow:0 0 0 2px rgba(232,181,99,.35)}
.fp .fp-mark.fp-link:hover{filter:drop-shadow(0 0 6px rgba(232,181,99,.8))}
details.vt-sec{scroll-margin-top:5.5rem}
details.vt-sec.vt-flash{border-color:var(--lamp);box-shadow:0 0 0 2px rgba(232,181,99,.35)}

/* unified journey: clickable flow chips + nested script dropdowns */
button.ver-step{background:transparent;border:none;padding:0;cursor:pointer;font-family:var(--sans)}
button.ver-step:hover .ver-step-c{background:var(--lamp-soft)}
button.ver-step:hover{color:var(--lamp)}
.vt-sub{background:var(--night2);border:1px solid rgba(232,181,99,.3);border-radius:10px;margin-top:.9rem;overflow:hidden}
.vt-sub summary{cursor:pointer;padding:.6rem .9rem;color:var(--lamp);font-size:.95rem;list-style:none;display:flex;align-items:center;gap:.4rem}
.vt-sub summary::-webkit-details-marker{display:none}
.vt-sub summary::before{content:"▸";color:var(--muted);transition:transform .15s}
.vt-sub[open] summary::before{transform:rotate(90deg)}
.vt-sub[open] summary{border-bottom:1px solid var(--line)}
.vt-sec.vt-guard{border-color:rgba(232,181,99,.45)}

/* scripts hub: synopsis + how-to steps */
.ms-desc{color:var(--ink);font-size:.95rem;line-height:1.75;margin:.5rem 0 .9rem;border-left:3px solid var(--lamp-soft);padding:.4rem .9rem;background:var(--night2);border-radius:0 8px 8px 0}
.sv-steps{display:flex;flex-wrap:wrap;gap:.5rem 1.2rem;margin:0 0 1.2rem}
.sv-step{display:inline-flex;align-items:center;gap:.45rem;color:var(--muted);font-size:.88rem}
.sv-step i{font-style:normal;display:inline-flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;border-radius:50%;background:var(--lamp);color:#241706;font-weight:700;font-size:.78rem;flex:none}

/* suggestion voting (the only place votes live now) */
.sg-vote{display:flex;gap:.4rem;margin-top:.5rem}
.sc-btn.sm{padding:.2rem .65rem;font-size:.85rem}

/* ── 筹备委员会 committee page ── */
.ct-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.9rem;margin-top:1.2rem}
.ct-card{display:flex;gap:.9rem;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:1rem}
.ct-ava{width:52px;height:52px;border-radius:50%;background:var(--goldtint);border:1.5px solid var(--lamp-soft);color:var(--lamp);display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:1.35rem;font-weight:700;flex:none}
.ct-name{color:var(--star);font-weight:600}
.ct-title{color:var(--lamp);font-size:.9rem;margin-top:.1rem}
.ct-mobile,.ct-depts{color:var(--muted);font-size:.8rem;margin-top:.15rem}
.badge.ct-badge,.badge.hod-badge,.badge.adm-badge{background:var(--goldtint);color:var(--lamp);border:1px solid var(--lamp-soft)}

/* ── /servereview by-position: collapsible rows with applicant-count badges ── */
.sr-poshint{margin:.6rem 0 .4rem}
.sr-grp{color:var(--lamp-soft);font-family:var(--serif);font-size:.9rem;margin:1.1rem 0 .5rem}
.srp-row{background:var(--panel);border:1px solid var(--line);border-radius:10px;margin-bottom:.4rem}
.srp-row.srp-empty{opacity:.55}
.srp-row > summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.5rem;padding:.6rem .8rem}
.srp-row > summary::-webkit-details-marker{display:none}
.srp-name{color:var(--ink);font-size:.92rem;display:inline-flex;align-items:center;flex:1;min-width:0}
.srp-count{flex:none;min-width:1.6rem;height:1.6rem;padding:0 .5rem;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:var(--night2);border:1px solid var(--line);color:var(--muted);font-size:.85rem;font-weight:800}
.srp-count.has{background:var(--lamp);border-color:var(--lamp);color:#241706}
.srp-caret{flex:none;color:var(--muted);transition:transform .2s}
.srp-row[open] .srp-caret{transform:rotate(180deg);color:var(--lamp)}
.srp-row[open] > summary{border-bottom:1px solid var(--line)}
.srp-body{display:flex;flex-wrap:wrap;gap:.4rem;padding:.7rem .8rem}

/* ── serving applications review (/servereview) ── */
.sr-card{margin-bottom:.45rem}
.sr-wishes{display:flex;flex-direction:column;gap:.4rem}
.sr-wish{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .6rem;padding:.45rem .6rem;background:var(--panel);border:1px solid var(--line);border-radius:9px}
.sr-w-name{flex:1;min-width:150px;color:var(--ink);font-size:.9rem;display:inline-flex;align-items:center}
.sr-w-act{flex:none}
.sr-note{margin-top:.5rem;color:var(--star);font-size:.85rem;line-height:1.5}
.sr-accept{background:var(--lamp);border-color:var(--lamp);color:#241706;font-weight:700}
.sr-teamchip{display:inline-flex;align-items:center;gap:.3rem;background:var(--night2);border:1px solid var(--line);border-radius:999px;padding:.15rem .3rem .15rem .6rem;font-size:.82rem;color:var(--ink)}
.chip-ok{background:rgba(120,180,120,.14);color:#8fce8f;border:1px solid rgba(120,180,120,.4)}

/* ── /people team directory: filter + collapsible rows ── */
.pl-filter{margin:.8rem 0 .6rem}
.pl-search{width:100%;background:var(--night2);border:1px solid var(--line);border-radius:10px;color:var(--ink);padding:.55rem .8rem;font-family:var(--sans);font-size:.9rem}
.pl-search:focus{outline:none;border-color:var(--lamp)}
.pl-chips{margin:.5rem 0 0}
.pl-list{display:flex;flex-direction:column;gap:.45rem;margin-top:.6rem}
.pl-row{background:var(--panel);border:1px solid var(--line);border-radius:12px}
.pl-row > summary{list-style:none;cursor:pointer;display:flex;flex-direction:column;gap:.4rem;padding:.7rem .85rem}
.pl-row > summary::-webkit-details-marker{display:none}
.pl-top{display:flex;align-items:center;gap:.5rem}
.pl-name{color:var(--ink);font-weight:400;font-size:.95rem;flex:1;min-width:0;line-height:1.35}
.pl-caret{flex:none;color:var(--muted);font-size:1.05rem;transition:transform .2s}
.pl-row[open] .pl-caret{transform:rotate(180deg);color:var(--lamp)}
.pl-badges{display:flex;flex-wrap:wrap;gap:.3rem}
.pl-badges .badge{margin:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-row[open] > summary{border-bottom:1px solid var(--line)}
.pl-body{display:flex;flex-wrap:wrap;gap:.4rem;padding:.7rem .85rem}
.pl-pos{background:var(--night2);border:1px solid var(--line);border-radius:999px;padding:.28rem .65rem;font-size:.85rem;color:var(--ink);max-width:100%}
.pl-empty{margin-top:.8rem}
@media (max-width:640px){
  .pl-filter{margin:.7rem 0 .5rem}
  .pl-chips{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:.2rem}
  .pl-chips button{flex:none}
  .pl-name{font-size:.98rem}
  .pl-badges .badge{font-size:.74rem}
}

/* ── /serve crew-items toolbar + inline add/delete ── */
.sv-head{display:flex;align-items:center;justify-content:space-between;gap:.6rem;flex-wrap:wrap}
.sv-tools{display:flex;gap:.4rem;flex:none}
.sv-additem{border:1px dashed var(--lamp-soft)}
.wish-x{display:none;background:transparent;border:none;color:#f0a3a3;cursor:pointer;font-size:.82rem;line-height:1;padding:0 .15rem;margin-left:auto;flex:none}
.wish-x:hover{color:#ffb3b3}
.wish-group.edit-on .wish-x{display:inline-block}
.wish-group.edit-on .wish-chk{border-color:#c05a5a}

/* ── attention call-out (e.g. "you haven't booked yet") ── */
.notice-cta{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;background:var(--goldtint);border:1.5px solid var(--lamp);border-radius:12px;padding:.8rem 1rem;box-shadow:0 0 16px -7px var(--lamp)}
.notice-ico{font-size:1.35rem;flex:none}
.notice-t{color:var(--star);font-weight:600;font-size:.92rem;flex:1;min-width:130px;margin:0}
.notice-cta .btn-sm{flex:none}

/* ── passkey / fingerprint login ── */
.wa-or{display:flex;align-items:center;gap:.6rem;color:var(--muted);font-size:.82rem;margin:1.1rem 0 .8rem}
.wa-or::before,.wa-or::after{content:"";flex:1;height:1px;background:var(--line)}
.wa-btn{width:100%}
.wa-item{gap:.5rem;align-items:center}
.login-bio-hint{margin-top:1rem;line-height:1.6}

/* ── 账户设置 settings list (clean expandable rows) ── */
.set-list{display:flex;flex-direction:column;gap:.5rem}
.set-row{background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.set-row > summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.6rem;padding:.8rem .9rem;font-size:.94rem;color:var(--ink)}
.set-row > summary::-webkit-details-marker{display:none}
.set-row > summary::after{content:"⌄";margin-left:auto;color:var(--muted);font-size:1.1rem;transition:transform .2s}
.set-row[open] > summary::after{transform:rotate(180deg);color:var(--lamp)}
.set-row > summary:hover{background:var(--panel2)}
.set-row[open] > summary{border-bottom:1px solid var(--line)}
.set-ico{font-size:1.05rem;flex:none;width:1.4rem;text-align:center}
.set-row .form{margin:0 !important;padding:.9rem !important;background:transparent !important;border:none !important;border-radius:0 !important;gap:.8rem}
.set-row.danger > summary{color:#eaa0a0}
.set-row.danger[open]{border-color:#c05a5a}

/* ── /account: my serving posts ── */
.ms-list{display:flex;flex-direction:column;gap:.4rem;margin-top:.5rem}
.ms-item{display:flex;align-items:center;gap:.55rem;padding:.45rem .6rem;background:var(--panel);border:1px solid var(--line);border-radius:9px}
.ms-tag{flex:none;font-size:.72rem;color:var(--muted);background:var(--night2);border:1px solid var(--line);border-radius:999px;padding:.1rem .5rem;min-width:2.6rem;text-align:center}
.ms-tag.gold{background:var(--goldtint);color:var(--lamp);border-color:var(--lamp-soft)}
.ms-name{flex:1;min-width:0;color:var(--ink);font-size:.92rem;display:inline-flex;align-items:center}

/* committee: position list rows + select2 assign */
.ct-list{display:grid;gap:.7rem;margin-top:1.2rem}
.ct-row{display:grid;grid-template-columns:minmax(130px,170px) 1fr;gap:.8rem;align-items:start;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.85rem 1rem}
.ct-pos-name{display:block;color:var(--lamp-soft);font-family:var(--serif);font-size:1.05rem;font-weight:600}
.ct-pos-max{color:var(--muted);font-size:.75rem}
.ct-holders{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.ct-assign{display:flex;gap:.5rem;align-items:center;flex:1;min-width:220px;max-width:340px}
.ct-assign .select2-container{flex:1}
@media(max-width:560px){.ct-row{grid-template-columns:1fr}}

/* committee dept-head rows: compact 2-col grid */
.ct-cluster{color:var(--muted);font-size:.85rem;letter-spacing:.08em;margin:1.1rem 0 .5rem}
.ct-dept-list{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}
.ct-dept-row{padding:.6rem .85rem}
.ct-dept-row .ct-pos-name{font-size:.95rem}
@media(max-width:720px){.ct-dept-list{grid-template-columns:1fr}}

/* church office badge + ministry invite card */
.badge.co-badge{background:rgba(127,160,200,.15);color:#9db8dd;border:1px solid rgba(127,160,200,.4)}
.inv-ministry{border-color:rgba(127,160,200,.4)}

/* roles: two rota-team multi-selects per role */
.team-forms{display:grid;grid-template-columns:1fr 1fr;gap:.7rem;margin-top:.6rem}
@media(max-width:720px){.team-forms{grid-template-columns:1fr}}
.team-form{display:flex;flex-direction:column;gap:.35rem;background:var(--night2);border:1px solid var(--line);border-radius:10px;padding:.6rem .7rem}
.team-lbl{color:var(--lamp-soft);font-size:.82rem;font-weight:600}
.team-form button{align-self:flex-start}
.role-del{margin-left:auto}

/* ── 🤫 soft low-key agreement (modal + inline notice) ── */
.tc-overlay{position:fixed;inset:0;z-index:60;background:rgba(6,9,15,.78);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:1rem}
.tc-overlay[hidden]{display:none}
.tc-modal{background:var(--panel);border:1px solid var(--lamp-soft);border-radius:16px;max-width:440px;width:100%;padding:1.5rem 1.6rem;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.tc-modal h3{font-family:var(--serif);color:var(--lamp-soft);font-size:1.2rem;margin-bottom:.7rem}
.tc-modal ul{margin:.2rem 0 1rem 1.1rem;display:grid;gap:.5rem}
.tc-modal li{color:var(--ink);font-size:.93rem;line-height:1.6}
.tc-dont{display:flex;align-items:center;gap:.5rem;color:var(--muted);font-size:.85rem;margin-bottom:.9rem;cursor:pointer}
.tc-dont input{accent-color:var(--lamp)}
.tc-ok{width:100%}
.tc-soft{margin-top:2rem;background:var(--panel);border:1px dashed var(--lamp-soft);border-radius:12px;padding:1rem 1.2rem}
.tc-soft h3{color:var(--lamp-soft);font-size:.95rem;margin-bottom:.5rem}
.tc-soft ul{margin:.2rem 0 .5rem 1.1rem;display:grid;gap:.3rem}
.tc-soft li{color:var(--muted);font-size:.85rem}
.tc-agree{color:var(--star);font-size:.85rem}

/* fix: glow buttons keep dark text on hover (was inheriting .btn:hover's light color) */
.btn.btn-glow:hover{color:#241706}

.rl-note{background:var(--panel);border-left:3px solid var(--lamp-soft);border-radius:0 8px 8px 0;padding:.55rem .9rem;color:var(--ink);font-size:.9rem;margin:-.8rem 0 1.2rem}

/* inputs: slightly brighter border (was barely visible on dark bg) */
.form input,.form select,.form-inline input{border-color:rgba(245,236,216,.24)}

/* ── 财政 finance ledger ── */
.fin-inc{color:var(--ok)!important}
.fin-exp{color:#e89a63!important}
.fin-list{display:grid;gap:.5rem;margin-top:1rem}
.fin-row{background:var(--panel);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.fin-row summary{display:flex;flex-wrap:wrap;gap:.6rem 1rem;align-items:center;padding:.65rem .9rem;cursor:pointer;list-style:none;font-size:.92rem}
.fin-row summary::-webkit-details-marker{display:none}
.fin-date{color:var(--muted);font-variant-numeric:tabular-nums}
.fin-kind{border-radius:999px;padding:.05rem .5rem;font-size:.75rem;border:1px solid}
.fin-kind.inc{color:var(--ok);border-color:rgba(127,200,160,.5)}
.fin-kind.exp{color:#e89a63;border-color:rgba(232,154,99,.5)}
.fin-cat{color:var(--muted);font-size:.8rem}
.fin-desc{color:var(--ink);flex:1;min-width:140px}
.fin-amt{font-variant-numeric:tabular-nums;font-weight:600}
.fin-amt.inc{color:var(--ok)} .fin-amt.exp{color:#e89a63}
.fin-att{color:var(--muted);font-size:.8rem}
.fin-body{padding:.4rem .9rem .9rem;border-top:1px solid var(--line)}

/* ── /version mobile redesign ── */
.fp-swipe-hint{display:none;color:var(--muted);font-size:.78rem;text-align:center;margin:.4rem 0 0}
@media(max-width:640px){
  /* flow breadcrumb: one swipeable line instead of a messy wrap */
  .ver-flow{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:.55rem .6rem;gap:.3rem}
  .ver-flow::-webkit-scrollbar{display:none}
  .ver-step{white-space:nowrap;font-size:.8rem;flex:none}
  .ver-step-c{min-width:1.4rem;height:1.4rem;font-size:.7rem}
  .ver-arrow{font-size:.9rem;flex:none}
  /* map: slightly narrower canvas + show the swipe hint */
  .fp{min-width:640px}
  .fp-swipe-hint{display:block}
  /* cards & journey sections: tighter */
  .ver-grid{gap:.6rem;margin-top:.9rem}
  .sc-rain{font-size:.85rem}
  .vt-sec summary{padding:.65rem .75rem;font-size:.95rem;line-height:1.4}
  .vt-body{padding:.7rem .75rem}
  .vt-body h3{font-size:.95rem}
  .vt-sub summary{padding:.5rem .7rem;font-size:.88rem}
  .vsec-h{font-size:1.15rem;margin-top:1.8rem}
  /* actions: full-width tap targets */
  .ver-actions{flex-direction:column;align-items:stretch}
  .ver-actions .sc-suggest-link{text-align:center;display:block}
  .page-title{font-size:1.35rem}
  .lead{font-size:.95rem}
}

/* mobile: slimmer page gutters everywhere */
@media (max-width: 560px) {
  .page { padding-left: 0.5rem; padding-right: 0.5rem; }
}

/* mobile: unify text inside bordered cards/sections to the cons-list size (.88rem) */
@media (max-width: 640px) {
  .card p, .card li, .card .sc-rain, .card .sc-tag, .card label,
  .vt-body p, .vt-body li, .vt-body td, .vt-body th, .vt-body blockquote,
  .sc-flow li, .sv-beats-list li, .ms-desc, .rl-note, .tc-soft li,
  .sg-body, .fin-row summary, .doc-block li, .doc-block p,
  .ct-row .ct-mobile, .ct-row .ct-depts, .prop-body {
    font-size: .88rem;
  }
}

/* mobile: box headings join the unified size too (hierarchy kept via weight/colour) */
@media (max-width: 640px) {
  .card h4, .card h5, .card .ver-h, .sc-pc h5,
  .vt-body h4, .vt-body h5,
  .sc-body h4, .fin-body p { font-size: .88rem; }
}

/* mobile: ONE content size site-wide (.88rem) — titles/section headers keep hierarchy */
@media (max-width: 640px) {
  .page p, .page li, .page td, .page th, .page label, .page blockquote,
  .page summary, .page .lead, .page .chip, .page .sc-tag, .page .ver-step,
  .page input, .page select, .page textarea, .page .linkbtn, .page .btn-sm,
  .page .fb-vrow, .page .sg-vtab, .page .me-ltab, .page .fp-key li { font-size: .88rem; }
}

/* mobile: tighter top padding on pages */
@media (max-width: 640px) {
  .page { padding-top: 0.9rem; }
}

/* ── /version mobile v2: sticky jump bar · fit-to-width map + zoom · stacked tables ── */
.fp-zoom{display:none}
@media (max-width: 640px) {
  /* sticky station jump bar under the header */
  .ver-flow{position:sticky;top:3.3rem;z-index:15;background:rgba(10,14,26,.92);backdrop-filter:blur(10px)}
  /* map fits the screen first; 🔍 switches to the big swipeable canvas */
  .fp{min-width:100%}
  .fp.zoomed{min-width:640px}
  .fp-zoom{display:inline-block;margin-top:.5rem}
  /* station/cast tables: no more sideways scrolling — each row becomes a stacked block */
  .vt-body .tbl-wrap{border:none;overflow:visible}
  .vt-body .md-tbl{min-width:0;display:block}
  .vt-body .md-tbl thead{display:none}
  .vt-body .md-tbl tbody{display:block}
  .vt-body .md-tbl tr{display:block;border:1px solid var(--line);border-radius:8px;margin-bottom:.5rem;padding:.5rem .65rem;background:var(--night2)}
  .vt-body .md-tbl tr:last-child{margin-bottom:0}
  .vt-body .md-tbl td{display:block;border:none;padding:.1rem 0}
  .vt-body .md-tbl td:first-child{color:var(--lamp-soft);font-weight:700;font-size:.78rem;letter-spacing:.05em}
}

/* fix: fit-to-width map is a clean MINIMAP (blocks + codes only); full labels appear when zoomed */
@media (max-width: 640px) {
  .fp:not(.zoomed) .fp-mark{display:none}                 /* hide gates/chips/badges at minimap scale */
  .fp:not(.zoomed) .fp-box .fp-b{display:none}            /* hide sub-labels */
  .fp:not(.zoomed) .fp-box{padding:0;border-width:1px;border-radius:4px}
  .fp:not(.zoomed) .fp-box .fp-a{font-size:.44rem;line-height:1.1;letter-spacing:0}
  .fp:not(.zoomed) .fp-pt.view{width:12px;height:12px;font-size:.5rem;border-width:1px}
  .fp:not(.zoomed) .al-lbl,.fp:not(.zoomed) .fp-swipe-hint{display:none}
}

/* ── /committee mobile: compact single-line rows ── */
@media (max-width: 640px) {
  .ct-list{gap:.45rem;margin-top:.8rem}
  .ct-row{grid-template-columns:auto 1fr;gap:.35rem .6rem;padding:.55rem .7rem;align-items:center}
  .ct-pos{display:flex;align-items:baseline;gap:.4rem;min-width:0}
  .ct-pos-name{font-size:.92rem;white-space:nowrap}
  .ct-pos-max{font-size:.68rem;flex:none}
  .ct-holders{justify-content:flex-end;gap:.35rem}
  .ct-holders .chip{font-size:.8rem;padding:.12rem .5rem}
  .ct-holders .muted.small{font-size:.75rem}
  .ct-assign{min-width:0;max-width:none;flex-basis:100%;margin-top:.15rem}
  .ct-assign .btn-sm{padding:.3rem .7rem;flex:none}
  .ct-dept-list{gap:.4rem}
  .ct-dept-row{padding:.45rem .65rem}
  .ct-dept-row .ct-pos-name{font-size:.85rem;white-space:normal;line-height:1.25}
  .ct-cluster{margin:.9rem 0 .35rem;font-size:.75rem}
  .page .rl-note{font-size:.82rem;padding:.45rem .7rem}
}

/* ── recheck fixes ── */
@media (max-width: 640px) {
  /* compact header so the sticky jump bar tucks exactly beneath it */
  .hd{padding:.55rem .9rem}
  .brand{font-size:1rem}
  .brand span{font-size:.5rem}
  .ver-flow{top:3.05rem}
  /* committee rows: flex flow — holders wrap gracefully instead of getting squeezed */
  .ct-row{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .6rem}
  .ct-pos{flex:none}
  .ct-holders{margin-left:auto;justify-content:flex-end}
  .ct-assign{flex-basis:100%;margin-left:0}
}

/* ── /committee mobile redesign: two-column mini-card grid ── */
@media (max-width: 640px) {
  .ct-list{display:grid;grid-template-columns:1fr 1fr;gap:.45rem}
  .ct-list .ct-row{display:flex;flex-direction:column;align-items:stretch;gap:.3rem;padding:.55rem .65rem;border-radius:10px}
  .ct-list > .ct-row:first-child{grid-column:1/-1}            /* 主席 full-width, honoured */
  .ct-pos{display:flex;justify-content:space-between;align-items:baseline;gap:.4rem}
  .ct-pos-name{font-size:.84rem;white-space:normal;line-height:1.25}
  .ct-pos-max{font-size:.65rem}
  .ct-holders{margin-left:0;justify-content:flex-start;gap:.3rem}
  .ct-holders .chip{font-size:.78rem;padding:.1rem .45rem}
  .ct-holders .muted.small{font-size:.72rem}
  .ct-assign{flex-basis:auto;width:100%;display:flex;gap:.35rem;margin:0}
  .ct-assign .select2-container{min-width:0;flex:1}
  .ct-assign .btn-sm{padding:.28rem .55rem;font-size:.75rem}
  .ct-dept-row .ct-pos-name{font-size:.8rem}
  .ct-cluster{margin:.9rem 0 .3rem}
}

/* ── mobile: NO left-right scrolling ── */
@media (max-width: 640px) {
  body{overflow-x:hidden}
  /* the culprit: select2's global min-width overflowed narrow cards */
  .select2-container{min-width:0!important}
  .assign-row .select2-container,.ct-assign .select2-container{min-width:0}
  /* station jump bar: wrap into compact rows instead of a sideways strip */
  .ver-flow{flex-wrap:wrap;overflow-x:visible;justify-content:flex-start;gap:.3rem}
  .ver-arrow{display:none}
  .ver-step{border:1px solid var(--line);border-radius:999px;padding:.18rem .5rem .18rem .2rem;background:var(--night2)}
  /* wide tables stay inside their own scroll box, never the page */
  .tbl-wrap,.fp-scroll{max-width:100%}
}

/* ── /committee FINAL layout: thin settings-style list, assign hidden behind ＋ ── */
.ct-flat{display:flex;flex-direction:column;gap:.4rem;margin-top:1rem}
.ct-flat .ct-line{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .6rem;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.55rem .8rem}
.ct-l-name{color:var(--lamp-soft);font-weight:600;font-size:.95rem}
.ct-line-dept .ct-l-name{color:var(--ink);font-weight:500;font-size:.9rem}
.ct-l-max{color:var(--muted);font-weight:400;font-size:.72rem;margin-left:.15rem}
.ct-l-who{display:flex;flex-wrap:wrap;gap:.3rem;align-items:center;margin-left:auto}
.ct-l-who .chip{font-size:.82rem;padding:.12rem .5rem}
.ct-add{display:contents}
.ct-add summary{list-style:none;cursor:pointer;width:1.6rem;height:1.6rem;border-radius:50%;border:1px dashed var(--lamp-soft);color:var(--lamp);display:flex;align-items:center;justify-content:center;font-size:1rem;flex:none}
.ct-add summary::-webkit-details-marker{display:none}
.ct-add[open] summary{background:var(--lamp);color:#241706;border-style:solid}
.ct-add .ct-assign{flex-basis:100%;display:flex;gap:.4rem;margin:.15rem 0 0}
.ct-add .ct-assign .select2-container{flex:1;min-width:0}

/* ── committee candidate suggestions: chips + collapsed "suggest mode" toggle (committee-only) ── */
.ct-cand-hint{margin:.3rem 0 .2rem;line-height:1.6}
.cand-area{flex-basis:100%;width:100%;display:flex;flex-wrap:wrap;gap:.35rem;align-items:center;margin-top:.4rem;padding-top:.4rem;border-top:1px dashed var(--line)}
.cand-chip{display:inline-flex;align-items:center;gap:.3rem;background:var(--night2);border:1px solid var(--line);border-radius:999px;padding:.18rem .3rem .18rem .6rem;font-size:.82rem;color:var(--ink)}
.cand-chip form{display:inline;line-height:0}
.cand-chip button{background:transparent;border:none;cursor:pointer;font-size:.82rem;padding:0 .1rem;line-height:1}
.cand-chip .cc-pick button{color:var(--lamp);font-weight:800}
.cand-chip .cc-pick button:hover{color:var(--lamp-soft)}
.cand-chip .cc-x button{color:var(--muted)}
.cand-chip .cc-x button:hover{color:#f0a3a3}
details.cand-sug{flex-basis:100%;width:100%}
details.cand-sug > summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:.25rem;background:var(--panel);border:1px dashed var(--lamp-soft);color:var(--lamp);border-radius:999px;padding:.2rem .7rem;font-size:.8rem}
details.cand-sug > summary::-webkit-details-marker{display:none}
details.cand-sug[open] > summary{background:var(--lamp);color:#241706;border-style:solid;font-weight:700}
.cand-sug-form{display:flex;gap:.4rem;align-items:flex-start;margin-top:.45rem;width:100%}
.cand-sug-form select{flex:1;min-width:0}
.cand-sug-form .select2-container{flex:1;min-width:0}
.cand-sug-form .btn-sm{flex:none}
@media (max-width:640px){.cand-sug-form{flex-wrap:wrap}.cand-sug-form .btn-sm{width:100%}}
/* neutralise the earlier experimental committee layouts */
@media (max-width: 640px) {
  .ct-flat{display:flex!important;flex-direction:column!important;gap:.35rem}
  .ct-flat .ct-line{padding:.5rem .65rem}
  .ct-l-name{font-size:.88rem}
  .ct-line-dept .ct-l-name{font-size:.84rem}
}

/* committee: desktop = inline selects like before (＋ hidden); mobile keeps the ＋ collapse */
@media (min-width: 641px) {
  .ct-add summary{display:none}
  .ct-add .ct-assign{flex-basis:auto;width:340px;margin:0}
}

/* ── /roles: ＋ collapse on mobile, inline on desktop; mobile compaction ── */
.rl-add summary{list-style:none;cursor:pointer;width:1.6rem;height:1.6rem;border-radius:50%;border:1px dashed var(--lamp-soft);color:var(--lamp);display:flex;align-items:center;justify-content:center;font-size:1rem}
.rl-add summary::-webkit-details-marker{display:none}
.rl-add[open] summary{background:var(--lamp);color:#241706;border-style:solid}
@media (min-width: 641px) {
  .rl-add summary{display:none}
}
@media (max-width: 640px) {
  .rl-add{margin-top:.4rem}
  .rl-add .pool-form{margin-top:.4rem}
  .role-list{gap:.45rem}
  .role-row{padding:.55rem .65rem}
  .role-main{gap:.4rem;flex-wrap:wrap}
  .role-name{font-size:.9rem}
  .role-count{font-size:.72rem}
  .role-meta{gap:.25rem;margin:.25rem 0}
  .rb{font-size:.66rem;padding:.06rem .4rem}
  .rb-diff .stars{display:none}          /* stars eat width; the label says it */
  .need-edit input{width:3rem;font-size:.8rem;padding:.15rem .3rem}
  .need-edit .mini{font-size:.7rem}
  .chips .chip{font-size:.78rem;padding:.1rem .45rem}
}

/* ── /finance mobile-only redesign ── */
@media (max-width: 640px) {
  /* totals: one tight 3-up strip */
  .fb-stats{grid-template-columns:repeat(3,1fr);gap:.4rem;margin:.8rem 0}
  .fb-num{padding:.55rem .3rem;border-radius:10px}
  .fb-n{font-size:1.05rem}
  .fb-l{font-size:.68rem}
  /* ledger rows: 2-line card — [date · type · amount] / [description · 📎] */
  .fin-list{gap:.4rem}
  .fin-row summary{display:grid;grid-template-columns:auto auto 1fr auto;grid-template-areas:"date kind cat amt" "desc desc desc att";gap:.15rem .5rem;padding:.55rem .65rem;align-items:center}
  .fin-date{grid-area:date;font-size:.72rem}
  .fin-kind{grid-area:kind;font-size:.66rem;padding:.03rem .4rem}
  .fin-cat{grid-area:cat;font-size:.7rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .fin-amt{grid-area:amt;font-size:.92rem}
  .fin-desc{grid-area:desc;font-size:.88rem;min-width:0}
  .fin-att{grid-area:att;font-size:.72rem;justify-self:end}
  .fin-body{padding:.35rem .65rem .7rem}
  /* add-entry form: date+type stay side by side, everything full-width tap targets */
  .add-box .form{padding:.9rem}
  .add-box .form .btn{width:100%}
}

/* ── /materials mobile-only: table → cards, no sideways scroll ── */
@media (max-width: 640px) {
  .mat-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:.35rem}
  .mat-kpis .kpi{padding:.5rem .25rem}
  .mat-kpis .kpi-n{font-size:.92rem}
  .mat-kpis .kpi-l{font-size:.62rem}
  .tbl-wrap:has(.mat-tbl){border:none;overflow:visible}
  .mat-tbl{display:block;min-width:0}
  .mat-tbl thead{display:none}
  .mat-tbl tbody{display:block}
  .mat-tbl tr{display:flex;flex-wrap:wrap;align-items:center;gap:.2rem .6rem;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.55rem .65rem;margin-bottom:.45rem}
  .mat-tbl td{display:block;border:none;padding:0}
  .mat-tbl td:nth-child(1){flex-basis:100%;color:var(--star);font-size:.9rem}
  .mat-tbl td:nth-child(2),.mat-tbl td:nth-child(3),.mat-tbl td:nth-child(4){font-size:.72rem;color:var(--muted)}
  .mat-tbl td:nth-child(3) .rb{font-size:.62rem;padding:.04rem .35rem}
  .mat-tbl td:nth-child(5){font-size:.78rem;margin-left:auto}
  .mat-tbl td:nth-child(6){flex-basis:100%;display:flex;align-items:center;gap:.4rem;margin-top:.15rem}
  .mat-tbl td:nth-child(6) .select2-container{width:auto!important;min-width:110px;flex:1}
  .mat-tbl .status-sel{font-size:.8rem}
}

/* ── /account mobile-only compaction ── */
@media (max-width: 640px) {
  .page.narrow .card{padding:.8rem .85rem;margin-top:.7rem;border-radius:12px}
  .page.narrow .card h3{font-size:.95rem;margin-bottom:.4rem}
  .page.narrow .card-head{margin-bottom:.3rem}
  .page.narrow .row{padding:.35rem 0;gap:.4rem}
  .page.narrow .chips{gap:.3rem}
  .page.narrow .chip{font-size:.78rem;padding:.1rem .45rem}
  .page.narrow .add-box{margin:.6rem 0}
  .page.narrow .add-box .form{padding:.8rem;margin-top:.5rem;gap:.7rem}
  .page.narrow .form input,.page.narrow .form select{padding:.55rem .7rem}
  .page.narrow .btn,.page.narrow .btn-glow{padding:.6rem 1.2rem;font-size:.92rem}
  .page.narrow .night-row{gap:.3rem}
  .page.narrow .night-chk{font-size:.78rem;padding:.2rem .5rem}
  .page.narrow .ok-tag{font-size:.78rem}
}

/* ── /admin mobile-only redesign ── */
@media (max-width: 640px) {
  .stats{display:grid;grid-template-columns:repeat(3,1fr);gap:.4rem}
  .stat{padding:.6rem .3rem}
  .stat-n{font-size:1.15rem}
  .stat-of{font-size:.7rem}
  .stat-l{font-size:.65rem}
  .admin-links{display:grid;grid-template-columns:1fr 1fr;gap:.4rem;margin-top:.8rem}
  .admin-links .btn{padding:.6rem .4rem;font-size:.85rem;text-align:center;border-radius:10px}
  .page .card .row{padding:.4rem 0;font-size:.85rem;flex-wrap:wrap;gap:.3rem}
}

/* ── 管理 admin tabs: mobile-only redesign (feedback/registrations/chat/invite/tasks/people/settings/backup) ── */
@media (max-width: 640px) {
  /* stat strips everywhere: fit-all one row */
  .fb-stats{grid-template-columns:repeat(auto-fit,minmax(76px,1fr))}
  .stats{grid-template-columns:repeat(auto-fit,minmax(76px,1fr));gap:.4rem}
  /* feedback: top-pages table fits without sideways scroll (drop the bar column) */
  .fb-tablewrap{border:none;overflow:visible}
  .fb-table{min-width:0;font-size:.78rem}
  .fb-table th,.fb-table td{padding:.35rem .4rem}
  .fb-table .fb-barh{display:none}
  .fb-vrow{font-size:.8rem;padding:.4rem .6rem;gap:.5rem}
  .fb-item,.fb-sug{font-size:.85rem}
  .fb-sug-h{gap:.35rem}
  .fb-tag,.fb-tag2{font-size:.65rem}
  /* registrations / chat lists */
  .reg-rows .row{flex-wrap:wrap;gap:.25rem .5rem;padding:.45rem 0;font-size:.85rem}
  .convo-row{font-size:.82rem}
  .dept-head h3{font-size:.95rem}
  /* invite: link box wraps, buttons full-width-ish */
  .invite-link{flex-wrap:wrap}
  .invite-link input{flex-basis:100%;font-size:.78rem;padding:.5rem .6rem}
  .invite-link .btn-sm{flex:1;text-align:center}
  .invite-actions{display:flex;flex-wrap:wrap;gap:.4rem}
  /* tasks manager */
  .tasks .row{flex-wrap:wrap;gap:.25rem .5rem;padding:.45rem 0}
  .task-title{font-size:.88rem;flex-basis:100%}
  .task-chip{font-size:.68rem}
  .task-who{font-size:.75rem}
  /* people manager */
  .people-search{font-size:.88rem;padding:.5rem .7rem}
  /* settings + backup docs */
  .dept-edit .row{flex-wrap:wrap;gap:.3rem}
  .doc-block{padding:.85rem .9rem;margin-top:.8rem}
  .doc-block h2{font-size:1rem}
  .doc-block .tbl{font-size:.72rem}
  .doc-block .tbl td,.doc-block .tbl th{padding:.3rem .35rem}
}

/* ── /duty mobile-only: matrix → per-role cards with 5 night lines ── */
.duty-dlbl{display:none}
@media (max-width: 640px) {
  .tbl-wrap:has(.duty-tbl){border:none;overflow:visible}
  .duty-tbl{display:block;min-width:0}
  .duty-tbl thead{display:none}
  .duty-tbl tbody{display:block}
  .duty-tbl tr{display:block;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.5rem .65rem;margin-bottom:.45rem}
  .duty-tbl td{display:block;border:none;background:none!important;padding:0}
  .duty-tbl td.sticky{position:static;display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;border-bottom:1px dashed var(--line);padding-bottom:.3rem;margin-bottom:.25rem}
  .duty-role{font-size:.9rem}
  .duty-need{font-size:.68rem}
  .duty-tbl td:not(.sticky){display:flex;align-items:center;gap:.4rem;padding:.16rem 0}
  .duty-dlbl{display:inline;color:var(--muted);font-size:.72rem;flex:none;min-width:3.4rem}
  .duty-cell-names{display:flex;flex-wrap:wrap;gap:.25rem;flex:1;min-width:0}
  .duty-name{font-size:.78rem}
  .cell-tag{font-size:.68rem;flex:none;margin-left:auto}
  .cell-gap .cell-tag{color:#e89a63}
  .cell-ok .cell-tag{color:var(--ok)}
}

/* ── /scripts hub mobile-only ── */
@media (max-width: 640px) {
  .sv-steps{flex-direction:column;align-items:flex-start;gap:.3rem;margin-bottom:.9rem}
  .sv-step{font-size:.8rem}
  .ms-card{padding:.85rem .8rem;margin-bottom:1.1rem}
  .ms-title{font-size:1.1rem}
  .ms-desc{font-size:.84rem;line-height:1.7;padding:.35rem .7rem;margin:.4rem 0 .7rem}
  .sc-links{flex-direction:column;gap:.4rem;margin-top:.6rem}
  .sc-open-link,.sc-suggest-link{text-align:center;font-size:.9rem;padding:.55rem .8rem}
  .prop-card{padding:.7rem .75rem;margin-bottom:.6rem}
  .prop-title{font-size:.95rem}
  .prop-body{font-size:.85rem}
}

/* ── /register mobile-only: compact + a login CTA you can't miss ── */
@media (max-width: 640px) {
  .reg-top{flex-direction:column;align-items:stretch;gap:.4rem}
  .reg-compact .page-title{font-size:1.3rem}
  /* 已经报名？登录 → full-width outlined button right under the title */
  .alt-top{display:block;text-align:center;border:1px solid var(--lamp-soft);border-radius:999px;padding:.5rem .8rem;font-size:.9rem;background:rgba(232,181,99,.08)}
  .reg-lead{margin:.4rem 0 .6rem;font-size:.85rem}
  .reg-compact .form{gap:.55rem;margin-top:.5rem}
  .reg-compact .form label{font-size:.8rem;gap:.25rem}
  .reg-compact .form input{padding:.55rem .7rem;font-size:.95rem}
  .reg-compact .login-note{font-size:.78rem;padding:.4rem .6rem}
  .reg-compact .btn-glow{width:100%;padding:.7rem;font-size:1rem;margin-top:.2rem}
  .reg-compact .err{font-size:.78rem}
}

/* ── /intro crew landing page ── */
.in-body{color:var(--ink);line-height:1.85;margin-top:.5rem}
.in-list{margin:.5rem 0 0;padding-left:1.1rem;display:grid;gap:.45rem}
.in-list li{color:var(--ink);font-size:.92rem;line-height:1.65}
.in-vol{margin-top:1.4rem}
.in-pos-h{margin-top:1.1rem}
a.in-link{display:block;color:inherit;position:relative;padding-bottom:2rem;transition:border-color .18s,transform .18s}
a.in-link:hover{border-color:var(--lamp);transform:translateY(-2px)}
a.in-link p{color:var(--muted);font-size:.9rem;line-height:1.6;margin-top:.35rem}
.in-go{position:absolute;right:1.1rem;bottom:.9rem;color:var(--lamp)}
.in-cta{margin-top:2rem;text-align:center}
@media (max-width: 640px) {
  .in-body{font-size:.9rem;line-height:1.75}
  .in-list li{font-size:.85rem}
  a.in-link{padding-bottom:1.6rem}
}

/* ── 进度 event roadmap stepper ── */
.rm-h{font-family:var(--serif);font-size:1.15rem;color:var(--star);margin:1.2rem 0 .7rem}
.rm-steps{list-style:none;margin:0 0 1.8rem;padding:0}
.rm-step{display:flex;gap:.75rem;position:relative;padding:0 0 1.05rem}
.rm-step::before{content:'';position:absolute;left:.72rem;top:1.7rem;bottom:0;width:2px;background:var(--line)}
.rm-step:last-child::before{display:none}
.rm-dot{flex:none;width:1.5rem;height:1.5rem;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:700;background:var(--night2);border:1px solid var(--line);color:var(--muted);position:relative;z-index:1}
.rm-done .rm-dot{background:rgba(107,163,104,.16);border-color:var(--ok);color:var(--ok)}
.rm-now .rm-dot{background:var(--lamp);border-color:var(--lamp);color:#241706}
.rm-body{flex:1;min-width:0}
.rm-top{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.rm-title{font-family:var(--serif);color:var(--star);font-weight:600}
.rm-done .rm-title{color:var(--muted)}
.rm-next .rm-title{color:var(--muted)}
.rm-when{font-size:.73rem;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:.05rem .5rem;white-space:nowrap}
.rm-badge{font-size:.7rem}
.rm-desc{color:var(--ink);font-size:.9rem;line-height:1.65;margin:.3rem 0 0}
.rm-next .rm-desc{color:var(--muted);font-size:.84rem}
.rm-now .rm-body{background:var(--panel);border:1px solid var(--lamp);border-radius:12px;padding:.7rem .9rem;margin-top:-.15rem}
.rm-links{display:flex;gap:.45rem;flex-wrap:wrap;margin-top:.6rem;align-items:center}
.rm-adm{margin-left:auto;display:flex;gap:.7rem}
@media (max-width: 640px){.rm-desc{font-size:.85rem}.rm-now .rm-body{padding:.6rem .7rem}.rm-adm{margin-left:0}}

/* ── read-aloud controls (script page) ── */
.ra-controls{display:flex;align-items:center;gap:.45rem;margin:.2rem 0 .9rem;flex-wrap:wrap}
.ra-controls.ra-global{margin:.2rem 0 1.1rem;padding-bottom:.8rem;border-bottom:1px dashed var(--line)}
.ra-controls .ra-rate{background:var(--night2);border:1px solid var(--line);border-radius:8px;color:var(--star);padding:.25rem .4rem;font-size:.8rem;font-family:var(--sans)}
@media (max-width: 640px){.ra-controls{gap:.35rem}.ra-controls .btn-sm{font-size:.8rem;padding:.35rem .6rem}}

/* ── 活动地图 interactive briefing map ── */
.km-chips{display:flex;flex-wrap:wrap;gap:.4rem;margin:1rem 0 .8rem}
.km-chips button{background:var(--panel);border:1px solid var(--line);border-radius:999px;color:var(--ink);padding:.32rem .75rem;font-size:.85rem;cursor:pointer;font-family:var(--sans)}
.km-chips button.on{background:var(--lamp);border-color:var(--lamp);color:#241706;font-weight:700}
.km-panel{margin-top:0}
.km-t{font-family:var(--serif);color:var(--star);font-size:1.2rem;margin-bottom:.8rem}
.km-row{margin-bottom:.75rem}
.km-l{display:block;color:var(--lamp-soft);font-family:var(--serif);font-size:.9rem;margin-bottom:.15rem}
.km-row p{color:var(--ink);line-height:1.8}
@media (max-width: 640px){.km-chips button{font-size:.78rem;padding:.28rem .6rem}.km-t{font-size:1.05rem}.km-row p{font-size:.9rem;line-height:1.7}}

/* ── admin people: clean tabbed account manager ── */
.ap-tabs{margin:1rem 0 .6rem}

/* crew account = one collapsible line → structured panel on click */
.prow{background:var(--panel);border:1px solid var(--line);border-radius:10px;margin-bottom:.45rem;overflow:hidden}
.prow[open]{border-color:var(--lamp-soft)}
.prow-head{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.25rem .8rem;flex-wrap:wrap;padding:.6rem .85rem}
.prow-head::-webkit-details-marker{display:none}
.prow-head:hover{background:var(--night2)}
.prow-name{color:var(--star);font-size:.98rem;font-weight:500}
.prow-mob{white-space:nowrap}
.prow-depts{max-width:40ch;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dept-none{font-style:italic;opacity:.7}
.prow-gear{flex:none;margin-left:auto;color:var(--muted);font-size:1.05rem;transition:transform .2s,color .2s}
.prow[open] .prow-gear{transform:rotate(90deg);color:var(--lamp)}
.prow[open] .prow-head{background:var(--night2);border-bottom:1px solid var(--line)}

.pm-panel{padding:.85rem;display:flex;flex-direction:column;gap:.9rem}
.pm-block{display:flex;flex-direction:column;gap:.4rem;min-width:0}
.pm-label{color:var(--lamp-soft);font-size:.95rem;font-weight:600;font-family:var(--serif)}
.pm-chips{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}
.pm-assign{display:flex;gap:.5rem;align-items:flex-start;flex-wrap:wrap}
.pm-assign .multi-sel{flex:1;min-width:160px}
.pm-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:.75rem}
.pm-inline{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap}
.pm-inline > select,.pm-inline > input{flex:1;min-width:0;background:var(--night2);border:1px solid var(--line);border-radius:8px;color:var(--star);padding:.42rem .55rem;font-size:.85rem;font-family:var(--sans)}
.pm-inline > select:focus,.pm-inline > input:focus{outline:none;border-color:var(--lamp)}
.pm-perm{display:flex;gap:.4rem;flex-wrap:wrap;align-items:center}

/* public account = compact one-liner with promote/delete */
.prow-lite{display:flex;align-items:center;gap:.3rem .7rem;flex-wrap:wrap;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.5rem .8rem;margin-bottom:.4rem}
.prow-lite .prow-id{display:flex;flex-direction:column;gap:.05rem;min-width:150px}
.prow-lite-act{margin-left:auto;display:flex;gap:.4rem;align-items:center}

@media (max-width: 640px){
  .prow-head{gap:.15rem .5rem;padding:.55rem .65rem}
  .prow-name{flex-basis:100%;font-size:.92rem}
  .prow-depts{max-width:22ch;font-size:.75rem}
  .pm-grid{grid-template-columns:1fr;gap:.6rem}
  .prow-lite{padding:.45rem .6rem}
  .prow-lite .prow-id{flex-basis:100%}
  .prow-lite-act{margin-left:0;width:100%;justify-content:flex-end}
}

.chip-head{background:var(--goldtint);border:1px solid var(--lamp-soft);color:var(--lamp)}

/* ── admin account-activity page ── */
.aa-list{display:flex;flex-direction:column;gap:.45rem;margin-top:.6rem}
.aa-row{background:var(--panel);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.aa-row[open]{border-color:var(--lamp-soft)}
.aa-head{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.5rem 1rem;flex-wrap:wrap;padding:.6rem .85rem}
.aa-head::-webkit-details-marker{display:none}
.aa-head:hover{background:var(--night2)}
.aa-row[open] .aa-head{background:var(--night2);border-bottom:1px solid var(--line)}
.aa-name{color:var(--star);font-size:.96rem;font-weight:500;flex:1;min-width:0}
.aa-role{font-size:.7rem}
.aa-dot{color:var(--ok);font-size:.7rem}
.aa-metrics{display:flex;align-items:center;gap:1.1rem}
.aa-m{display:flex;flex-direction:column;align-items:center;line-height:1.1}
.aa-mn{color:var(--lamp-soft);font-family:var(--display);font-size:1.05rem}
.aa-m-wide .aa-mn{font-size:.85rem;font-family:var(--sans);color:var(--ink)}
.aa-ml{color:var(--muted);font-size:.66rem}
.aa-row .prow-gear{margin-left:0}
.aa-detail{padding:.8rem .85rem}
.aa-grid{display:grid;grid-template-columns:1fr 1.4fr;gap:1rem}
.aa-block{min-width:0}
.aa-times{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem}
.aa-times li{background:var(--night2);border:1px solid var(--line);border-radius:6px;padding:.15rem .45rem;font-size:.78rem;color:var(--ink)}
.aa-meta{margin-top:.5rem}
.aa-pages{width:100%;border-collapse:collapse;margin-top:.4rem}
.aa-pages td{padding:.22rem .3rem;border-bottom:1px solid var(--line);font-size:.82rem;color:var(--ink)}
.aa-pc{text-align:right;font-family:var(--display);color:var(--lamp-soft);white-space:nowrap}
.aa-pt{white-space:nowrap;text-align:right}
@media (max-width:640px){
  .aa-name{flex-basis:100%}
  .aa-metrics{gap:.9rem}
  .aa-mn{font-size:.95rem}
  .aa-grid{grid-template-columns:1fr;gap:.7rem}
}

/* ── account deletion danger zone ── */
.da-summary{color:#eaa0a0}
.da-danger{border:1px solid #c05a5a;color:#f2b8b8;background:rgba(192,90,90,.16);font-weight:500}
.da-danger:hover{background:rgba(192,90,90,.3);color:#ffd0d0}

/* ── 软宣传 soft-announcement teaser page ── */
.tz{text-align:center}
.tz-eye{color:var(--lamp-soft);letter-spacing:.25em;font-size:.82rem;margin:1.2rem 0 .6rem}
.tz-h1{font-family:var(--serif);font-weight:700;font-size:clamp(1.5rem,5.5vw,2.3rem);color:var(--star);line-height:1.35;margin-bottom:.9rem}
.tz-lead{color:var(--ink);font-size:1.02rem;line-height:1.9;text-align:left}
.tz-tease{color:var(--lamp-soft);font-size:.95rem;margin:.9rem 0 0;font-style:italic}
.tz-pics{display:grid;grid-template-columns:1fr 1fr;gap:.6rem;margin:1.5rem 0 .35rem}
.tz-pics img{width:100%;border-radius:12px;border:1px solid var(--line);aspect-ratio:16/10;object-fit:cover;background:var(--night2)}
.tz-pics img:only-child{grid-column:1/-1}
.tz-pic-cap{margin-bottom:1rem}
.tz-card{text-align:left}
.tz-chips{margin-top:.7rem;gap:.4rem}
.tz-cta{margin:2.2rem 0 1rem}
.tz-btn{font-size:1.08rem;padding:.9rem 2rem}
.tz-quiet{margin-top:1rem}
@media (max-width:640px){.tz-lead{font-size:.94rem}.tz-pics{gap:.45rem}.tz-btn{width:100%;font-size:1rem}}

/* ── ? help tooltip (hover desktop, tap mobile) ── */
.htip{display:inline-flex;align-items:center;justify-content:center;width:1.05rem;height:1.05rem;border-radius:50%;border:1px solid var(--line);color:var(--muted);font-size:.68rem;font-weight:700;cursor:help;position:relative;flex:none;margin-left:.35rem;user-select:none}
.htip:hover,.htip.show{border-color:var(--lamp);color:var(--lamp)}
.htip::after{content:attr(data-tip);position:absolute;bottom:135%;left:50%;transform:translateX(-50%);background:var(--night2);border:1px solid var(--lamp-soft);border-radius:9px;padding:.5rem .6rem;font-size:.75rem;line-height:1.55;color:var(--ink);width:max-content;max-width:230px;white-space:normal;text-align:left;z-index:30;opacity:0;visibility:hidden;transition:opacity .15s;pointer-events:none;box-shadow:0 6px 20px rgba(0,0,0,.45)}
.htip:hover::after,.htip.show::after{opacity:1;visibility:visible}

/* ── 🔔 notifications hub: badges, notification/to-do list, empty states ── */
.nw-badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.1rem;height:1.1rem;padding:0 .3rem;border-radius:999px;background:#d94a4a;color:#fff;font-size:.7rem;font-weight:700}
.nw-lead{margin:.2rem 0 .7rem}

/* the shared list used by 我的通知 + 待办 */
.nt-list{display:flex;flex-direction:column;gap:.5rem}
.nt-item{display:flex;align-items:flex-start;gap:.7rem;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.7rem .8rem;text-decoration:none;color:var(--ink);transition:border-color .15s,background .15s;position:relative}
a.nt-item:hover{border-color:var(--lamp);background:var(--panel2)}
.nt-ic{flex:none;font-size:1.15rem;line-height:1.4;width:1.8rem;height:1.8rem;display:inline-flex;align-items:center;justify-content:center;background:var(--night2);border-radius:9px}
.nt-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:.2rem}
.nt-body{color:var(--ink);line-height:1.5;font-size:.92rem}
.nt-time{color:var(--muted);font-size:.74rem}
.nt-go{color:var(--lamp);flex:none;align-self:center;font-size:1.05rem}
.nt-dot{flex:none;align-self:center;width:.5rem;height:.5rem;border-radius:50%;background:#d94a4a;box-shadow:0 0 0 3px rgba(217,74,74,.18)}
/* unread notification: highlighted BORDER + soft glow, clears to normal once read */
.nt-unread{background:var(--panel2);border-color:var(--lamp);box-shadow:0 0 14px -6px var(--lamp)}
.nt-unread .nt-ic{background:rgba(232,181,99,.16)}
.nt-unread .nt-body{font-weight:600}

/* NEW event update/comment (since last visit): highlighted border, clears once read */
.new-tag{display:inline-block;background:var(--lamp);color:#241706;font-size:.62rem;font-weight:800;letter-spacing:.04em;padding:.05rem .38rem;border-radius:999px;vertical-align:middle;margin-right:.15rem}
.ann.is-new{border:1px solid var(--lamp);border-left-width:3px;box-shadow:0 0 16px -6px var(--lamp)}
.cmt.is-new{border-bottom:none;border:1px solid var(--lamp);border-left-width:3px;background:rgba(232,181,99,.06);border-radius:8px;padding:.6rem .7rem;margin:.4rem 0}

/* friendly empty state */
.nw-empty{text-align:center;padding:2.4rem 1rem;color:var(--muted)}
.nw-empty-i{font-size:2.2rem;opacity:.7;margin-bottom:.5rem}
.nw-empty-h{color:var(--ink);font-size:1rem;margin-bottom:.3rem}
.nw-empty-s{font-size:.85rem;line-height:1.6;max-width:22rem;margin:0 auto}
.nw-compose{margin-bottom:.8rem}

/* ── 参与筹备/演出 serving wishes ── */
.wish-group{margin:.7rem 0 1rem}
.wish-cluster{color:var(--lamp-soft);font-family:var(--serif);font-size:.9rem;margin-bottom:.45rem}
.wish-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.4rem}
.wish-chk{display:flex;align-items:center;gap:.45rem;background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:.45rem .6rem;cursor:pointer;font-size:.88rem;color:var(--ink)}
.wish-chk:hover{border-color:var(--lamp-soft)}
.wish-chk input{flex:none;accent-color:var(--lamp)}
.wish-chk:has(input:checked){background:var(--goldtint);border-color:var(--lamp)}
.wish-note-l{display:block;color:var(--ink);font-size:.9rem}
.wish-note-l textarea{width:100%;background:var(--night2);border:1px solid var(--line);border-radius:10px;padding:.6rem;color:var(--star);font-family:var(--sans);margin:.4rem 0 .7rem;resize:vertical}
@media (max-width:640px){.wish-grid{grid-template-columns:1fr 1fr;gap:.35rem}.wish-chk{font-size:.8rem;padding:.4rem .5rem}}

/* ── 活城任务 quest ideas ── */
.qs-jesus{border-left:3px solid var(--lamp-soft);background:var(--night2);padding:.45rem .9rem;border-radius:0 8px 8px 0;color:var(--ink);font-size:.92rem;line-height:1.7;margin:.5rem 0 .7rem}
.qs-rules{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap;margin:.2rem 0 .9rem}
.qs-item{padding:.65rem .95rem;margin-top:.7rem}
.qs-item summary{cursor:pointer;display:flex;align-items:center;gap:.6rem;list-style:none}
.qs-item summary::-webkit-details-marker{display:none}
.qs-sum-t{font-family:var(--serif);color:var(--star);font-weight:600;flex:1;min-width:0}
.qs-sum-meta{color:var(--muted);font-size:.8rem;white-space:nowrap}
.qs-detail{margin-top:.6rem;border-top:1px dashed var(--line);padding-top:.6rem}
@media (max-width: 640px){.qs-jesus{font-size:.85rem;padding:.35rem .7rem}.qs-sum-t{font-size:.92rem}.qs-sum-meta{font-size:.72rem}}

/* ── invite: copyable invitation message ── */
.inv-msg-box{margin-top:.8rem}
.inv-msg-box summary{cursor:pointer;color:var(--star);font-size:.9rem}
.inv-msg-box textarea{margin:.5rem 0 .4rem;font-size:.88rem;line-height:1.6}

/* ── concept gallery + vision video ── */
.cg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem;margin-top:1.2rem}
.cg-item{background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:0;position:relative}
.cg-like{position:absolute;top:.45rem;right:.45rem;z-index:2}
.cg-like button{background:rgba(10,14,26,.72);border:1px solid var(--line);border-radius:999px;color:var(--star);padding:.25rem .6rem;font-size:.8rem;cursor:pointer}
.cg-like.on button{background:var(--lamp);border-color:var(--lamp);color:#241706;font-weight:700}
.cg-item img{width:100%;display:block;aspect-ratio:16/10;object-fit:cover}
.cg-item figcaption{padding:.45rem .7rem;font-size:.85rem;color:var(--ink)}
.cg-meta{font-size:.7rem;color:var(--muted);margin-bottom:.3rem}
.cg-actions{display:flex;align-items:center;gap:.35rem}
.cg-cat{flex:1;min-width:0}
.cg-cat select{width:100%;background:var(--night2);border:1px solid var(--line);border-radius:8px;color:var(--star);padding:.28rem .4rem;font-size:.75rem;font-family:var(--sans)}
.cg-video,.in-video{width:100%;border-radius:12px;border:1px solid var(--line);margin-top:.6rem;background:#000;display:block}
@media (max-width: 640px){.cg-grid{grid-template-columns:1fr 1fr;gap:.5rem}.cg-item figcaption{font-size:.72rem;padding:.35rem .5rem}}

/* ── /dashboard (进度) mobile-only redesign ── */
@media (max-width: 640px) {
  /* roadmap → compact checklist: details only on the CURRENT step */
  .rm-h{font-size:1rem;margin:.9rem 0 .5rem}
  .rm-steps{margin-bottom:1.2rem}
  .rm-step{gap:.55rem;padding-bottom:.65rem}
  .rm-step::before{left:.62rem;top:1.45rem}
  .rm-dot{width:1.3rem;height:1.3rem;font-size:.7rem}
  .rm-title{font-size:.92rem}
  .rm-when{font-size:.66rem;padding:.02rem .4rem}
  .rm-done .rm-when{display:none}
  .rm-next .rm-desc{display:none}
  .rm-desc{font-size:.85rem;line-height:1.6}
  .rm-now .rm-body{padding:.6rem .7rem}
  .rm-links{gap:.4rem;margin-top:.5rem}
  .rm-links .btn-sm{font-size:.78rem;padding:.35rem .6rem}
  .rm-adm{margin-left:0;width:100%;justify-content:flex-end}
  /* KPIs → one compact 4-across strip */
  .kpis{grid-template-columns:repeat(4,1fr);gap:.4rem;margin-top:.8rem}
  .kpi{padding:.55rem .25rem;border-radius:10px;gap:.2rem}
  .kpi-n{font-size:1.05rem}
  .kpi-of{font-size:.68rem}
  .kpi-l{font-size:.62rem}
  .kpi-pend{font-size:.6rem;display:block}
  .ring{width:52px;height:52px}
  .ring span{width:38px;height:38px;font-size:.72rem}
  /* cards → tighter rows and headings */
  .dash-cols{gap:.7rem;margin-top:.7rem}
  .dash-side{gap:.7rem}
  .dash-card{padding:.75rem .8rem;border-radius:12px;margin-top:.7rem}
  .dash-card h3{font-size:.95rem;margin-bottom:.5rem}
  .bar-row{grid-template-columns:minmax(4.6rem,1fr) 1.7fr auto;gap:.45rem;padding:.18rem 0}
  .bar-l{font-size:.78rem}
  .bar{height:6px}
  .bar-n{font-size:.7rem}
  .dash-card .row{padding:.3rem 0;font-size:.85rem}
  .dash-card .doc-link{font-size:.82rem}
  /* feed → tighter timeline, most-recent 8 only */
  .feed{margin-top:.6rem;padding-left:1.05rem;gap:.75rem}
  .feed-dot{left:-1.35rem;top:.3rem;width:7px;height:7px}
  .feed-msg{font-size:.88rem}
  .feed-meta{font-size:.72rem}
  .feed .feed-item:nth-child(n+9){display:none}
}

/* ── 筹备团队 prep teams (/prepteam): distinct block per dept (no cluster headers) ──
   Desktop: TWO server-split columns (stable — no CSS-column rebalance jumping);
   mobile: one column, the second half moves to the bottom. */
@media (min-width:900px){ .pt-cols{display:flex;gap:1.2rem;align-items:flex-start} .pt-cols > .ptls{flex:1;min-width:0} }
.ptls{list-style:none;padding:0;margin:0}
.ptls-item{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.65rem .8rem;margin-bottom:.6rem}
.ptls-name{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap;font-weight:700;margin-bottom:.3rem}
.ptls-num{color:var(--muted);font-weight:700}
.ptls-name > span:first-child{min-width:0}
.ptls-line{display:flex;gap:.6rem;align-items:baseline;padding-left:1rem;margin:.18rem 0;line-height:1.55}
.ptls-val{min-width:0}
.ptls-lead{display:inline-flex;align-items:center;gap:.35rem;color:var(--lamp);border:1px solid rgba(232,181,99,.5);background:rgba(232,181,99,.1);border-radius:999px;padding:.08rem .6rem;white-space:nowrap;margin:.1rem .3rem .1rem 0}
.ptls-crown{font-size:.85em}
.ptl-sep{color:var(--muted)}
.ptls-crew-n{white-space:nowrap}
.ptls-add{flex:none}
.ptls-add > summary{list-style:none;cursor:pointer;color:var(--muted);border:1px solid var(--line);border-radius:8px;padding:.12rem .55rem;font-size:.8rem;font-weight:400;display:inline-flex;align-items:center;gap:.2rem;white-space:nowrap}
.ptls-add > summary::-webkit-details-marker{display:none}
.ptls-add > summary:hover{color:var(--lamp);border-color:var(--lamp)}
.ptls-trail{margin-left:auto;width:1.4rem;height:1.4rem;font-size:.8rem;font-weight:400;cursor:pointer}
.ptls-trail::after{white-space:pre-line;left:auto;right:0;transform:none;max-width:280px}
/* 活动日人力分配 (/hralloc): header row + add-group dropdown + group-delete ✕ + guests & merge */
.hr-head{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;margin-bottom:.4rem}
.hr-head .page-title{margin-bottom:0;flex:1;min-width:0}
.hr-addg-dd{position:relative;flex:none;margin-left:auto}
.hr-addg-dd > summary{list-style:none;cursor:pointer;color:var(--muted);border:1px solid var(--line);border-radius:8px;padding:.25rem .7rem;font-size:.85rem;white-space:nowrap;display:inline-flex;align-items:center;gap:.25rem}
.hr-addg-dd > summary::-webkit-details-marker{display:none}
.hr-addg-dd > summary:hover{color:var(--lamp);border-color:var(--lamp)}
.hr-addg-dd[open] > summary{color:var(--lamp);border-color:var(--lamp)}
.hr-addg-dd[open] .hr-addg{position:absolute;right:0;top:calc(100% + 8px);z-index:25;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.6rem;box-shadow:0 8px 26px rgba(0,0,0,.45);width:min(340px,86vw)}
.hr-addg{display:flex;gap:.5rem;align-items:center}
.hr-addg input[type=text]{flex:1;min-width:0}
/* themed text inputs for the /hralloc forms (add-group dropdown, guest add, rename) */
.hr-addg input[type=text],.hr-guestf input[type=text],.hr-edit .ct-assign input[type=text]{
  background:var(--night2);border:1px solid var(--line);border-radius:8px;
  padding:.55rem .7rem;color:var(--star);font-size:.92rem;font-family:var(--sans)}
.hr-addg input[type=text]:focus,.hr-guestf input[type=text]:focus,.hr-edit .ct-assign input[type=text]:focus{
  outline:none;border-color:var(--lamp)}
.hr-addg input[type=text]::placeholder,.hr-guestf input[type=text]::placeholder{color:var(--muted)}
.hr-gx{flex:none}
.hr-gx.hr-gx-solo{margin-left:auto}
.hr-gx button{font-size:.95rem}
.ptls-add[open]{flex-wrap:wrap}
.ptls-add[open] .hr-guestf{flex-basis:100%}
.hr-guestf input[type=text]{flex:1;min-width:0}
.ptls-guest{border-bottom:1px dotted var(--muted);cursor:help}
/* clickable person → action popover */
.hr-p{position:relative;display:inline-block}
.hr-pname{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer}
.hr-pname:hover{color:var(--lamp)}
.hr-p.show .hr-pname{color:var(--lamp)}
.hr-pop{display:none;position:absolute;left:0;top:calc(100% + 6px);z-index:26;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.45rem;box-shadow:0 8px 26px rgba(0,0,0,.45);white-space:nowrap;gap:.4rem;align-items:center}
.hr-p.show .hr-pop{display:flex}
.hr-pop form{display:inline-flex;margin:0}
.hr-edit{flex:none}
.hr-edit.hr-edit-solo{margin-left:auto}
.hr-edit > summary{list-style:none;cursor:pointer;color:var(--muted);font-size:.85rem;border:1px solid var(--line);border-radius:8px;width:1.7rem;height:1.7rem;display:inline-flex;align-items:center;justify-content:center;font-weight:400}
.hr-edit > summary::-webkit-details-marker{display:none}
.hr-edit > summary:hover{color:var(--lamp);border-color:var(--lamp)}
.hr-edit[open]{flex-basis:100%;order:9;display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.hr-edit[open] .ct-assign{flex:1}
.hr-edit[open] .ct-assign input[type=text]{flex:1;min-width:0}
.hr-merge{display:inline-block;margin-left:.2rem}
.hr-merge > summary{list-style:none;cursor:pointer;font-size:.8rem;opacity:.75}
.hr-merge > summary::-webkit-details-marker{display:none}
.hr-merge > summary:hover{opacity:1}
.hr-merge[open]{display:block;margin:.3rem 0}
.hr-merge[open] .ct-assign{margin-top:.25rem}
.ptls-add[open]{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;flex:1}
.ptls-add[open] .ct-assign{flex:1}
@media (max-width:640px){
  .ptls-line{padding-left:.4rem}
}

/* ── 各部门活动规划 (/depts + /dept): workspace cards, merit, gallery, todos ── */
.dp-board{display:flex;flex-wrap:wrap;gap:.5rem .8rem;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.55rem .8rem;margin-bottom:1.1rem}
.dp-board-h{font-weight:700}
.dp-board-item{color:var(--star);text-decoration:none;border:1px solid var(--line);border-radius:999px;padding:.15rem .6rem;font-size:.88rem}
.dp-board-item:hover{border-color:var(--lamp);color:var(--lamp)}
.dp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.6rem;margin-bottom:1.1rem}
.dp-card{display:flex;flex-direction:column;gap:.35rem;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.65rem .75rem;color:var(--star);text-decoration:none}
.dp-card:hover{border-color:var(--lamp)}
.dp-cover{display:block;height:90px;border-radius:8px;background-size:cover;background-position:center;border:1px solid var(--line)}
.dp-card-name{font-weight:700;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.dp-new{margin-left:auto;flex:none;background:#c94f4f;color:#fff;border-radius:999px;font-size:.66rem;font-weight:800;letter-spacing:.02em;padding:.1rem .5rem}
.dp-card-heads{font-size:.82rem;color:var(--lamp)}
.dp-bar{display:block;height:6px;border-radius:999px;background:var(--night2);border:1px solid var(--line);overflow:hidden}
.dp-bar-in{display:block;height:100%;background:var(--lamp)}
.dp-card-meta{display:flex;justify-content:space-between;font-size:.82rem;color:var(--muted)}
.dp-merit{color:var(--lamp)}
.dp-fresh{font-size:.78rem}
.dp-f-ok{color:#9ed49e}.dp-f-mid{color:var(--muted)}.dp-f-stale{color:#e8b563}.dp-f-none{color:var(--muted);opacity:.7}
.dp-f-wait{color:#8fb8d8}
.dp-waitbar{background:rgba(143,184,216,.1);border:1px solid rgba(143,184,216,.4);border-radius:10px;padding:.5rem .8rem;margin-bottom:.6rem;color:#8fb8d8}
.dp-wait-f{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-bottom:1rem}
.dp-wait-f input[type=text]{flex:1;min-width:0;background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.5rem .65rem;color:var(--star);font-size:.9rem}
.dp-wait-f input[type=text]:focus{outline:none;border-color:var(--lamp)}
.dp-back a{color:var(--muted);text-decoration:none}
.dp-back a:hover{color:var(--lamp)}
.dp-sec h3{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.dp-edit{display:inline-block;font-weight:400}
.dp-edit > summary{list-style:none;cursor:pointer;color:var(--muted);font-size:.82rem;border:1px solid var(--line);border-radius:8px;padding:.1rem .5rem}
.dp-edit > summary::-webkit-details-marker{display:none}
.dp-edit > summary:hover{color:var(--lamp);border-color:var(--lamp)}
.dp-form{display:flex;flex-direction:column;gap:.4rem;margin:.5rem 0;width:100%}
.dp-lbl{display:inline-block;color:var(--muted);font-size:.82rem;min-width:3.5em;margin-right:.4rem}
.dp-field{margin:.3rem 0;line-height:1.6}
.dp-rows{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.45rem .7rem;align-items:start;margin-top:.3rem}
.dp-tag{display:inline-flex;justify-content:center;align-items:center;min-width:3.4em;padding:.08rem .5rem;border:1px solid rgba(232,181,99,.45);background:rgba(232,181,99,.08);color:var(--lamp);border-radius:8px;font-size:.8rem;margin-top:.1rem;white-space:nowrap}
.dp-tag-j{border-color:rgba(143,184,216,.45);background:rgba(143,184,216,.08);color:#8fb8d8}
.dp-rows p{margin:0;line-height:1.7}
.dp-edit-inline{margin-left:.3rem}
.dp-edit-inline > summary{padding:.02rem .35rem;font-size:.78rem}
.dp-desc{line-height:1.7}
.dp-gal{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:.5rem;margin:.6rem 0}
.dp-ph{position:relative}
.dp-ph img{width:100%;height:110px;object-fit:cover;border-radius:8px;border:1px solid var(--line);display:block}
.dp-ph-x{position:absolute;top:.25rem;right:.25rem}
.dp-ph-x button{background:rgba(10,14,26,.75);border:none;color:#eaa0a0;border-radius:6px;cursor:pointer;padding:.05rem .3rem}
.dp-upload{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-top:.5rem}
.dp-task{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;padding:.3rem 0;border-bottom:1px dashed var(--line)}
.dp-task:last-of-type{border-bottom:none}
.dp-task.is-done .dp-t-title{color:var(--muted);text-decoration:line-through}
.dp-t-adv button{background:none;border:none;cursor:pointer;font-size:1rem;padding:0}
.dp-t-title{flex:1;min-width:0}
.dp-t-due{font-size:.8rem;color:var(--muted)}
.dp-t-due.over{color:#eaa0a0;font-weight:700}
.dp-t-who{font-size:.82rem;color:var(--lamp)}
.dp-addtodo,.dp-awd-f{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-top:.6rem}
.dp-addtodo input[type=text],.dp-awd-f input[type=text],.dp-cmt-f input[type=text]{flex:1;min-width:0;background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.5rem .65rem;color:var(--star);font-size:.9rem}
.dp-addtodo input[type=date],.dp-awd-f input[type=number]{background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.45rem .5rem;color:var(--star);font-size:.88rem}
.dp-addtodo input:focus,.dp-awd-f input:focus,.dp-cmt-f input:focus{outline:none;border-color:var(--lamp)}
.dp-postu{display:flex;flex-direction:column;gap:.4rem;margin-bottom:.8rem}
.dp-postu button{align-self:flex-end}
.dp-upd{border-top:1px solid var(--line);padding:.55rem 0}
.dp-upd-h{margin:0 0 .15rem}
.dp-upd-b{margin:0 0 .3rem;line-height:1.6}
.dp-cmt{margin:.15rem 0 .15rem 1rem;font-size:.88rem;color:var(--star)}
.dp-cmt-f{display:flex;gap:.4rem;margin:.25rem 0 0 1rem}
.dp-awd{margin:.25rem 0}

/* ── 活动日历 (/calendar): month cards — mini grid + agenda list ── */
.cal-months{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:.8rem}
.cal-m-h{margin-bottom:.5rem}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:.6rem}
.cal-wd{text-align:center;color:var(--muted);font-size:.72rem;padding:.15rem 0}
.cal-d{display:flex;align-items:center;justify-content:center;aspect-ratio:1.15;border-radius:8px;font-size:.82rem;color:var(--muted);text-decoration:none}
.cal-d.has{background:rgba(232,181,99,.14);border:1px solid rgba(232,181,99,.5);color:var(--star);font-weight:700}
.cal-d.has:hover{background:rgba(232,181,99,.28)}
.cal-d.today{outline:1px solid var(--star);outline-offset:-1px}
.cal-dd{background:none;border:none;font:inherit;cursor:pointer;padding:0}
.cal-dd:hover{background:rgba(232,181,99,.12);border:1px dashed rgba(232,181,99,.5);color:var(--lamp)}
.cal-day-add{background:none;border:1px solid var(--line);border-radius:6px;color:var(--muted);cursor:pointer;font-size:.72rem;padding:0 .3rem;margin-left:.25rem}
.cal-day-add:hover{color:var(--lamp);border-color:var(--lamp)}
.cal-pop{position:absolute;z-index:40;width:300px;background:var(--panel);border:1px solid var(--lamp-soft);border-radius:12px;padding:.7rem .8rem;box-shadow:0 10px 32px rgba(0,0,0,.55)}
.cal-pop-d{margin:0 0 .45rem;color:var(--lamp);font-weight:700;font-size:.9rem}
.cal-popf{display:flex;flex-direction:column;gap:.45rem}
.cal-popf input[type=text],.cal-popf input[type=time]{background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.5rem .65rem;color:var(--star);font-size:.9rem}
.cal-popf input:focus{outline:none;border-color:var(--lamp)}
.cal-popf button{align-self:flex-end}
.cal-list{border-top:1px solid var(--line);padding-top:.45rem}
.cal-none{margin:.2rem 0}
.cal-day{padding:.25rem 0;scroll-margin-top:5.5rem}
.cal-day-d{display:block;color:var(--muted);font-size:.8rem;margin-bottom:.15rem}
.cal-day-d.is-today{color:var(--lamp);font-weight:700}
.cal-ev{display:flex;gap:.45rem;align-items:baseline;flex-wrap:wrap;padding:.12rem 0 .12rem .5rem}
.cal-ev-t{color:var(--lamp);font-size:.85rem;flex:none}
.cal-ev-n{font-weight:600}
.cal-addf{flex-wrap:wrap}
.cal-addf input[type=date],.cal-addf input[type=time]{background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.45rem .5rem;color:var(--star);font-size:.88rem}
.hr-addg-dd[open] .cal-addf{width:min(420px,92vw)}
.cal-addf input[type=text]{flex:1 1 100%}

/* ── 域名投票 (/domainvote) + login nudge modal ── */
.dv-count{margin:-.4rem 0 1rem;color:var(--muted)}
.dv-count b{color:var(--lamp);font-size:1.05rem}
.dv-rankcard{margin-bottom:1.2rem}
.dv-rankrow{display:flex;align-items:baseline;gap:.6rem;padding:.3rem 0;border-bottom:1px dashed var(--line);flex-wrap:wrap}
.dv-rankrow:last-child{border-bottom:none}
.dv-rankrow.top .dv-r-dom{color:var(--lamp);font-size:1.05rem}
.dv-r-no{flex:none;width:1.6rem;text-align:center;color:var(--muted);font-weight:800}
.dv-r-dom{font-weight:700}
.dv-voters{color:var(--muted);font-size:.82rem;flex:1;min-width:8rem}
.dv-grid{display:flex;flex-wrap:wrap;gap:.45rem;margin-bottom:1.2rem}
.dv-f{display:inline}
.dv-chip{background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:.35rem .85rem;color:var(--star);cursor:pointer;font-size:.92rem;font-family:var(--sans);display:inline-flex;gap:.4rem;align-items:center;transition:.15s}
.dv-chip:hover{border-color:var(--lamp)}
.dv-chip .n{background:var(--night2);border-radius:99px;padding:0 .45rem;font-size:.8rem;color:var(--lamp);font-weight:700}
.dv-chip.on{border-color:var(--lamp);color:var(--lamp);background:rgba(232,181,99,.12);font-weight:700}
.dv-chip:disabled{opacity:.4;cursor:not-allowed}
.dv-chip:disabled:hover{border-color:var(--line)}
.dv-modal{position:fixed;inset:0;background:rgba(5,8,15,.72);z-index:100;display:flex;align-items:center;justify-content:center;padding:1rem}
.dv-box{background:var(--panel);border:1px solid var(--lamp-soft);border-radius:14px;max-width:420px;width:100%;padding:1.2rem 1.4rem;box-shadow:0 14px 44px rgba(0,0,0,.6)}
.dv-box h3{color:var(--lamp);margin-bottom:.5rem}
.dv-box p{color:var(--star);line-height:1.6}
.dv-m-act{display:flex;gap:.6rem;margin-top:.9rem;justify-content:flex-end}
.dv-need{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;border:1px solid var(--lamp-soft);background:rgba(232,181,99,.08);border-radius:12px;padding:.7rem 1rem;margin-bottom:1.2rem;color:var(--lamp);font-weight:700}
.dv-dots{display:inline-flex;gap:.3rem}
.dv-dots i{width:.85rem;height:.85rem;border-radius:50%;border:2px solid var(--lamp);display:inline-block}
.dv-dots i.f{background:var(--lamp)}
.dv-sugf{display:flex;gap:.5rem;align-items:center;max-width:520px;margin:0 0 .9rem}
.dv-sugf input[type=text]{flex:1;min-width:0;background:var(--night2);border:1px solid var(--line);border-radius:8px;padding:.55rem .7rem;color:var(--star);font-size:.92rem}
.dv-sugf input[type=text]:focus{outline:none;border-color:var(--lamp)}
.dv-sugf input[type=text]::placeholder{color:var(--muted)}
/* suggestion box — deliberately loud */
.dv-sugbox{border:2px dashed var(--lamp);background:rgba(232,181,99,.1);border-radius:14px;padding:.9rem 1.1rem;margin:0 0 1.1rem}
.dv-sug-h{color:var(--lamp);font-weight:800;font-size:1.02rem;margin:0 0 .55rem}
.dv-sugf{max-width:none;margin:0}
.dv-sugf input[type=text]{padding:.7rem .85rem;font-size:1rem;border-color:rgba(232,181,99,.45)}
.dv-sug-btn{flex:none;background:var(--lamp);color:#241706;border:none;border-radius:9px;padding:.7rem 1.2rem;font-weight:800;font-size:.98rem;cursor:pointer;font-family:var(--sans)}
.dv-sug-btn:hover{background:var(--lamp-soft)}
.dv-who{width:1.5rem;height:1.5rem;font-size:.8rem;cursor:pointer}
.dv-who::after{white-space:pre-line;max-width:320px}
/* rank rows: count pill is the tap/hover trigger revealing voter names */
.dv-hint{margin:-.2rem 0 .4rem}
.dv-rn{width:auto;min-width:1.7rem;height:1.5rem;padding:0 .55rem;border-radius:999px;background:var(--lamp);border-color:var(--lamp);color:#241706;font-size:.85rem;font-weight:800;cursor:pointer;margin-left:0}
.dv-rn:hover,.dv-rn.show{color:#241706;border-color:var(--lamp-soft);background:var(--lamp-soft)}
.dv-rn::after{white-space:normal;max-width:300px;left:auto;right:0;transform:none}
.dv-rn{gap:.25rem;padding:0 .6rem;height:1.6rem}
.dv-pend{margin-bottom:1.1rem}
.dv-pend-n{color:var(--muted);line-height:1.7;margin-top:.3rem}
/* two-round vote: description card + countdown + finalist chips */
.dv-desc{border:1px solid var(--line);background:var(--panel);border-radius:12px;padding:.8rem 1rem;margin-bottom:1rem}
.dv-desc-h{font-weight:800;margin:0 0 .35rem;display:flex;flex-wrap:wrap;gap:.4rem;align-items:baseline}
.dv-cdlbl{color:var(--muted);font-weight:400}
#dvCd{color:var(--lamp);font-size:1.2rem;font-variant-numeric:tabular-nums;letter-spacing:.04em}
.dv-desc-b{color:var(--muted);line-height:1.65;margin:0}
.dv-final .dv-chip{font-size:1.08rem;padding:.6rem 1.2rem;font-weight:700}
/* closed: the winner banner + locked finalist chips (your own pick still reads as gold) */
.dv-closedbox{border-color:var(--lamp);background:rgba(232,181,99,.1)}
.dv-closedbox .dv-desc-h{color:var(--lamp)}
.dv-win{color:var(--lamp);font-size:1.5rem;font-weight:800;letter-spacing:.01em;margin:.3rem 0 .5rem;word-break:break-all}
.dv-locked .dv-chip:disabled{opacity:.75;cursor:default}
.dv-locked .dv-chip.on:disabled{opacity:1}
/* round-1 results — collapsible during round 2 */
.dv-r1{border:1px solid var(--line);background:var(--panel);border-radius:12px;margin-bottom:1.1rem;overflow:hidden}
.dv-r1 > summary{list-style:none;cursor:pointer;padding:.7rem 1rem;font-weight:700;color:var(--lamp)}
.dv-r1 > summary::-webkit-details-marker{display:none}
.dv-r1[open] > summary{border-bottom:1px solid var(--line)}
.dv-r1-body{padding:.5rem 1rem .7rem}
.dv-fin-tag{font-size:.72rem;font-weight:700;color:var(--lamp);border:1px solid var(--lamp-soft);border-radius:99px;padding:.05rem .45rem;margin-left:.4rem;white-space:nowrap}

/* ── 圣诞盼望之旅 / Journey of Hope — home hero wordmark, lit path spine, dawn bloom, closing thread ── */
.hero-hope{margin-top:1.1rem;display:flex;align-items:center;justify-content:center;gap:.8rem}
.hero-hope span{font-family:var(--serif);font-size:clamp(.82rem,2.4vw,1rem);letter-spacing:.2em;color:var(--lamp-soft);white-space:nowrap}
.hero-hope::before,.hero-hope::after{content:"";height:1px;width:clamp(1.2rem,7vw,3.2rem);background:linear-gradient(90deg,transparent,rgba(242,207,138,.55))}
.hero-hope::after{background:linear-gradient(90deg,rgba(242,207,138,.55),transparent)}

/* the lit spine that threads dusk → night → dawn (the journey made visible) */
.journey{position:relative}
.jpath{position:absolute;top:0;bottom:0;left:50%;width:2px;transform:translateX(-50%);pointer-events:none;z-index:0;
  background:linear-gradient(180deg,transparent,rgba(149,160,189,.18) 12%,rgba(149,160,189,.18) 88%,transparent)}
.jpath-fill{position:absolute;top:0;left:0;width:100%;height:0;
  background:linear-gradient(180deg,rgba(232,181,99,.12),var(--lamp-soft));box-shadow:0 0 8px rgba(242,207,138,.5)}
.jspark{position:absolute;left:50%;top:0;width:9px;height:9px;border-radius:50%;transform:translate(-50%,-50%);
  background:var(--lamp-soft);box-shadow:0 0 10px 3px rgba(242,207,138,.85),0 0 26px 8px rgba(232,181,99,.4)}
.journey .jbeat,.journey .scene{position:relative;z-index:1}
/* a lamp node where each beat meets the spine (sits in the padding gap, clear of the text) */
.jbeat::before{content:"";position:absolute;left:50%;top:0;width:7px;height:7px;border-radius:50%;transform:translate(-50%,-50%);
  background:var(--night2);border:1.5px solid var(--lamp);box-shadow:0 0 0 4px var(--night)}
/* dawn = hope arrives: a warm bloom behind the final beat + an italic hope line */
.jbeat-dawn{position:relative}
.jbeat-dawn::after{content:"";position:absolute;left:50%;top:40%;width:min(120vw,680px);height:420px;transform:translate(-50%,-50%);z-index:-1;pointer-events:none;
  background:radial-gradient(ellipse at center,rgba(232,181,99,.16),rgba(201,112,47,.06) 45%,transparent 70%)}
.jhope{font-family:var(--serif);font-style:italic;color:var(--lamp-soft);font-size:clamp(1.05rem,3.4vw,1.35rem);letter-spacing:.03em;margin:0 auto 1.3rem;max-width:26ch}
/* the closing thread under the nativity band */
.home-thread{text-align:center;font-family:var(--serif);color:var(--lamp-soft);letter-spacing:.12em;font-size:clamp(.95rem,3vw,1.15rem);padding:3.5rem 1.5rem 1rem;max-width:36ch;margin:0 auto;opacity:.92}
@media (prefers-reduced-motion:reduce){.jpath-fill,.jspark{transition:none}}

/* ── home image bands: full-bleed edge-to-edge, with per-device heights ── */
.journey .scene{max-width:none;margin:2.5rem calc(50% - 50vw);border:none;border-radius:0;box-shadow:none}
.journey .scene img{height:240px;object-position:center 42%}    /* mobile */
.nativity-band img{height:210px;object-position:center 40%}      /* mobile — last image, shorter */
@media (min-width:641px){                                        /* tablet */
  .journey .scene img{height:360px}
  .nativity-band img{height:300px}
}
@media (min-width:1025px){                                       /* desktop */
  .journey .scene img{height:480px}
  .nativity-band img{height:360px}
}
body.is-home{overflow-x:clip}   /* guard: full-bleed bands must not add a horizontal scrollbar */
