/* WTRSO Studio — 排期 / 顺场 / 通告 */

/* ================= 配色：浅色 / 深色两套，按苹果系统色 =================
   默认跟手机的 night mode 走；顶栏上那个 ☀/☾ 可以手动钉死（html[data-theme]）。

   **用苹果的「分组」那一档（grouped），不是普通那档。** 这个站从一开始就是
   「页面比卡片深」：--bg 深、--panel 浅（日历格子、拆解卡、宽表、统计块都靠这个层次）。
   苹果只有分组这一档在两种外观下都保持这个方向（浅色 #F2F2F7 页 → #FFFFFF 卡）；
   普通那档在浅色下是反的（#FFFFFF 页 → #F2F2F7 卡），照搬得把全文件 1140 行的
   --bg/--panel 配对全翻一遍。

   几个不能照抄苹果默认值的地方，都标在下面了：
   · --line 必须是 opaqueSeparator（不透明），不能用半透明的 separator ——
     table.cn 没有 border-collapse，每个 th 和 td 各带一条 1px 边，两条叠在一起
     半透明会把表格内部的缝composite 成明显的深线。
   · --ink3 不能映射成 tertiaryLabel（白底上只有 1.7:1）。它身上挂的是真数据：
     日历格子的日期、页数、侧栏分组标题，全是 10–11px。用 systemGray 那一档。
   · --ok / --lock / --warn 在这个站里是**当文字用的**。苹果默认的绿 / 黄 / 橙在白底上
     只有 1.5–2.3:1，必须换成 HIG「增强对比度（浅色）」那一列。深色不用换。
   · --warn 是璞识的品牌红橙 #E8502C，不是苹果色。深色保留品牌值，浅色压深到够读。 */
:root{
  /* 不随主题变的：Movie Magic 的彩条、重拍紫、圆角、字体。
     ⚠️ --strip-* 和 --rep 是行业约定的浅色纸条颜色，两套主题都不许翻 ——
     它们配的是 .mmstrip{color:#111} 和 .pstripe{background:#fff}。 */
  --strip-id:#f3f4f6; --strip-ed:#ffe680; --strip-in:#9ecbff; --strip-en:#a8e6a3;
  --strip-tw:#ffc48a; --strip-itw:#ffe3c6; --strip-br:#d9efff;   /* B-ROLL 浅蓝，她 2026-11-10 */
  --rep:#7c5cd6;
  --radius:10px; --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Helvetica Neue",Arial,sans-serif;

  /* ---- 浅色（默认）---- */
  color-scheme:light;
  accent-color:var(--accent);
  --bg:#F2F2F7;        /* systemGroupedBackground */
  --panel:#FFFFFF;     /* secondarySystemGroupedBackground —— 卡片 */
  --panel2:#E5E5EA;    /* systemGray5 —— 表头、选中的分段按钮 */
  --card:#FFFFFF;      /* .scard 用，原来**根本没定义**，卡片一直是透明的 */
  --line:#C6C6C8;      /* opaqueSeparator */
  --ink:#000000;       /* label */
  --ink2:#52525A;      /* 比苹果 secondaryLabel 深一档：11px 的标签在白底上要够读 */
  --ink3:#6C6C70;      /* systemGray（浅色增强对比度），不是 tertiaryLabel */
  --accent:#0071E3;    /* 当文字 / 描边用的蓝，白底上 4.6:1 */
  --accent2:#0088FF;   /* systemBlue，当填充底色用 */
  --accent-ink:#FFFFFF;/* 填在 accent 底色上的字 */
  --warn:#C7381A; --ok:#008A36; --lock:#9A6400;
  --tint:rgba(0,0,0,.035);    /* 表格隔行 / hover 的那层薄灰 */
  --tint2:rgba(0,0,0,.085);   /* 同一套里深的那一档（主演 chip、选中态）*/
  --atint:rgba(0,113,227,.10);/* 聚焦 / 命中的淡蓝 */
  --atint2:rgba(0,113,227,.18);
  --scrim:rgba(0,0,0,.35);    /* 弹窗背后那层 */
  --sh1:0 1px 3px rgba(0,0,0,.10);
  --sh2:0 6px 18px rgba(0,0,0,.14);
  --sh3:0 16px 40px rgba(0,0,0,.18);
  --overlay:rgba(255,255,255,.94);  /* 顶栏 / 地图按钮这种浮在内容上的底 */
  --overlay-ink:#111;
  /* 带色的横幅：浅色用苹果那套淡底 + 深字 */
  --b-prep:#DCE9FB; --b-prep-ink:#0B3C7A;
  --b-rest:#FBEFD2; --b-rest-ink:#6B4A05;
  --b-meal:#FBEFD2; --b-meal-ink:#6B4A05;
  --b-move:#D7EEF6; --b-move-ink:#0A4E63;
  --b-head:#DCF0DD; --b-head-ink:#14521F;
  --b-warn:#FBE2DC; --b-warn-ink:#8A2A10;
  --b-env:#FBEFD2;  --b-env-ink:#6B4A05;
  --b-int:#DCE9FB; --b-int-ink:#0B3C7A;
  --b-ext:#FAF0CE; --b-ext-ink:#6B5505;
  --b-mix:#EDE2FA; --b-mix-ink:#4A2273;
  /* DOOD 码色：浅色直接用她 Numbers 那份的原始满色 + 深字 */
  --dk-w:#D8EAD8;  --dk-w-ink:#14521F;
  --dk-r:#BFB1D0;  --dk-r-ink:#3C2A55;
  --dk-tr:#DDDDDD; --dk-tr-ink:#3A3A3C;
  --dk-ft:#A7C0DE; --dk-ft-ink:#123A63;
  --dk-h:#F2F2F2;  --dk-h-ink:#6C6C70;
  --dk-p:#DED3F7;  --dk-p-ink:#3C2A6B;
}

/* ---- 深色：跟系统（除非手动钉成浅色）---- */
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --bg:#000000;        /* systemGroupedBackground dark —— 她要的「黑色背景」 */
    --panel:#1C1C1E;     /* secondarySystemGroupedBackground */
    --panel2:#2C2C2E;    /* tertiarySystemGroupedBackground */
    --card:#1C1C1E;
    --line:#38383A;      /* opaqueSeparator dark */
    --ink:#FFFFFF;
    --ink2:#AEAEB2;
    --ink3:#8E8E93;      /* systemGray */
    --accent:#0A84FF; --accent2:#0A84FF; --accent-ink:#FFFFFF;
    --warn:#e8502c; --ok:#39b56a; --lock:#f0b429;
    --tint:rgba(255,255,255,.04);
    --tint2:rgba(255,255,255,.10);
    --atint:rgba(10,132,255,.14);
    --atint2:rgba(10,132,255,.24);
    --scrim:rgba(0,0,0,.6);
    --sh1:0 1px 3px rgba(0,0,0,.5);
    --sh2:0 6px 18px rgba(0,0,0,.45);
    --sh3:0 16px 40px rgba(0,0,0,.55);
    --overlay:rgba(18,18,20,.92);
    --overlay-ink:#FFFFFF;
    --b-prep:#15202e; --b-prep-ink:#9ecbff;
    --b-rest:#2a2110; --b-rest-ink:#f0b429;
    --b-meal:#3a2f16; --b-meal-ink:#f0d78a;
    --b-move:#16303a; --b-move-ink:#9ad7ef;
    --b-head:#1b2b1b; --b-head-ink:#9fe0a8;
    --b-warn:#3a1b16; --b-warn-ink:#ffb4a2;
    --b-env:#5b3a00;  --b-env-ink:#ffd98a;
    --b-int:#1d2a3a; --b-int-ink:#9ecbff;
    --b-ext:#2b2a16; --b-ext-ink:#ffe680;
    --b-mix:#2a2033; --b-mix-ink:#d9b3ff;
    --dk-w:rgba(216,234,216,.22);  --dk-w-ink:#d6ecd1;
    --dk-r:rgba(191,177,208,.30);  --dk-r-ink:#ddd1f0;
    --dk-tr:rgba(221,221,221,.16); --dk-tr-ink:#AEAEB2;
    --dk-ft:rgba(167,192,222,.30); --dk-ft-ink:#d2e2f7;
    --dk-h:rgba(242,242,242,.07);  --dk-h-ink:#8E8E93;
    --dk-p:#2b2350; --dk-p-ink:#c3b2f5;
  }
}
/* ---- 深色：手动钉死 ---- */
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#000000; --panel:#1C1C1E; --panel2:#2C2C2E; --card:#1C1C1E; --line:#38383A;
  --ink:#FFFFFF; --ink2:#AEAEB2; --ink3:#8E8E93;
  --accent:#0A84FF; --accent2:#0A84FF; --accent-ink:#FFFFFF;
  --warn:#e8502c; --ok:#39b56a; --lock:#f0b429;
  --tint:rgba(255,255,255,.04); --tint2:rgba(255,255,255,.10);
  --atint:rgba(10,132,255,.14); --atint2:rgba(10,132,255,.24);
  --scrim:rgba(0,0,0,.6);
  --sh1:0 1px 3px rgba(0,0,0,.5); --sh2:0 6px 18px rgba(0,0,0,.45); --sh3:0 16px 40px rgba(0,0,0,.55);
  --overlay:rgba(18,18,20,.92); --overlay-ink:#FFFFFF;
  --b-prep:#15202e; --b-prep-ink:#9ecbff; --b-rest:#2a2110; --b-rest-ink:#f0b429;
  --b-meal:#3a2f16; --b-meal-ink:#f0d78a; --b-move:#16303a; --b-move-ink:#9ad7ef;
  --b-head:#1b2b1b; --b-head-ink:#9fe0a8; --b-warn:#3a1b16; --b-warn-ink:#ffb4a2;
  --b-env:#5b3a00; --b-env-ink:#ffd98a; --b-int:#1d2a3a; --b-int-ink:#9ecbff;
  --b-ext:#2b2a16; --b-ext-ink:#ffe680; --b-mix:#2a2033; --b-mix-ink:#d9b3ff;
  --dk-w:rgba(216,234,216,.22); --dk-w-ink:#d6ecd1;
  --dk-r:rgba(191,177,208,.30); --dk-r-ink:#ddd1f0;
  --dk-tr:rgba(221,221,221,.16); --dk-tr-ink:#AEAEB2;
  --dk-ft:rgba(167,192,222,.30); --dk-ft-ink:#d2e2f7;
  --dk-h:rgba(242,242,242,.07); --dk-h-ink:#8E8E93;
  --dk-p:#2b2350; --dk-p-ink:#c3b2f5;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--ink);font:14px/1.5 var(--sans);-webkit-text-size-adjust:100%}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--accent)}

/* ---------- 语言选择闸门 ---------- */
#gate{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;z-index:100;padding:24px}
#gate.hide{display:none}
.gate-card{max-width:460px;width:100%;text-align:center}
.gate-card h1{font-size:22px;margin:0 0 6px;font-weight:600;letter-spacing:.01em}
.gate-card .sub{color:var(--ink2);font-size:13px;margin-bottom:28px}
.gate-opts{display:grid;gap:10px}
.gate-opts button{padding:16px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;text-align:left;transition:.15s}
.gate-opts button:hover{border-color:var(--accent);background:var(--panel2)}
.gate-opts b{display:block;font-size:15px;margin-bottom:2px}
.gate-opts span{color:var(--ink3);font-size:12px}

