:root{--sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px)}

  :root{
    --bg:#0c1224; --card:#151d2f; --card2:#1c2538; --line:#2a3549;
    --grid:rgba(168,196,240,.62); --gridaxis:rgba(180,206,248,.85);
    --fg:#e9eefa; --dim:#a3b0c8; --accent:#4ec9a0; --accent2:#5aa9e6;
    --bg-grad:
      radial-gradient(1200px 620px at 18% -12%, rgba(90,169,230,.22), transparent 62%),
      radial-gradient(900px 520px at 88% 4%, rgba(148,96,232,.20), transparent 60%),
      linear-gradient(160deg, #0a1020 0%, #0d1428 46%, #170f2b 100%);
    --warn:#e6b450; --err:#e5626a; --ok:#4ec9a0;
    --up:#e5626a; --down:#4ec9a0;
    --head-bg:rgba(12,18,36,.62);
    --mask-bg:rgba(6,10,24,.80);
    --ok-bg:#123027; --ok-bd:#2b6f58;
    --warn-bg:#2a2110; --warn-bd:#6b5320;
    --err-bg:#2b1416; --err-bd:#6e2c31;
    --info-bg:#0f2333; --info-bd:#2b4d6b;
    --btn-fg:#06231a;
    --shadow:0 8px 24px -18px #000;
    --r:16px;
    --glass:rgba(30,42,66,.28);
    --glass-act:rgba(38,54,82,.46);
    --glass-sheet:#0e1424;      /* 原 rgba(12,18,34,.86)：滚动容器做实色，才能走贴图滚动快速路径 */
    --glass-brd:rgba(255,255,255,.16);
    --glass-hi:rgba(255,255,255,.18);
    --glass-btn:rgba(255,255,255,.06);
    --tvpnl:rgba(12,18,34,.92);
    --tvcell:rgba(255,255,255,.09);
    --tvcell-on:rgba(139,124,246,.42);
    --tvtx:#ffffff;
    --tvbrd:rgba(255,255,255,.14);
    --tvbrd-on:rgba(170,150,255,.72);
    --glass-sh:0 12px 32px -16px rgba(0,0,0,.68);
    --sheen:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,0) 46%);
    --panel:rgba(22,32,52,.34);
    --card-glass:rgba(255,255,255,.06);
    --tile:#141a28;   /* 原 rgba(255,255,255,.05)：dpr 3.5 高刷屏上做实色省混合 */
    --tile-on:rgba(255,255,255,.10);
    --lav:#c3b2f5;          /* 薰衣草浅紫：重新加载按钮 */
    --tr:#d9cdff;           /* 译文色：深色主题 */
    --lav2:#ab98ec;
    --lav-fg:#2b2255;
  }
  html[data-theme="light"]{
    --tvpnl:rgba(250,249,255,.94);
    --tvcell:rgba(28,38,66,.07);
    --tvcell-on:rgba(120,100,240,.20);
    --tvtx:#1b2334;
    --tvbrd:rgba(20,30,60,.12);
    --tvbrd-on:rgba(110,92,230,.55);
    --bg:#f3f5fb; --card:#ffffff; --card2:#eef1f8; --line:#dde1ee;
    --grid:rgba(84,108,150,.58); --gridaxis:rgba(64,88,132,.78);
    --fg:#11161d; --dim:#57637a; --accent:#0d9b73; --accent2:#2b7fc0;
    --bg-grad:
      radial-gradient(1100px 600px at 15% -12%, rgba(96,150,230,.22), transparent 60%),
      radial-gradient(880px 500px at 90% 2%, rgba(150,110,232,.18), transparent 58%),
      linear-gradient(160deg, #f1f5fd 0%, #f4f3fc 55%, #f9f3fb 100%);
    --warn:#a8720c; --err:#c43843; --ok:#0d9b73;
    --up:#d33b45; --down:#0d9b73;
    --head-bg:rgba(243,245,251,.68);
    --mask-bg:rgba(40,45,70,.50);
    --ok-bg:#e2f6ee; --ok-bd:#8ed6bc;
    --warn-bg:#fcf2da; --warn-bd:#e8ca86;
    --err-bg:#fdeaea; --err-bd:#efafb3;
    --info-bg:#e5f0fb; --info-bd:#a6cbec;
    --btn-fg:#ffffff;
    --shadow:0 8px 22px -16px rgba(25,40,60,.4);
    --glass:rgba(255,255,255,.40);
    --glass-act:rgba(255,255,255,.62);
    --glass-sheet:#fafbff;      /* 原 rgba(250,251,255,.88)：同上，做实 */
    --glass-brd:rgba(255,255,255,.80);
    --glass-hi:rgba(255,255,255,.95);
    --glass-btn:rgba(255,255,255,.55);
    --glass-sh:0 12px 30px -18px rgba(30,45,70,.45);
    --sheen:linear-gradient(180deg,rgba(255,255,255,.52),rgba(255,255,255,0) 48%);
    --panel:rgba(255,255,255,.34);
    --card-glass:rgba(255,255,255,.58);
    --tile:#f7f9fd;   /* 原 rgba(255,255,255,.55)：同上 */
    --tile-on:rgba(255,255,255,.88);
    --lav:#cdbdf8;
    --tr:#5b4bbd;           /* 译文色：浅色主题用深紫，白底才看得清 */
    --lav2:#b9a4f1;
    --lav-fg:#392a63;
  }
  #splash{position:fixed;inset:0;z-index:9999;background:#0a1020;transition:opacity .3s ease}
  html[data-theme="light"] #splash{background:#f0ecfd}
  html.restoring body{opacity:0!important}
  #splash img{display:block;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .25s ease}
  #splash img.on{opacity:1}
  #splash.off{opacity:0;pointer-events:none}
  #fp{position:fixed;left:0;right:0;top:0;bottom:0;z-index:9000;background:#080c18;
    padding:var(--sat, env(safe-area-inset-top, 0px)) 0 var(--sab, env(safe-area-inset-bottom, 0px));
    transform:translateY(100%);transition:transform .34s cubic-bezier(.2,.8,.2,1);will-change:transform}
  #fp.on{transform:translateY(0)}
  #fp iframe{width:100%;height:100%;border:0;display:block;background:#080c18;display:block}
  *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
  body,.card,.sheet,table th,table td,.kv,.pre{transition:background-color .25s,color .25s,border-color .25s}
  html{margin:0;padding:0;background:var(--bg)}
  body{margin:0;padding:0;background:transparent;color:var(--fg);
    font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;
    font-size:15px;line-height:1.6}
  body::before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;
    background:var(--bg-grad);background-size:cover;z-index:-1;pointer-events:none;
    transition:background .3s}
  body{padding:0 14px calc(30px + var(--sab, env(safe-area-inset-bottom, 0px)));max-width:820px;margin:0 auto}
  header{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:10px;
    margin:0 -14px 18px;padding:calc(16px + var(--sat, env(safe-area-inset-top, 0px))) 16px 12px;
    background:var(--head-bg);
    -webkit-backdrop-filter:blur(16px) saturate(150%);backdrop-filter:blur(16px) saturate(150%);
    border-bottom:1px solid var(--line);
    box-shadow:var(--shadow);
    transition:background .25s,border-color .25s}
  header h1{font-size:20px;margin:0;font-weight:650;letter-spacing:.5px}
  header .sub{color:var(--dim);font-size:12px;flex:1}
  header button{background:transparent;border:1px solid var(--line);color:var(--dim);
    border-radius:10px;padding:6px 10px;font-size:12px;cursor:pointer}
  header button:active{background:var(--card2)}
  header #theme-btn{font-size:15px;padding:4px 9px;line-height:1.4}
  header #sort-btn.on{color:var(--accent);border-color:var(--accent)}
  .card .mv{position:absolute;top:8px;right:8px;display:flex;gap:4px}
  .mv button{width:24px;height:24px;border-radius:7px;border:1px solid var(--line);
    background:var(--card2);color:var(--dim);font-size:10px;line-height:1;cursor:pointer;padding:0}
  .mv button:active{border-color:var(--accent);color:var(--accent)}
  .group>h2 .gmv{display:inline-flex;gap:4px;margin-left:2px}
  .gmv button{width:22px;height:22px;border-radius:6px;border:1px solid var(--line);
    background:var(--card2);color:var(--dim);font-size:10px;line-height:1;cursor:pointer;padding:0}
  .gmv button:active{border-color:var(--accent);color:var(--accent)}
  body.sorting .card{padding-top:32px}
  body.sorting .card-grab{display:flex}
  .card-grab{display:none;position:absolute;top:0;left:0;right:0;height:26px;align-items:center;gap:6px;
    padding:0 8px;border-bottom:1px solid var(--line);font-size:12px;color:var(--dim);
    touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
  .card-grab .gh{flex:1;display:flex;align-items:center;gap:6px;letter-spacing:1px;opacity:.7;
    white-space:nowrap;overflow:hidden;
    touch-action:none;cursor:grab;transition:color .12s,transform .12s,opacity .12s}
  .card-grab .gh b{font-weight:400;font-size:10px;letter-spacing:0;opacity:.8}
  .card-grab .mv{position:static;display:flex;gap:4px}
  .card-grab *{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
  .grab{-webkit-touch-callout:none;padding:8px 6px;margin:-8px 0 -8px -6px}
  .grab.holding,.card-grab .gh.holding{color:var(--accent);opacity:1;transform:scale(1.15)}
  body.sorting .group>h2::after{display:none}
  body.sorting .group>h2{border-bottom:1px solid var(--line);padding-bottom:6px}
  body.sorting .card{border-style:dashed}
  .card.card-ph{border:1px dashed var(--line);border-radius:var(--r);background:transparent;opacity:.45}
  .card.dragging{opacity:.95;transform:scale(1.04);z-index:999;pointer-events:none;
    box-shadow:0 18px 40px -12px rgba(0,0,0,.55);transition:none;cursor:grabbing}
  .ins-line{position:fixed;height:3px;background:var(--accent);border-radius:3px;z-index:300;
    pointer-events:none;opacity:0;box-shadow:0 0 10px rgba(78,201,160,.7);
    transition:top .22s cubic-bezier(.2,.75,.3,1),left .22s cubic-bezier(.2,.75,.3,1),
      width .22s cubic-bezier(.2,.75,.3,1),opacity .16s linear}
  .group.sec-dragging{opacity:.92;box-shadow:0 0 0 2px var(--accent);border-radius:14px;pointer-events:none}
  .group.sec-fly{background:var(--bg);border-radius:14px;pointer-events:none;z-index:400;
    box-shadow:0 26px 54px -20px rgba(0,0,0,.6),0 0 0 2px var(--accent);opacity:.98}
  .dv{height:10px;margin:26px 0 20px;border-top:2px solid var(--gridaxis);
    border-bottom:2px solid var(--gridaxis);opacity:.9}
  .bars{background:var(--card2);border:1px solid var(--line);border-radius:14px;
    padding:12px 13px 2px;margin:12px 0 6px}
  .brow{display:flex;justify-content:space-between;align-items:baseline;
    font-size:11.5px;color:var(--dim);margin-bottom:6px}
  .brow .bv{color:var(--fg);font-weight:650;font-size:12.5px}
  .btrack{height:7px;border-radius:4px;background:rgba(130,150,190,.20);
    overflow:hidden;margin-bottom:13px}
  .btrack>i{display:block;height:100%;border-radius:4px;background:var(--accent);
    transition:width .5s ease}
  .btrack.warn>i{background:#e0605d}
  .sec-ph{border:2px dashed var(--line);border-radius:14px;margin-bottom:22px;box-sizing:border-box}
  body.sorting .group>h2{-webkit-user-select:none;user-select:none}
  .drag-hint{display:none;color:var(--dim);font-size:12px;margin:-6px 2px 14px}
  body.sorting .drag-hint{display:block}
  body.sorting{-webkit-user-select:none;user-select:none}
  .group{margin-bottom:22px}
  .group>h2{font-size:12px;color:var(--dim);font-weight:500;letter-spacing:1.5px;
    margin:0 2px 10px;padding:6px 0;text-transform:uppercase;display:flex;align-items:center;gap:8px}
  .grab{font-size:14px;letter-spacing:0;color:var(--dim);opacity:.75;
    touch-action:none;cursor:grab;padding:0 2px}
  .group>h2::after{content:"";flex:1;height:1px;background:var(--line)}
  .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
  .card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
    padding:14px 13px;cursor:pointer;transition:transform .22s cubic-bezier(.3,1.45,.42,1),border-color .16s ease;
    will-change:transform;
    position:relative;overflow:hidden;min-height:96px;display:flex;flex-direction:column}
  .card:active{transform:scale(.975);border-color:var(--accent)}
  .card .ico{font-size:22px;line-height:1;margin-bottom:8px}
  .card .nm{font-weight:600;font-size:14.5px;margin-bottom:3px}
  .card .ds{color:var(--dim);font-size:11.5px;line-height:1.45;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .card .dot{position:absolute;top:12px;right:12px;width:6px;height:6px;border-radius:50%;background:var(--accent2);opacity:.55}

  /* 面板 */
  body.sheet-open .group,body.sheet-open .env,body.sheet-open header,body.sheet-open #sbar,body.sheet-open #app,body.sheet-open .login{display:none}
  .mask{position:fixed;inset:0;background:var(--mask-bg);display:none;z-index:50}
  .mask.on{display:flex;animation:maskIn .50s ease-out}
  @keyframes maskIn{from{opacity:0}to{opacity:1}}
  .sheet{display:none;background:var(--bg);border:1px solid var(--line);border-bottom:0;
    border-radius:0;width:100%;max-width:820px;
    padding:calc(14px + var(--sat, env(safe-area-inset-top, 0px))) 16px calc(26px + var(--sab, env(safe-area-inset-bottom, 0px)));
    position:relative;z-index:55;align-self:center;min-height:100vh;
    box-sizing:border-box}
  body.sheet-open{display:flex;flex-direction:column;min-height:100vh;background:var(--bg);
    padding-left:0;padding-right:0;padding-bottom:0}
  body.sheet-open .sheet{display:block;background:var(--bg);
    animation:up .6s cubic-bezier(.4,.02,.24,1)}
  @keyframes up{
    0%{transform:translateY(100%);opacity:.4}
    70%{transform:translateY(-4px);opacity:1}
    86%{transform:translateY(1.5px)}
    100%{transform:none;opacity:1}}
  .sheethd{position:sticky;top:0;z-index:6;background:var(--bg);
    padding:calc(18px + var(--sat, env(safe-area-inset-top, 0px))) 16px 10px;
    margin:0 -16px 4px;border-bottom:1px solid transparent;
    border-radius:0;
    transition:border-color .2s}
  /* 吸顶时高度不变（变 padding 会让下面内容跟着跳=卡顿），改用一块同色遮片盖住状态栏区域 */
  .sheethd::before{content:'';position:absolute;left:0;right:0;bottom:100%;
    height:calc(var(--sat, env(safe-area-inset-top, 0px)) + 2px);
    background:var(--bg);pointer-events:none}
  .sheethd.stuck{border-bottom-color:var(--line);box-shadow:0 8px 18px -12px rgba(0,0,0,.5)}
  .sheethd.sub{padding-bottom:12px}
  .sheethd.sub .run{display:none}
  .sheet .hd{display:flex;align-items:center;gap:10px;margin-bottom:4px}
  .sheet .hd .ico{font-size:20px}
  .sheet .hd .nm{font-size:17px;font-weight:650;flex:1}
  .sheet .hd .x{color:var(--dim);font-size:22px;line-height:1;padding:2px 6px;cursor:pointer}
  .sheet .ds{color:var(--dim);font-size:12.5px;margin:0 0 14px}
  .field{margin-bottom:11px}
  .field label{display:block;font-size:12px;color:var(--dim);margin-bottom:5px}
  .field input,.field select{width:100%;background:var(--card);border:1px solid var(--line);
    color:var(--fg);border-radius:11px;padding:11px 12px;font-size:15px;outline:none;
    font-family:inherit}
  .field input:focus{border-color:var(--accent)}
  .run{width:100%;background:linear-gradient(135deg,var(--lav),var(--lav2));color:var(--lav-fg);
    border:1px solid rgba(255,255,255,.22);border-radius:12px;
    padding:14px;font-size:17px;font-weight:650;cursor:pointer;margin-top:4px;font-family:inherit;
    letter-spacing:.5px}
  .run:active{opacity:.85}
  .run[disabled]{opacity:.5}
  .res{margin-top:16px}
  .res .ttl{font-size:15px;font-weight:650;margin-bottom:8px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .badge{font-size:11px;padding:2px 8px;border-radius:20px;border:1px solid;font-weight:500}
  .badge.ok{color:var(--ok);border-color:var(--ok-bd);background:var(--ok-bg)}
  .badge.warn{color:var(--warn);border-color:var(--warn-bd);background:var(--warn-bg)}
  .badge.err{color:var(--err);border-color:var(--err-bd);background:var(--err-bg)}
  .badge.info{color:var(--accent2);border-color:var(--info-bd);background:var(--info-bg)}
  table{width:100%;border-collapse:collapse;font-size:13px;margin:4px 0 10px;
    display:block;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;white-space:nowrap}
  th,td{text-align:left;padding:7px 9px;border-bottom:1px solid var(--line)}
  table th.c,table td.c{text-align:center}
  th{color:var(--dim);font-weight:500;font-size:11.5px;letter-spacing:.5px}
  tr:last-child td{border-bottom:0}
  .hero{display:flex;gap:12px;align-items:center;margin:2px 0 10px}
  .hero img{width:76px;height:76px;border-radius:16px;background:var(--card2);flex:0 0 auto;object-fit:cover}
  .hero .ht{font-size:17px;font-weight:700;line-height:1.2}
  .hero .hs{font-size:12px;color:var(--dim);margin-top:4px}
  .rc{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-bottom:1px solid var(--line)}
  .rc:last-child{border-bottom:0}
  .rc img{width:46px;height:46px;border-radius:11px;background:var(--card2);flex:0 0 auto;object-fit:contain}
  .rc.sm img{width:34px;height:34px;border-radius:9px}
  .rc .rt{font-size:13px;font-weight:600;line-height:1.3}
  .rc .rs{font-size:11.5px;color:var(--dim);margin-top:3px;line-height:1.5}
  .rcph{width:46px;height:46px;border-radius:11px;background:var(--card2);flex:0 0 auto}
  .rc.sm .rcph{width:34px;height:34px;border-radius:9px}
  .hero{display:flex;align-items:center;gap:12px;margin:4px 0 12px}
  .hero img{width:64px;height:64px;border-radius:14px;object-fit:cover;background:var(--card2);border:1px solid var(--line);flex:0 0 auto}
  .hero .hn{font-size:19px;font-weight:700}
  .hero .hs{font-size:12px;color:var(--dim);margin-top:3px}
  .rlist{display:flex;flex-direction:column;gap:8px;margin:4px 0 12px}
  .ritem{display:flex;align-items:flex-start;gap:10px;background:var(--card2);border:1px solid var(--line);
    border-radius:12px;padding:8px 10px}
  .ritem img{width:46px;height:46px;border-radius:10px;object-fit:cover;background:var(--card);flex:0 0 auto}
  .ritem .rtxt{flex:1;min-width:0}
  .ritem .rn{font-size:13.5px;font-weight:600;line-height:1.35;color:var(--fg)}
  .ritem .rd{font-size:12px;color:var(--fg);opacity:.75;margin-top:3px;line-height:1.45;word-break:break-word}
  .ritem .rtag{margin-left:6px;font-size:12px;color:var(--fg);opacity:.75;white-space:nowrap;flex:0 0 auto}
  .agrid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:6px 0 12px}
  .acell{background:var(--card2);border:1px solid var(--line);border-radius:12px;
    padding:6px 5px 7px;text-align:center;overflow:hidden}
  .acell img{width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:9px;display:block;background:var(--card)}
  .acell .an{font-size:12px;font-weight:600;margin-top:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .acell .al{font-size:11px;color:var(--fg);opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
  .acell .aw{font-size:10.5px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
  .acell .aph{width:100%;aspect-ratio:1/1;border-radius:9px;background:var(--card);margin-bottom:2px}
  .sgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:8px 0 14px}
  .scell{background:var(--card2);border:1px solid var(--line);border-radius:12px;overflow:hidden;position:relative;
    display:flex;flex-direction:column}
  .scell img{width:100%;aspect-ratio:16/10;object-fit:cover;display:block;background:var(--card)}
  .scell .sph{width:100%;aspect-ratio:16/10;background:var(--card)}
  .sgrid.sq .scell img{aspect-ratio:1/1;object-fit:contain;padding:4px;background:var(--card)}
  .sgrid.sq .scell .sph{aspect-ratio:1/1}
  .sgrid.c3{grid-template-columns:repeat(3,1fr);gap:8px}
  .sgrid.c3 .scell{border-radius:11px}
  .sgrid.c3 .scell .sn{font-size:12px;padding:6px 6px 7px;line-height:1.25}
  .sgrid.c3 .scell img{padding:2px}
  .sgrid.flat .scell img{aspect-ratio:16/10;object-fit:cover;padding:0;border-radius:0}
  .sgrid.flat .scell{border-radius:12px}
  .sgrid.flat .scell .sn{padding:7px 8px 8px;font-size:13px;-webkit-line-clamp:1}
  .scell .sn{font-size:13px;font-weight:650;color:var(--fg);padding:7px 8px 0;line-height:1.3;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .scell .sd{font-size:11.5px;color:var(--fg);opacity:.72;padding:3px 8px 9px;margin-top:auto;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .scell .snew{position:absolute;top:7px;left:7px;background:#e0453e;color:#fff;font-size:9.5px;
    font-weight:700;letter-spacing:.5px;padding:2px 6px;border-radius:6px;box-shadow:0 2px 6px rgba(0,0,0,.35)}
  .kv{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:13.5px;margin:2px 0 10px}
  .kv .k{color:var(--dim)}
  .kv .v{font-variant-numeric:tabular-nums;word-break:break-all}
  .txt{font-size:13.5px;margin:2px 0 10px;white-space:pre-wrap;word-break:break-word}
  .note.ldph{min-height:78vh;display:flex;align-items:center;justify-content:center}
  @keyframes finIn{from{opacity:0}to{opacity:1}}
  .res.fin{animation:finIn .3s ease-out}
  @keyframes jIn{
    0%{opacity:0;transform:translateY(6px) scale(.992)}
    62%{opacity:1;transform:translateY(-1px) scale(1.001)}
    100%{opacity:1;transform:none}}
  .res.fin > *{animation:jIn .46s cubic-bezier(.3,1.12,.42,1) both}
  .res.fin > *:nth-child(1){animation-delay:0ms}
  .res.fin > *:nth-child(2){animation-delay:12ms}
  .res.fin > *:nth-child(3){animation-delay:24ms}
  .res.fin > *:nth-child(4){animation-delay:36ms}
  .res.fin > *:nth-child(5){animation-delay:46ms}
  .res.fin > *:nth-child(6){animation-delay:56ms}
  .res.fin > *:nth-child(7){animation-delay:64ms}
  .res.fin > *:nth-child(n+8){animation-delay:72ms}
  /* 详情页横向推入 / 返回，带一点点回弹 */
  @keyframes pushIn{
    0%{opacity:0;transform:translateX(30px) scale(.988)}
    64%{opacity:1;transform:translateX(-1.2px) scale(1.0008)}
    100%{opacity:1;transform:none}}
  @keyframes popIn{
    0%{opacity:0;transform:translateX(-24px) scale(.99)}
    64%{opacity:1;transform:translateX(1px) scale(1.0008)}
    100%{opacity:1;transform:none}}
  .res.pin > *{animation:pushIn .42s cubic-bezier(.3,1.1,.42,1) both}
  .res.pop > *{animation:popIn .38s cubic-bezier(.3,1.1,.42,1) both}
  .note{font-size:12px;color:var(--dim);margin:2px 0 10px}
  .secmore{margin-left:auto;font-size:11.5px;font-weight:600;color:#7aa2ff;letter-spacing:.2px;
    padding:2px 2px 2px 10px;-webkit-tap-highlight-color:transparent}
  .secmore:active{opacity:.6}
  .sec{display:flex;align-items:center;gap:7px;margin:15px 0 9px;font-size:12px;
    font-weight:600;color:var(--dim);letter-spacing:.03em}
  .sec::before{content:"";width:3px;height:12px;border-radius:2px;background:var(--accent);opacity:.75}
  .sec::after{content:"";flex:1;height:1px;background:var(--line)}
  .hstrip{display:flex;gap:8px;overflow-x:auto;overscroll-behavior-x:contain;padding:2px 0 8px;margin:4px 0 10px;scrollbar-width:none}
  .hstrip::-webkit-scrollbar{display:none}
  .hcell{flex:0 0 auto;min-width:54px;text-align:center;background:var(--card2);
    border:1px solid var(--line);border-radius:10px;padding:7px 6px}
  .hcell .ht{font-size:11px;color:var(--dim)}
  .hcell .hi{font-size:20px;line-height:1.35}
  .hcell .hv{font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums}
  .codebox{display:flex;flex-direction:column;gap:7px;margin:9px 0 2px}
  .cde{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13.5px;font-weight:650;
    letter-spacing:.4px;text-align:center;padding:10px 12px;border-radius:10px;
    background:var(--card2);border:1px solid var(--line);color:var(--fg);
    -webkit-user-select:all;user-select:all;cursor:pointer;
    transition:background-color .18s,border-color .18s,transform .18s}
  .cde:active{transform:scale(.985)}
  .cde.ok{background:rgba(90,200,140,.16);border-color:rgba(90,200,140,.55)}
  .pre{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px;background:var(--card);
    border:1px solid var(--line);border-radius:10px;padding:10px;overflow-x:auto;white-space:pre;color:var(--dim)}
  .bar{height:6px;border-radius:3px;background:var(--card2);overflow:hidden;margin:6px 0 12px}
  .bar>i{display:block;height:100%;background:var(--accent);border-radius:3px}
  .cols{display:flex;gap:5px;margin:10px 0 12px}
  .cols .col{flex:1;display:flex;flex-direction:column;align-items:center;min-width:0}
  .cols .colval{font-size:9.5px;color:var(--dim);margin-bottom:3px;white-space:nowrap}
  .cols .colw{height:66px;width:100%;display:flex;align-items:flex-end;justify-content:center}
  .cols .colb{width:100%;max-width:20px;border-radius:4px 4px 0 0;background:var(--accent);min-height:2px;opacity:.85}
  .cols .collab{font-size:9.5px;color:var(--dim);margin-top:4px;white-space:nowrap}

  /* ---------- 万年历 ---------- */
  .cal{margin:2px 0 4px;-webkit-user-select:none;user-select:none}
  .calhd{display:flex;align-items:center;gap:8px;margin:0 0 9px}
  .calnav{flex:0 0 34px;height:34px;border-radius:11px;border:1px solid var(--line);
    background:var(--tile);color:var(--dim);font-size:17px;line-height:1;padding:0;
    display:flex;align-items:center;justify-content:center;cursor:pointer}
  .calnav:active{color:var(--accent);border-color:var(--accent)}
  .caltit{flex:1;text-align:center;min-width:0}
  .caltit b{font-size:15.5px;font-weight:650;letter-spacing:.3px}
  .caltit small{display:block;font-size:10.5px;color:var(--dim);margin-top:2px}
  .calnow{flex:0 0 38px;height:34px;border-radius:11px;border:1px solid var(--line);
    background:var(--tile);color:var(--dim);font-size:12.5px;padding:0;cursor:pointer}
  .calnow.on{color:var(--accent);border-color:var(--accent)}
  .calwk{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin:0 0 5px}
  .calwk span{text-align:center;font-size:10.5px;color:var(--dim);padding:1px 0}
  .calwk span.w{color:var(--up);opacity:.85}
  .calvp{overflow:hidden;touch-action:pan-y}
  .caltrack{display:flex;width:300%;transition:transform .26s cubic-bezier(.25,.86,.36,1);will-change:transform}
  .calm{flex:0 0 33.3333%;width:33.3333%;box-sizing:border-box;padding:0 1px}
  .calm .calg{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
  .cd{position:relative;display:flex;flex-direction:column;align-items:center;
    min-height:44px;padding:3px 1px 3px;border-radius:11px;border:1px solid transparent;
    background:transparent;box-sizing:border-box;cursor:pointer}
  .cd .n{font-size:15px;font-weight:600;line-height:1.1;color:var(--fg);font-variant-numeric:tabular-nums}
  .cd .s{font-size:9.5px;line-height:1.25;margin-top:2px;color:var(--dim);white-space:nowrap;max-width:100%;overflow:hidden}
  .cd .s.f{color:var(--accent);font-weight:600}
  .cd .s.j{color:var(--accent2)}
  .cd .dot{width:3.6px;height:3.6px;border-radius:50%;margin-top:3px;background:rgba(0,0,0,0)}
  .cd .dot.g{background:#3fbf94}
  .cd .dot.x{background:#e5626a;opacity:.9}
  .cd .of{position:absolute;right:0;top:2px;font-size:8px;line-height:1;padding:1px 1px;
    border-radius:5px;background:var(--accent);color:var(--btn-fg);font-weight:700}
  .cd .of.b{background:var(--warn);color:#241a04}
  @media (max-width:359px){ .cd .n{font-size:12px} .cd .of{font-size:7px} }
  .cd.wk .n{color:var(--up);opacity:.9}
  .cd.odd{opacity:.32}
  .cd.odd .dot{display:none}
  .cd.tod .n{color:var(--accent)}
  .cd.tod{border-color:rgba(78,201,160,.55)}
  .cd.sel{background:var(--tile-on);border-color:var(--accent);
    box-shadow:0 0 0 1px rgba(78,201,160,.18) inset}
  .cd.sel .n{color:var(--accent)}
  .caldet{position:relative;margin-top:11px;padding:12px 13px 11px;border-radius:15px;
    background:var(--tile);border:1px solid var(--glass-brd)}
  .caldl{position:absolute;right:10px;top:10px;width:30px;height:30px;border-radius:10px;
    border:1px solid var(--line);background:var(--card2);color:var(--dim);padding:0;
    display:flex;align-items:center;justify-content:center;cursor:pointer}
  .caldl:active{color:var(--accent);border-color:var(--accent)}
  .caldl.busy{opacity:.45;pointer-events:none}

  .caldet .dh{display:flex;align-items:flex-end;gap:9px;flex-wrap:wrap}
  .caldet .dn{font-size:31px;font-weight:700;line-height:.95;font-variant-numeric:tabular-nums}
  .caldet .dw{font-size:12.5px;color:var(--dim);padding-bottom:3px}
  .caldet .dl{font-size:12px;color:var(--dim);margin-top:7px;line-height:1.55}
  .caldet .dl b{color:var(--fg);font-weight:600}
  .caldet .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
  .caldet .chips span{font-size:10.5px;padding:2.5px 8px;border-radius:9px;
    background:var(--card2);color:var(--dim);border:1px solid var(--line);white-space:nowrap}
  .caldet .chips span.g{color:#3fbf94;border-color:rgba(63,191,148,.48);background:rgba(63,191,148,.13)}
  .caldet .chips span.x{color:#e5626a;border-color:rgba(229,98,106,.45);background:rgba(229,98,106,.12)}
  .caldet .chips span.a{color:var(--accent2);border-color:rgba(90,169,230,.42);background:rgba(90,169,230,.12)}
  .cdr{display:flex;gap:9px;margin-top:10px;font-size:12.5px;line-height:1.6}
  .cdr .k{flex:0 0 17px;font-weight:700}
  .cdr.y .k{color:#3fbf94}
  .cdr.n .k{color:#e5626a}
  .cdr .v{color:var(--fg);word-break:break-word;flex:1;min-width:0}
  .cdr .more{flex:0 0 auto;font-size:10.5px;color:var(--accent2);align-self:flex-start;
    padding:1px 4px;cursor:pointer}
  .cdg{display:grid;grid-template-columns:repeat(3,1fr);gap:7px 8px;margin-top:10px;
    padding-top:9px;border-top:1px solid var(--line);font-size:11.5px;line-height:1.45}
  .cdg div{display:flex;gap:6px;min-width:0}
  .cdg i{flex:0 0 auto;color:var(--dim);font-style:normal}
  .cdg b{font-weight:500;color:var(--fg);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .caldet .ld{color:var(--dim);font-size:12px;padding:14px 0;text-align:center}
  .seg{display:flex;gap:6px;margin:2px 0 12px}
  .seg .segbtn{flex:1;padding:7px 0;border-radius:9px;border:1px solid var(--line);background:var(--card2);color:var(--dim);font-size:13px;-webkit-tap-highlight-color:transparent;cursor:pointer}
  .seg .segbtn.on{color:var(--accent);border-color:var(--accent);background:var(--card);font-weight:600}
  .seg .segbtn.icon{flex:0 0 46px;padding:7px 0;font-size:15px;line-height:1}
  @keyframes rotsp{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
  .seg .segbtn.rot{animation:rotsp .8s linear infinite;color:var(--accent);border-color:var(--accent)}
  /* 卡片内左右切换（如两台服务器） */
  .tabs .tabsw{display:flex;gap:4px;background:var(--tile);border:1px solid var(--glass-brd);
    border-radius:12px;padding:3px;margin:0 0 14px}
  .tabs .tabsw button{flex:1;border:0;background:transparent;color:var(--dim);font-size:12.5px;
    padding:9px 0;border-radius:9px;font-family:inherit;letter-spacing:.3px;cursor:pointer;
    -webkit-tap-highlight-color:transparent;transition:background .28s ease,color .28s ease}
  .tabs .tabsw button.on{background:var(--glass-act);color:var(--fg);font-weight:650}
  .tabs .tabpane{animation:tabin .42s cubic-bezier(.3,1.18,.42,1)}
  @keyframes tabin{
    0%{opacity:0;transform:translateY(8px) scale(.988)}
    60%{opacity:1;transform:translateY(-1px) scale(1.0012)}
    100%{opacity:1;transform:none}}
  .tabs .tabsw button{transition:background .28s ease,color .28s ease,transform .18s cubic-bezier(.3,1.4,.4,1)}
  .tabs .tabsw button:active{transform:scale(.955)}
  .trendhd{display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;color:var(--dim);margin:10px 0 2px}
  .trendhd b{color:var(--fg);font-size:14px;font-weight:600}
  .trend svg{display:block;width:100%;height:auto;touch-action:pan-y;contain:paint;will-change:transform}
  #lzs svg{touch-action:none}
  .trend svg text{font-size:10px;fill:var(--dim)}
  .wgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin:10px 0 4px}
  .wcard{display:flex;gap:9px;align-items:center;background:var(--card2);
    border:1px solid var(--line);border-radius:14px;padding:9px 10px;min-height:76px}
  .wcard.tap{cursor:pointer}
  .wcard.tap:active{opacity:.82}
  .wcard .wic{font-size:27px;line-height:1;flex:0 0 auto;width:30px;text-align:center}
  .wcard .wb{min-width:0;flex:1}
  .wcard .wn{display:flex;align-items:baseline;gap:5px;font-size:12px;color:var(--dim)}
  .wcard .wtp{font-size:19px;font-weight:700;color:var(--fg);letter-spacing:-.3px}
  .wcard .wd{font-size:11px;color:var(--fg);opacity:.82;margin-top:2px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .wcard .wd2{font-size:10.5px;color:var(--dim);margin-top:1px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .trend.zoomable svg{cursor:zoom-in}
  .lz{position:fixed;inset:0;z-index:330;display:none;align-items:center;justify-content:center;
    background:rgba(4,8,18,.86);padding:12px}
  .lz.on{display:flex}
  .lzbox{width:100%;max-width:1040px;background:var(--card);border:1px solid var(--line);
    border-radius:16px;padding:10px 12px 6px;box-shadow:0 24px 60px rgba(0,0,0,.5)}
  [data-theme="light"] .lz{background:rgba(230,234,245,.86)}
  .lzhd{display:flex;justify-content:space-between;align-items:center;gap:10px;
    font-size:13px;font-weight:600;color:var(--fg);margin-bottom:4px}
  .lzhd button{background:var(--card2);border:1px solid var(--line);color:var(--dim);
    border-radius:9px;padding:3px 10px;font-size:14px;cursor:pointer}
  .lzstage{overflow:hidden;touch-action:none;position:relative}
  .lzstage svg text{font-size:11.5px}
  .lzstage svg{display:block;width:100%;height:auto;transform-origin:center center;
    will-change:transform;transition:none}
  .list{margin:2px 0 10px;padding-left:18px;font-size:13.5px}
  .list li{margin-bottom:4px}
  a{color:var(--accent2)}
  .big{font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
  .up{color:var(--up)}.down{color:var(--down)}.flat{color:var(--dim)}
  .act{background:var(--card2);border:1px solid var(--line);color:var(--fg);
    border-radius:11px;padding:9px 14px;font-size:13.5px;cursor:pointer;
    font-family:inherit;margin:2px 0 10px;display:inline-block}
  .act:active{border-color:var(--accent);color:var(--accent)}
  .searchbar{display:flex;gap:8px;align-items:center;margin:2px 0 10px}
  .sbtn{background:var(--card2);border:1px solid var(--line);color:var(--fg);
    border-radius:11px;padding:8px 13px;font-size:13px;cursor:pointer;
    font-family:inherit;white-space:nowrap;flex:none}
  .sbtn:active{border-color:var(--accent);color:var(--accent)}
  .sfav{margin-left:auto}
  .sinput{flex:1;display:none;min-width:0;background:var(--card);border:1px solid var(--line);
    color:var(--fg);border-radius:11px;padding:9px 12px;font-size:14px;outline:none;font-family:inherit}
  .sinput:focus{border-color:var(--accent)}
  .searchbar.open .sinput{display:block}
  .spin{display:inline-block;width:14px;height:14px;border:2px solid var(--line);
    border-top-color:var(--accent);border-radius:50%;animation:sp .7s linear infinite;vertical-align:-2px}
  @keyframes sp{to{transform:rotate(360deg)}}
  .err-box{border:1px solid var(--err-bd);background:var(--err-bg);color:var(--err);border-radius:12px;
    padding:10px 12px;font-size:12.5px;white-space:pre-wrap;word-break:break-word}
  /* 大立绘 */
  .photo{margin:12px 0;border-radius:14px;overflow:hidden;border:1px solid var(--line);
    background:radial-gradient(120% 90% at 50% 0%, #1b2338 0%, #121728 70%)}
  .photo img{display:block;width:100%;height:auto;will-change:transform}
  .ritem.tap{cursor:zoom-in}
  .photo .pcap{font-size:11.5px;color:var(--dim);padding:8px 12px;border-top:1px solid var(--line)}
  /* 图片放大查看 */
  #res img{cursor:zoom-in}
  .lb{position:fixed;inset:0;background:rgba(4,6,12,.95);z-index:200;display:none;
    flex-direction:column;align-items:center;justify-content:center;touch-action:none;
    overscroll-behavior:contain}
  .lb.on{display:flex}
  #lbimg{will-change:transform;
    transform-origin:center center;user-select:none;-webkit-user-drag:none;
    -webkit-touch-callout:none;transition:transform .06s linear}
  .lbtop{position:absolute;top:calc(10px + var(--sat, env(safe-area-inset-top, 0px)));right:12px;
    display:flex;gap:8px;z-index:3}
  .lbbtn{background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.2);color:#eef2ff;
    border-radius:12px;padding:9px 15px;font-size:13.5px;font-family:inherit;cursor:pointer}
  .lbbtn:active{opacity:.7}
  .lbarr{position:absolute;top:50%;transform:translateY(-50%);width:42px;height:70px;
    display:flex;align-items:center;justify-content:center;font-size:30px;line-height:1;
    color:#fff;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.16);
    border-radius:14px;user-select:none;-webkit-tap-highlight-color:transparent}
  .lbarr:active{background:rgba(255,255,255,.22)}
  .lbarr.l{left:8px} .lbarr.r{right:8px}
  .lbarr.off{display:none}
  .lbwrap{flex:1 1 auto;width:100%;height:100%;position:relative;overflow:hidden}
  #lbimg,#lbimg2{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:contain}
  #lbimg2{display:none}
  @keyframes lbSlideR{from{transform:translateX(92px) scale(.94);opacity:.10}to{transform:none;opacity:1}}
  @keyframes lbSlideL{from{transform:translateX(-92px) scale(.94);opacity:.10}to{transform:none;opacity:1}}
  .lbwrap.sr{animation:lbSlideR .50s cubic-bezier(.25,.55,.35,1)}
  .lbwrap.sl{animation:lbSlideL .50s cubic-bezier(.25,.55,.35,1)}
  .lbcount{position:absolute;top:calc(14px + var(--sat, env(safe-area-inset-top, 0px)));left:50%;transform:translateX(-50%);
    font-size:12.5px;color:#cfd8ff;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.14);
    padding:3px 10px;border-radius:999px;display:none}
  .lbcount.on{display:block}
  .lbname{position:absolute;bottom:calc(48px + var(--sab, env(safe-area-inset-bottom, 0px)));max-width:86vw;
    color:#e8eeff;font-size:14px;opacity:.85;text-align:center}
  .lbhint{position:absolute;bottom:calc(20px + var(--sab, env(safe-area-inset-bottom, 0px)));
    color:rgba(232,238,255,.42);font-size:11.5px;letter-spacing:.3px}
  .login{position:fixed;inset:0;background:var(--bg-grad);display:none;align-items:center;
    justify-content:center;z-index:90;padding:24px}
  .login.on{display:flex}
  .login-box{width:100%;max-width:300px;text-align:center}
  .login-box .ico{font-size:38px;margin-bottom:10px}
  .login-box h2{font-size:17px;margin:0 0 20px;font-weight:600;letter-spacing:.5px}
  .login-box input{width:100%;background:var(--card);border:1px solid var(--line);color:var(--fg);
    border-radius:12px;padding:13px 14px;font-size:16px;text-align:center;outline:none;
    font-family:inherit;letter-spacing:1px}
  .login-box input:focus{border-color:var(--accent)}
  .login-box button{width:100%;margin-top:12px;background:var(--accent);color:var(--btn-fg);
    border:0;border-radius:12px;padding:13px;font-size:15px;font-weight:650;
    cursor:pointer;font-family:inherit}
  .login-box button:disabled{opacity:.6}
  .login-err{color:var(--err);font-size:12.5px;margin-top:10px;min-height:18px}
  /* 走势图 */
  .chart{margin:6px 0 12px;background:var(--card2);border:1px solid var(--line);
    border-radius:14px;padding:8px 8px 2px}
  .chart .ctabs{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:0 0 4px 2px}
  .chart .ctab{font-size:12px;padding:4px 11px;border-radius:9px;border:1px solid var(--line);
    background:transparent;color:var(--dim);cursor:pointer;font-family:inherit;line-height:1.3}
  .chart .ctab.on{color:var(--accent);border-color:var(--accent);background:var(--card)}
  .chart .cinfo{margin-left:auto;font-size:12.5px;color:var(--fg);
    font-variant-numeric:tabular-nums;padding-right:2px}
  .chart .cinfo i{font-style:normal}
  .chart svg{display:block;width:100%;height:auto;touch-action:pan-y;contain:paint;will-change:transform}
  .chart svg text{font-size:10px;fill:var(--dim);font-variant-numeric:tabular-nums}
  tr.tap{cursor:pointer}
  tr.tap:active{background:var(--card2)}

  /* ---------- 分类成块 + 卡片/面板里的次级玻璃 ---------- */
  .group{margin-bottom:16px;padding:12px 12px 12px;border-radius:22px;
    background:var(--panel);border:1px solid var(--glass-brd);
    -webkit-backdrop-filter:blur(26px) saturate(165%);
    backdrop-filter:blur(26px) saturate(165%);
    box-shadow:inset 0 1px 0 var(--glass-hi),var(--glass-sh)}
  .group>h2{font-size:13px;font-weight:650;color:var(--fg);letter-spacing:.6px;
    margin:0 2px 12px;padding:2px 0 9px;border-bottom:1px solid var(--line)}
  .group>h2::after{display:none}
  .group>.grid{gap:9px}
  .sec-ph{border-radius:22px;margin-bottom:16px}
  .group.sec-dragging{border-radius:22px}
  body.sorting .group>h2{padding-bottom:9px}
  /* 面板里的次级块：表格 / 键值 / 图表 / 列表都做成小玻璃块 */
  .sheet table{background:var(--tile);border:1px solid var(--glass-brd);border-radius:14px;
    padding:4px 8px}
  .sheet th,.sheet td{border-bottom-color:rgba(255,255,255,.07)}
  html[data-theme="light"] .sheet th,html[data-theme="light"] .sheet td{border-bottom-color:rgba(20,30,50,.08)}
  .sheet .kv{background:var(--tile);border:1px solid var(--glass-brd);border-radius:14px;
    padding:11px 13px}
  .sheet .chart{background:var(--tile);border-color:var(--glass-brd)}
  .sheet .ritem,.sheet .acell,.sheet .hcell,.sheet .act,.sheet .sbtn,.sheet .sinput,
  .sheet .pre,.sheet .field input,.sheet .field select,.sheet .cols,
  .sheet .seg .segbtn,.sheet .searchbar{background:var(--tile);border-color:var(--glass-brd)}
  .sheet .field input,.sheet .field select{background:var(--tile)}
  .sheet .seg .segbtn.on{background:var(--tile-on)}
  .sheet .photo{border-color:var(--glass-brd)}
  .sheet .rc,.sheet .ritem{border-bottom-color:rgba(255,255,255,.07)}
  .sheet .cols{padding:10px 8px 4px;border-radius:14px}
  .sheet .trend,.sheet .trend svg{background:transparent}
  /* ---------- 玻璃质感 ---------- */
  body::after{content:"";position:fixed;top:0;left:0;right:0;bottom:0;z-index:-1;pointer-events:none;
    background:
      radial-gradient(620px 420px at 84% 74%, rgba(70,200,170,.26), transparent 70%),
      radial-gradient(560px 380px at 6% 96%, rgba(126,108,236,.26), transparent 70%),
      radial-gradient(520px 340px at 50% 44%, rgba(90,169,230,.14), transparent 72%)}
  .card{background:var(--card-glass);background-image:none;
    -webkit-backdrop-filter:none;backdrop-filter:none;
    border-color:var(--glass-brd);
    box-shadow:inset 0 1px 0 var(--glass-hi),0 6px 16px -12px rgba(0,0,0,.5)}
  .card:active{background:var(--glass-act);background-image:var(--sheen)}
  header{box-shadow:inset 0 -1px 0 var(--glass-brd),0 8px 26px -22px #000}
  header button{background:var(--glass-btn);border-color:var(--glass-brd);
    -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
  .mv button,.gmv button{background:var(--glass-btn);border-color:var(--glass-brd)}
  .sheet{background:var(--glass-sheet);border-color:var(--glass-brd);
    box-shadow:inset 0 1px 0 var(--glass-hi),0 -14px 44px -22px #000}
  .mask{background:var(--mask-bg)}
  .card.card-ph{background:transparent;background-image:none;
    -webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none}
  .card.dragging{background:var(--glass-act);background-image:var(--sheen)}
  .login-box{background:var(--glass);border-color:var(--glass-brd);border-radius:18px;padding:22px 18px;
    -webkit-backdrop-filter:blur(20px) saturate(150%);
    backdrop-filter:blur(20px) saturate(150%);
    box-shadow:inset 0 1px 0 var(--glass-hi),var(--glass-sh)}
  /* ---------- 首页环境面板（温湿度计） ---------- */
  .env{position:relative;overflow:hidden;margin:0 0 16px;padding:13px 14px 13px;
    border-radius:20px;border:1px solid var(--glass-brd);background:var(--glass);
    -webkit-backdrop-filter:blur(24px) saturate(150%);backdrop-filter:blur(24px) saturate(150%);
    box-shadow:var(--glass-sh)}
  .env::after{content:"";position:absolute;inset:0;border-radius:20px;background:var(--sheen);
    pointer-events:none}
  .env .hd{display:flex;align-items:center;gap:8px;margin:0 0 10px;position:relative;z-index:1}
  .env .hd .tt{font-size:13px;font-weight:650;letter-spacing:.6px}
  .env .hd .tt::before{content:"";display:inline-block;width:3px;height:12px;border-radius:2px;
    background:var(--accent);margin-right:7px;vertical-align:-1px}
  .env .hd .rt{margin-left:auto;font-size:11.5px;color:var(--dim)}
  .env .row{display:flex;gap:10px;position:relative;z-index:1}
  .env .cell{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:6px;
    padding:10px 0 9px;border-radius:16px;background:var(--panel);border:1px solid var(--glass-brd)}
  .env .ring{position:relative;width:102px;height:102px;flex:0 0 auto}
  .env .ring svg{display:block;width:100%;height:100%;transform:rotate(-90deg)}
  .env .ring .trk{stroke:var(--line)}
  .env .ring .val{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;
    justify-content:center;pointer-events:none}
  .env .ring .n{font-size:26px;font-weight:600;line-height:1;letter-spacing:-.6px;
    font-variant-numeric:tabular-nums}
  .env .ring .u{font-size:11px;color:var(--dim);margin-top:4px;letter-spacing:.5px}
  .env .cell .lb{font-size:12px;color:var(--dim);letter-spacing:2px}
  .env .ft{position:relative;z-index:1;margin-top:10px;font-size:11.5px;color:var(--dim);
    display:flex;align-items:center;gap:7px;flex-wrap:wrap}
  .env .ft .warn{color:var(--warn)}
  .env .ft .sep{opacity:.5}
  .env.miss{padding:14px 16px;font-size:12.5px;color:var(--dim)}
  .env .ph{width:102px;height:102px;border-radius:50%;background:var(--tile)}
  .env .bar{display:block;height:11px;border-radius:6px;background:var(--tile)}
  .env .bar.s{width:64px;height:9px;margin-top:2px}
  /* 环境面板：曲线区 */
  .env .skchart{height:104px;border-radius:12px;background:var(--tile);margin-top:12px}
  .env .cht{position:relative;z-index:1;margin-top:12px;padding-top:10px;border-top:1px solid var(--glass-brd)}
  .env .chhd{display:flex;align-items:center;gap:11px;flex-wrap:wrap;margin-bottom:4px}
  .env .lg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--dim)}
  .env .lg i{width:8px;height:8px;border-radius:50%;display:inline-block}
  .env .seg{margin-left:auto;display:inline-flex;background:var(--tile);border-radius:9px;padding:2px;gap:2px}
  .env .seg button{border:0;background:transparent;color:var(--dim);font-size:11.5px;padding:4px 9px;
    border-radius:7px;font-family:inherit;letter-spacing:.3px}
  .env .seg button.on{background:var(--glass-act);color:var(--fg);font-weight:600}
  /* 浅色主题下 --glass-act 与 --tile 太接近，选中态几乎看不出来：胶囊统一改成白底+主色字+描边 */
  html[data-theme="light"] .env .seg button.on,
  html[data-theme="light"] .env .hd .tabsw button.on,
  html[data-theme="light"] .tabs .tabsw button.on,
  html[data-theme="light"] .spdseg button.on{
    background:var(--card);color:var(--accent);
    box-shadow:inset 0 0 0 1px rgba(13,155,115,.30),0 1px 5px rgba(30,45,80,.12)}
  .env .cbody{margin:2px -3px 0;border-radius:12px}
  .env .cbody svg{display:block;width:100%;height:auto;animation:envfade .45s ease}
  @keyframes envfade{from{opacity:0}to{opacity:1}}
  .env .cbody.tap{cursor:zoom-in}
  .env .cempty{font-size:12px;color:var(--dim);padding:26px 0 20px;text-align:center}
  .envz{position:fixed;top:0;left:0;right:0;bottom:0;z-index:9000;background:rgba(6,10,22,.88);
    display:none;align-items:center;justify-content:center;padding:14px}
  .envz.on{display:flex}
  .envz .zbox{width:100%;max-width:840px;background:var(--glass-sheet);border:1px solid var(--glass-brd);
    border-radius:18px;padding:14px 12px 8px;box-shadow:var(--glass-sh)}
  .envz .zhd{display:flex;align-items:center;gap:8px;margin:0 4px 6px;font-size:13px;font-weight:650}
  .envz .zhd span{margin-left:auto;color:var(--dim);font-size:11.5px;font-weight:400}
  .envz svg{display:block;width:100%;height:auto}
  .env .cvw{margin-top:9px}
  .env .cvw .cvh{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--fg);
    opacity:.92;margin:0 0 -1px 2px}
  .env .cvw .cvh .lg{color:var(--fg);opacity:.86}
  .env .cvw .cvh b{margin-left:auto;font-weight:500;color:var(--dim);font-size:11px;letter-spacing:.2px}
  .envz .cvw{margin-top:6px}
  .envz .cvw .cvh{display:flex;align-items:center;gap:7px;font-size:12.5px;margin:0 0 2px 4px}
  .envz .cvw .cvh b{margin-left:auto;font-weight:500;color:var(--dim);font-size:11.5px}
  .envz .cvw .cvh i{width:8px;height:8px;border-radius:50%;display:inline-block}
  /* 主机插座面板 */
  .env .pwr{display:flex;align-items:flex-end;gap:12px;position:relative;z-index:1;margin:3px 0 1px 2px}
  .env .pwr .pwv{display:flex;align-items:baseline}
  .env .pwr .big{font-size:33px;font-weight:600;line-height:1;letter-spacing:-1px;
    font-variant-numeric:tabular-nums}
  .env .pwr .unit{font-size:13px;color:var(--dim);margin-left:4px}
  .env .pwr .stats{margin-left:auto;text-align:right;font-size:11.5px;color:var(--dim);line-height:1.8}
  .env .pwr .stats b{color:var(--fg);font-weight:600;font-size:12.5px}
  /* 卡片右上角的两个 tab */
  .env .hd .tabsw{margin-left:auto;display:inline-flex;background:var(--tile);border-radius:9px;
    padding:2px;gap:2px}
  .env .hd .tabsw button{border:0;background:transparent;color:var(--dim);font-size:11.5px;
    padding:3px 10px;border-radius:7px;font-family:inherit;letter-spacing:.3px}
  .env .hd .tabsw button.on{background:var(--glass-act);color:var(--fg);font-weight:600}

/* ---------- 测速 ---------- */
.spd{display:flex;flex-direction:column;align-items:center;gap:10px;padding:6px 6px 8px}
.spdg{width:100%;max-width:290px;display:block;overflow:visible}
.spdg .tick{fill:var(--dim);font-size:9.5px}
.spdg .val{fill:var(--fg);font-size:31px;font-weight:700;letter-spacing:-.5px;
  font-variant-numeric:tabular-nums}
.spdg .unit{fill:var(--dim);font-size:10.5px;letter-spacing:1.2px}
.spdseg{display:flex;gap:4px;background:var(--tile);border:1px solid var(--glass-brd);
  border-radius:11px;padding:3px;margin:4px auto 10px;width:200px}
.spdseg button{flex:1;border:0;background:transparent;color:var(--dim);font-size:12.5px;
  padding:7px 0;border-radius:8px;font-family:inherit;letter-spacing:.3px;cursor:pointer;
  -webkit-tap-highlight-color:transparent;transition:background .25s ease,color .25s ease}
.spdseg button.on{background:var(--glass-act);color:var(--fg);font-weight:650}
.spdtab{width:100%;margin:0 0 10px}
.spdtab table{display:table;width:100%;table-layout:fixed;white-space:normal;
  margin:0;border-radius:12px;overflow:hidden}
.spdtab th:nth-child(1),.spdtab td:nth-child(1){width:25%}
.spdtab th:nth-child(2),.spdtab td:nth-child(2){width:33%}
.spdtab th:nth-child(3),.spdtab td:nth-child(3){width:42%}
.spdtab td{font-size:12px}
.spdtab th,.spdtab td{padding-left:6px;padding-right:6px}
.spdtab td b{font-weight:650;color:var(--fg);font-size:12.5px}
.spdtab tbody td{line-height:1.35;font-size:11.5px}
.spdtab tbody td b{font-size:12.5px}
.spdtab td.ok{color:#3fb98f;font-weight:650}
.spdsub{font-size:12px;color:var(--dim);text-align:center;line-height:1.55;padding:0 6px}
.spdgo{border:0;border-radius:12px;padding:11px 26px;font-size:14px;font-weight:650;font-family:inherit;
  color:#fff;background:linear-gradient(135deg,#4f7cff,#3fb98f);cursor:pointer;-webkit-tap-highlight-color:transparent}
.spdgo:disabled{opacity:.6}

/* ---------- 视频 ---------- */
.lvwrap{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.lvcell{background:var(--card2);border:1px solid var(--line);border-radius:12px;padding:9px 11px;
  cursor:pointer;min-width:0;
  transition:border-color .18s ease,transform .18s ease}
.lvcell:active{border-color:var(--accent);transform:scale(.97)}
.lvnm{font-size:14px;font-weight:650;color:var(--fg);letter-spacing:.2px}
.lvpg{margin-top:3px;font-size:11.5px;color:var(--fg);opacity:.7;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.lvbar{display:flex;gap:10px;margin:12px 2px 0}
.lvbar .act{flex:1;text-align:center;padding:11px 0;font-size:13.5px}
.lvnow{margin-left:8px;font-size:12px;font-weight:400;opacity:.72}
/* 分类加载条：挂在冻结的卡片头部下沿，滚动时始终可见 */
#sheet.catbusy .sheethd::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2.5px;z-index:40;
  background:linear-gradient(90deg,transparent,var(--accent2),var(--accent),transparent);
  background-size:45% 100%;background-repeat:no-repeat;
  animation:catbar .85s linear infinite}
@keyframes catbar{0%{background-position:-50% 0}100%{background-position:150% 0}}
@keyframes catFade{
  0%{opacity:0;transform:translateY(10px) scale(.982)}
  60%{opacity:1;transform:translateY(-1.4px) scale(1.0018)}
  80%{transform:translateY(.6px) scale(.9997)}
  100%{opacity:1;transform:none}}
@keyframes catInL{from{opacity:.3;transform:translateX(30px)}to{opacity:1;transform:none}}
@keyframes catInR{from{opacity:.3;transform:translateX(-30px)}to{opacity:1;transform:none}}
.tvlist{display:flex;flex-direction:column}
.vitem{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid rgba(255,255,255,.07);cursor:pointer;align-items:center}
.vitem:last-child{border-bottom:0}
.vthumb{width:96px;height:54px;border-radius:8px;object-fit:cover;flex:none;background:rgba(255,255,255,.06)}
.vph{width:96px;height:54px;border-radius:8px;flex:none;display:flex;align-items:center;justify-content:center;font-size:20px;background:rgba(255,255,255,.06)}
.vmeta{flex:1;min-width:0}
.vt{font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.vs{font-size:11.5px;color:var(--dim);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vtag{color:#ff6b6b;font-weight:600}
/* 短剧集网格：一集一个小方块 + 顶部档位切换 */
.djgrid{margin:8px 0 2px}
.djpg{display:flex;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;
  padding:3px;background:var(--tile);border:1px solid var(--glass-brd);border-radius:12px;
  scrollbar-width:none;margin:0 0 12px}
.djpg::-webkit-scrollbar{display:none}
.djpgw{display:flex;gap:6px;margin:0 auto;flex:0 0 auto}
.djpgw button{flex:0 0 auto;border:0;background:transparent;color:var(--dim);font-size:12.5px;
  padding:8px 13px;border-radius:9px;font-family:inherit;letter-spacing:.3px;cursor:pointer;
  white-space:nowrap;transition:background .26s ease,color .26s ease,transform .18s cubic-bezier(.3,1.4,.4,1)}
.djpgw button.on{background:var(--glass-act);color:var(--fg);font-weight:650}
.djpgw button:active{transform:scale(.955)}
.djgp{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;
  animation:djgin .44s cubic-bezier(.3,1.18,.42,1)}
@keyframes djgin{
  0%{opacity:0;transform:translateY(9px) scale(.986)}
  62%{opacity:1;transform:translateY(-1px) scale(1.001)}
  100%{opacity:1;transform:none}}
.djgc{position:relative;aspect-ratio:1/1;border-radius:11px;overflow:hidden;cursor:pointer;
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.13);
  display:flex;align-items:center;justify-content:center;
  transition:transform .16s cubic-bezier(.3,1.4,.4,1),background .2s ease}
.djgc:active{transform:scale(.93);background:var(--glass-act)}
.djgc i{font-style:normal;font-size:14px;font-weight:650;color:var(--fg);letter-spacing:-.2px}
html[data-theme="light"] .djgc{background:#f4f1fd;border-color:rgba(110,92,220,.18)}
html[data-theme="light"] .djgc i{color:#3a3357}


.tvwrap{display:flex;flex-direction:column;min-height:68vh}
.tvframe{position:relative;width:100%;aspect-ratio:16/9;background:#000;border-radius:14px;overflow:hidden;flex:none;
  box-shadow:0 10px 28px rgba(0,0,0,.30)}
.tvframe video{width:100%;height:100%;object-fit:contain;display:block;background:#000;touch-action:none}
.tvframe:fullscreen{aspect-ratio:auto;width:100%;height:100%;border-radius:0}
.tvframe.tvfs{position:fixed;left:0;top:0;width:100vw;height:100vh;z-index:9999;border-radius:0;
  aspect-ratio:auto;box-shadow:none}
.tvframe.tvanim{box-shadow:none!important;contain:layout paint;transform:translateZ(0);backface-visibility:hidden}
.tvframe.tvanim *{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
.tvin{position:absolute;inset:0;background:#000;touch-action:none;
  -webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.tvin.rot{left:50%;top:50%;right:auto;bottom:auto;width:100vh;height:100vw;
  transform:translate(-50%,-50%) rotate(90deg)}
body.tvfs-on{overflow:hidden}
/* ---------- 播放器悬浮控件 ---------- */
.tvui{position:absolute;inset:0;z-index:5;pointer-events:none;opacity:1;transition:opacity .26s ease}
.tvui.hide{opacity:0}
.tvui.hide .tvic,.tvui.hide .tvbig,.tvui.hide .tvibtn,.tvui.hide .tvctl,
.tvui.hide .tvqmenu,.tvui.hide .tvspdmenu,.tvui.hide .tvplay,
.tvui.hide .tvchbtn,.tvui.hide .tvsrcbtn{pointer-events:none!important}
.tvui .tvic,.tvui .tvmbtn,.tvui .tvplay,.tvui .tvibtn,.tvui .tvctl,
.tvui .tvqmenu,.tvui .tvspdmenu,.tvui .tvchbtn,.tvui .tvsrcbtn{pointer-events:auto}
.tvtop{position:absolute;left:0;right:0;top:0;display:flex;align-items:center;gap:12px;
  padding:13px 20px 26px;background:linear-gradient(to bottom,rgba(0,0,0,.72),rgba(0,0,0,0))}
.tvic{width:40px;height:40px;border-radius:50%;background:rgba(16,20,28,.52);flex:none;
  display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent;
  box-shadow:0 4px 14px rgba(0,0,0,.35),inset 0 0 0 1px rgba(255,255,255,.14)}
.tvic svg{fill:#fff;width:21px;height:21px}
.tstar{width:36px;height:36px;margin-left:2px}
.tstar svg{width:19px;height:19px}
.tvtl{flex:1;min-width:0;font-size:13px;font-weight:600;color:#fff;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 4px rgba(0,0,0,.75)}
.tvmids{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:flex;
  align-items:center;gap:24px}
.tvmbtn{width:46px;height:46px;display:flex;align-items:center;justify-content:center;
  -webkit-tap-highlight-color:transparent}
.tvmbtn svg{fill:#fff;filter:drop-shadow(0 1px 3px rgba(0,0,0,.7))}
.tvplay{width:78px;height:78px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 50% 38%,rgba(255,255,255,.22),rgba(0,0,0,.52) 72%);
  box-shadow:0 8px 26px rgba(0,0,0,.5),inset 0 0 0 1px rgba(255,255,255,.22);
  transition:opacity .18s ease,transform .16s ease;-webkit-tap-highlight-color:transparent}
.tvplay:active{transform:scale(.94)}
.tvplay svg{fill:#fff;width:38px;height:38px;margin-left:3px;
  filter:drop-shadow(0 2px 6px rgba(0,0,0,.45))}
.tvplay.hide{opacity:0;pointer-events:none}
.tvside{position:absolute;right:22px;top:50%;transform:translateY(-50%);display:none;
  flex-direction:column;gap:16px;align-items:center}
.tvin.isfs .tvside{display:flex}
.tvin:not(.isfs) .tvunlock{display:none}
.tvibtn{width:48px;height:48px;border-radius:50%;background:rgba(16,20,28,.52);color:#fff;
  font-size:11.5px;font-weight:600;display:flex;align-items:center;justify-content:center;
  -webkit-tap-highlight-color:transparent;
  box-shadow:0 4px 14px rgba(0,0,0,.35),inset 0 0 0 1px rgba(255,255,255,.14)}
.tvibtn:active{background:rgba(60,90,160,.6)}
.tvibtn svg{fill:#fff;width:21px;height:21px}
.tvsrcbtn{display:none;width:48px;height:48px;border-radius:50%;background:rgba(16,20,28,.52);
  color:#fff;border:1px solid rgba(255,255,255,.10);align-items:center;justify-content:center;
  transition:background .16s ease,transform .16s ease}
.tvsrcbtn:active{background:rgba(60,90,160,.6);transform:scale(.94)}
.tvsrcbtn svg{fill:#fff;width:21px;height:21px}
.tvsrcbtn.on{display:flex}
.tvshotbtn{margin-left:7px}
#tvdlbtn svg{fill:#fff}
.tvic.rec{background:rgba(219,63,74,.88)!important}
.tvic.rec svg{fill:#fff}
.tvtoast{position:absolute;left:50%;top:14%;transform:translate(-50%,-6px);z-index:14;
  background:rgba(10,14,22,.84);color:#fff;font-size:12.5px;line-height:1.3;padding:8px 15px;
  border-radius:20px;opacity:0;pointer-events:none;white-space:nowrap;
  transition:opacity .2s ease,transform .2s ease}
.tvtoast.on{opacity:1;transform:translate(-50%,0)}
.tvchbtn{position:absolute;right:20px;bottom:20px;z-index:7;width:52px;height:52px;border-radius:50%;
  background:rgba(16,20,28,.72);display:none;align-items:center;justify-content:center;color:#fff;
  border:1px solid rgba(255,255,255,.16);
  transition:background .16s ease,transform .16s ease}
.tvchbtn:active{background:rgba(60,90,160,.65);transform:scale(.94)}
.tvchbtn svg{fill:#fff;width:23px;height:23px}
.tvframe.tvfs .tvchbtn,.tvframe:fullscreen .tvchbtn{display:flex}
.tvchpanel{position:absolute;left:0;right:0;bottom:0;z-index:8;max-height:72%;display:none;
  flex-direction:column;background:var(--tvpnl);border-top:1px solid var(--tvbrd);
  transform:translateY(100%);opacity:0;transition:transform .3s ease,opacity .3s ease}
.tvchpanel.on{display:flex;transform:translateY(0);opacity:1}
.tvchhd{display:flex;align-items:center;justify-content:space-between;
  padding:11px 15px 7px;color:var(--tvtx);font-size:13px;font-weight:600}
.tvchhd span{font-weight:400;opacity:.6;font-size:11.5px}
.tvchbody{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:44px;gap:7px;
  overflow-y:auto;overscroll-behavior:contain;flex:1 1 auto;min-height:0;align-content:start;
  padding:4px 12px 16px;-webkit-overflow-scrolling:touch}
.tvchcell{display:flex;align-items:center;justify-content:center;text-align:center;
  padding:0 8px;border-radius:10px;
  background:var(--tvcell);border:1px solid transparent;color:var(--tvtx);font-size:13px;
  line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  transition:background .15s ease}
.tvchcell:active{background:rgba(255,255,255,.16)}
.tvchcell.on{background:var(--tvcell-on);border-color:var(--tvbrd-on);font-weight:650}
.tvqmenu{position:absolute;right:12px;bottom:62px;z-index:7;display:none;padding:5px;gap:4px;
  flex-wrap:wrap;max-width:216px;border-radius:12px;background:rgba(16,20,30,.95);
  border:1px solid rgba(255,255,255,.16);box-shadow:0 10px 26px rgba(0,0,0,.55)}
.tvqmenu.on{display:flex}
.tvqmenu .tvspditem{min-width:54px}
.tvseek{position:absolute;left:50%;top:22%;transform:translateX(-50%);z-index:9;display:none;
  min-width:150px;padding:11px 18px;border-radius:14px;background:rgba(10,14,22,.88);
  color:#fff;text-align:center;pointer-events:none}
.tvseek.on{display:block}
.tvseek .sk{font-size:14px;font-weight:700;letter-spacing:.3px}
.tvseek .tm{font-size:12.5px;opacity:.82;margin-top:4px;font-variant-numeric:tabular-nums}
.tvunlock{position:absolute;right:12px;top:50%;transform:translateY(-50%);z-index:9;
  width:40px;height:40px;border-radius:50%;background:rgba(0,0,0,.42);display:flex;
  align-items:center;justify-content:center;opacity:.62}
.tvunlock.hide{display:none}
.tvunlock svg{fill:#fff}
/* 卡片小窗里：控件收一点，别压画面 */
.tvframe:not(.tvfs) .tvtop{padding:9px 12px 20px}
.tvframe:not(.tvfs) .tvic{width:34px;height:34px}
.tvframe:not(.tvfs) .tvic svg{width:18px;height:18px}
.tvframe:not(.tvfs) .tvplay{width:44px;height:44px}
.tvframe:not(.tvfs) .tvplay svg{width:21px;height:21px;margin-left:2px}
/* ---------- 播放器悬浮控件 end ---------- */

/* 亮度遮罩（浏览器里只能变暗） / 调节指示 */
.tvdim{position:absolute;inset:0;background:#000;opacity:0;pointer-events:none;z-index:2;
  transition:opacity .12s linear}
.tvg{position:absolute;top:8%;z-index:8;display:none;
  flex-direction:column;align-items:center;gap:10px;padding:4px;pointer-events:none}
.tvg.on{display:flex}
.tvg.br{left:9%}
.tvg.vol{right:9%}
.tvg .lb{font-size:14px;font-weight:700;color:#fff;white-space:nowrap;
  text-shadow:0 1px 5px rgba(0,0,0,.95),0 0 3px rgba(0,0,0,1)}
.tvg .tr{position:relative;width:14px;height:min(40vh,300px);border-radius:7px;
  background:rgba(0,0,0,.42);overflow:hidden;
  box-shadow:0 0 0 1.5px rgba(255,255,255,.45),0 2px 12px rgba(0,0,0,.6)}
.tvg .tr i{position:absolute;left:0;bottom:0;width:100%;height:0;background:#fff;
  border-radius:6px;transition:height .06s linear}
.tvctl{position:absolute;left:0;right:0;bottom:0;z-index:5;padding:22px 16px 10px;
  background:linear-gradient(to top,rgba(0,0,0,.85),rgba(0,0,0,.4) 58%,rgba(0,0,0,0));
  transition:opacity .3s ease;opacity:1;
  user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}
.tvctl.hide{opacity:0;pointer-events:none}
.tvbar{position:relative;height:20px;display:flex;align-items:center;cursor:pointer;touch-action:none}
.tvrail{position:absolute;left:0;right:0;height:5px;border-radius:3px;background:rgba(255,255,255,.26)}
.tvbuf{position:absolute;left:0;height:5px;border-radius:3px;width:0;background:rgba(255,255,255,.45)}
.tvfill{position:absolute;left:0;height:5px;border-radius:3px;width:0;
  background:linear-gradient(90deg,#a98cff,#c9b4ff)}
.tvknob{position:absolute;left:0;width:13px;height:13px;border-radius:50%;margin-left:-6.5px;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,#d9c9ff,#b193ff);
  box-shadow:0 1px 5px rgba(0,0,0,.45),inset 0 0 0 1px rgba(255,255,255,.6)}
.tvknob svg{display:block;width:8px;height:8px;fill:#2b2145}
.tvbtm{display:flex;align-items:center;gap:11px;margin-top:0;color:#fff}
.tvbtn{font-size:13px;font-weight:600;line-height:1;padding:5px 3px;min-width:20px;text-align:center;
  cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent}
.tvbtn:active{opacity:.6}
.tvbtn svg{display:block;margin:0 auto;fill:#fff}
#tvfsbtn{padding:5px 6px;min-width:36px}
#tvfsbtn svg{width:28px;height:28px}
#tvpp{padding:6px 4px;min-width:30px}
#tvpp svg{width:23px;height:23px}
.tvtm{font-size:11.5px;opacity:.88;white-space:nowrap;font-variant-numeric:tabular-nums}
.tvgap{flex:1}
.tvbig{position:absolute;left:50%;top:50%;width:60px;height:60px;margin:-30px 0 0 -30px;border-radius:50%;
  background:rgba(0,0,0,.52);color:#fff;display:flex;align-items:center;justify-content:center;
  font-size:23px;z-index:4;cursor:pointer;transition:opacity .2s ease;
  -webkit-tap-highlight-color:transparent}
.tvbig.hide{opacity:0;pointer-events:none}
.tvspdmenu{position:absolute;right:8px;bottom:50px;z-index:7;display:none;padding:4px;gap:2px;
  border-radius:12px;background:rgba(16,20,30,.95);border:1px solid rgba(255,255,255,.16);
  box-shadow:0 10px 26px rgba(0,0,0,.55)}
.tvspdmenu.on{display:flex}
.tvspditem{font-size:12px;color:#e6ecf7;padding:7px 9px;border-radius:8px;text-align:center;
  cursor:pointer;-webkit-tap-highlight-color:transparent}
.tvspditem.on{background:rgba(90,150,255,.45);color:#fff}
.tvspditem:active{background:rgba(255,255,255,.16)}
.tvframe:fullscreen .tvspdmenu,.tvframe.tvfs .tvspdmenu{bottom:58px;right:14px}
.tvframe:fullscreen .tvctl,.tvframe.tvfs .tvctl{padding-left:36px;padding-right:36px;
  padding-bottom:calc(16px + var(--sab, env(safe-area-inset-bottom, 0px)))}
.tvmsg{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:7px;color:var(--dim);font-size:13px;text-align:center;padding:0 16px}
.tvt{font-size:14px;font-weight:650;line-height:1.42;margin-top:13px;letter-spacing:.1px}
.tvtools{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-top:9px;flex-wrap:wrap}
.tvgrp{display:flex;gap:6px;flex-wrap:wrap;flex:1 1 auto;min-width:0}
.tvgrp:last-child{flex:0 0 auto}
.tvc{font-size:11.5px;padding:4px 9px;border-radius:8px;background:rgba(255,255,255,.09);cursor:pointer;color:var(--dim);white-space:nowrap}
.tvc.on{background:rgba(90,150,255,.4);color:#fff}
.tvdesc{font-size:12.5px;line-height:1.68;color:var(--dim);margin-top:11px;white-space:pre-wrap;
  max-height:5.2em;overflow:hidden;cursor:pointer;position:relative}
.tvdesc.open{max-height:none}
/* ---------- 播放页评论区 ---------- */
.tvcm{margin-top:18px;padding:13px 12px 4px;border-radius:13px;
  background:var(--panel);border:1px solid var(--line)}
.tvcmh{display:flex;align-items:center;gap:10px;margin-bottom:2px}
.cmttl{font-size:13px;font-weight:650;color:var(--fg)}
.cmsort{margin-left:auto;display:flex;gap:6px}
.cmsb{font-size:11.5px;font-weight:600;padding:5px 11px;border-radius:14px;cursor:pointer;
  background:var(--tile);border:1px solid var(--line);color:var(--dim);
  -webkit-tap-highlight-color:transparent}
.cmsb.on{background:rgba(150,130,255,.3);border-color:rgba(150,130,255,.55);color:var(--fg)}
.cmld{font-size:12px;color:var(--dim);padding:16px 2px;text-align:center}
.cmrow{display:flex;gap:9px;padding:11px 0;border-top:1px solid var(--line)}
.cmav{flex:none;width:27px;height:27px;border-radius:50%;overflow:hidden;background:var(--tile)}
.cmav img{width:100%;height:100%;object-fit:cover;display:block}
.cmmain{flex:1;min-width:0}
.cmhd{display:flex;align-items:center;gap:6px;font-size:11.5px;line-height:1.3}
.cmnm{font-weight:650;color:var(--fg);max-width:58%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmtm{color:var(--dim);flex:none}
.cmbadge{font-size:9.5px;padding:1px 5px;border-radius:6px;background:rgba(78,201,160,.2);color:var(--accent)}
.cmheart{font-size:10.5px;color:#e5626a}
.cmtx{font-size:12.5px;line-height:1.66;color:var(--fg);margin-top:4px;white-space:pre-wrap;
  word-break:break-word;opacity:.93}
.cmtx.fold{max-height:5em;overflow:hidden;cursor:pointer;position:relative}
.cmtx.fold::after,.cmtrtx.fold::after{content:'';position:absolute;left:0;right:0;bottom:0;
  height:1.8em;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,0),var(--panel) 88%)}
.cmexp{color:var(--tr);font-weight:600;cursor:pointer}
.cmft{display:flex;gap:14px;font-size:11px;color:var(--dim);margin-top:6px}
.cmmore{margin:14px 0 12px;text-align:center;font-size:12.5px;font-weight:600;color:var(--tr);
  padding:10px;border-radius:12px;background:var(--tile);border:1px solid var(--line);cursor:pointer}
.cmrt{color:var(--tr);cursor:pointer}
.cmrt.more{display:block;margin:9px 0 2px;font-size:11.5px}
.cmrep{margin:7px 0 3px 13px;padding-left:10px;border-left:2px solid var(--line)}
.cmrep .cmrow{padding:8px 0;border-top:none}
.cmrep .cmav{width:22px;height:22px}
.cmrep .cmnm{max-width:46%}
.cmrep .cmtx{font-size:12px;line-height:1.6}
.cmrep .cmld{padding:8px 0;text-align:left}
.cmtr{color:var(--dim);cursor:pointer}
.cmtrtx{margin-top:5px;font-size:12.5px;line-height:1.65;color:var(--tr);
  white-space:pre-wrap;word-break:break-word;position:relative}
.cmtrtx.fold{max-height:5em;overflow:hidden;cursor:pointer}
.tvtr{margin-top:7px;font-size:13px;line-height:1.6;color:var(--tr)}
.tvdesc.tr{color:var(--tr);margin-top:8px}
/* ---------- 视频网格 ---------- */
.vgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px 10px;margin:2px 0 6px}
.chips{display:flex;gap:8px;overflow-x:auto;overscroll-behavior-x:contain;margin:4px 0 12px;padding:2px 0 6px;
  scrollbar-width:none;-webkit-overflow-scrolling:touch}
.chips::-webkit-scrollbar{display:none;height:0}
.chip{flex:none;font-size:12.5px;font-weight:600;padding:7px 13px;border-radius:18px;
  background:var(--tile);border:1px solid var(--line);color:var(--dim);white-space:nowrap;
  -webkit-tap-highlight-color:transparent}
.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}
.morewrap{margin:16px 0 6px;text-align:center}
.morewrap .act{min-width:60%;}
.vcard{cursor:pointer;min-width:0}
.vci{position:relative;width:100%;aspect-ratio:16/9;border-radius:9px;overflow:hidden;background:rgba(255,255,255,.07)}
.vci img{width:100%;height:100%;object-fit:cover;display:block}
.vdur{position:absolute;right:5px;bottom:5px;background:rgba(0,0,0,.78);color:#fff;
  font-size:10.5px;padding:1px 5px;border-radius:4px;letter-spacing:.2px}
.vct{font-size:12.5px;font-weight:600;line-height:1.32;margin-top:6px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.vcs{font-size:11px;color:var(--dim);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 抖音式竖屏播放器 */
.djfull{position:fixed;inset:0;z-index:9990;background:#000;display:none;overflow:hidden;touch-action:none}
.djfull.on{display:block}
.djfull video{width:100%;height:100%;object-fit:contain;background:#000;display:block;visibility:hidden}
.djfull.ready video{visibility:visible}
.djfull.land video{position:absolute;top:50%;left:50%;width:100vh;height:100vw;transform:translate(-50%,-50%) rotate(90deg)}
.djui{position:absolute;inset:0;z-index:2;pointer-events:none}
.djui .djseek,.djui .djright button,.djui .djback,.djui .djpanel{pointer-events:auto}
.djfull.land .djui{top:50%;left:50%;width:100vh;height:100vw;
  transform:translate(-50%,-50%) rotate(90deg);transform-origin:50% 50%}
.djfull.land .djb{bottom:16px}
.djfull.land .djpanel{padding-bottom:22px}
.djshade{position:absolute;left:0;right:0;bottom:0;height:52%;pointer-events:none;z-index:1;
  background:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.28) 42%,rgba(0,0,0,.74) 100%)}
.djshade.tp{top:0;bottom:auto;height:18%;
  background:linear-gradient(180deg,rgba(0,0,0,.5),rgba(0,0,0,0))}
.djback{position:absolute;left:14px;top:calc(12px + var(--sat, env(safe-area-inset-top, 0px)));z-index:6;
  width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;padding:0;
  background:rgba(14,20,34,.62);color:#fff;border:1px solid rgba(255,255,255,.2);
  box-shadow:0 6px 18px -10px rgba(0,0,0,.7);pointer-events:auto;
  transition:transform .16s cubic-bezier(.3,1.4,.4,1),background .2s ease}
.djback svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:block}
.djback:active{transform:scale(.9);background:rgba(143,123,240,.8)}
.djfull.land .djback{display:none}
.djb{position:absolute;left:16px;right:16px;bottom:calc(16px + var(--sab, env(safe-area-inset-bottom, 0px)));z-index:4;pointer-events:none}
.djmeta .t{font-size:15.5px;font-weight:650;letter-spacing:.2px;color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.62)}
.djmeta .s{font-size:12px;color:rgba(255,255,255,.68);margin-top:3px;letter-spacing:.2px}
.djrow{display:flex;align-items:center;gap:4px;margin-top:11px}
.djrow>span{font-size:11px;color:rgba(255,255,255,.72);font-variant-numeric:tabular-nums;
  min-width:34px;text-align:center;text-shadow:0 1px 4px rgba(0,0,0,.6)}
.djseek{position:relative;flex:1;height:30px;display:flex;align-items:center;touch-action:none;
  pointer-events:auto;cursor:pointer}
.djst{position:relative;width:100%;height:4px;border-radius:3px;background:rgba(255,255,255,.24);
  transition:height .2s cubic-bezier(.3,1,.4,1)}
.djseek.on .djst{height:6px}
.djbf{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:3px;background:rgba(255,255,255,.26)}
.djsf{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:3px;
  background:linear-gradient(90deg,#9b84f2,#cdbcff)}
.djsk{position:absolute;top:50%;left:0;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;
  background:#fff;box-shadow:0 0 0 3px rgba(201,184,255,.22),0 2px 7px rgba(0,0,0,.45);
  transform:scale(.82);transition:transform .18s cubic-bezier(.3,1.4,.4,1)}
.djseek.on .djsk{transform:scale(1.2);box-shadow:0 0 0 5px rgba(201,184,255,.24),0 2px 9px rgba(0,0,0,.5)}
.djtb{position:absolute;bottom:calc(100% - 4px);left:0;transform:translateX(-50%) scale(.86);
  background:rgba(18,24,40,.92);color:#fff;font-size:11.5px;font-variant-numeric:tabular-nums;
  padding:3px 8px;border-radius:8px;white-space:nowrap;opacity:0;pointer-events:none;
  border:1px solid rgba(255,255,255,.14);
  transition:opacity .16s ease,transform .16s cubic-bezier(.3,1.4,.4,1)}
.djseek.on .djtb{opacity:1;transform:translateX(-50%) scale(1)}
.djright{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;gap:12px;
  margin-top:12px;pointer-events:auto}
.djright button{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  padding:0;background:rgba(14,20,34,.40);color:#fff;border:1px solid rgba(255,255,255,.2);
  -webkit-backdrop-filter:blur(14px) saturate(150%);backdrop-filter:blur(14px) saturate(150%);
  box-shadow:0 6px 18px -10px rgba(0,0,0,.7);pointer-events:auto;
  transition:transform .16s cubic-bezier(.3,1.4,.4,1),background .2s ease,border-color .2s ease}
.djright button .djt{font-size:15px;font-weight:650;letter-spacing:0;line-height:1}
.djright button svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.85;
  stroke-linecap:round;stroke-linejoin:round;display:block}
.djright button:active{transform:scale(.9)}
.djright button.on{background:rgba(143,123,240,.88);border-color:rgba(206,192,255,.85);
  box-shadow:0 6px 18px -8px rgba(143,123,240,.9)}
.djright button.on svg .f{fill:currentColor}
.djload{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#cfc6e8;font-size:13px;pointer-events:none;text-shadow:0 1px 3px rgba(0,0,0,.6)}
.djpanel{position:absolute;left:0;right:0;bottom:0;max-height:62%;overflow-y:auto;z-index:8;background:#0b0f1a;will-change:transform;contain:layout paint;border-radius:18px 18px 0 0;padding:14px 14px calc(22px + var(--sab, env(safe-area-inset-bottom, 0px)));transform:translateY(105%);box-shadow:0 -14px 44px -16px rgba(0,0,0,.8);transition:transform .34s cubic-bezier(.3,.7,.3,1)}
.djpanel.on{transform:translateY(0)}
.djpanel h4{color:#e8ecf6;font-size:13px;margin:2px 0 10px}
.djeps{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.djeps button{padding:10px 2px;border-radius:10px;background:rgba(255,255,255,.08);color:#dfe4f2;font-size:12.5px;border:0}
.djeps button.on{background:#8f7bf0;color:#fff}

.djspin{position:absolute;inset:0;display:none;align-items:center;justify-content:center;z-index:2;pointer-events:none}
.djfull.waiting .djspin{display:flex}

.djspin i{width:36px;height:36px;border-radius:50%;border:3px solid rgba(200,190,240,.25);border-top-color:#c9b8ff;animation:djr .9s linear infinite;display:block}
@keyframes djr{to{transform:rotate(360deg)}}

/* 暂停时屏幕中央的大播放键 */
.djbig{position:absolute;left:50%;top:50%;z-index:5;width:78px;height:78px;margin:-39px 0 0 -39px;
  border-radius:50%;padding:0;display:flex;align-items:center;justify-content:center;
  background:rgba(14,20,34,.55);border:1px solid rgba(255,255,255,.26);color:#fff;
  box-shadow:0 12px 34px -14px rgba(0,0,0,.85),inset 0 1px 0 rgba(255,255,255,.18);
  opacity:0;pointer-events:none;transform:scale(.86);
  transition:opacity .2s ease,transform .24s cubic-bezier(.3,1.4,.4,1)}
.djbig svg{width:31px;height:31px;fill:currentColor;margin-left:4px;display:block}
.djbig:active{transform:scale(.93)}
.djfull.paused .djbig{opacity:1;pointer-events:auto;transform:scale(1)}
.djfull.paused.hideui .djbig{opacity:1;pointer-events:auto}
.djfull.waiting .djbig{opacity:0;pointer-events:none}

/* 播放器控件淡出：单击屏幕显示，播放中自动隐藏（横竖屏同一套） */
.djb{transition:opacity .26s ease}
.djfull.hideui .djb{opacity:0}
.djfull.hideui .djseek,.djfull.hideui .djright button{pointer-events:none}
.djfull.hideui .djback{opacity:0;pointer-events:none}

/* ---------- 短剧：列表卡 / 详情海报 / 标签 / 胶囊按钮 / 播放器精修 ---------- */
.vcard.djvc .vci{aspect-ratio:3/4;border-radius:16px;border:1px solid var(--glass-brd);
  background:var(--tile);box-shadow:0 12px 26px -20px rgba(8,14,36,.95);
  transition:transform .18s cubic-bezier(.3,1.3,.45,1)}
.vcard.djvc .vci::after{content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,0) 58%,rgba(0,0,0,.46) 100%)}
.vcard.djvc:active .vci{transform:scale(.968)}
.vcard.djvc .vdur{bottom:8px;right:8px;border-radius:99px;padding:2.5px 8px;font-size:10.5px;
  font-weight:600;letter-spacing:.2px;background:rgba(10,14,26,.58);
  border:1px solid rgba(255,255,255,.18);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.vcard.djvc .vct{font-size:13.5px;font-weight:650;margin-top:9px;letter-spacing:.1px}
.vcard.djvc .vcs{font-size:11.5px;margin-top:3px}
.heroimg{position:relative;display:flex;justify-content:center;padding:12px 0 6px;margin-bottom:2px}
.herobg{position:absolute;left:-16px;right:-16px;top:-8px;height:80%;background-size:cover;
  background-position:center;filter:blur(28px) saturate(150%);opacity:.30;
  -webkit-mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.35) 62%,transparent 100%);
  mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.35) 62%,transparent 100%)}
html[data-theme="light"] .herobg{opacity:.22}
.herop{position:relative;border-radius:20px;border:1px solid rgba(255,255,255,.14);
  box-shadow:0 22px 44px -24px rgba(6,10,28,.9)}
.tagrow{display:flex;flex-wrap:wrap;gap:7px;margin:11px 0 4px}
.tagrow .tg{font-size:11.5px;font-weight:600;padding:3.5px 10px;border-radius:99px;
  color:var(--accent2);background:rgba(90,169,230,.12);border:1px solid rgba(90,169,230,.32)}
html[data-theme="light"] .tagrow .tg{color:#26679b;background:rgba(43,127,192,.10);border-color:rgba(43,127,192,.26)}
.actpill{display:inline-flex;align-items:center;gap:7px;border-radius:99px;
  padding:9px 18px 9px 15px;margin:2px 0 10px;font-size:13.5px;font-weight:650;
  background:linear-gradient(180deg,rgba(255,255,255,.10),rgba(255,255,255,.035));
  border:1px solid var(--glass-brd);color:var(--fg);
  box-shadow:0 10px 24px -18px rgba(0,0,0,.9),inset 0 1px 0 rgba(255,255,255,.10);
  transition:transform .16s cubic-bezier(.3,1.4,.4,1),background .2s ease}
.actpill .ai{font-style:normal;font-size:15px;line-height:1;color:var(--lav2)}
.actpill:active{transform:scale(.955)}
.actpill.on{background:linear-gradient(180deg,rgba(143,123,240,.95),rgba(118,98,224,.92));
  border-color:rgba(206,192,255,.62);color:#fff;
  box-shadow:0 12px 26px -16px rgba(143,123,240,.85),inset 0 1px 0 rgba(255,255,255,.22)}
.actpill.on .ai{color:#fff}
html[data-theme="light"] .actpill{background:#fff;border-color:rgba(20,30,60,.10);color:#1b2334}
html[data-theme="light"] .actpill.on{background:linear-gradient(180deg,#8f7bf0,#7a66e4);color:#fff;border-color:#8f7bf0}
.djst{height:4px;background:rgba(255,255,255,.16)}
.djsf{background:linear-gradient(90deg,#8f7bf0 0%,#cdbcff 100%);
  box-shadow:0 0 12px rgba(160,140,250,.5)}
.djsk{width:13px;height:13px;margin:-6.5px 0 0 -6.5px;
  box-shadow:0 0 0 1px rgba(255,255,255,.55),0 0 0 4px rgba(201,184,255,.15),0 3px 9px rgba(0,0,0,.55)}
.djseek.on .djsk{box-shadow:0 0 0 1px #fff,0 0 0 6px rgba(201,184,255,.2),0 3px 12px rgba(0,0,0,.6)}
.djrow>span{font-size:11px;color:rgba(255,255,255,.6);letter-spacing:.2px}
.djright button{width:46px;height:46px;
  background:linear-gradient(180deg,rgba(44,52,76,.72),rgba(15,21,36,.80));
  border:1px solid rgba(255,255,255,.15);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.13),0 10px 24px -14px rgba(0,0,0,.95)}
.djpanel{background:#0b0f1a;border-top:1px solid rgba(255,255,255,.09)}
.djpanel h4{font-size:13.5px;font-weight:650;letter-spacing:.2px;color:#e9eefc}
.djeps button{border-radius:11px;background:rgba(255,255,255,.055);
  border:1px solid rgba(255,255,255,.07);font-weight:600;font-variant-numeric:tabular-nums;
  transition:background .18s ease,color .18s ease,transform .16s cubic-bezier(.3,1.4,.4,1)}
.djeps button:active{transform:scale(.94)}
.djeps button.on{background:linear-gradient(180deg,#9a86f3,#8270e8);border-color:rgba(206,192,255,.55);
  color:#fff;box-shadow:0 6px 16px -10px rgba(143,123,240,.9)}
  /* ---------- 顶部搜索 ---------- */
  #sbar{display:flex;align-items:center;gap:9px;height:42px;margin:-6px 0 16px;padding:0 13px;
    border-radius:14px;background:var(--glass-btn);border:1px solid var(--glass-brd);
    -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
    box-shadow:inset 0 1px 0 var(--glass-hi);
    transition:border-color .2s ease,background .2s ease,box-shadow .2s ease}
  #sbar:focus-within{border-color:rgba(170,150,255,.62);background:var(--glass-act);
    box-shadow:inset 0 1px 0 var(--glass-hi),0 6px 20px -16px rgba(120,98,240,.9)}
  #sbar .sic{font-size:13px;line-height:1;opacity:.7;flex:0 0 auto}
  #sbar input{flex:1;min-width:0;height:100%;border:0;outline:0;background:transparent;
    color:var(--fg);font-size:14px;font-weight:500;-webkit-appearance:none;appearance:none}
  #sbar input::placeholder{color:var(--dim);font-size:13px;font-weight:400}
  #sbar input::-webkit-search-cancel-button,#sbar input::-webkit-search-decoration{-webkit-appearance:none;display:none}
  #sbar .qclr{flex:0 0 auto;width:22px;height:22px;padding:0;border-radius:50%;border:0;
    background:rgba(255,255,255,.13);color:var(--dim);font-size:11px;line-height:22px;
    text-align:center;cursor:pointer}
  #sbar .qclr[hidden]{display:none}
  html[data-theme="light"] #sbar .qclr{background:rgba(20,30,60,.10);color:#5a6a85}
  .qempty{margin:6px 2px 18px;font-size:13px;text-align:center}
  body.searching .envwrap,body.searching .drag-hint{display:none}
  body.sorting #sbar{opacity:.4;pointer-events:none}

/* 全屏视频时顶部按钮避开状态栏（App 里 WebView 不顶到状态栏，inset=0 无影响） */
.tvframe.tvfs .tvtop{padding-top:calc(13px + var(--sat, env(safe-area-inset-top, 0px)))}
.tvframe.tvfs .tvctl{padding-bottom:calc(12px + var(--sab, env(safe-area-inset-bottom, 0px)))}


/* 保险丝：入场动画在 WebView 合成器上偶尔会卡在 0% 透明 → 整卡白屏。
   渲染 0.7s 后强制落定，动画正常完成时无感知 */
.res.finok,.res.finok>*{animation:none!important;opacity:1!important;transform:none!important}

/* ===== 短剧播放页 v2（照视频卡：普通页 + 全屏才横屏） ===== */
.djpage{padding:10px 12px 24px}
.djstage{position:relative;margin:0 auto;width:min(100%,calc(62vh * var(--ar,0.5625)));
  aspect-ratio:var(--ar,9/16);background:#000;border-radius:14px;overflow:hidden;touch-action:none;
  box-shadow:0 12px 30px -18px rgba(16,22,40,.55)}
.djstage video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:block;
  background:#000;visibility:hidden}
.djstage.ready video{visibility:visible}
.djstage.fs{position:fixed;inset:0;width:100vw;height:100vh;max-height:none;border-radius:0;z-index:9999;aspect-ratio:auto}
body.djfs-on{overflow:hidden!important}
.djui{position:absolute;inset:0;z-index:3;pointer-events:none;transition:opacity .22s ease}
.djui.hide{opacity:0;pointer-events:none!important}
.djui.hide *{pointer-events:none!important}
.djui .djib,.djui .djseek,.djui .djspdmenu,.djui .djbar{pointer-events:auto}
.djtop{position:absolute;left:0;right:0;top:0;display:flex;align-items:center;gap:10px;
  padding:10px 12px 22px;background:linear-gradient(to bottom,rgba(0,0,0,.66),rgba(0,0,0,0))}
.djttl{flex:1;min-width:0}
.djttl .t{font-size:14px;font-weight:650;color:#fff;letter-spacing:.2px;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 6px rgba(0,0,0,.6)}
.djttl .s{font-size:11.5px;color:rgba(255,255,255,.72);margin-top:2px}
.djib{width:36px;height:36px;flex:none;border-radius:50%;padding:0;display:flex;align-items:center;
  justify-content:center;background:rgba(16,22,34,.5);color:#fff;border:1px solid rgba(255,255,255,.18);
  transition:transform .16s cubic-bezier(.3,1.4,.4,1),background .2s ease}
.djib svg{width:18px;height:18px;display:block}
.djib:active{transform:scale(.9);background:rgba(143,123,240,.8)}
.djib.on{background:rgba(143,123,240,.9);border-color:rgba(206,192,255,.85)}
.djib.on svg .f{fill:currentColor}
.djib.djpill{width:auto;min-width:42px;height:32px;border-radius:16px;font-size:12px;padding:0 9px;
  color:#fff;font-variant-numeric:tabular-nums}
.djib.sm{width:32px;height:32px}
.djside{position:absolute;right:10px;top:50%;transform:translateY(-50%)}
.djbar{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;gap:8px;
  padding:16px 12px calc(10px + var(--sab,0px));background:linear-gradient(to top,rgba(0,0,0,.72),rgba(0,0,0,0))}
.djtm{font-size:11px;color:rgba(255,255,255,.78);font-variant-numeric:tabular-nums;min-width:32px;text-align:center}
.djstage .djseek{flex:1;height:26px}
.djstage .djspdmenu{bottom:56px;right:10px}
.djstage.paused .djbig{opacity:1;pointer-events:auto;transform:scale(1)}
.djstage.waiting .djseek,.djstage.paused .djseek{pointer-events:auto}
.djload{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);text-align:center;
  color:#cfc6e8;font-size:12.5px;pointer-events:none;padding:0 20px}
.djstage.ready .djload{display:none}
.djtip{position:absolute;left:50%;top:46%;transform:translate(-50%,-50%) scale(.9);opacity:0;
  display:flex;align-items:center;gap:9px;padding:8px 13px;border-radius:14px;
  background:rgba(14,20,34,.78);color:#fff;font-size:11.5px;pointer-events:none;
  transition:opacity .16s ease,transform .18s cubic-bezier(.3,1.4,.4,1);z-index:6}
.djtip.on{opacity:1;transform:translate(-50%,-50%) scale(1)}
.djtip .rail{width:88px;height:3px;border-radius:2px;background:rgba(255,255,255,.26);overflow:hidden}
.djtip .rail i{display:block;height:100%;background:#cdbcff;border-radius:2px}
.djseekind{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.92);opacity:0;
  padding:9px 15px;border-radius:14px;background:rgba(14,20,34,.8);color:#fff;text-align:center;
  pointer-events:none;transition:opacity .14s ease,transform .16s cubic-bezier(.3,1.4,.4,1);z-index:6}
.djseekind.on{opacity:1;transform:translate(-50%,-50%) scale(1)}
.djseekind .sk{font-size:13.5px;font-weight:650}
.djseekind .tm{font-size:11px;color:rgba(255,255,255,.72);margin-top:3px;font-variant-numeric:tabular-nums}
.djvlist{margin-top:16px}
.djvlist h4{font-size:12.5px;color:var(--dim);font-weight:600;margin:0 0 9px 2px}
.djev{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.djev button{padding:9px 4px;border-radius:10px;font-size:12.5px;border:1px solid var(--line);
  background:var(--card2,rgba(255,255,255,.6));color:var(--fg);font-variant-numeric:tabular-nums;
  transition:transform .16s cubic-bezier(.3,1.4,.4,1),background .2s ease}
.djev button:active{transform:scale(.95)}
.djev button.on{background:linear-gradient(180deg,#8f7bf0,#a996ff);color:#fff;border-color:transparent}
.djload{display:flex;align-items:center;justify-content:center;gap:10px}
.djload .spin{width:26px;height:26px;border-radius:50%;flex:none;
  border:3px solid rgba(201,184,255,.25);border-top-color:#a996ff;
  animation:djspin 1s linear infinite}
@keyframes djspin{to{transform:rotate(360deg)}}
.djib.djpill{height:32px}
.djbar .djib{margin-top:0}
