:root{
  --bg:#0b1220; --panel:#111c2e; --card:#16233a; --line:#24344d;
  --fg:#e6edf7; --mut:#8fa3bf; --accent:#e11d48; --ok:#22c55e; --warn:#f59e0b;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--fg);font-family:system-ui,"Noto Sans TC",sans-serif;display:flex;flex-direction:column}
.top{display:flex;align-items:center;gap:10px;padding:8px 12px;background:#0e1728;border-bottom:1px solid var(--line)}
.brand{font-size:16px;flex:0 0 auto}
.brand .en{color:var(--mut);font-size:12px;margin-left:6px}
.actions{display:flex;align-items:center;gap:10px;flex:1 1 auto;min-width:0;justify-content:flex-end}
.routebtns{display:flex;flex-direction:column;gap:4px;flex:0 0 auto}
.routebtns .btn{padding:5px 10px;font-size:12.5px;white-space:nowrap;line-height:1.25}
.chips{display:flex;align-items:center;gap:6px;overflow-x:auto;overflow-y:hidden;flex:1 1 auto;min-width:0;padding-bottom:2px;scrollbar-width:thin;-webkit-overflow-scrolling:touch;white-space:nowrap}
.chips::-webkit-scrollbar{height:5px}
.chips::-webkit-scrollbar-thumb{background:#334155;border-radius:3px}
.chips .btn{flex:0 0 auto;padding:6px 10px;font-size:12.5px;white-space:nowrap}
.cchip{display:flex;flex-direction:column;gap:4px;flex:0 0 auto;align-items:stretch}
.cchip .btn{padding:4px 9px;font-size:11.5px;line-height:1.25}
.cchip.one{justify-content:center}
.topright{flex:0 0 auto;display:flex;align-items:center;gap:6px;margin-left:4px}
.topright .btn{padding:6px 10px;font-size:12px;white-space:nowrap}
.cchip.one .btn{width:100%;text-align:center}
.btn.sm{padding:3px 6px;font-size:11.5px;line-height:1.3}
.btn{background:var(--card);color:var(--fg);border:1px solid var(--line);border-radius:9px;padding:8px 14px;font-size:13.5px;cursor:pointer}
.btn:hover{background:#1c2c46}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700}
.btn.primary:hover{filter:brightness(1.08)}
.btn.ghost{background:transparent}
main{flex:1;display:flex;min-height:0}
#map{flex:1;min-width:0}
aside{width:360px;flex:0 0 360px;background:var(--panel);border-left:1px solid var(--line);overflow-y:auto;padding:12px}
.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:12px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:6px 8px;display:flex;flex-direction:column;gap:1px}
.kpi .k{color:var(--mut);font-size:10px;white-space:nowrap}
.kpi b{font-size:15px;letter-spacing:.2px}
.block{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin-bottom:12px}
.block h2{font-size:13.5px;margin:0 0 8px;color:#9ec1ff;font-weight:600}
.block h2 .muted{color:var(--mut);font-weight:400;font-size:12px}
.routes{display:flex;flex-direction:column;gap:8px}
.route{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:#0f1a2c}
.route .rhead{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.dot{width:10px;height:10px;border-radius:50%;flex:0 0 auto}
.rname{font-weight:700;font-size:13.5px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rmeta{display:grid;grid-template-columns:1fr 1fr;gap:2px 10px;font-size:11.5px;color:var(--mut)}
.rmeta b{color:var(--fg);font-weight:600}
.busrow{display:flex;align-items:center;gap:8px;margin-top:6px}
.busrow input[type=range]{flex:1;accent-color:var(--accent)}
.busrow .v{font-variant-numeric:tabular-nums;font-size:12.5px;color:var(--mut);min-width:52px;text-align:right}
.del{background:transparent;border:1px solid var(--line);color:var(--mut);border-radius:7px;padding:3px 8px;font-size:11.5px;cursor:pointer}
.del:hover{color:#fff;border-color:#7f1d1d;background:#7f1d1d33}
.hint{color:var(--mut);font-size:11.5px;line-height:1.5;margin:8px 0 0}
.hint.on{color:#fca5a5}
.row{display:flex;justify-content:space-between;font-size:12px;color:var(--mut);padding:3px 0}
.row b{color:var(--fg);font-weight:600}
.maplibregl-ctrl-attrib{font-size:10px}
.editing{outline:2px solid var(--accent)}
@media (max-width:820px){
  main{flex-direction:column}
  aside{width:100%;flex:0 0 46%;border-left:0;border-top:1px solid var(--line)}
  #map{flex:1 0 54%}
}

.busrow .lab{font-size:11.5px;color:var(--mut);width:56px;flex:0 0 56px}
.opts{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:6px;font-size:12px;color:var(--mut)}
.opts label{display:flex;align-items:center;gap:5px}
.opts select,.opts input[type=number]{background:#0b1220;color:var(--fg);border:1px solid var(--line);border-radius:7px;padding:3px 6px;font-size:12px}
.opts input[type=number]{width:62px}

.fleet{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
.chip{background:#0b1220;border:1px solid var(--line);color:var(--fg);border-radius:6px;padding:2px 7px;font-size:11px;cursor:pointer;font-variant-numeric:tabular-nums}
.chip:hover{border-color:var(--accent)}
.chip.off{opacity:.35;text-decoration:line-through}

.seg{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden}
.segbtn{background:transparent;border:0;color:var(--mut);padding:8px 12px;font-size:13px;cursor:pointer}
.segbtn.on{background:var(--accent);color:#fff;font-weight:700}
.segbtn:hover{color:#fff}

.tbl{display:grid;grid-template-columns:auto 1fr;gap:5px 10px;align-items:center;margin:8px 0 4px;font-size:12px;color:var(--mut)}
.tbl input{background:#0b1220;color:var(--fg);border:1px solid var(--line);border-radius:6px;padding:3px 5px;font-size:12px}

.stoplist{margin:8px 0 4px;font-size:12px;color:var(--mut)}
.stoplist summary{cursor:pointer;padding:3px 0}
.srows{border-top:1px solid var(--line);padding-top:4px}
.srow{display:grid;grid-template-columns:minmax(0,1fr) 42px 42px 22px 22px 56px 22px;align-items:center;gap:3px;padding:2px 0}
.sname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--fg)}
.mini{background:#0b1220;border:1px solid var(--line);color:var(--mut);border-radius:5px;font-size:11px;padding:1px 6px;cursor:pointer}
.mini:hover{color:#fff;border-color:var(--accent)}

.rhead{margin-bottom:6px}
.rname{display:block;font-weight:700;font-size:13.5px;white-space:normal;line-height:1.35}
.rbtns{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:6px}

.clock{font-variant-numeric:tabular-nums;font-size:13px;color:#fde68a;background:#0b1220;border:1px solid var(--line);border-radius:8px;padding:6px 10px;min-width:104px;text-align:center}

.codeinp{width:44px;background:#0b1220;color:#fff;border:1px solid var(--line);border-radius:6px;padding:1px 5px;font-size:13px;font-weight:700;margin-right:4px;text-align:center}

.legend-box{position:absolute;left:12px;bottom:26px;z-index:5;background:rgba(11,18,32,.86);border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:11.5px;color:#cbd5e1;line-height:1.6;pointer-events:auto;max-width:220px}
.lg-title{font-weight:700;color:#93c5fd;font-size:11.5px;margin-bottom:3px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.lg-btn{background:rgba(148,163,184,.18);border:1px solid var(--line);color:#93c5fd;border-radius:6px;font-size:11px;line-height:1;padding:2px 7px;cursor:pointer}
.lg-btn:hover{background:rgba(148,163,184,.34)}
#legend.collapsed #lgBody{display:none}
#legend.collapsed{padding:6px 9px}
.lg-sep{height:1px;background:var(--line);margin:5px 0}
.lg-hd{color:#93c5fd;font-weight:700}
.lg-e{display:inline-block;width:15px;font-size:11px}
.hnode{display:flex;align-items:center;gap:2px;background:rgba(11,18,32,.74);border:1px solid rgba(147,197,253,.35);border-radius:9px;padding:0 4px;color:#e2e8f0;white-space:nowrap;pointer-events:auto;cursor:grab}
.hnode .e{font-size:12px;line-height:1.25}
.hnode .t{font-size:10.5px;line-height:1.25}
.hnode.nt .t{display:none}
.legend-box .sw{display:inline-block;width:16px;height:8px;border-radius:3px;margin-right:6px;vertical-align:middle}
main{position:relative}

.fareinp{width:54px;background:#0b1220;color:#fde68a;border:1px solid var(--line);border-radius:5px;padding:1px 3px;font-size:11px;text-align:right}

.picker{position:fixed;inset:0;background:rgba(3,8,18,.72);display:none;align-items:center;justify-content:center;z-index:50}
.picker.open{display:flex}
.picker>div{background:var(--panel);border:1px solid var(--line);border-radius:14px}
.picker .pk-head{display:flex;gap:8px;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line)}
.picker .pk-head input{flex:1;background:#0b1220;border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:8px 10px;font-size:13px}
.pk-list{max-height:60vh;overflow:auto;padding:6px}
.pk-row{display:flex;gap:10px;align-items:baseline;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:13px}
.pk-row:hover{background:#1b2b45}
.pk-row b{color:#fde68a;min-width:52px}
.pk-dir{flex:1;color:var(--fg)}
.pk-from{color:var(--mut);font-size:11.5px}
.pk-sv{font-size:10px;padding:1px 5px;border-radius:4px;background:#14532d;color:#86efac;white-space:nowrap}
.pk-sv.sp{background:#4a2c12;color:#fbbf24}

.pk-tag{font-size:10px;padding:1px 5px;border-radius:4px;background:#1e3a5f;color:#93c5fd;font-weight:700}

/* 路線卡：詳細設定（預設收起） */
/* 收起狀態只顯示：載客率 + 盈虧／日 */
.rmeta.brief{grid-template-columns:1fr 1fr;margin-top:2px}
.rmeta.brief b{font-size:13.5px}
.rcfg{margin-top:8px;border-top:1px solid var(--line);padding-top:5px}
.rcfg>summary{cursor:pointer;font-size:12px;color:#93c5fd;padding:4px 0;list-style:none}
.rcfg>summary::-webkit-details-marker{display:none}
.rcfg>summary::before{content:'▸ ';color:#64748b}
.rcfg[open]>summary::before{content:'▾ '}

@media (max-width:760px){
  #legend{left:6px;bottom:auto;top:8px;max-width:176px;font-size:10.5px;line-height:1.5}
  .top{flex-wrap:wrap;padding:6px 8px;gap:6px}
  .brand{width:100%;font-size:14px}
  .actions{width:100%;justify-content:flex-start;gap:8px}
  .routebtns .btn{padding:5px 8px;font-size:11.5px}
  .chips{gap:5px}
  .chips .btn{padding:5px 8px;font-size:11.5px}
  .topright .btn{padding:5px 8px;font-size:11.5px}
}
@media (max-width:420px){
  .brand .en{display:none}
  .routebtns .btn{padding:4px 7px;font-size:11px}
}

/* 站候車資訊：有底色 + 往/路線號/人數 三欄對齊 */
.stoplbl{background:rgba(9,15,26,.9);border:1px solid rgba(147,197,253,.35);border-radius:7px;
  padding:1px 5px 2px;font-size:10px;line-height:1.3;white-space:nowrap;pointer-events:none;
  box-shadow:0 1px 5px rgba(0,0,0,.5)}
.stoplbl .nm{color:#fff;font-weight:700;font-size:10px;margin-bottom:0}
.stoplbl .rows{display:grid;grid-template-columns:auto auto auto;column-gap:6px;align-items:baseline}
.stoplbl .d{color:#cbd5e1;text-align:left}
.stoplbl .c{color:#93c5fd;text-align:right;font-variant-numeric:tabular-nums}
.stoplbl .n{color:#fde68a;text-align:right;font-variant-numeric:tabular-nums;font-weight:700;min-width:1.3em}

/* picker：標題／搜尋上下排 */
.picker .pk-head{flex-direction:column;align-items:stretch;gap:6px}
.picker .pk-title-row{display:flex;align-items:center;justify-content:space-between;gap:8px}

/* OD Top10 彈窗 */
.odtop{position:fixed;inset:0;background:rgba(3,8,18,.6);display:none;align-items:center;justify-content:center;z-index:60}
.odtop.open{display:flex}
.odcard{background:var(--panel);border:1px solid var(--line);border-radius:14px;min-width:min(92vw,460px);max-height:80vh;overflow:auto}
.od-hd{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--line);color:#93c5fd}
.od-list{padding:6px 8px 10px}
.od-row{display:grid;grid-template-columns:22px 1fr 14px 1fr 46px;gap:6px;align-items:baseline;padding:5px 6px;font-size:12px;border-bottom:1px dashed rgba(148,163,184,.15)}
.od-row b{color:#fde68a}
.od-f,.od-t{color:#e6edf7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.od-a{color:#64748b;text-align:center}
.od-n{color:#fbbf24;text-align:right;font-variant-numeric:tabular-nums;font-weight:700}

/* 操作列預設收起 */
.rbtns-wrap>summary{cursor:pointer;font-size:11.5px;color:#93c5fd;padding:2px 0;list-style:none}
.rbtns-wrap>summary::-webkit-details-marker{display:none}
.rbtns-wrap>summary::before{content:'▸ ';color:#64748b}
.rbtns-wrap[open]>summary::before{content:'▾ '}

/* 桌面：右側面板預設收起，hover 展開 */

/* 雙向：去程／回程 兩組資料 */
.dhd{margin:8px 0 2px;font-size:11.5px;color:#93c5fd;font-weight:700;border-top:1px dashed rgba(148,163,184,.22);padding-top:6px}
.rcfg .dhd:first-child{border-top:0;padding-top:0;margin-top:0}
/* 站序表：每站每日上車人數 */
.spax{font-size:10px;font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.spax.up{color:#86efac}
.spax.dn{color:#fbbf24}
.srow.shd{color:#64748b;font-size:9.5px;border-bottom:1px solid var(--line);padding-bottom:3px;margin-bottom:2px}
.farehd{font-size:9px;color:#64748b;text-align:center}

/* 面板鎖定掣 */
.pinbtn{position:absolute;top:6px;right:6px;z-index:8;background:#1e293b;border:1px solid var(--line);
  color:#93c5fd;border-radius:7px;font-size:11px;line-height:1;padding:4px 7px;cursor:pointer;opacity:.85}
.pinbtn:hover{opacity:1;background:#334155}
.pinbtn.on{background:#e11d48;border-color:#e11d48;color:#fff}

/* 桌面：面板預設收窄，hover 或鎖定時展開 */
@media (min-width:900px){
  aside{position:relative;width:46px!important;flex:0 0 46px!important;overflow:hidden;
        transition:width .18s ease, flex-basis .18s ease}
  aside:not(.pinned):hover{width:392px!important;flex:0 0 392px!important;overflow-y:auto}
  aside.pinned{width:392px!important;flex:0 0 392px!important;overflow-y:auto}
  aside>*{opacity:0;transition:opacity .12s;pointer-events:none}
  aside:not(.pinned):hover>*{opacity:1;pointer-events:auto}
  aside.pinned>*{opacity:1!important;pointer-events:auto!important}
  aside>.pinbtn{opacity:1!important;pointer-events:auto!important}
  aside::before{content:'◀ 面板';position:absolute;top:38px;left:12px;font-size:11px;color:#93c5fd;writing-mode:vertical-rl;letter-spacing:1px}
  aside:not(.pinned):hover::before,aside.pinned::before{display:none}
}

/* 港鐵站顏色條（轉車站上下分色） */
.hnode .mline{display:inline-block;width:9px;height:14px;border-radius:3px;border:1px solid rgba(0,0,0,.45);
  box-shadow:0 0 0 1px rgba(255,255,255,.15) inset;vertical-align:middle;margin-right:3px}
.hnode .e{font-size:12px;line-height:1.25}

/* 高客源節點資料卡 */
.nodeinfo{display:none;position:absolute;z-index:9;width:228px;background:rgba(11,18,32,.95);
  border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:11.5px;color:#cbd5e1;
  box-shadow:0 6px 20px rgba(0,0,0,.5);pointer-events:auto}
.nodeinfo .ni-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;color:#93c5fd;font-size:12.5px;margin-bottom:2px}
.nodeinfo .ni-sub{color:#64748b;font-size:10px;margin-bottom:5px}
.nodeinfo .ni-row{display:flex;justify-content:space-between;gap:8px;padding:1px 0}
.nodeinfo .ni-row b{color:#e6edf7;font-weight:600;text-align:right}
.nodeinfo .ni-tip{margin-top:6px;padding-top:5px;border-top:1px dashed rgba(148,163,184,.25);color:#94a3b8;font-size:10px;line-height:1.4}

/* 站資料卡（轉乘圈／改名／刪站） */
.stopinfo{width:246px}
.stopinfo .si-row{display:flex;justify-content:space-between;gap:8px;padding:1px 0;line-height:1.45}
.stopinfo .si-row b{color:#e6edf7;font-weight:600;text-align:right;max-width:150px;word-break:break-all}
.stopinfo .si-name{margin-top:6px}
.stopinfo .si-name input{width:100%;background:#0b1220;border:1px solid var(--line);color:#fff;border-radius:6px;padding:4px 6px;font-size:12px}
.stopinfo .si-btns{display:flex;gap:6px;margin-top:6px}

/* 車型比較彈窗 */
.busmodal{position:fixed;inset:0;background:rgba(3,8,18,.72);display:none;align-items:center;justify-content:center;z-index:70}
.busmodal.open{display:flex}
.buscard{background:var(--panel);border:1px solid var(--line);border-radius:14px;width:min(96vw,980px);max-height:88vh;display:flex;flex-direction:column}
.bus-hd{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line);color:#93c5fd}
.bus-hd b{flex:0 0 auto}
.bus-hd input{flex:1;min-width:80px;background:#0b1220;border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:6px 9px;font-size:12.5px}
.bus-scroll{overflow:auto;padding:4px 6px 8px}
.bustab{width:100%;border-collapse:collapse;font-size:11.5px}
.bustab th{position:sticky;top:0;background:#16233a;color:#93c5fd;font-weight:600;padding:6px 5px;text-align:right;cursor:pointer;white-space:nowrap;border-bottom:1px solid var(--line)}
.bustab th:first-child{text-align:left}
.bustab td{padding:4px 5px;text-align:right;white-space:nowrap;border-bottom:1px dashed rgba(148,163,184,.12);font-variant-numeric:tabular-nums}
.bustab td.nm{text-align:left;white-space:normal;max-width:280px}
.bustab tbody tr{cursor:pointer}
.bustab tbody tr:hover{background:#1b2b45}
.bustab tbody tr.sel{background:#1e3a5f;box-shadow:inset 3px 0 0 #38bdf8}
.bustab tbody tr.old{opacity:.62}
.bustab .opdot{display:inline-block;width:7px;height:7px;border-radius:2px;margin-right:6px;vertical-align:middle}
.bus-tip{padding:7px 14px;border-top:1px solid var(--line);color:#94a3b8;font-size:10.5px;line-height:1.45}


/* 路線卡：右上角收起／展開 */
.rhead{position:relative;padding-right:26px}
.cardToggle{position:absolute;right:0;top:0;padding:1px 6px;font-size:12px;line-height:1.2}
.rmini{font-size:11px;color:#cbd5e1;white-space:nowrap;margin-left:4px}
.rmini b{color:#e6edf7}

/* 統計面板 */
.bustab.stat td, .bustab.stat th{text-align:right}
.bustab.stat td.nm{text-align:left;font-weight:600;color:#e6edf7}
.st-hd{font-size:12px;color:#93c5fd;font-weight:700;margin:10px 4px 4px}

.pk-gs{font-size:9px;padding:1px 4px;border-radius:3px;background:#14532d;color:#86efac;font-weight:700}

/* ---------- 管理員面板：內部版 → 公開版 ---------- */
.pk-gs.int{background:#7c3aed;color:#fff}
.adm{position:fixed;z-index:120;top:56px;left:50%;transform:translateX(-50%);width:min(620px,94vw);
  max-height:min(80vh,760px);display:none;flex-direction:column;background:rgba(9,15,26,.98);
  border:1px solid #1e293b;border-radius:12px;box-shadow:0 18px 50px rgba(0,0,0,.55);
  color:#e2e8f0;font-size:12.5px;overflow:hidden}
.adm.open{display:flex}
.adm-head{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;
  border-bottom:1px solid #1e293b;font-size:13px;color:#f1f5f9}
#admBody{padding:10px 12px 0;overflow:auto}
.adm-form{display:flex;gap:8px;margin:8px 0}
.adm-form input{flex:1;min-width:0;background:#0b1524;border:1px solid #24344a;border-radius:8px;
  color:#e2e8f0;padding:7px 9px;font-size:12.5px}
.adm-note{color:#94a3b8;font-size:11.5px}
.adm-msg{min-height:15px;padding:6px 12px 10px;font-size:11.5px;color:#7dd3fc}
.adm-msg.bad{color:#f87171}
.adm-who{display:flex;align-items:center;gap:8px;font-size:11.5px;color:#cbd5e1}
.adm-who .adm-cnt{margin-left:auto;color:#94a3b8}
.adm-list{margin:6px 0 8px;max-height:32vh;overflow:auto;border:1px solid #1e293b;border-radius:8px}
.adm-row{display:flex;align-items:center;gap:8px;padding:7px 9px;border-bottom:1px solid #16233a}
.adm-row:last-child{border-bottom:none}
.adm-info{flex:1;min-width:0}
.adm-tag{display:inline-block;font-size:9.5px;padding:0 4px;border-radius:4px;background:#1e293b;color:#94a3b8;margin-right:4px}
.adm-dir{color:#cbd5e1}
.adm-sub{color:#7b8ea8;font-size:10.5px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.adm-sub em{color:#fbbf24;font-style:normal}
.adm-hd{margin:10px 0 4px;font-size:11px;color:#94a3b8}
.adm-empty{padding:10px;color:#64748b;font-size:11.5px}
@media(max-width:760px){.adm{top:8px;max-height:88vh}}

/* 管理員：路線變體群組 */
.adm-chk{display:flex;align-items:center;gap:6px;font-size:11px;color:#94a3b8;margin:2px 0 8px}
.adm-grp{margin-bottom:8px;border:1px solid #1e293b;border-radius:8px;overflow:hidden}
.adm-ghead{display:flex;align-items:center;gap:6px;padding:6px 8px;background:#101c2e;font-size:12px;color:#e2e8f0}
.adm-gsub{color:#7b8ea8;font-size:10.5px}
.adm-ghead .btn{margin-left:auto}
.adm-grp .adm-row{border-bottom:1px solid #16233a;padding:5px 8px}
.adm-grp .adm-row:last-child{border-bottom:none}
.adm-n{display:inline-block;font-size:10.5px;color:#93c5fd;margin-left:4px}
.adm-sv{display:inline-block;font-size:10px;color:#fbbf24;margin-left:4px}
.adm-row .btn.copied{background:#14532d;border-color:#22c55e;color:#bbf7d0}

/* ---------- ☁️ Google 雲端存檔面板 ---------- */
.cloudpanel{position:fixed;z-index:130;top:56px;left:50%;transform:translateX(-50%);width:min(420px,92vw);
  display:none;background:rgba(9,15,26,.98);border:1px solid #1e293b;border-radius:12px;
  box-shadow:0 18px 50px rgba(0,0,0,.55);color:#e2e8f0;font-size:12.5px;overflow:hidden}
.cloudpanel.open{display:block}
.cp-head{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #1e293b;font-size:13px}
.cp-body{padding:12px}
.cp-msg{color:#94a3b8;font-size:11.5px;margin-bottom:10px;line-height:1.5}
.cp-note{color:#64748b;font-size:10.5px;margin-top:10px}
#cpBtn{display:flex;justify-content:center;min-height:44px}

/* ---------- 🎬 廣告解鎖面板 ---------- */
.adpanel{position:fixed;z-index:125;top:56px;left:50%;transform:translateX(-50%);width:min(520px,94vw);
  display:none;background:rgba(9,15,26,.98);border:1px solid #1e293b;border-radius:12px;
  box-shadow:0 18px 50px rgba(0,0,0,.55);color:#e2e8f0;font-size:12.5px;overflow:hidden}
.adpanel.open{display:block}
.adp-head{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #1e293b;font-size:13px}
.adp-body{padding:6px 12px}
.adp-row{display:flex;gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid #16233a}
.adp-row:last-child{border-bottom:none}
.adp-info{flex:1;min-width:0}
.adp-name{font-weight:600;font-size:12.5px}
.adp-desc{color:#7b8ea8;font-size:11px;margin:2px 0}
.adp-status{font-size:11px;color:#f59e0b}
.adp-status.on{color:#34d399}
.adp-stage{min-height:0;padding:0 12px}
.adp-stage:not(:empty){padding:8px 12px;border-top:1px solid #16233a;font-size:12px;color:#7dd3fc}
.adp-confirm{display:flex;flex-direction:column;gap:8px}
.adp-actions{display:flex;gap:8px}
.adp-note{padding:8px 12px 10px;color:#64748b;font-size:10.5px;line-height:1.5}
@media(max-width:760px){.adpanel{top:8px;max-height:86vh;overflow:auto}}