/* ---------- 顶栏 ---------- */
header{position:sticky;top:0;z-index:40;background:var(--overlay);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.bar{display:flex;align-items:center;gap:14px;padding:10px 16px;flex-wrap:wrap}
.brand{font-weight:600;font-size:14px;white-space:nowrap}
.brand small{display:block;color:var(--ink3);font-weight:400;font-size:11px}
nav{display:flex;gap:2px;flex:1;overflow-x:auto;scrollbar-width:none}
nav::-webkit-scrollbar{display:none}
nav button{background:none;border:0;padding:7px 11px;border-radius:7px;color:var(--ink2);cursor:pointer;white-space:nowrap;font-size:13px}
nav button:hover{background:var(--panel)}
nav button.on{background:var(--panel2);color:var(--ink)}
.tools{display:flex;gap:6px;align-items:center}
.icobtn{background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:6px 10px;cursor:pointer;font-size:12px;color:var(--ink2);white-space:nowrap}
.icobtn:hover{border-color:var(--accent)}
.icobtn.lock-open{color:var(--lock);border-color:var(--lock)}
.icobtn.hi{color:var(--ink);border-color:var(--accent);font-weight:600}

/* ---------- 布局 ---------- */
main{padding:16px;max-width:1500px;margin:0 auto}
.view{display:none}
.view.on{display:block}
h2.vh{font-size:16px;margin:0 0 4px;font-weight:600}
.vsub{color:var(--ink3);font-size:12px;margin-bottom:14px}
.toolrow{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.seg{display:inline-flex;background:var(--panel);border:1px solid var(--line);border-radius:8px;overflow:hidden}
.seg button{background:none;border:0;padding:6px 12px;color:var(--ink2);cursor:pointer;font-size:12px}
.seg button.on{background:var(--accent2);color:var(--accent-ink)}
.stat{display:flex;gap:18px;flex-wrap:wrap;margin-bottom:16px}
.stat div{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;min-width:92px}
.stat b{display:block;font-size:19px;font-variant-numeric:tabular-nums}
.stat span{color:var(--ink3);font-size:11px}

/* ---------- 日历 ---------- */
.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal .calmonth{grid-column:1/-1;font-size:13px;font-weight:600;letter-spacing:.02em;color:var(--ink2);
  padding:14px 2px 2px;border-bottom:1px solid var(--line);margin-bottom:2px}
.cal .calmonth:first-child{padding-top:0}
.cal .calwd{font-size:11px;color:var(--ink3);text-align:center;padding:2px 0 4px;letter-spacing:.03em}
.cell{min-height:104px;border:1px solid transparent;border-radius:var(--radius);padding:6px 7px;position:relative}
.cell .dnum{position:absolute;top:5px;left:7px;font-size:10px;color:var(--ink3);font-variant-numeric:tabular-nums}
.cell.gap{background:var(--tint);border-color:var(--line);border-style:dashed}
.cell.out{background:none;border-color:transparent;opacity:.35}
.cell.day{padding-top:19px}
.day{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px;cursor:pointer;transition:.12s;position:relative}
.cell.day .dn{font-size:12px}
.cell.day .pg{top:5px;right:7px}
.cell.day li{font-size:10.5px;line-height:1.35}
.cell.day li i{min-width:17px}
.day:hover{border-color:var(--accent)}
.day .dn{font-weight:600;font-size:13px}
.day .dt{color:var(--ink3);font-size:11px;font-variant-numeric:tabular-nums;margin-bottom:7px}
.day .blk{font-size:10px;color:var(--accent);text-transform:uppercase;letter-spacing:.04em;margin-bottom:5px;line-height:1.3}
.day ul{list-style:none;margin:0;padding:0;display:grid;gap:3px}
.day li{font-size:11px;color:var(--ink2);display:flex;gap:6px}
.day li i{font-style:normal;color:var(--ink);font-variant-numeric:tabular-nums;min-width:20px}
.day .pg{position:absolute;top:9px;right:10px;font-size:10px;color:var(--ink3);font-variant-numeric:tabular-nums}
.day.brk{border-style:dashed;border-color:#6b4f1d}
.day.brk .dn{color:var(--lock)}
.day.prep{opacity:.85}
.day.empty .dn{color:var(--ink3)}

/* ---------- Movie Magic 彩条 ---------- */
.board{display:grid;gap:2px}
.mmstrip{display:grid;grid-template-columns:42px 34px 60px 1fr 150px 54px;gap:0;align-items:stretch;
  background:var(--strip-id);color:#111;border:1px solid rgba(0,0,0,.25);font-size:12px;min-height:30px}
.mmstrip>div{padding:5px 7px;border-right:1px solid rgba(0,0,0,.14);display:flex;align-items:center;overflow:hidden}
.mmstrip>div:last-child{border-right:0}
.mmstrip .sc{font-weight:700;font-variant-numeric:tabular-nums;justify-content:center}
.mmstrip .syn{display:block;line-height:1.35;padding-top:6px;white-space:nowrap;text-overflow:ellipsis}
.mmstrip .cast{font-variant-numeric:tabular-nums;letter-spacing:.02em;font-size:11px}
.mmstrip .pg{justify-content:flex-end;font-variant-numeric:tabular-nums;font-weight:600}
.mmstrip.ed{background:var(--strip-ed)}
.mmstrip.in{background:var(--strip-in)}
.mmstrip.en{background:var(--strip-en)}
.mmstrip.tw{background:var(--strip-tw)}
.mmstrip.br{background:var(--strip-br)}
.mmstrip.itw{background:var(--strip-itw)}
.daybar{background:#000;color:#fff;padding:7px 10px;font-size:12px;font-weight:600;display:flex;justify-content:space-between;gap:10px;margin-top:6px}
.daybar.brk{background:#6b4f1d}
.daybar.prep{background:#2c3550}
.daybar span{font-weight:400;color:#cbd2de;font-variant-numeric:tabular-nums}
.blockbar{background:var(--panel2);color:var(--accent);padding:6px 10px;font-size:11px;letter-spacing:.06em;text-transform:uppercase;border-left:3px solid var(--accent)}
.noterow{background:var(--panel);color:var(--ink3);padding:6px 10px;font-size:11px;font-style:italic}

/* ---------- 中式宽表 ---------- */
.cnwrap{overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}
table.cn{border-collapse:collapse;width:100%;font-size:12px;white-space:nowrap}
table.cn th,table.cn td{border:1px solid var(--line);padding:5px 7px;text-align:left;vertical-align:top}
table.cn thead th{background:var(--panel2);position:sticky;top:0;z-index:2;font-weight:600;font-size:11px;color:var(--ink2)}
table.cn td.syn{white-space:normal;min-width:320px;max-width:460px;line-height:1.4}
table.cn td.sc{font-weight:700;text-align:center;font-variant-numeric:tabular-nums;position:sticky;left:0;background:var(--panel);z-index:1}
table.cn tr.dbrk td{background:#000;color:#fff;font-weight:600;text-align:left;letter-spacing:.06em;padding:0}
/* 表比屏幕宽，日期标签钉在左边，横向滚动时始终看得见 */
table.cn tr.dbrk .dbk{position:sticky;left:0;display:inline-block;padding:6px 10px}
table.cn tr.blk td{background:var(--panel2);color:var(--accent);font-size:11px;letter-spacing:.06em;padding:0}
table.cn tr.blk .dbk{position:sticky;left:0;display:inline-block;padding:4px 10px}
table.cn td.cno{text-align:center;font-variant-numeric:tabular-nums;width:22px;padding:5px 2px}
/* 部门提示列：文字要能换行，不然整张表被撑到几米宽 */
table.cn td.set{white-space:normal;min-width:160px;max-width:230px;line-height:1.35}
table.cn td.dept{white-space:normal;min-width:130px;max-width:260px;line-height:1.35;font-size:11px;color:var(--ink2)}
table.cn tr.dbrk.prep td{background:var(--b-prep);color:var(--b-prep-ink)}
table.cn tr.dbrk.brk td{background:var(--b-rest);color:var(--b-rest-ink)}
table.cn td.has{background:var(--atint2);font-weight:600}
table.cn tbody tr:hover td{background:var(--tint)}
table.cn tbody tr:hover td.sc{background:var(--panel2)}

/* ---------- 通用表 ---------- */
/* 2026-11-11 修：表上原来有 overflow:hidden（为了切圆角），结果 sticky 表头把表本身当滚动容器，
   永远被推到表顶往下 52px、压在第一行上。圆角改用 th/td 自己切，表头钉在顶栏（58px）下面。 */
table.grid{border-collapse:collapse;width:100%;font-size:12.5px;background:var(--panel);border-radius:var(--radius)}
table.grid thead th:first-child{border-top-left-radius:var(--radius)}
table.grid thead th:last-child{border-top-right-radius:var(--radius)}
table.grid th,table.grid td{border-bottom:1px solid var(--line);padding:7px 9px;text-align:left;vertical-align:top}
table.grid th{background:var(--panel2);font-size:11px;color:var(--ink2);font-weight:600;position:sticky;top:58px;z-index:3}
table.grid td.n{font-variant-numeric:tabular-nums;text-align:center;font-weight:600}
table.grid tr:hover td{background:var(--tint)}

/* ---------- 场次拆解卡 ---------- */
.bd{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:10px}
.bd h3{margin:0 0 3px;font-size:14px}
.bd .meta{color:var(--ink3);font-size:11.5px;margin-bottom:10px;display:flex;gap:12px;flex-wrap:wrap}
.bd .syn{font-size:12.5px;color:var(--ink2);line-height:1.5;margin-bottom:12px}
.bd dl{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:9px 16px;margin:0}
.bd dt{font-size:10px;color:var(--ink3);text-transform:uppercase;letter-spacing:.05em;margin-bottom:2px}
.bd dd{margin:0;font-size:12px;min-height:16px;border-bottom:1px dotted var(--line);padding-bottom:3px}
.bd dd:empty::after{content:"—";color:var(--ink3)}
.bd dd[contenteditable=true]{outline:0;cursor:text}
.bd dd[contenteditable=true]:focus{border-bottom-color:var(--accent);background:var(--atint)}

/* ---------- 通告单 ---------- */
.cs{background:#fff;color:#111;max-width:860px;margin:0 auto;padding:16px 18px;border-radius:6px;font-size:11px;line-height:1.35}
.cs h1{font-size:17px;margin:0 0 1px;letter-spacing:.01em}
.cs .csub{font-size:10.5px;color:#444;margin-bottom:8px}
.cs table{border-collapse:collapse;width:100%;margin-bottom:7px}
.cs th,.cs td{border:1px solid #999;padding:2.5px 5px;text-align:left;vertical-align:top}
.cs th{background:#eceff3;font-size:9.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:700}
.cs .band{background:#111;color:#fff;padding:3px 6px;font-size:10px;font-weight:700;letter-spacing:.06em;margin:7px 0 4px}
.cs .two{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.cs .three{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}
.cs .kv{font-size:10px}
.cs .kv b{display:inline-block;min-width:62px;color:#444;font-weight:600}
.cs .big{font-size:13px;font-weight:700}
.cs .warnbox{border:1.5px solid #c0392b;padding:4px 6px;font-size:10px;margin-bottom:7px}

/* ---------- 导入导出 ---------- */
.drop{border:1.5px dashed var(--line);border-radius:var(--radius);padding:26px;text-align:center;color:var(--ink3);cursor:pointer;transition:.15s;background:var(--panel)}
.drop:hover,.drop.over{border-color:var(--accent);color:var(--ink2);background:var(--panel2)}
.tpl{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:9px;margin-top:12px}
.tpl a{display:block;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:11px 13px;text-decoration:none;color:var(--ink)}
.tpl a:hover{border-color:var(--accent)}
.tpl b{display:block;font-size:12.5px;margin-bottom:2px}
.tpl span{color:var(--ink3);font-size:11px}

/* ---------- 弹层 ---------- */
.modal{position:fixed;inset:0;background:var(--scrim);display:none;align-items:center;justify-content:center;z-index:80;padding:18px}
.modal.on{display:flex}
.mbox{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px;max-width:420px;width:100%}
.mbox h3{margin:0 0 10px;font-size:15px}
.mbox input{width:100%;padding:9px 11px;background:var(--bg);border:1px solid var(--line);border-radius:7px;margin-bottom:11px}
.mbox .row{display:flex;gap:8px;justify-content:flex-end}
.btn{background:var(--accent2);border:0;color:#fff;padding:8px 15px;border-radius:7px;cursor:pointer;font-size:13px}
.btn.ghost{background:none;border:1px solid var(--line);color:var(--ink2)}
.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:var(--panel2);border:1px solid var(--line);
  padding:9px 16px;border-radius:9px;font-size:13px;z-index:90;opacity:0;pointer-events:none;transition:.22s}
.toast.on{opacity:1}

.ro{opacity:.55;pointer-events:none}
.en-only,.cn-only{display:none}
body.lang-cn .cn-only,body.lang-en .en-only,body.lang-bi .cn-only,body.lang-bi .en-only{display:inline}
body.lang-cn .en-only,body.lang-en .cn-only{display:none}
.bi-sep{color:var(--ink3);margin:0 4px}
body.lang-cn .bi-sep,body.lang-en .bi-sep{display:none}

/* ---------- 手机 ---------- */
@media(max-width:820px){
  main{padding:12px}
  .bar{padding:9px 12px;gap:9px}
  .brand{font-size:13px}
  .cal{grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}
  .cell{min-height:74px;padding:4px 4px}
  .cell.day{padding-top:16px}
  .cell.day .dn{font-size:10px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}
  .cell.day .pg{display:none}
  .cell.day .blk{display:none}
  .cell.day li{font-size:9px;gap:3px}
  .cell.day li i{min-width:0}
  .cal .calwd{font-size:9.5px}
  .mmstrip{grid-template-columns:38px 30px 1fr 46px;grid-auto-rows:min-content}
  .mmstrip .loc{display:none}
  .mmstrip .cast{grid-column:1/-1;border-top:1px solid rgba(0,0,0,.14);border-right:0;font-size:10.5px}
  .mmstrip .syn{white-space:normal}
  .bd dl{grid-template-columns:1fr 1fr}
  .cs{padding:12px;font-size:10.5px}
  .cs .two,.cs .three{grid-template-columns:1fr}
}
@media(max-width:420px){
  .cell.day ul{display:none}
  .cell{min-height:56px}
  .bd dl{grid-template-columns:1fr}
}

/* ---------- 打印：通告单 1–2 页 ---------- */
@media print{
  /* 打印一律按浅色那套出。原来只翻了 body 的底色和字色，token 还是深色的，
     于是面板底、--ink3 的正文、带色横幅都按深色算 —— 浏览器默认不印背景才看不出来，
     一开「打印背景」就是满纸黑块。这里把整套 token 按浅色重置。 */
  :root{
    color-scheme:light;
    --bg:#fff; --panel:#fff; --panel2:#F2F2F7; --card:#fff; --line:#C6C6C8;
    --ink:#000; --ink2:#3A3A3C; --ink3:#5A5A5F;
    --accent:#0051BB; --accent2:#0051BB; --accent-ink:#fff;
    --warn:#B3300F; --ok:#00702B; --lock:#7A4F00;
    --tint:rgba(0,0,0,.04); --tint2:rgba(0,0,0,.09);
    --atint:rgba(0,81,187,.10); --atint2:rgba(0,81,187,.18);
    --scrim:rgba(0,0,0,.35);
    --sh1:none; --sh2:none; --sh3:none;
    --overlay:#fff; --overlay-ink:#111;
    --b-prep:#DCE9FB; --b-prep-ink:#0B3C7A; --b-rest:#FBEFD2; --b-rest-ink:#6B4A05;
    --b-meal:#FBEFD2; --b-meal-ink:#6B4A05; --b-move:#D7EEF6; --b-move-ink:#0A4E63;
    --b-head:#DCF0DD; --b-head-ink:#14521F; --b-warn:#FBE2DC; --b-warn-ink:#8A2A10;
    --b-env:#FBEFD2; --b-env-ink:#6B4A05; --b-int:#DCE9FB; --b-int-ink:#0B3C7A;
    --b-ext:#FAF0CE; --b-ext-ink:#6B5505; --b-mix:#EDE2FA; --b-mix-ink:#4A2273;
    --dk-w:#D8EAD8; --dk-w-ink:#14521F; --dk-r:#BFB1D0; --dk-r-ink:#3C2A55;
    --dk-tr:#DDDDDD; --dk-tr-ink:#3A3A3C; --dk-ft:#A7C0DE; --dk-ft-ink:#123A63;
    --dk-h:#F2F2F2; --dk-h-ink:#6C6C70; --dk-p:#DED3F7; --dk-p-ink:#3C2A6B;
  }
  body{background:#fff;color:#000}
  header,.toolrow,.stat,.vsub,#gate,.modal,.toast,#side{display:none!important}
  main{padding:0;max-width:none}
  .cs{max-width:none;padding:0;font-size:9.5pt;border-radius:0}
  .cs th,.cs td{padding:1.5px 4px}
  .cs .band{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .cs th{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .mmstrip{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .pgbreak{page-break-before:always}
  @page{size:A4;margin:10mm}
}

/* ---------- 使用说明 ---------- */
.guide{max-width:820px}
.guide h3{font-size:14px;margin:26px 0 8px;padding-bottom:6px;border-bottom:1px solid var(--line)}
.guide h3:first-child{margin-top:0}
.guide ol,.guide ul{padding-left:20px;margin:0 0 10px}
.guide li{margin-bottom:6px;font-size:13px;color:var(--ink2);line-height:1.6}
.guide p{font-size:13px;color:var(--ink2);line-height:1.6;margin:0 0 9px}
.guide .tip{font-size:12px;color:var(--ink3);background:var(--panel);border-left:2px solid var(--line);padding:8px 11px;border-radius:0 7px 7px 0}
.guide code{background:var(--panel2);padding:1px 5px;border-radius:4px;font:12px var(--mono);color:var(--accent)}
.guide table.grid{margin-top:4px}
.guide table.grid td:first-child{white-space:nowrap;width:92px}
.guide .kbd{font-family:var(--mono)}
body.lang-cn .guide .en-only,body.lang-en .guide .cn-only{display:none!important}
body.lang-bi .guide .en-only{display:block;opacity:.72;border-top:1px dashed var(--line);margin-top:8px;padding-top:8px}
body.lang-bi .guide .cn-only,body.lang-cn .guide .cn-only,body.lang-en .guide .en-only{display:block}
body.lang-bi .guide h3 .en-only,body.lang-bi .guide h3 .cn-only{display:inline;border:0;margin:0;padding:0;opacity:1}

/* ---------- 闸门第二步 / 项目设置 ---------- */
.gatelbl{display:block;font-size:11px;color:var(--ink3);margin-bottom:4px}
.gateinput{width:100%;padding:10px 11px;background:var(--panel);border:1px solid var(--line);border-radius:8px}
.gatehint{font-size:11px;color:var(--ink3);margin-top:7px;line-height:1.5}
.setgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px 14px}
.setgrid label{display:block;font-size:11px;color:var(--ink3);margin-bottom:4px}
.setgrid input,.setgrid select{width:100%;padding:7px 9px;background:var(--panel);border:1px solid var(--line);border-radius:7px}
.bd h3 .hd-en{display:block;font-size:11.5px;color:var(--ink3);font-weight:400;margin-top:2px;letter-spacing:.01em}

/* ---------- 地点 / 地图 ---------- */
.keybox{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;max-width:760px}
.keybox h3{margin:0 0 10px;font-size:14px}
.keybox ol{padding-left:20px;margin:0;font-size:12.5px;color:var(--ink2);line-height:1.7}
.keybox a{color:var(--accent)}
.maprow{display:grid;grid-template-columns:1fr 330px;gap:12px;align-items:start}
#mapBox{height:460px;border-radius:var(--radius);border:1px solid var(--line);overflow:hidden;background:var(--panel)}
.locinfo{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px;min-height:460px;font-size:12.5px}
.locinfo h4{margin:0 0 3px;font-size:13.5px}
.locinfo .addr{color:var(--ink3);font-size:11.5px;margin-bottom:12px;line-height:1.5}
.locinfo .kv{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--line)}
.locinfo .kv span{color:var(--ink3);font-size:11.5px}
.locinfo .kv b{font-variant-numeric:tabular-nums}
.locinfo .sec{margin-top:14px;font-size:10px;color:var(--ink3);text-transform:uppercase;letter-spacing:.06em}
.locinfo .poi{padding:7px 0;border-bottom:1px solid var(--line)}
.locinfo .poi b{display:block;font-size:12px}
.locinfo .poi span{color:var(--ink3);font-size:11px;line-height:1.45}
.locinfo .empty{color:var(--ink3);font-size:12px;padding-top:50px;text-align:center;line-height:1.7}
.sugbox{display:none;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:10px;max-height:230px;overflow:auto}
.sugbox.on{display:block}
.sugbox div{padding:8px 11px;cursor:pointer;border-bottom:1px solid var(--line);font-size:12.5px}
.sugbox div:hover{background:var(--panel2)}
.sugbox div span{display:block;color:var(--ink3);font-size:11px}
@media(max-width:900px){.maprow{grid-template-columns:1fr}#mapBox{height:320px}.locinfo{min-height:0}}
.chk{display:inline-flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:6px 11px;font-size:12px;color:var(--ink2);cursor:pointer}
.chk input{margin:0}
.legend{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:9px 12px;margin-bottom:10px;font-size:11.5px;line-height:1.9;color:var(--ink2)}
.legend b{color:var(--accent);font-variant-numeric:tabular-nums;margin-right:3px}
.legend i{font-style:normal;color:var(--ink3);margin:0 7px}
.cs .notes{font-size:9.5px;line-height:1.45;columns:2;column-gap:14px}
.cs .notes div{break-inside:avoid;margin-bottom:2px}
.cs .safety{background:#111;color:#fff;text-align:center;padding:4px;font-size:10px;font-weight:700;letter-spacing:.04em;margin:7px 0}
.mmstrip.nocast{grid-template-columns:42px 34px 60px 1fr 54px}
@media(max-width:820px){.mmstrip.nocast{grid-template-columns:38px 30px 1fr 46px}}

/* ---------- 通告单表头 ---------- */
.cshead{display:grid;grid-template-columns:150px 1fr 196px;gap:0;border:1px solid #999;margin-bottom:0}
.cshead table{margin:0;border:0}
.cshead .hcrew th{width:62px;font-size:9px;text-transform:none;background:#fff;color:#444;text-align:right;border-left:0}
.cshead .hcrew td{font-size:10px}
.cshead .hcrew tr:last-child td,.cshead .hcrew tr:last-child th{border-bottom:0}
.hmid{padding:8px 10px;text-align:center;border-left:1px solid #999;border-right:1px solid #999;display:flex;flex-direction:column;justify-content:center}
.hmid h1{font-size:16px;margin:0 0 3px;letter-spacing:.02em}
.hmid .slogan{color:#c0392b;font-size:13px;font-weight:700;margin-bottom:6px}
.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;margin-top:4px}
.tiles div{background:#ffe680;border:1px solid #c9a227;padding:4px 2px;font-size:10px;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.cshead .hright th{width:74px;font-size:9px;text-transform:none;background:#fff;color:#444;text-align:left}
.cshead .hright td{font-size:10px}
.cshead .hright tr.hl td{background:#dff0d8;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.cshead .hright tr.hl2 td{background:#dff0d8;color:#c0392b;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.cshead .hright tr:last-child td,.cshead .hright tr:last-child th{border-bottom:0}
.cshead .hright th{border-right:0}
.csbar{background:#dce6f1;border:1px solid #999;border-top:0;text-align:center;padding:3px;font-size:10px;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.cs table.loc6{margin-bottom:0;border-top:0}
.cs table.loc6 th{font-size:9px;text-align:center}
.cs table.loc6 td{font-size:9.5px;text-align:center;line-height:1.35}
.emerg{border:1px solid #999;border-top:0;padding:3px 6px;font-size:9.5px;background:#fdf3f2;-webkit-print-color-adjust:exact;print-color-adjust:exact;margin-bottom:7px}
@media(max-width:820px){.cshead{grid-template-columns:1fr}.hmid{border-left:0;border-right:0;border-top:1px solid #999;border-bottom:1px solid #999}}
.cs .four{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}
.cs .four tr.hl td{background:#dff0d8;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.cs .four tr.hl2 td{background:#dff0d8;color:#c0392b;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.cs table.dept th{width:92px;text-align:left;font-size:9px}
/* 部门提示一场一行，靠真换行断行 */
.cs table.dept td{white-space:pre-wrap}
.cs table.dept td{font-size:9.5px;min-height:13px}
/* 顺场表带过来的部门提示：去掉顶边框让它贴在场次行下面像同一条，
   浅灰底只是把它和场次分开；通告单是要打印的，所以不用颜色标记，底色强制输出。 */
@media(max-width:820px){.cs .four{grid-template-columns:1fr 1fr}}

/* ---------- 每日拍摄计划 ---------- */
table.plan{border-collapse:collapse;width:100%;font-size:12px;background:var(--panel);border-radius:var(--radius);overflow:hidden}
table.plan th,table.plan td{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}
table.plan th{background:var(--panel2);font-size:10.5px;color:var(--ink2);white-space:nowrap}
table.plan td.tm{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600;width:112px}
table.plan td.sh{font-weight:700;width:58px;font-variant-numeric:tabular-nums}
table.plan tr.full td{background:var(--panel2);font-weight:600;letter-spacing:.02em}
table.plan tr.meal td{background:var(--b-meal);color:var(--b-meal-ink)}
table.plan tr.move td{background:var(--b-move);color:var(--b-move-ink)}
table.plan tr.head td{background:var(--b-head);color:var(--b-head-ink)}
table.plan tr.end td{background:#000;color:#fff;text-align:center;letter-spacing:.1em}
table.plan tr.cont td.tm{color:var(--ink3);font-weight:400}
.planwarn{background:var(--b-warn);border:1px solid var(--warn);color:var(--b-warn-ink);border-radius:var(--radius);padding:9px 12px;font-size:12px;margin-bottom:10px}
@media print{table.plan tr.full td,table.plan tr.meal td,table.plan tr.move td,table.plan tr.head td,table.plan tr.end td{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
table.grid td.daycol{padding:7px 6px}
table.grid td.daycol>div{width:84px;font-weight:600;font-size:11px;line-height:1.3;word-break:break-word}
table.grid td.daycol .pg{display:block;color:var(--ink3);font-weight:400;font-size:10px;margin-top:3px}
.biedit{margin-bottom:12px}
.birow{display:flex;gap:9px;align-items:flex-start;margin-bottom:5px}
.birow .lbl{flex:0 0 58px;font-size:10px;color:var(--ink3);text-transform:uppercase;letter-spacing:.04em;padding-top:3px}
.birow .val{flex:1;font-size:12.5px;line-height:1.5;color:var(--ink2);border-bottom:1px dotted var(--line);padding-bottom:3px;min-height:17px}
.birow .val[contenteditable=true]{cursor:text}
.birow .val[contenteditable=true]:hover{background:var(--tint)}
.birow .val[contenteditable=true]:focus{outline:0;border-bottom-color:var(--accent);background:var(--atint);color:var(--ink)}
.birow .val:empty::after{content:"—";color:var(--ink3)}
/* 行内编辑：解锁后任何表里的字段都能点着改 */
.iedit{display:inline-block;min-width:16px;border-radius:3px;padding:0 2px;margin:0 -2px}
.iedit[contenteditable=true]{cursor:text;box-shadow:inset 0 -1px 0 var(--line)}
.iedit[contenteditable=true]:hover{background:var(--tint2)}
.iedit[contenteditable=true]:focus{outline:0;background:var(--atint2);box-shadow:inset 0 -1px 0 var(--accent);color:var(--ink)}
.iedit:empty::after{content:"—";color:var(--ink3)}
.en2{opacity:.62;font-size:.93em}
table.cn .iedit[contenteditable=true]{box-shadow:none}
table.cn .iedit[contenteditable=true]:hover{background:var(--tint2)}
.optcols{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;align-items:start}
.optcols table.grid th{position:static;width:104px;font-size:10.5px;white-space:nowrap}
.optcols table.grid td{font-size:12px}
@media(max-width:900px){.optcols{grid-template-columns:1fr}}
@media print{#csOpts,#csOpts+*{display:none!important}}
.envbar{background:var(--b-env);color:var(--b-env-ink);padding:7px 16px;font-size:12.5px;text-align:center;border-bottom:1px solid var(--line)}
.envbar b{color:var(--ink)}
@media print{.envbar{display:none}}
table.maptbl{border-collapse:collapse;width:100%;font-size:12.5px}
table.maptbl th{background:var(--panel2);padding:7px 10px;text-align:left;font-size:11px;color:var(--ink2);position:sticky;top:0}
table.maptbl td{padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
table.maptbl td:first-child{width:56%}
table.maptbl .smp{color:var(--ink3);font-size:11px}
table.maptbl select{width:100%;padding:5px 7px;background:var(--bg);border:1px solid var(--line);border-radius:6px}

/* ---------- 场景表 ---------- */
.setgrp{margin-bottom:22px}
.setgrp h3{font-size:13px;margin:0 0 8px;padding:6px 11px;border-radius:7px;display:inline-block;letter-spacing:.04em}
.setgrp h3 span{font-weight:400;opacity:.72;margin-left:8px;font-size:11.5px}
.setgrp.int h3{background:var(--b-int);color:var(--b-int-ink)}
.setgrp.ext h3{background:var(--b-ext);color:var(--b-ext-ink)}
.setgrp.mix h3{background:var(--b-mix);color:var(--b-mix-ink)}
table.sets{border-collapse:collapse;width:100%;font-size:12.5px;background:var(--panel);border-radius:var(--radius);overflow:hidden}
table.sets th,table.sets td{border-bottom:1px solid var(--line);padding:7px 9px;text-align:left;vertical-align:top}
table.sets th{background:var(--panel2);font-size:10.5px;color:var(--ink2);white-space:nowrap}
table.sets td.ie{width:50px;text-align:center;font-weight:600;font-variant-numeric:tabular-nums}
table.sets td.set{font-weight:600;min-width:170px}
table.sets td.set .en{display:block;font-weight:400;color:var(--ink3);font-size:11px;margin-top:1px}
table.sets td.sc{width:150px;font-variant-numeric:tabular-nums;color:var(--ink2);font-size:11.5px;line-height:1.5}
table.sets td.pg{width:62px;text-align:right;font-variant-numeric:tabular-nums}
table.sets td.shoot{min-width:150px}
table.sets td.note{min-width:150px;color:var(--ink2)}
table.sets tr:hover td{background:var(--tint)}
@media print{
  .setgrp h3{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  table.sets{font-size:9.5pt}
}
@media(max-width:820px){table.sets td.sc{width:auto}table.sets{font-size:11.5px}}

/* 双语模式下，相邻的中/英 span 自动加分隔符；已经手写了 .bi-sep 的不重复加。
   使用 span 选择器，使用说明页里的 div.en-only（整段英文）不受影响。 */
body.lang-bi span.en-only::before{content:" / ";color:var(--ink3);font-weight:400}
body.lang-bi .bi-sep + span.en-only::before{content:none}

/* ---------- 演员抽屉 ---------- */
.legend b{cursor:default}
.legend .chip{display:inline-block;cursor:pointer;border-radius:5px;padding:1px 5px;margin:0 -2px;transition:background .12s}
.legend .chip:hover{background:var(--atint2)}
.legend .chip:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.drawer{position:fixed;inset:0;background:var(--scrim);display:none;z-index:85}
.drawer.on{display:block}
.drawer .dbox{position:absolute;top:0;right:0;bottom:0;width:min(560px,100%);background:var(--panel);
  border-left:1px solid var(--line);display:flex;flex-direction:column;box-shadow:-18px 0 44px rgba(0,0,0,.4)}
.dhead{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:18px 20px 14px;border-bottom:1px solid var(--line)}
.dhead .dno{font-size:11px;color:var(--accent);font-variant-numeric:tabular-nums;letter-spacing:.08em;margin-bottom:3px}
.dhead h3{margin:0;font-size:19px;font-weight:650;line-height:1.25}
.dhead .dsub{color:var(--ink3);font-size:12px;margin-top:4px}
.dstats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border-bottom:1px solid var(--line)}
.dstats div{background:var(--panel);padding:11px 8px;text-align:center}
.dstats b{display:block;font-size:17px;font-variant-numeric:tabular-nums}
.dstats span{color:var(--ink3);font-size:10.5px}
.dbody{flex:1;overflow:auto;padding:0}
.dbody table{border-collapse:collapse;width:100%;font-size:12px}
.dbody th{background:var(--panel2);padding:7px 9px;text-align:left;font-size:10.5px;color:var(--ink2);position:sticky;top:0;z-index:1}
.dbody td{padding:7px 9px;border-bottom:1px solid var(--line);vertical-align:top}
.dbody td.n{font-variant-numeric:tabular-nums;text-align:center;font-weight:600;width:38px}
.dbody tr.dayhdr td{background:var(--panel2);font-weight:600;font-size:11.5px;letter-spacing:.03em}
.dbody tr.dayhdr td span{float:right;color:var(--ink3);font-weight:400}
.dbody .unsched{color:var(--warn)}
.dfoot{padding:12px 20px;border-top:1px solid var(--line)}
@media(max-width:600px){.dstats{grid-template-columns:repeat(2,1fr)}.drawer .dbox{width:100%}}
.dorder{padding:10px 20px;border-bottom:1px solid var(--line)}
.dorder .seg{width:100%}
.dorder .seg button{flex:1;padding:7px 10px;font-size:12px}
.dbody tr.schdr td{background:var(--panel2);font-weight:600;font-size:11px;letter-spacing:.04em;color:var(--ink2)}
.dbody td.dayc{font-size:11px;color:var(--ink3);white-space:nowrap}

/* DOOD：表头两行（编号 / 日期星期），格子里 MM 代码 + 中文角标 */
table.cn.dood th.dsub{top:26px;font-weight:400;font-size:9.5px;line-height:1.2;color:var(--ink3)}
table.cn.dood td.cno{font-size:9.5px;text-align:center;padding:3px 4px;font-variant-numeric:tabular-nums}
table.cn.dood td.cno .dg{display:block;font-size:8px;color:var(--ink3);line-height:1}
table.cn.dood td.hold{color:var(--ink3)}
table.cn.dood .dbrkday{background:var(--panel2);color:var(--ink3)}
table.cn.dood .dprep{font-style:italic}

/* 通告单是白纸，深色那套行内编辑样式在这儿要反过来；
   自动算出来的值淡一点，手填过的是黑的，一眼看得出哪些是自己写的。
   打印时所有编辑痕迹都不出现。 */
.cs .iedit{min-width:26px;padding:0 2px}
.cs .iedit[contenteditable=true]{box-shadow:inset 0 -1px 0 rgba(0,0,0,.22)}
.cs .iedit[contenteditable=true]:hover{background:rgba(42,120,220,.10)}
.cs .iedit[contenteditable=true]:focus{background:rgba(42,120,220,.16);box-shadow:inset 0 -1.5px 0 #2a78dc;color:#111}
.cs .iedit.isauto{color:#666}
.cs .iedit:empty::after{content:"—";color:#bbb}
@media print{
  .cs .iedit{box-shadow:none !important;background:none !important;color:inherit !important}
  .cs .iedit:empty::after{content:""}
}

/* ───────── 勘景 ───────── */
.sgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;margin:10px 0 18px}
.scard{border:1px solid var(--line);border-radius:9px;padding:11px 12px;background:var(--card)}
.sch{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.sch b{font-size:16px;min-width:30px}
.sch .nick{font-size:13.5px;font-weight:600}
.sch .meta{font-size:11.5px;color:var(--ink3);margin-left:auto}
.smeta{font-size:11.5px;color:var(--ink3);margin-top:3px;display:flex;gap:8px;flex-wrap:wrap}
.smeta .day{color:var(--accent)}
.smeta .day.none{color:var(--warn)}
.sloc{font-size:12.5px;margin-top:6px;font-weight:600}
.sloc i{font-style:normal;font-weight:400;color:var(--ink3)}
.spin{font-size:11.5px;color:var(--ink3);margin-top:4px;line-height:1.45}
.spin a{color:var(--accent);white-space:nowrap}
/* 现场备注：草海要高草还是矮草、几点日落这种，和定位分开，别挂在 📍 后面 */
.snote{font-size:11.5px;color:var(--ink2);margin-top:4px;line-height:1.45;
  border-left:2px solid var(--line);padding-left:7px}
.sphotos{position:relative;margin-top:9px}
.pstrip{display:flex;gap:6px;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.pstrip::-webkit-scrollbar{display:none}
.pstrip img{height:92px;width:auto;border-radius:5px;flex:0 0 auto;scroll-snap-align:start;cursor:zoom-in;object-fit:cover}
.sphotos .pnav{position:absolute;top:50%;transform:translateY(-50%);z-index:2;border:0;width:26px;height:40px;
  border-radius:5px;background:rgba(0,0,0,.52);color:#fff;font-size:19px;line-height:1;cursor:pointer}
.sphotos .pnav.prev{left:-2px}
.sphotos .pnav.next{right:-2px}
.sphotos .pcount{position:absolute;right:4px;bottom:4px;background:rgba(0,0,0,.6);color:#fff;
  font-size:10.5px;padding:1px 5px;border-radius:9px}
#lightbox{position:fixed;inset:0;background:rgba(0,0,0,.92);display:none;align-items:center;justify-content:center;z-index:999}
#lightbox.on{display:flex}
#lightbox img{max-width:94vw;max-height:88vh;object-fit:contain}
#lightbox button{position:absolute;border:0;background:rgba(255,255,255,.14);color:#fff;cursor:pointer;border-radius:7px}
#lbPrev,#lbNext{top:50%;transform:translateY(-50%);width:46px;height:74px;font-size:30px}
#lbPrev{left:12px} #lbNext{right:12px}
#lbClose{top:14px;right:14px;width:40px;height:40px;font-size:18px}
#lbCap{position:absolute;bottom:16px;color:#fff;font-size:12.5px;opacity:.75}
@media print{#lightbox{display:none!important}}
.pstrip figure{margin:0;flex:0 0 auto;scroll-snap-align:start;max-width:170px}
.pstrip figure figcaption{font-size:10px;color:var(--ink3);line-height:1.3;margin-top:3px;
  white-space:normal;word-break:break-word}
.spin{display:flex;flex-wrap:wrap;gap:5px}
.spin .pinbtn{display:inline-block;font-size:11px;line-height:1.3;padding:3px 7px;border-radius:5px;
  border:1px solid var(--line);color:var(--accent);text-decoration:none;max-width:100%}
.spin .pinbtn:hover{background:var(--line)}
/* ───────── 排期工作区 Planner ───────── */
.pfhint{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--ink2);
  background:var(--atint);border:1px solid var(--atint2);
  border-radius:7px;padding:6px 11px;margin-bottom:10px}
.pfhint b{color:var(--accent)}
.pfhint span{color:var(--ink3);font-size:11.5px}
.pfhint button{margin-left:auto;background:none;border:1px solid var(--line);border-radius:5px;
  color:var(--ink2);font-size:11px;padding:2px 9px;cursor:pointer}
.pfhint button:hover{border-color:var(--accent);color:var(--accent)}
.pstripe.plit{box-shadow:0 0 0 2px var(--accent) inset;border-color:var(--accent)}
.pdstat u{color:var(--accent);text-decoration:none}

.pdone{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;font-size:12.5px;
  border-radius:8px;padding:9px 13px;margin-bottom:10px;border:1px solid var(--line);background:var(--panel)}
.pdone b{font-size:13.5px}
.pdone span{color:var(--ink2);font-size:12px}
.pdone .plist{flex-basis:100%;color:var(--ink3);font-size:11.5px;line-height:1.7;font-variant-numeric:tabular-nums}
.pdone.bad{border-color:rgba(232,80,44,.42);background:rgba(232,80,44,.07)}
.pdone.bad b{color:#e8502c}
.pdone.ok{border-color:rgba(60,180,120,.42);background:rgba(60,180,120,.07)}
.pdone:empty{display:none}
/* 休息日 = 黄块。不管这一天是「全组休」还是「Michelle 休、别人照拍」，都是黄的。 */
.pday.prest{border-color:#d2a13c;background:rgba(210,161,60,.06)}
.pday.prest .pdh{background:rgba(210,161,60,.17);border-bottom-color:rgba(210,161,60,.35)}
.pday.prest .pdstat{border-bottom-color:rgba(210,161,60,.25)}
.pdrestb{background:none;border:1px solid var(--line);border-radius:5px;color:var(--ink3);
  font-size:10.5px;padding:1px 6px;cursor:pointer;line-height:1.5}
.pdrestb:hover{border-color:#d2a13c;color:#d2a13c}
.pdrestb.on{background:rgba(210,161,60,.22);border-color:#d2a13c;color:#f0c97a;font-weight:600}
.pdwarn{font-size:10.5px;color:#d2a13c;padding:3px 8px;border-bottom:1px solid rgba(210,161,60,.25);
  background:rgba(210,161,60,.10)}
.pdwarn.bad{color:#e8502c;background:rgba(232,80,44,.10);border-bottom-color:rgba(232,80,44,.3)}
.pdstat i{color:var(--accent);font-style:normal}

.plro{font-size:12px;color:var(--lock);background:rgba(232,80,44,.08);
  border:1px solid rgba(232,80,44,.3);border-radius:7px;padding:7px 11px;margin-bottom:10px}
.plro:empty{display:none}
/* 工具栏默认收成一条，鼠标移上去展开。腾出来的纵向空间给日历 —— 一屏要看得下两周。
   :focus-within 很关键：下拉和日期选择器一打开，鼠标常常已经离开容器了，
   只靠 :hover 的话会当场收起来。 */
#plHeadWrap{position:sticky;top:0;z-index:30;background:var(--bg);margin-bottom:6px}
#plBar{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--ink2);
  border:1px solid var(--line);border-radius:8px;padding:5px 12px;cursor:default;
  background:var(--panel)}
#plBar b{color:var(--ink);font-weight:600}
#plBar .plbtbd{color:#e8502c}
#plBar .plpin{margin-left:auto;background:none;border:1px solid var(--line);border-radius:5px;
  color:var(--ink3);font-size:11px;padding:1px 8px;cursor:pointer}
#plBar .plpin.on{border-color:var(--accent);color:var(--accent)}
#plHead{max-height:0;overflow:hidden;transition:max-height .18s ease}
#plHeadWrap:hover #plHead,
#plHeadWrap:focus-within #plHead,
#plHeadWrap.pin #plHead{max-height:none;overflow:visible;padding-top:6px}
#plHeadWrap.pin #plBar{border-bottom-left-radius:0;border-bottom-right-radius:0}
/* 收起时日历能多用 150px 左右 */
#plPoolWrap,#plDaysWrap{max-height:calc(100vh - 150px)}
#plHeadWrap.pin ~ #plWrap #plPoolWrap,
#plHeadWrap.pin ~ #plWrap #plDaysWrap{max-height:calc(100vh - 330px)}

/* 排期工作区撑满整个窗口（main 本来限宽 1500px）—— 一行 7 天，窄了根本看不清 */
#v-planner{width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);padding:0 16px;box-sizing:border-box}
#plWrap{display:grid;grid-template-columns:250px 1fr;gap:12px;align-items:start}
/* 收起池子要变成单列网格。写成 `0 1fr` 的话日程会被排进那条 0 宽的列里，塌成 2px。 */
#plWrap.nopool{grid-template-columns:1fr;gap:0}
#plWrap.nopool #plPoolWrap{display:none}
#plPoolTog{background:none;border:1px solid var(--line);border-radius:6px;color:var(--ink3);
  font-size:11px;padding:2px 9px;cursor:pointer}
#plPoolTog:hover{border-color:var(--accent);color:var(--accent)}
.pcolh{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);
  padding:0 2px 7px;position:sticky;top:0;background:var(--bg);z-index:3}
#plPoolWrap,#plDaysWrap{overflow:auto;padding-right:4px}
/* 一行 7 天，每天落在它真实的星期几那一列 */
#plCal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;align-items:start}
.pwh{font-size:10.5px;letter-spacing:.1em;color:var(--ink3);text-align:center;padding:2px 0 5px;
  position:sticky;top:0;background:var(--bg);z-index:2}
.pcell{min-height:56px}
.pcell.pempty2{border:1px dashed var(--line);border-radius:8px;display:flex;align-items:flex-start;
  justify-content:flex-end;padding:4px 6px;cursor:pointer;min-height:56px}
.pcell.pempty2 em{font-style:normal;font-size:10.5px;color:var(--ink3);opacity:.6}
.pcell.pempty2{position:relative}
.pcell.pempty2:hover{border-color:var(--accent);background:rgba(79,163,255,.06)}
/* 空日上的 ✕：平时不显眼，鼠标移上整格才出来 */
.pgapx{position:absolute;top:3px;left:4px;border:0;border-radius:5px;padding:1px 5px;
  background:none;color:var(--ink3);font-size:12px;line-height:1.2;cursor:pointer;opacity:0;transition:opacity .12s}
.pcell.pempty2:hover .pgapx{opacity:.75}
.pgapx:hover{opacity:1;background:#e2706a;color:#fff}
.pcell.pempty2.wknd{background:var(--tint)}
.pcell.pcover{outline:2px solid var(--accent);outline-offset:1px;border-radius:9px;
  background:var(--atint2)}
/* 那天已经有戏 = 「插在它之前」，画一条竖线而不是整格高亮。
   她 11-04 的说法：所有挪动都是插在 block 和 block 之间。 */
.pcell.pcover.pbefore{outline:none;background:transparent;position:relative}
.pcell.pcover.pbefore::before{content:'';position:absolute;left:-5px;top:0;bottom:0;width:4px;
  border-radius:3px;background:var(--accent);box-shadow:0 0 10px var(--accent)}
.pcell.pcover.pbefore::after{content:'';position:absolute;left:-9px;top:-2px;width:12px;height:12px;
  border-radius:50%;background:var(--accent)}

/* 落点的虚线占位框：插在目标卡片前面，那张卡片被顶下去 —— 看到的就是落下之后的样子。
   pointer-events:none 很关键，否则它会挡住 elementFromPoint，落点一闪一闪。 */
.pslot{pointer-events:none;border:2px dashed var(--accent);border-radius:9px;
  background:var(--atint);padding:6px;margin-bottom:6px;min-height:52px;
  display:flex;flex-direction:column;gap:1px;justify-content:center;overflow:hidden;
  animation:pslotIn .12s ease-out}
.pslot b,.pslot span,.pslot em{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pslot b{font-size:12px;color:var(--accent);line-height:1.25}
.pslot span{font-size:12px;color:var(--ink);line-height:1.25;font-variant-numeric:tabular-nums}
.pslot em{font-style:normal;font-size:10px;color:var(--ink3);line-height:1.3;margin-top:2px;
  padding-top:2px;border-top:1px dashed rgba(79,163,255,.4)}
.pslot em.warn{color:#e2a06a}
@keyframes pslotIn{from{opacity:0;transform:scaleY(.6)}to{opacity:1;transform:none}}

/* 组里管 TWILIGHT 叫 blue hour，排期条上按她的叫法显示（只改显示，不动数据） */
.pstripe .pbh{color:#2f6fe0;font-weight:600}

/* ── 两场戏之间的小条（公司转场 / 换妆造）和那道缝上的「＋」 ── */
.pgap{position:relative;display:flex;flex-direction:column;gap:3px;min-height:9px;margin:1px 0}
.pgadd{position:absolute;right:2px;top:50%;transform:translateY(-50%);z-index:2;
  width:18px;height:18px;line-height:1;padding:0;border:1px dashed var(--line);border-radius:5px;
  background:var(--panel);color:var(--ink3);font-size:12px;cursor:pointer;opacity:0;transition:opacity .12s}
.pgap:hover .pgadd{opacity:1}
.pgadd:hover{border-color:var(--accent);color:var(--accent);background:var(--panel2)}
.pmini{display:flex;align-items:baseline;gap:5px;flex-wrap:wrap;position:relative;
  padding:3px 6px;border-radius:5px;font-size:10.5px;line-height:1.3}
.pmini b{flex:0 0 auto;font-weight:600}
.pmini span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pmini em{font-style:normal;margin-left:auto;opacity:.85;white-space:nowrap;font-variant-numeric:tabular-nums}
.pmini{flex-wrap:nowrap}
.pmini b{font-size:11px}
.pmini i{font-style:normal;display:inline-block;padding:0 3px;border-radius:3px;
  background:var(--tint2);margin-right:2px}
.pmini i.big{background:#c0577f;color:#fff}
/* 自动算出来的：虚线、淡一点，一眼看出不是手动排进去的 */
.pmini.pauto{border:1px dashed;opacity:.92}
.pmove{color:#79c2e8;border-color:#2f6a88;background:rgba(60,140,180,.14)}
.phmu{color:#e9a6c3;border-color:#8a4466;background:rgba(170,70,120,.14)}
.phmu.soft{opacity:.65}
.pm-move,.pm-hmu,.pm-note{border:1px solid}
.pm-move{color:#9fd6f2;border-color:#3f7f9f;background:rgba(60,140,180,.2)}
.pm-hmu{color:#f3bcd5;border-color:#a2547a;background:rgba(170,70,120,.2)}
.pm-note{color:var(--ink2);border-color:var(--line);background:var(--panel2)}
/* 手动小条上的就地编辑框 */
.pmini input{border:0;background:none;color:inherit;font:inherit;padding:0;min-width:0}
.pmini input:focus{outline:1px solid var(--accent);outline-offset:1px;border-radius:3px}
.pmini .pmtext{flex:1 1 auto;min-width:20px}
.pmini .pmmins{flex:0 0 26px;width:26px;text-align:right;margin-left:auto;
  font-variant-numeric:tabular-nums;-moz-appearance:textfield}
.pmini .pmmins::-webkit-outer-spin-button,.pmini .pmmins::-webkit-inner-spin-button{
  -webkit-appearance:none;margin:0}
.pmini > i{font-style:normal;flex:0 0 auto;opacity:.6;margin-right:12px}
/* 左边一个「−」直接删，右边那个「＋」是加 —— 她 11-04 定的左右分工 */
/* 「−」的位置要给所有小条让出来，不光是缝里那些自动条 ——
   手动小条渲染在缝外面，不让位的话减号正好压在它自己的 🚚/💄 图标上（审计 #25） */
.pmini{padding-left:17px}
.pgap > .pmini{padding-right:21px}
.pmdel{position:absolute;left:2px;top:50%;transform:translateY(-50%);
  width:14px;height:14px;line-height:12px;text-align:center;padding:0;
  border:1px solid transparent;border-radius:4px;background:none;color:var(--ink3);
  font-size:13px;cursor:pointer;opacity:0;transition:opacity .12s}
.pmini:hover .pmdel{opacity:.75}
.pmdel:hover{opacity:1;background:#e2706a;color:#fff;border-color:#e2706a}

/* ── Boneyard：omit 掉的场次 ── */
.pgrp.pgby{opacity:.72}
.pgrp.pgby .pgh{color:var(--ink3)}
.pstripe.pomit{background:#e9e9ec;border-color:#c3c5cb;cursor:default}
.pstripe.pomit .pt b,.pstripe.pomit .pnick{text-decoration:line-through;color:#7b7f88}
.pstripe.pomit .pm{color:#9aa0aa}
.pstripe.pomit:hover{border-color:#c3c5cb}

/* ── 同一场戏排两次：第二条起换紫色 + 「第 2 次／2」小标 ── */
/* --rep 挪到文件开头那个共享块里了（原来孤零零待在这儿，改主题时极易漏掉）*/
.pstripe.prep{background:#f4efff;border-color:#b9a3e8}
.pstripe.prep .pnick{color:#45307a}
.pstripe.prep .pm{color:#6c5a95}
.prtag{font-style:normal;font-size:9.5px;line-height:1;flex:0 0 auto;margin-left:auto;
  padding:2px 5px;border-radius:999px;background:#e8eaee;color:#6b7280;white-space:nowrap}
.prtag.on{background:var(--rep);color:#fff}

/* ── stripe 右键菜单 ── */
#pmenu{position:fixed;z-index:10001;min-width:170px;padding:4px;border-radius:9px;
  background:var(--panel2);border:1px solid var(--line);box-shadow:var(--sh3)}
#pmenu button{display:block;width:100%;text-align:left;padding:7px 10px;border:0;border-radius:6px;
  background:none;color:var(--ink);font-size:12.5px;cursor:pointer}
#pmenu button:hover{background:var(--accent2);color:var(--accent-ink)}
#pmenu button.danger{color:#e2706a}
#pmenu button.danger:hover{background:#e2706a;color:#fff}
#plUndo .pundon{font-style:normal;font-size:10px;padding:1px 5px;border-radius:999px;
  background:var(--accent2);color:var(--accent-ink);margin-left:2px}
#plUndo:disabled{opacity:.4;cursor:default}
#pmenu .pmhint{padding:7px 10px;font-size:11.5px;color:var(--ink3);max-width:220px;line-height:1.45}
#pdtip{position:fixed;left:0;top:0;z-index:10000;pointer-events:none;
  background:var(--accent2);color:var(--accent-ink);font-size:11.5px;font-weight:600;
  padding:3px 9px;border-radius:5px;white-space:nowrap;box-shadow:var(--sh1)}
.pundated{margin-top:14px}
.pugrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px;align-items:start}
#plDays{display:block}

/* 这一天有谁：主演深色、配角浅、Michelle 画圈 */
.pdcast{display:flex;flex-wrap:wrap;gap:3px;padding:4px 7px;border-bottom:1px solid var(--line)}
.pct{font-size:10px;line-height:1.5;padding:0 4px;border-radius:3px;color:var(--ink3);
  background:var(--tint2);cursor:pointer}
.pct:hover{outline:1px solid var(--accent)}
.pct i{font-style:normal;opacity:.55;margin-left:2px;font-size:8.5px;vertical-align:super}
.pct.pri{color:var(--ink);background:var(--tint2);font-weight:600}
.pct.mi{box-shadow:0 0 0 1px var(--accent) inset;color:var(--accent)}
/* 只有录像/画外音/替身的：空心虚线，不用到组 */
.pct.off{background:none;border:1px dashed var(--line);color:var(--ink3);opacity:.75}
.pct.off::after{content:'·';margin-left:2px;opacity:.7}

.pgrp{margin-bottom:10px}
.pgh{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--ink2);
  padding:5px 8px;background:var(--panel2);border:1px solid var(--line);border-radius:7px 7px 0 0}
.pgh{cursor:grab}
.pgh span{color:var(--ink3);font-size:10.5px;margin-left:auto}
.pgrab{color:var(--ink3);margin-right:5px;font-size:11px;letter-spacing:-1px;margin-left:0!important}
.pgh:hover{border-color:var(--accent);color:var(--ink)}
.pghostg{border-radius:7px;box-shadow:var(--sh2);background:var(--panel2);
  border:1px solid var(--accent);padding:5px 8px;display:flex;align-items:center}
.pgn{color:var(--accent);font-style:normal;font-weight:600;margin-left:8px}
.pgrp .pdrop{border:1px solid var(--line);border-top:0;border-radius:0 0 7px 7px;padding:5px;min-height:36px}

.pday{background:var(--panel);border:1px solid var(--line);border-radius:9px;overflow:hidden}
.pdh{display:flex;gap:3px;align-items:center;flex-wrap:wrap;padding:5px;background:var(--panel2);border-bottom:1px solid var(--line)}
.pdlabel{flex:1 1 100%;min-width:0;background:none;border:0;color:var(--ink);font:600 11.5px/1.3 inherit;padding:1px 2px;order:1}
.pddate{background:none;border:0;color:var(--ink3);font:10.5px inherit;width:98px;order:3;flex:1 1 auto}
.pdgrab{order:0}
.pdrestb{order:4}
.pdx{order:5;margin-left:auto}
.pdlabel:focus,.pddate:focus{outline:1px solid var(--accent);border-radius:4px}
.pdgrab{color:var(--ink3);cursor:grab;font-size:12px;letter-spacing:-1px;padding:0 3px;user-select:none}
.pdgrab:hover{color:var(--accent)}
.pdghost{position:fixed;left:0;top:0;z-index:9999;pointer-events:none;opacity:.45;/* 半透明：不然被拖着走的这张卡会把落点的虚线框整个盖住（11-04 截图里就是） */
  box-shadow:var(--sh3);transform:translate(-9999px,-9999px)}
.pdline{width:3px;align-self:stretch;min-height:60px;background:var(--accent);border-radius:2px}
.pdx{background:none;border:0;color:var(--ink3);cursor:pointer;font-size:13px;padding:0 3px}
.pdx:hover{color:var(--warn)}
.pdstat{font-size:10px;color:var(--ink3);padding:3px 7px;border-bottom:1px solid var(--line);line-height:1.5}
.pdstat b{color:var(--ink2)}
.pdbody{padding:4px;min-height:34px}
.pdaddrow{grid-column:1/-1;display:flex;gap:8px}
.pdaddrow .pdadd{flex:1}
.pdadd{grid-column:1/-1;background:none;border:1px dashed var(--line);border-radius:9px;
  color:var(--ink3);padding:11px;cursor:pointer;font-size:12.5px}
.pdadd:hover{border-color:var(--accent);color:var(--accent)}

.pstripe{display:flex;gap:0;background:#fff;color:#111;border:1px solid #d7dae0;border-radius:5px;
  margin-bottom:4px;cursor:grab;overflow:hidden;user-select:none}
.pstripe:hover{border-color:var(--accent)}
.pstripe .pbar{width:3px;flex:0 0 3px}
.pstripe .pmain{padding:4px 7px;min-width:0;flex:1}
.pstripe .pt{display:flex;gap:6px;align-items:baseline;font-size:12px;line-height:1.3}
.pstripe .pt b{flex:0 0 auto}
.pstripe .pnick{color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pstripe .pm{font-size:10px;color:#6b7280;line-height:1.35;margin-top:1px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pstripe .ploc{color:#2b7fd4}
.pfade{opacity:.3}
.pghost{position:fixed;left:0;top:0;z-index:9999;pointer-events:none;
  box-shadow:var(--sh2);transform:translate(-9999px,-9999px);margin:0}
/* 拖动全程禁掉文字选中。不加这个，拖一下整页的表头、日期、场名全被刷成蓝色高光。 */
body.pdragging{cursor:grabbing;user-select:none;-webkit-user-select:none}
body.pdragging *{cursor:grabbing!important;user-select:none!important;-webkit-user-select:none!important}
/* 这几块本来就不该被选中 */
.pgh,.pwh,.pdstat,.pdcast,.pdwarn,.pcolh,.pcell.pempty2,#plBar{user-select:none;-webkit-user-select:none}
.pdrop.pover{background:var(--atint);border-color:var(--accent)}
.pline{height:2px;background:var(--accent);border-radius:2px;margin:2px 0}
.pempty{color:var(--ink3);font-size:12.5px;padding:14px 4px}
/* 自定义条目：彩排 / prelight 这种，不是场次所以不走白底彩条那套 */
.pgx .pgh{background:var(--atint);border-color:var(--accent);color:var(--accent)}
.pstripe.pxs{background:var(--panel2);color:var(--ink);border:1px dashed var(--accent);position:relative}
.pstripe.pxs .pt b{color:var(--accent)}
.pstripe.pxs .pnick{color:var(--ink)}
.pstripe.pxs .ploc{color:var(--accent)}
.pxdel{position:absolute;top:2px;right:3px;background:none;border:0;color:var(--ink3);
  font-size:11px;cursor:pointer;padding:0 3px;line-height:1}
.pxdel:hover{color:var(--warn)}
.pxadd{width:100%;background:none;border:1px dashed var(--line);border-radius:5px;color:var(--ink3);
  font-size:11px;padding:4px;cursor:pointer;margin-top:3px}
.pxadd:hover{border-color:var(--accent);color:var(--accent)}
.pxhint{color:var(--ink3);font-size:10.5px;padding:3px 4px;line-height:1.5}
@media print{#v-planner{display:none!important}}

/* 还没定位：真的待定要显眼（催的是这些），本来就不需要的放轻 */
.spend{display:inline-block;margin-top:4px;font-size:10.5px;line-height:1.3;
  padding:2px 7px;border-radius:4px;letter-spacing:.04em;
  color:#e8502c;border:1px solid rgba(232,80,44,.45);background:rgba(232,80,44,.1)}
.snone{display:inline-block;margin-top:4px;font-size:10.5px;line-height:1.3;
  padding:2px 7px;border-radius:4px;color:var(--ink3);border:1px dashed var(--line)}

/* 现场加照片 / 填定位：只有登录之后才出现 */
.sedit{display:flex;gap:6px;margin-top:7px;flex-wrap:wrap}
.sedit .sbtn{display:inline-flex;align-items:center;gap:4px;font-size:11px;line-height:1.3;
  padding:5px 10px;border-radius:6px;border:1px dashed var(--line);background:none;
  color:var(--ink2);cursor:pointer}
.sedit .sbtn:hover{border-color:var(--accent);color:var(--accent);border-style:solid}
.sedit label.sbtn input[type=file]{display:none}
#lbDel{bottom:14px;right:14px;height:34px;padding:0 14px;font-size:12px;background:rgba(232,80,44,.85)}

/* 定位编辑：手机上是贴着底边的一张卡，键盘弹起来也看得见按钮 */
#pinEdit{position:fixed;inset:0;background:var(--scrim);display:none;z-index:998;
  align-items:flex-end;justify-content:center}
#pinEdit.on{display:flex}
#pinEdit .pebox{background:var(--panel);border:1px solid var(--line);border-radius:12px 12px 0 0;
  width:min(560px,100%);max-height:88vh;overflow:auto;padding:16px 16px 20px}
#pinEdit h3{margin:0 0 6px;font-size:15px}
#pinEdit .pehint{font-size:11.5px;color:var(--ink3);line-height:1.5;margin:0 0 10px}
#pinEdit textarea{width:100%;box-sizing:border-box;background:var(--bg);color:var(--ink);
  border:1px solid var(--line);border-radius:8px;padding:10px;font:13px/1.55 inherit;resize:vertical}
#pinEdit .pebtns{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}
#pinEdit .pebtns button{padding:9px 18px;border-radius:8px;border:1px solid var(--line);
  background:var(--panel2);color:var(--ink2);cursor:pointer;font-size:13px}
#pinEdit .pebtns .primary{background:var(--accent2);border-color:var(--accent2);color:#fff}
@media (min-width:700px){#pinEdit{align-items:center}
  #pinEdit .pebox{border-radius:12px}}

#scoutMapWrap{display:none;margin:8px 0 14px;position:relative}
#scoutMap{height:330px;border-radius:9px;border:1px solid var(--line);overflow:hidden;transition:height .18s}
#scoutMap.tall{height:72vh}
#scoutMapTip{font-size:12px;color:var(--ink3);padding:10px 12px;border:1px dashed var(--line);border-radius:9px}
#scoutMapTip:empty{display:none}
/* 缩放 / 看全部 / 放大地图。浮在地图右上角，不挡高德自己的 logo（左下） */
#scoutMapCtl{position:absolute;top:10px;right:10px;display:none;flex-direction:column;gap:5px;z-index:4}
#scoutMapCtl.on{display:flex}
.mbtn{width:30px;height:30px;display:flex;align-items:center;justify-content:center;
  background:rgba(23,26,33,.92);color:#fff;border:1px solid rgba(255,255,255,.22);border-radius:7px;
  font-size:15px;line-height:1;cursor:pointer;backdrop-filter:blur(4px);transition:.12s;padding:0}
.mbtn:hover{border-color:var(--accent);color:var(--accent)}
.mbtn:active{transform:scale(.93)}
.mbtn.on{border-color:var(--accent);color:var(--accent)}
#scoutMapHint{font-size:11.5px;color:var(--ink3);margin-top:5px}
#scoutMapHint:empty{display:none}
/* 一个点上压了十几场的时候，整串场号会糊满半张地图。默认只给前几个 + 还有多少，
   点一下（或 hover）才摊开全部；摊开的那个要浮到别的点上面。 */
.smk{position:relative;background:rgba(17,17,17,.88);color:#fff;border-radius:6px;padding:3px 7px;font-size:11px;
  line-height:1.3;box-shadow:0 1px 4px rgba(0,0,0,.4);cursor:pointer;max-width:168px;
  border:1px solid transparent;transition:border-color .12s,background .12s}
.smk::after{content:'';position:absolute;left:11px;bottom:-5px;width:0;height:0;
  border:5px solid transparent;border-bottom:0;border-top-color:rgba(17,17,17,.9)}
.smk:hover{background:rgba(17,17,17,.96);border-color:var(--accent)}
.smk b{display:block;font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.smk .more{color:var(--accent);font-style:normal;font-weight:700}
.smk span{display:block;opacity:.75;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.smk.open{max-width:300px;background:rgba(17,17,17,.97);border-color:var(--accent)}
.smk.open b{white-space:normal}
.smk.act{border-color:var(--accent);box-shadow:0 0 0 2px var(--atint2),0 1px 4px rgba(0,0,0,.4)}
/* 点地图上的点 → 下面对应的场次卡片闪一下，不然 93 张卡里根本找不到 */
.scard.hl{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}

/* 地点表里那一行场次号：灰、小、换行不断 */
.locsc{font-size:10.5px;color:var(--ink3);letter-spacing:.2px;line-height:1.5}

/* 新建场次：和定位编辑用同一张卡的底子，里面换成一组字段 */
#scNew{position:fixed;inset:0;background:var(--scrim);display:none;z-index:998;
  align-items:flex-end;justify-content:center}
#scNew.on{display:flex}
#scNew .pebox{background:var(--panel);border:1px solid var(--line);border-radius:12px 12px 0 0;
  width:min(680px,100%);max-height:90vh;overflow:auto;padding:16px 16px 20px}
#scNew h3{margin:0 0 6px;font-size:15px}
#scNew .pehint{font-size:11.5px;color:var(--ink3);line-height:1.5;margin:0 0 10px}
#scNew .sngrid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
#scNew .sngrid .w2{grid-column:span 2}
#scNew .sngrid .w4{grid-column:span 4}
#scNew label{display:block;font-size:11px;color:var(--ink3);margin:0 0 3px}
#scNew .sngrid input{width:100%;box-sizing:border-box;background:var(--bg);color:var(--ink);
  border:1px solid var(--line);border-radius:7px;padding:7px 9px;font:13px/1.4 inherit}
#scNew .snlab{margin:12px 0 5px}
#scNew .sncast{display:flex;flex-wrap:wrap;gap:5px;max-height:132px;overflow:auto;
  border:1px solid var(--line);border-radius:8px;padding:8px;background:var(--bg)}
#scNew .sncast button{border:1px solid var(--line);background:var(--panel2);color:var(--ink2);
  border-radius:20px;padding:3px 10px;font-size:11.5px;cursor:pointer}
#scNew .sncast button.on{background:var(--accent2);border-color:var(--accent2);color:#fff}
#scNew .pebtns{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}
#scNew .pebtns button{padding:9px 18px;border-radius:8px;border:1px solid var(--line);
  background:var(--panel2);color:var(--ink2);cursor:pointer;font-size:13px}
#scNew .pebtns .primary{background:var(--accent2);border-color:var(--accent2);color:#fff}
#scNew .pebtns #snDel{color:#e8502c;border-color:rgba(232,80,44,.5)}
@media (max-width:620px){#scNew .sngrid{grid-template-columns:repeat(2,1fr)}
  #scNew .sngrid .w2,#scNew .sngrid .w4{grid-column:span 2}}
@media (min-width:700px){#scNew{align-items:center}#scNew .pebox{border-radius:12px}}

/* 网页上新建、顺场表里还没有的那几场：strip 上打一个「新」标 */
.pstripe .pnew{margin-left:5px;font-size:9px;font-weight:700;letter-spacing:.4px;
  background:var(--accent2);color:#fff;border-radius:3px;padding:1px 4px;font-style:normal;
  vertical-align:1px}
.pgrp.pgnew .pgh{color:var(--accent2)}
/* 池子表头右边那个「新建一场戏」 */
.pcolh{display:flex;align-items:center;gap:8px}
.pcolh #plAddSc{margin-left:auto;font-size:10.5px;letter-spacing:0;text-transform:none;
  border:1px solid var(--line);background:var(--panel2);color:var(--ink2);
  border-radius:6px;padding:3px 9px;cursor:pointer}
.pcolh #plAddSc:hover{border-color:var(--accent2);color:var(--accent2)}

/* 备用场次：天气/状况不对时顶上来拍的那条。琥珀色左条 + 「备」标，不计进当天页数 */
.pstripe.pcov{background:#fffaf0;border-color:#e3c88a}
.pstripe.pcov .pt b{color:#8a6410}
.pstripe .pcovt{margin-left:5px;font-size:9px;font-weight:700;letter-spacing:.4px;
  background:#c8a33c;color:#241a04;border-radius:3px;padding:1px 4px;font-style:normal;
  vertical-align:1px}
.pdstat .pdcov{color:#b08a2e}
/* ⚠️ 这块的底子是浅色（.pstripe 本来就是白纸条），所以要守住两头：
   系统深色时变深，但用户手动钉成浅色时**不能**跟着变。 */
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .pstripe.pcov{background:#2a2414;border-color:#6b5520}
  :root:not([data-theme="light"]) .pstripe.pcov .pt b{color:#e0bd5c}
}
:root[data-theme="dark"] .pstripe.pcov{background:#2a2414;border-color:#6b5520}
:root[data-theme="dark"] .pstripe.pcov .pt b{color:#e0bd5c}

/* 小条整条都能拖（输入框上按下后移动 4px 也会变成拖，见 app.js 的 soft 起拖）。
   输入框本身保持文字光标，这样「点一下打字 / 按住拖走」两种意图一眼能分开。 */
.pmini{cursor:grab}
.pmini:active{cursor:grabbing}
.pmini input{cursor:text}
.pmini b{cursor:grab}
body.pdragging .pmini,body.pdragging .pmini input{cursor:grabbing}
/* 拖起来的小条影子：保持小条的尺寸，别被 .pghost 的 stripe 版式撑大 */
.pmghost{pointer-events:none;opacity:.9;box-shadow:var(--sh2)}

/* 预备日 = 紫块（和日历上 board 的 .prep 一个意思：11.20 开机之前那几天） */
.pday.pprep{border-color:#8b74d4;background:rgba(139,116,212,.06)}
.pday.pprep .pdh{background:rgba(139,116,212,.17);border-bottom-color:rgba(139,116,212,.35)}
.pday.pprep .pdstat{border-bottom-color:rgba(139,116,212,.25)}
.pdprepb{background:none;border:1px solid var(--line);border-radius:5px;color:var(--ink3);
  font-size:10.5px;padding:1px 6px;cursor:pointer;line-height:1.5;order:4}
.pdprepb:hover{border-color:#8b74d4;color:#a992ea}
.pdprepb.on{background:rgba(139,116,212,.22);border-color:#8b74d4;color:#c3b2f5;font-weight:600}

/* DOOD 里的进组 / 定妆日：在组但不拍戏，和拍摄日（绿）、待工（灰）都要分得开 */
table.cn.dood td.cno.dprepday{background:var(--dk-p);color:var(--dk-p-ink);font-weight:600}

/* ---- DOOD 格子底色：她 2026-11-07 从 Numbers 导的那份的码色，深色主题上降了透明度 ----
   W 绿 #D8EAD8 / R 紫 #BFB1D0 / TR 灰 #DDDDDD / FT 蓝 #A7C0DE / H·Off Day 浅灰 #F2F2F2 */
table.cn.dood td.cno.dk-shoot{background:var(--dk-w);color:var(--dk-w-ink);font-weight:600}
table.cn.dood td.cno.dk-reh{background:var(--dk-r);color:var(--dk-r-ink);font-weight:600}
table.cn.dood td.cno.dk-travel{background:var(--dk-tr);color:var(--dk-tr-ink);font-weight:600}
table.cn.dood td.cno.dk-fit{background:var(--dk-ft);color:var(--dk-ft-ink);font-weight:600}
table.cn.dood td.cno.dk-hold,table.cn.dood td.cno.dk-off{background:var(--dk-h);color:var(--dk-h-ink)}
table.cn.dood td.cno.dk-idle{color:var(--ink3)}
table.cn.dood td.cno .dbrk{display:block;font-size:8px;line-height:1.15;color:var(--ink2);white-space:nowrap}
table.cn.dood th.dob{font-style:italic;color:var(--ink3)}
.dlg{margin-top:8px;font-size:11px;color:var(--ink2);display:flex;flex-wrap:wrap;gap:4px 14px}
.dlg i{display:inline-block;width:11px;height:11px;border:1px solid var(--line);vertical-align:-2px;margin-right:4px}
.dlg i.dk-shoot{background:var(--dk-w)} .dlg i.dk-reh{background:var(--dk-r)}
.dlg i.dk-travel{background:var(--dk-tr)} .dlg i.dk-fit{background:var(--dk-ft)}
.dlg i.dk-hold{background:var(--dk-h)} .dlg i.dob{border-style:dashed}

/* ---- 左侧竖栏导航（她 2026-11-07：专门的 tab 在竖着的侧面，分前期 / 拍摄 / 演员 几类） ---- */
.shell{display:grid;grid-template-columns:200px minmax(0,1fr);align-items:start}
#side{position:sticky;top:58px;height:calc(100vh - 58px);overflow-y:auto;padding:12px 10px 20px;
  border-right:1px solid var(--line);background:var(--bg);scrollbar-width:thin}
#side nav{display:block;flex:none;overflow:visible}
#side .ng{margin-bottom:14px}
#side .ng h4{margin:0 0 4px;padding:0 10px;font-size:10.5px;font-weight:650;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink3)}
#side nav button{display:block;width:100%;text-align:left;padding:7px 10px;font-size:13px;border-radius:7px}
#side nav button.on{background:var(--panel2);color:var(--ink);box-shadow:inset 2px 0 0 var(--accent)}
#side .navlink{display:block;padding:7px 10px;font-size:13px;color:var(--ink2);text-decoration:none;border-radius:7px}
#side .navlink:hover{background:var(--panel)}
/* 右键藏起来的页：原位不显示，整组都藏了连标题一起收；底部「已隐藏」用 details 折起来 */
#side nav .hid,#side .ng.allhid{display:none}
#navHid summary{list-style:none;cursor:pointer;padding:0 10px}
#navHid summary::-webkit-details-marker{display:none}
#navHid summary h4{display:inline;margin:0;padding:0}
#navHid summary h4::before{content:"▸ ";font-size:9px}
#navHid[open] summary h4::before{content:"▾ "}
#navHid button{opacity:.6}
#navHid button.on{opacity:1}
#nav button[data-v],#nav .navlink,#navHid button{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
@media (max-width:900px){
  #side #navHid{display:inline-flex;align-items:center;gap:2px}
  #side #navHid summary{padding:0 4px 0 0}
}
.shell>main{max-width:none}
@media (max-width:900px){
  .shell{display:block}
  #side{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line);padding:6px 8px;
    overflow-x:auto;white-space:nowrap}
  #side nav{display:flex;gap:10px}
  #side .ng{display:inline-flex;align-items:center;gap:2px;margin:0 6px 0 0}
  #side .ng h4{margin:0 4px 0 0;padding:0}
  #side nav button,#side .navlink{display:inline-block;width:auto}
}

/* ---- 演员页 ---- */
.spacer{flex:1}
input.dt{background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:6px;padding:4px 6px;font-size:12px}
.achips{display:flex;flex-wrap:wrap;gap:6px}
.achip{background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:5px 12px;font-size:12.5px;
  color:var(--ink2);cursor:pointer}
.achip.on{background:var(--accent2);border-color:var(--accent2);color:#fff}
.achip small{opacity:.7;margin-left:4px}
.acheck{font-size:12px;line-height:1.6}
.acheck.bad{color:#f0b35b}
.acheck.ok{color:var(--ink3)}
/* 月历：和发给演员的 PDF 同一套格子，颜色按她的 .numbers，深色界面降透明度 */
.amon{margin:0 0 18px}
.amon h3{font-size:13.5px;margin:0 0 6px;font-weight:650}
.amon .scroll{overflow-x:auto}
table.acal{border-collapse:collapse;width:100%;table-layout:fixed;min-width:720px}
table.acal th{font-size:10px;font-weight:650;color:var(--ink3);background:var(--panel);border:1px solid var(--line);padding:4px 0;text-align:center;letter-spacing:.04em}
table.acal td{border:1px solid var(--line);vertical-align:top;height:78px;padding:3px 5px 4px;background:var(--panel)}
table.acal td.out{background:transparent}
table.acal .hd{display:flex;align-items:baseline;justify-content:space-between;gap:4px;min-height:17px}
table.acal .dn{font:650 15px/1 -apple-system,"Helvetica Neue",Arial;color:var(--ink3);letter-spacing:-.02em}
table.acal td.on .dn{color:var(--ink2)}
table.acal .tag{font-size:9px;font-weight:650;letter-spacing:.03em;padding:1px 4px;border-radius:3px;white-space:nowrap;color:#fff}
table.acal td.shoot{background:rgba(228,240,226,.18)} table.acal td.shoot .tag{background:#2f6b36}
table.acal td.hold{background:rgba(242,242,242,.08)}  table.acal td.hold .tag{background:#7b7b7b}
table.acal td.off{background:rgba(251,240,212,.16)}   table.acal td.off .tag{background:#9a7620}
table.acal td.prep{background:rgba(221,231,246,.18)}  table.acal td.prep .tag{background:#2f5490}
table.acal .ln{font-size:11px;line-height:1.35;margin-top:2px;min-height:14px;word-break:break-word}
table.acal .sc{font-size:10px;color:var(--ink2);margin-top:2px;min-height:12px}
table.acal .iedit{display:block;border-radius:3px;padding:0 2px}
table.acal .iedit[contenteditable]:hover{background:var(--tint2)}
/* 场次表（演员自己的） */
table.asc{border-collapse:collapse;width:100%;font-size:12px}
table.asc th{background:var(--panel2);text-align:left;padding:5px 7px;border:1px solid var(--line);font-size:11px}
table.asc td{padding:5px 7px;border:1px solid var(--line);vertical-align:top;line-height:1.35}
table.asc td.n{font-weight:700;white-space:nowrap}
table.asc .en2{color:var(--ink3);font-size:11px;display:block}
table.asc tr.dayrow td{background:#101010;color:#fff;font-weight:700}
table.asc tr.brkrow td{background:rgba(251,202,162,.28);font-weight:700}
table.asc tr.pprow td{background:var(--panel2);font-weight:700;letter-spacing:.04em}
table.asc tr.prerow td{background:var(--panel);font-weight:650;color:var(--ink2)}

/* ---- 看剧本弹窗（点 strip 出那一场）----
   正文故意用**纸白底**：剧本就该是纸的样子，深色底上读 100 行 Courier 眼睛受不了。
   左英右中并排，中间一条细线，和她那份对照 PDF 同一个版式。 */
#scrWrap{position:fixed;inset:0;z-index:70;display:none}
#scrWrap.on{display:block}
#scrBack{position:absolute;inset:0;background:var(--scrim);backdrop-filter:blur(2px)}
#scrCard{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(1180px,calc(100vw - 32px));max-height:calc(100vh - 56px);overflow:auto;
  background:var(--panel);border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--sh3);scrollbar-width:thin}
body.scrlock{overflow:hidden}
.scrbar{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;
  gap:12px;padding:11px 14px;background:var(--panel);border-bottom:1px solid var(--line)}
.scrttl{font-size:15px;display:flex;align-items:baseline;gap:9px;min-width:0;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scrttl b{flex:none}
.scrttl>b{font-size:16px}
.scrver{font-size:11px;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scrnav{display:flex;align-items:center;gap:6px;flex:none}
.scrnav .icobtn{padding:4px 9px}
.scrnav .icobtn[disabled]{opacity:.32;cursor:default}
.seg.scrseg button{padding:4px 9px;font-size:11.5px}
.scrmeta{padding:9px 16px 0;font-size:12px;color:var(--ink2)}
.scrpart,.scrwarn{margin:9px 16px 0;padding:7px 10px;border-radius:7px;font-size:11.5px;line-height:1.5}
.scrpart{background:var(--atint);border:1px solid var(--accent);color:#bcd9ff}
.scrwarn{background:rgba(232,80,44,.10);border:1px solid rgba(232,80,44,.35);color:#ffbda8}
.scrload,.scrnone{padding:46px 20px;text-align:center;color:var(--ink3);font-size:13px;line-height:1.8}
.scrnone small{color:var(--ink3);opacity:.8}

.scrpaper{margin:12px 16px 20px;padding:26px 30px 36px;background:#fbfaf7;color:#14161a;
  border-radius:8px;font-family:"Courier New",Courier,var(--mono);font-size:12.5px;line-height:1.62}
.scrpaper i{font-style:italic}
.scrpaper .sgap{color:#c9c5bc}
/* 并排：左英右中，各占一半，中间一条竖线 */
.scrpaper.bi .srow{display:grid;grid-template-columns:1fr 1fr;gap:0 30px;position:relative}
.scrpaper .srow>*{min-width:0;overflow-wrap:break-word}
.scrpaper .sl{overflow-wrap:break-word}
.scrpaper.bi .srow::before{content:"";position:absolute;left:calc(50% - 15px);top:0;bottom:0;
  width:1px;background:#e4e0d6}
.scrpaper.bi .sc-cn{font-family:"PingFang SC","Songti SC","Noto Serif SC",serif;font-size:13px;line-height:1.72}
/* 剧本版式：动作顶格、角色名缩进居中、台词缩进、转场靠右 */
.scrpaper .sl,.scrpaper .srow{margin:0 0 9px}
.scrpaper .s-h{font-weight:700;text-transform:none;margin:20px 0 11px;padding-bottom:4px;border-bottom:1px solid #e4e0d6}
.scrpaper .s-h:first-child{margin-top:0}
.scrpaper .s-c{margin-bottom:1px}
.scrpaper .s-c .sc-en,.scrpaper .s-c .sc-cn,.scrpaper.sl.s-c{text-align:left}
.scrpaper .s-c>*{padding-left:34%;font-weight:700;letter-spacing:.02em}
.scrpaper .s-p{margin-bottom:1px}
.scrpaper .s-p>*{padding-left:26%;padding-right:26%;color:#4a4f57}
.scrpaper .s-d>*{padding-left:18%;padding-right:16%}
.scrpaper .s-t>*{text-align:right;font-weight:600}
.scrpaper .s-s>*{font-weight:700}
.scrpaper .sl.s-c,.scrpaper .sl.s-p,.scrpaper .sl.s-d,.scrpaper .sl.s-t,.scrpaper .sl.s-s{display:block}
.scrpaper .sl.s-c{padding-left:34%;font-weight:700}
.scrpaper .sl.s-p{padding-left:26%;padding-right:26%;color:#4a4f57}
.scrpaper .sl.s-d{padding-left:18%;padding-right:16%}
.scrpaper .sl.s-t{text-align:right;font-weight:600}
/* 能点开剧本的场号格 */
.scrq{cursor:pointer}
.scrq:hover{text-decoration:underline;text-underline-offset:2px}
.scrbtn{margin-left:8px;padding:1px 6px;font-size:12px;border:1px solid var(--line);border-radius:6px;
  background:var(--panel2);cursor:pointer;vertical-align:1px}
.scrbtn:hover{border-color:var(--accent)}
@media (max-width:760px){
  #scrCard{width:100vw;height:100vh;max-height:100vh;top:0;left:0;transform:none;border-radius:0}
  /* 窄屏上抬头那一排放不下：场号单独一行，按钮挤到第二行并且可以横向滚，
     不然 ✕ 会被挤出屏幕（实测 375px 下关不掉弹窗）。 */
  .scrbar{flex-wrap:wrap;gap:6px;padding:9px 11px}
  .scrttl{flex:1 1 100%}
  .scrnav{flex:1 1 100%;justify-content:flex-start;overflow-x:auto;scrollbar-width:none}
  .scrnav::-webkit-scrollbar{display:none}
  .scrpaper{margin:10px;padding:16px 14px 28px;font-size:12px}
  /* 手机上并排两栏谁也读不了 —— 改成上下两段，中文跟在英文后面 */
  .scrpaper.bi .srow{grid-template-columns:1fr;gap:3px}
  .scrpaper.bi .srow::before{display:none}
  .scrpaper.bi .sc-cn{padding-top:1px;color:#3a3f47}
  .scrpaper .s-c>*,.scrpaper .sl.s-c{padding-left:26%}
  .scrpaper .s-d>*,.scrpaper .sl.s-d{padding-left:10%;padding-right:4%}
  .scrpaper .s-p>*,.scrpaper .sl.s-p{padding-left:18%;padding-right:14%}
}
@media print{
  #scrBack,.scrbar,#side,header,#toast{display:none!important}
  #scrWrap.on{position:static}
  #scrCard{position:static;transform:none;width:auto;max-height:none;border:0;box-shadow:none;background:#fff}
  .scrpaper{margin:0;background:#fff}
}

/* ---- 换剧本（导入导出页）---- */
#scrUpDrop{border:1.5px dashed var(--line);border-radius:10px;padding:18px;text-align:center;
  cursor:pointer;color:var(--ink2);font-size:12.5px;line-height:1.7}
#scrUpDrop:hover,#scrUpDrop.over{border-color:var(--accent);background:var(--panel)}
#scrUpList{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:8px;margin-top:10px}
.scrupf{display:flex;gap:9px;align-items:flex-start;padding:9px 11px;background:var(--panel);
  border:1px solid var(--line);border-radius:8px;font-size:12px}
.scrupf.ok{border-color:var(--ok)}
.scrupf>span{color:var(--ink3)} .scrupf.ok>span{color:var(--ok)}
.scrupf b{display:block;font-weight:600} .scrupf small{color:var(--ink3);font-size:11px;word-break:break-all}
.sdifh{margin:16px 0 7px;font-size:12.5px;font-weight:600}
.sdift{width:100%;border-collapse:collapse;font-size:12px}
.sdift th,.sdift td{padding:5px 9px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.sdift th{color:var(--ink3);font-weight:600}
.sdift td.n{font-variant-numeric:tabular-nums;white-space:nowrap}
.sdift .sw,.sw{color:var(--warn)}
.scrupact{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-top:14px}
.scrupwarn{margin-top:10px;font-size:11.5px;color:var(--ink3);line-height:1.6}
.scrupok{margin-top:14px;padding:10px 12px;border:1px solid var(--ok);border-radius:8px;
  color:var(--ok);font-size:12.5px;line-height:1.6}

/* ---- 大计划：三种 view 的工具条 + 下载菜单 ---- */
#v-cal [hidden]{display:none!important}
.dlwrap{position:relative;display:inline-block}
.dlmenu{position:absolute;z-index:40;top:calc(100% + 6px);left:0;min-width:300px;max-width:min(380px,92vw);
  padding:6px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;
  box-shadow:var(--sh3);max-height:min(70vh,560px);overflow-y:auto;scrollbar-width:thin}
.dlmenu .dlg2{padding:8px 10px 4px;font-size:10.5px;font-weight:650;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink3)}
.dlmenu .dlg2:first-child{padding-top:4px}
.dlmenu button{display:block;width:100%;text-align:left;padding:7px 10px;border:0;border-radius:7px;
  background:none;color:var(--ink);font:inherit;font-size:12.5px;cursor:pointer}
.dlmenu button:hover{background:var(--panel)}
.dlmenu button b{display:block;font-weight:600}
.dlmenu button span{display:block;font-size:11px;color:var(--ink3);margin-top:1px;line-height:1.35}
.icobtn.hi.on{background:var(--accent2);border-color:var(--accent2);color:var(--accent-ink)}
@media (max-width:760px){ .dlmenu{left:auto;right:0;min-width:260px} }

/* ---- 浅色下给那几块「白纸」补一道边 ----
   通告单、剧本弹窗、排期条、Movie Magic 彩条本来就是白纸 / 浅色纸条，深色底上
   靠底色反差就分得很清；放到浅灰页面上就糊成一片了。它们的颜色一个字都不能改
   （印出来要和纸上一样），所以只补阴影和边，而且只在浅色下补。 */
:root[data-theme="light"] .cs,
:root[data-theme="light"] .scrpaper,
:root[data-theme="light"] .pstripe,
:root[data-theme="light"] .mmstrip{box-shadow:var(--sh1)}
:root[data-theme="light"] .cs{border:1px solid var(--line)}
@media (prefers-color-scheme:light){
  :root:not([data-theme="dark"]) .cs,
  :root:not([data-theme="dark"]) .scrpaper,
  :root:not([data-theme="dark"]) .pstripe,
  :root:not([data-theme="dark"]) .mmstrip{box-shadow:var(--sh1)}
  :root:not([data-theme="dark"]) .cs{border:1px solid var(--line)}
}
/* 演员页 DOOD：一周一张小表（屏幕版） */
#actorOut table.dood.wk{margin-bottom:8px;width:auto;min-width:720px}
#actorOut table.dood.wk th.who,#actorOut table.dood.wk td.who{min-width:118px;text-align:left}
#actorOut table.dood.wk th.act,#actorOut table.dood.wk td.act{min-width:92px;text-align:left}
#actorOut table.dood.wk th:not(.who):not(.act),#actorOut table.dood.wk td.cno{min-width:74px}
#actorOut table.dood.wk th.blank,#actorOut table.dood.wk td.blank{color:var(--ink3);border-style:dashed;background:transparent}
#actorOut table.dood.wk.tail td.note{text-align:left;font-weight:400;font-size:11px;line-height:1.4;color:var(--ink2)}
#actorOut table.dood.wk td.who .en{display:block;color:var(--ink3);font-weight:400;font-size:10px}
#actorOut table.dood.wk.counts th.cnt,#actorOut table.dood.wk.counts td.cnt{min-width:96px;background:var(--panel2);color:var(--ink)}
#actorOut table.dood.wk.counts td.cnt b{font-size:13px}
#actorOut table.dood.wk tr.totals td{background:var(--panel2);height:auto;padding:6px 8px}
#actorOut table.dood.wk tr.totals td.tot{text-align:left;font-weight:400}
#actorOut table.dood.wk tr.totals .pill{display:inline-block;margin:0 18px 0 0;text-align:center;vertical-align:middle}
#actorOut table.dood.wk tr.totals .pill small{display:block;font-size:9.5px;color:var(--ink3)}
#actorOut table.dood.wk tr.totals .pill b{display:block;font-size:14px;line-height:1.15}
#actorOut .totals{margin:6px 0 10px;display:flex;gap:8px;flex-wrap:wrap}
#actorOut .totals .tbox{border:1px solid var(--line);background:var(--panel2);padding:4px 12px 5px;text-align:center;min-width:84px;border-radius:6px}
#actorOut .totals .tbox small{display:block;font-size:9.5px;color:var(--ink3);white-space:nowrap}
#actorOut .totals .tbox b{display:block;font-size:14px;line-height:1.15}
#actorOut table.dood.wk tr.tail td{height:auto;padding:5px 7px}
#actorOut table.dood.wk tr.tail td.note{text-align:left;font-weight:400;font-size:11px;line-height:1.4;color:var(--ink2)}

/* ---- 日历格子上那个黄标也能改（她 2026-11-10）----
   标签本身是深色药丸 + 白字，所以里面的 iedit 要跟着反过来：不要用全站那套
   深色 hover 底，不然白字压上去看不见。空的时候不画药丸，只留一个淡淡的加号。 */
table.acal .tag .iedit{color:inherit;min-width:8px;display:inline-block}
table.acal .tag .iedit.isauto{opacity:.92}
table.acal .tag .iedit[contenteditable=true]:hover{background:rgba(255,255,255,.22)}
table.acal .tag .iedit[contenteditable=true]:focus{background:rgba(255,255,255,.3);
  box-shadow:inset 0 -1px 0 rgba(255,255,255,.8);color:#fff}
table.acal .tag:has(.iedit:empty){background:none!important;padding:0}
table.acal .tag .iedit:empty::after{content:'＋';opacity:.35;color:var(--ink3);font-size:10px}

/* ---- 手机：现场主要横屏看计划（2026-11-11）----
   横着的 iPhone 只有 ~370pt 高，页头 / 导航 / 标题 / 按钮 / 统计卡原来占满一屏，日历一格都看不到。
   统计卡缩成药丸条；横屏再把页头、导航、标题、工具行各压成一行。放在文件末尾，盖过前面同级规则。 */
@media (max-width:820px){
  #calSub{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:11px;margin-bottom:8px}
  .stat{gap:6px;margin-bottom:10px}
  .stat div{padding:3px 9px;min-width:0;display:flex;gap:5px;align-items:baseline;white-space:nowrap;border-radius:999px}
  .stat b{display:inline;font-size:13px}
  .stat span{font-size:10.5px}
  .toolrow{margin-bottom:8px}
}
@media (max-height:520px) and (pointer:coarse){
  header .bar{padding:3px 10px;gap:8px;flex-wrap:nowrap}
  .brand{font-size:13px}
  .brand small{display:inline;margin-left:6px;font-size:10px}
  .tools{gap:5px;margin-left:auto}
  .tools .seg button,.tools .icobtn{padding:3px 8px;font-size:11px}
  #side{padding:2px 8px}
  #side nav button,#side .navlink{padding:4px 9px;font-size:12px}
  #side .ng h4{display:none}
  main{padding:6px 10px}
  h2.vh,#calSub{display:none}
  .toolrow{gap:6px;margin-bottom:6px}
  .toolrow .seg button,.toolrow .icobtn{padding:4px 9px;font-size:11.5px}
  body.lang-bi #calIcs .en-only,body.lang-bi #calIcs .bi-sep{display:none}
  .stat{flex-wrap:nowrap;overflow-x:auto;margin-bottom:6px;scrollbar-width:none}
  .stat::-webkit-scrollbar{display:none}
  .stat div{flex:none}
  .cal .calmonth{padding-top:6px}
}
@media (max-width:560px){
  /* 竖屏手机：工具区原来整行不换行，双语下撑到 520px 宽，整页被拖出横向滚动；页头也不再钉在顶上占地方 */
  header{position:static}
  .tools{flex-wrap:wrap}
}

/* ---- 大计划 · 日历：仿 Apple Calendar（2026-11-11）----
   整月一屏，点一天展开成「三天」详细视图。色块：拍摄日蓝 / 筹备日靛 / 休息日米黄；今天的日期是实心圆。
   不用 overflow:hidden 包三日视图 —— 它会让里面 sticky 的日期条失效。 */
.am-bar{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.am-title{margin:0;font-size:18px;font-weight:700;min-width:0}
.am-nav{width:38px;height:38px;flex:none;border-radius:50%;border:0;background:var(--panel2);color:var(--accent);
  font-size:20px;line-height:1;padding:0 0 2px;cursor:pointer}
.am-wd{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));font-size:11px;color:var(--ink3);text-align:center;padding-bottom:4px}
.am-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-auto-rows:108px;gap:1px;background:var(--line);
  border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.am-cell{appearance:none;border:0;margin:0;font:inherit;color:inherit;text-align:left;background:var(--panel);
  min-width:0;padding:4px 5px 5px;display:flex;flex-direction:column;gap:3px;cursor:pointer;overflow:hidden}
.am-cell:hover{background:var(--atint)}
.am-cell.out{background:var(--bg)}
.am-cell.out>*{opacity:.5}
.am-n{align-self:flex-start;min-width:22px;height:22px;padding:0 4px;box-sizing:border-box;display:grid;place-items:center;
  border-radius:11px;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;flex:none}
.am-cell.today .am-n{background:var(--accent2);color:var(--accent-ink)}
.am-ev{display:flex;justify-content:space-between;align-items:baseline;gap:4px;border-radius:5px;padding:1px 6px;
  font-size:10.5px;line-height:1.4;white-space:nowrap;overflow:hidden;min-width:0}
.am-ev b{font-weight:650;overflow:hidden;text-overflow:ellipsis}
.am-ev i{font-style:normal;font-size:10px;opacity:.85;flex:none}
.am-ev u{text-decoration:none}
.am-ev.shoot{background:var(--accent2);color:var(--accent-ink)}
.am-ev.prep{background:var(--b-prep);color:var(--b-prep-ink)}
.am-ev.brk{background:var(--b-rest);color:var(--b-rest-ink)}
.am-ev.none{background:var(--panel2);color:var(--ink2)}
.am-loc,.am-sc{font-size:10px;line-height:1.3;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.am-loc{color:var(--accent)}
.am-sc{color:var(--ink3);font-variant-numeric:tabular-nums}
.am-undated-row{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap;align-items:center;font-size:12px;color:var(--ink3)}

.a3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius)}
.a3-col{background:var(--panel);min-width:0}
.a3-col:first-child{border-radius:var(--radius) 0 0 var(--radius)}
.a3-col:last-child{border-radius:0 var(--radius) var(--radius) 0}
.a3-head{position:sticky;top:var(--hdr);z-index:5;background:var(--panel);padding:8px 10px;border-bottom:1px solid var(--line);
  display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;border-top-left-radius:inherit;border-top-right-radius:inherit}
.a3-head .am-ev{flex:none}
.a3-head.go{cursor:pointer}
.a3-head.go:hover{background:var(--atint)}
.a3-wd{font-size:11px;color:var(--ink3);flex-basis:100%}
.a3-n{min-width:30px;height:30px;padding:0 6px;box-sizing:border-box;display:grid;place-items:center;border-radius:15px;
  font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.a3-col.today .a3-n{background:var(--accent2);color:var(--accent-ink)}
.a3-head small{font-size:11px;color:var(--ink3);flex-basis:100%;font-variant-numeric:tabular-nums}
.a3-body{padding:8px;display:grid;gap:6px;align-content:start}
.a3-blk{font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--accent);background:var(--atint);
  border-left:3px solid var(--accent);padding:3px 7px;border-radius:0 5px 5px 0}
.a3-note{font-size:11px;color:var(--ink3);font-style:italic}
.a3-sc{--c:var(--strip-id);border-left:5px solid var(--c);background:var(--tint);border-radius:7px;padding:6px 8px;min-width:0}
.a3-sc.ed{--c:var(--strip-ed)} .a3-sc.in{--c:var(--strip-in)} .a3-sc.en{--c:var(--strip-en)}
.a3-sc.tw{--c:var(--strip-tw)} .a3-sc.itw{--c:var(--strip-itw)} .a3-sc.br{--c:var(--strip-br)}
.a3-l1{display:flex;align-items:baseline;gap:6px}
.a3-l1 b{font-size:14px;font-variant-numeric:tabular-nums;cursor:pointer}
.a3-l1 span{flex:1;font-size:10.5px;color:var(--ink3)}
.a3-l1 em{font-style:normal;font-size:11px;color:var(--ink2);font-variant-numeric:tabular-nums}
.a3-set{font-size:12.5px;font-weight:600;line-height:1.3;margin-top:2px}
.a3-syn{font-size:11px;line-height:1.35;color:var(--ink2);margin-top:2px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.a3-cast{font-size:10.5px;color:var(--ink3);margin-top:3px;font-variant-numeric:tabular-nums}
.a3-none{color:var(--ink3);font-size:12px;padding:14px 4px;text-align:center}
@media (prefers-reduced-motion:no-preference){
  .am-body.anim>*{animation:amIn .16s ease-out}
  @keyframes amIn{from{opacity:0;transform:scale(.985)}to{opacity:1;transform:none}}
}
@media (max-width:560px){
  .am-bar{flex-wrap:wrap;row-gap:6px}
  .am-title{font-size:16px;flex:1}
  .am-bar .spacer{display:none}
  .am-bar>.icobtn{margin-left:auto}
  .am-grid{grid-auto-rows:58px}
  .am-cell{padding:3px}
  .am-ev{padding:1px 3px;font-size:9.5px}
  .am-ev i,.am-loc,.am-sc,.am-cell .am-ev u{display:none}
  .a3-head{padding:6px}
  .a3-body{padding:5px}
  .a3-sc{padding:5px 6px}
}
@media (max-height:520px) and (pointer:coarse){
  #v-cal.on{display:flex;flex-direction:column}      /* 统计药丸挪到日历下面，日历先出现 */
  #v-cal .stat{order:9;margin:8px 0 0}
  .am-bar{margin-bottom:4px}
  .am-title{font-size:15px}
  .am-nav{width:34px;height:34px;font-size:18px}
  .am-wd{padding-bottom:2px;font-size:10px}
  .am-grid{grid-auto-rows:36px}
  .am-cell{padding:2px 4px;flex-direction:row;align-items:center;gap:4px}
  .am-n{min-width:20px;height:20px;font-size:11px}
  .am-ev{flex:1}
  .am-loc,.am-sc,.am-cell .am-ev u{display:none}
  .a3-head{padding:4px 8px;gap:0 6px}
  .a3-wd{flex-basis:auto;order:1}
  .a3-n{min-width:24px;height:24px;font-size:15px;order:0}
  .a3-head small{flex-basis:auto;order:3}
  .a3-body{padding:5px;gap:4px}
  .a3-syn{-webkit-line-clamp:2}
}

/* ---- 全屏：App 里 WebView 铺满整屏（状态栏、Home 条下面也是页面），内容用安全区内边距让开 ---- */
:root{--sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px);--sal:env(safe-area-inset-left,0px);--sar:env(safe-area-inset-right,0px)}
body{padding-left:var(--sal);padding-right:var(--sar)}
header{padding-top:var(--sat)}
.envbar{padding-top:calc(7px + var(--sat))}
main{padding-bottom:calc(16px + var(--sab))}
table.grid th{top:calc(58px + var(--sat))}
#calGrid{--hdr:calc(58px + var(--sat))}
@media (max-height:520px) and (pointer:coarse){#calGrid{--hdr:calc(33px + var(--sat))}}
@media (max-width:560px){#calGrid{--hdr:var(--sat)} table.grid th{top:var(--sat)}}

/* ---- 触屏的侧边栏抽屉（逻辑在 app.js 的 initSideDrawer）---- */
#menuBtn{display:none;min-width:40px;min-height:36px;padding:4px 10px;font-size:18px;line-height:1}
#sideScrim{display:none}
@media (pointer:coarse){
  #menuBtn{display:inline-flex;align-items:center}
  .shell{display:block}
  #side{position:fixed;top:0;left:0;bottom:0;height:auto;width:min(300px,82vw);z-index:70;
    transform:translateX(-105%);visibility:hidden;transition:transform .22s ease,visibility 0s .22s;
    padding:calc(12px + var(--sat)) 10px calc(20px + var(--sab)) calc(10px + var(--sal));
    overflow-y:auto;overflow-x:hidden;white-space:normal;background:var(--panel);
    border-right:1px solid var(--line);border-bottom:0}
  #side nav{display:block}
  #side .ng{display:block;margin:0 0 14px}
  #side .ng h4{display:block;margin:0 0 4px;padding:0 10px}
  #side nav button,#side .navlink{display:block;width:100%;padding:13px 10px;font-size:14px;white-space:normal}
  #side #navHid{display:block}
  body.side-open #side{transform:none;visibility:visible;transition:transform .22s ease;box-shadow:6px 0 24px rgba(0,0,0,.25)}
  #sideScrim{display:block;position:fixed;inset:0;z-index:65;background:rgba(0,0,0,.4);opacity:0;pointer-events:none;transition:opacity .22s}
  body.side-open #sideScrim{opacity:1;pointer-events:auto}
}

/* 压在整屏上的弹层：左右、上下让开刘海 / 状态栏 / Home 条（横屏 iPhone 的刘海在侧边）。 */
.modal{padding:calc(18px + var(--sat)) calc(18px + var(--sar)) calc(18px + var(--sab)) calc(18px + var(--sal))}
.drawer .dbox{top:var(--sat);right:var(--sar)}
