:root{
  --bg:#070b16;
  --bg-2:#0b1120;
  --panel:rgba(255,255,255,.035);
  --panel-2:rgba(255,255,255,.055);
  --line:rgba(255,255,255,.09);
  --line-2:rgba(255,255,255,.16);
  --txt:#e8edf7;
  --txt-2:#9fb0cc;
  --txt-3:#6b7c9c;
  --acc:#38bdf8;
  --acc-2:#a78bfa;
  --major:#fb7185;
  --ok:#34d399;
  --warn:#fbbf24;
  --radius:16px;
  --radius-sm:10px;
  --shadow:0 18px 50px -20px rgba(0,0,0,.8);
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
/* overflow-x 放在 html 上:放 body 会让下面的吸顶 tabs 失效 */
html{overflow-x:hidden}
body{
  background:var(--bg);
  color:var(--txt);
  font-family:var(--font);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
  min-height:100svh;
  -webkit-text-size-adjust:100%;
  -webkit-tap-highlight-color:transparent;
  position:relative;
}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86em;background:rgba(255,255,255,.07);padding:.1em .4em;border-radius:5px}

/* 背景装饰 */
.bg-grid{
  position:fixed;inset:0;z-index:0;pointer-events:none;
  background-image:linear-gradient(rgba(255,255,255,.028) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.028) 1px,transparent 1px);
  background-size:46px 46px;
  -webkit-mask-image:radial-gradient(ellipse 90% 60% at 50% 0%,#000 40%,transparent 100%);
  mask-image:radial-gradient(ellipse 90% 60% at 50% 0%,#000 40%,transparent 100%);
}
.bg-glow{position:fixed;z-index:0;pointer-events:none;filter:blur(90px);opacity:.5;border-radius:50%}
.bg-glow--a{width:520px;height:520px;background:radial-gradient(circle,#1d4ed8,transparent 70%);top:-180px;left:-120px}
.bg-glow--b{width:460px;height:460px;background:radial-gradient(circle,#7c3aed,transparent 70%);top:-140px;right:-120px}

/* 3D 控制台背景 canvas:固定全屏、置于最底层 */
#bg3d{position:fixed;inset:0;z-index:0;width:100%;height:100%;display:block;pointer-events:none}
/* 扫描线:极淡,营造 CRT/全息控制台质感 */
.bg-scan{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:.35;
  background:repeating-linear-gradient(180deg,rgba(120,200,255,.045) 0 1px,transparent 1px 3px);
  -webkit-mask-image:radial-gradient(ellipse 100% 80% at 50% 30%,#000 30%,transparent 100%);
  mask-image:radial-gradient(ellipse 100% 80% at 50% 30%,#000 30%,transparent 100%)}

.shell{position:relative;z-index:1;max-width:1120px;margin:0 auto;padding:28px 22px 60px}

/* 顶部 */
.masthead{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap}
.masthead__brand{display:flex;align-items:center;gap:14px}
.logo{width:48px;height:48px;display:grid;place-items:center;border-radius:14px;background:linear-gradient(145deg,rgba(56,189,248,.16),rgba(167,139,250,.16));border:1px solid var(--line-2);box-shadow:0 0 30px -8px rgba(56,189,248,.5)}
.masthead__text h1{margin:0;font-size:23px;letter-spacing:.5px;font-weight:750;background:linear-gradient(90deg,#eaf3ff,#c9d6ff);-webkit-background-clip:text;background-clip:text;color:transparent}
.masthead__sub{margin:2px 0 0;font-size:12.5px;color:var(--txt-3);letter-spacing:.4px}
.masthead__actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}

.source-chip{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--txt-2);background:var(--panel);border:1px solid var(--line);padding:6px 12px;border-radius:999px}
.source-chip__dot{width:8px;height:8px;border-radius:50%;background:var(--txt-3);box-shadow:0 0 0 3px rgba(255,255,255,.05)}
.source-chip.is-live .source-chip__dot{background:var(--ok);box-shadow:0 0 0 3px rgba(52,211,153,.18)}
.source-chip.is-demo .source-chip__dot{background:var(--warn);box-shadow:0 0 0 3px rgba(251,191,36,.18)}
.source-chip.is-off .source-chip__dot{background:var(--major);box-shadow:0 0 0 3px rgba(251,113,133,.16)}

/* 按钮 */
.btn{display:inline-flex;align-items:center;gap:7px;font-family:inherit;font-size:13.5px;font-weight:600;color:var(--txt);background:var(--panel-2);border:1px solid var(--line-2);padding:9px 15px;border-radius:11px;cursor:pointer;transition:.16s;white-space:nowrap}
.btn:hover{border-color:rgba(255,255,255,.3);transform:translateY(-1px)}
.btn:active{transform:translateY(0)}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.btn--primary{background:linear-gradient(135deg,#2563eb,#7c3aed);border-color:transparent;box-shadow:0 10px 26px -12px rgba(79,70,229,.9)}
.btn--primary:hover{box-shadow:0 14px 30px -12px rgba(79,70,229,1)}
.btn--ghost{background:var(--panel)}
.btn__icon{transition:transform .5s}
.btn.is-loading .btn__icon{animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.icon-btn{background:transparent;border:none;color:var(--txt-2);font-size:16px;cursor:pointer;padding:4px 8px;border-radius:8px}
.icon-btn:hover{color:var(--txt);background:var(--panel-2)}

.updated{margin:16px 2px 20px;font-size:12.5px;color:var(--txt-3)}

/* Tabs */
.tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);margin-bottom:22px;position:relative}
.tab{font-family:inherit;font-size:14px;font-weight:650;letter-spacing:.4px;color:var(--txt-3);background:none;border:none;padding:11px 16px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:.15s;display:inline-flex;align-items:center;gap:7px;position:relative}
.tab:hover{color:var(--txt-2)}
.tab.is-active{color:#eaf6ff;border-bottom-color:transparent}
.tab__badge{position:absolute;top:2px;right:2px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:linear-gradient(135deg,#34d399,#38bdf8);color:#04121f;font-size:10px;font-weight:800;line-height:16px;text-align:center;box-shadow:0 0 10px -1px rgba(52,211,153,.8)}
.tab__ico{font-size:12.5px;color:var(--acc-2);opacity:.8;line-height:1}
.tab.is-active .tab__ico{color:var(--acc);opacity:1;text-shadow:0 0 10px rgba(56,189,248,.85)}
/* 选中态 HUD:斜切底衬 + 底部扫描线,替代普通下划线 */
.tab.is-active::before{content:"";position:absolute;left:6px;right:6px;top:5px;bottom:3px;z-index:-1;
  background:linear-gradient(180deg,rgba(56,189,248,.16),rgba(56,189,248,.02));
  border:1px solid rgba(56,189,248,.3);
  clip-path:polygon(9px 0,100% 0,calc(100% - 9px) 100%,0 100%)}
.tab.is-active::after{content:"";position:absolute;left:14px;right:14px;bottom:-1px;height:2px;
  background:linear-gradient(90deg,transparent,var(--acc),transparent);
  box-shadow:0 0 12px rgba(56,189,248,.9)}

/* 统计 */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:20px}

/* 面板工具栏 */
.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.toolbar__status{font-size:12px;color:var(--txt-3)}
.toolbar__status.is-loading{color:var(--acc)}
.toolbar__status.is-error{color:#fda4af}
.toolbar__status.is-ready{color:var(--txt-2)}
.toolbar__hint{font-size:12.5px;color:var(--txt-3)}
.panel-state{padding:30px 10px}

/* AI 汇总 */
.sum-overview{background:linear-gradient(150deg,rgba(56,189,248,.1),rgba(167,139,250,.08));border:1px solid var(--line-2);border-radius:var(--radius);padding:16px 18px;font-size:14.5px;line-height:1.75;color:#eef3fb;margin-bottom:12px}
.sum-overview b{display:block;font-size:12px;letter-spacing:.6px;color:#7dd3fc;margin-bottom:6px;font-weight:650}
.sum-tip{font-size:11.5px;color:var(--txt-3);margin:0 0 14px}
.sum-item .card__title a{color:#bae6fd}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px 16px}
.stat__n{font-size:26px;font-weight:750;letter-spacing:.5px;background:linear-gradient(90deg,#7dd3fc,#c4b5fd);-webkit-background-clip:text;background-clip:text;color:transparent}
.stat__l{font-size:12px;color:var(--txt-3);margin-top:2px}

/* 筛选 */
.filters{display:flex;flex-direction:column;gap:12px;margin-bottom:20px}
.filter-group{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.filter-group__label{font-size:12px;color:var(--txt-3);min-width:42px;flex-shrink:0}
.chips{display:flex;gap:7px;flex-wrap:wrap}
.chip{font-family:inherit;font-size:12.5px;color:var(--txt-2);background:var(--panel);border:1px solid var(--line);padding:5px 12px;border-radius:999px;cursor:pointer;transition:.14s}
.chip:hover{border-color:var(--line-2);color:var(--txt)}
.chip.is-on{background:linear-gradient(135deg,rgba(37,99,235,.32),rgba(124,58,237,.32));border-color:rgba(125,211,252,.5);color:#eaf6ff}

/* 列表 / 卡片 */
.list{display:flex;flex-direction:column;gap:12px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;transition:.16s;position:relative;overflow:hidden}
.card:hover{border-color:var(--line-2);background:var(--panel-2);transform:translateY(-1px)}
.card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,var(--acc),var(--acc-2));opacity:.55}
.card.is-major::before{opacity:1;background:linear-gradient(180deg,#fb7185,#f59e0b)}
.card__top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.tag{font-size:11px;font-weight:600;padding:3px 9px;border-radius:6px;border:1px solid var(--line);color:var(--txt-2);background:rgba(255,255,255,.04)}
.tag--cat{color:#bae6fd;border-color:rgba(56,189,248,.32);background:rgba(56,189,248,.1)}
.tag--major{color:#fecdd3;border-color:rgba(251,113,133,.4);background:rgba(251,113,133,.14)}
.tag--minor{color:#cbd5e1;border-color:var(--line);background:rgba(255,255,255,.04)}
.tag--region{color:#ddd6fe;border-color:rgba(167,139,250,.32);background:rgba(167,139,250,.1)}
.tag--date{color:var(--txt-3)}
.badge-new{display:inline-flex;align-items:center;font-size:10px;font-weight:800;letter-spacing:.6px;padding:2px 7px;border-radius:5px;color:#04121f;background:linear-gradient(135deg,#34d399,#38bdf8);box-shadow:0 0 12px -2px rgba(52,211,153,.7);animation:newPulse 2.4s ease-in-out infinite}
@keyframes newPulse{0%,100%{opacity:1}50%{opacity:.62}}
.card__title{margin:0 0 6px;font-size:16.5px;font-weight:680;line-height:1.45;color:#f2f6ff;overflow-wrap:anywhere}
.card__title a{color:inherit;text-decoration:none}
.card__title a:hover{text-decoration:underline;color:#bae6fd}
.tech-en{font-size:12.5px;font-weight:600;color:var(--txt-3);letter-spacing:.3px}
/* 模型排行 */
.rank-group{margin-bottom:8px}
.rank-group__title{margin:6px 2px 10px;font-size:14px;font-weight:700;color:#c9d6ff;letter-spacing:.6px;display:flex;align-items:center;gap:10px}
.rank-group__scale{font-size:11px;font-weight:600;color:var(--txt-3);letter-spacing:.2px;background:rgba(255,255,255,.04);border:1px solid var(--line);border-radius:999px;padding:2px 8px}
.rank-group__title::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--line-2),transparent)}
.rank-no{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;font-weight:800;color:#7dd3fc;background:rgba(56,189,248,.12);border:1px solid rgba(56,189,248,.35);border-radius:6px;padding:2px 8px;letter-spacing:.5px;flex:0 0 auto}
.rank-chart{display:flex;flex-direction:column;gap:6px}
.rank-bar{display:flex;align-items:center;gap:10px;padding:9px 12px;background:rgba(255,255,255,.025);border:1px solid var(--line);border-radius:10px;cursor:pointer;transition:.15s;min-width:0}
.rank-bar:hover{border-color:rgba(56,189,248,.4);background:rgba(56,189,248,.06);transform:translateX(2px)}
.rank-bar__name{flex:0 1 auto;max-width:280px;font-size:13.5px;font-weight:650;color:#e6ecff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank-bar__name em{font-style:normal;font-weight:500;font-size:11.5px;color:var(--txt-3);margin-left:6px}
.rank-bar__rail{flex:1 1 auto;height:10px;min-width:50px;background:rgba(255,255,255,.05);border-radius:999px;overflow:hidden}
.rank-bar__fill{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,rgba(56,189,248,.55),rgba(167,139,250,.75));box-shadow:0 0 10px -2px rgba(56,189,248,.8)}
.rank-bar.is-top{border-color:rgba(56,189,248,.45);background:linear-gradient(160deg,rgba(56,189,248,.1),rgba(167,139,250,.06))}
.rank-bar.is-top .rank-no{color:#04121f;background:linear-gradient(135deg,#34d399,#38bdf8);border-color:transparent;box-shadow:0 0 12px -2px rgba(52,211,153,.7)}
.rank-bar.is-top .rank-bar__fill{background:linear-gradient(90deg,#34d399,#38bdf8)}
.rank-bar__score{flex:0 0 auto;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;font-weight:700;color:#7dd3fc}
@media (max-width:640px){
  .rank-bar{flex-wrap:wrap;gap:6px 9px;padding:9px 10px}
  .rank-bar__name{flex:1 1 auto;max-width:none;order:1}
  .rank-bar__score{order:2}
  .rank-bar__rail{order:3;flex:1 1 100%;height:9px;min-width:0}
}
.card__sum{margin:0;font-size:13.6px;color:var(--txt-2)}
.card__impact{margin:10px 0 0;font-size:13px;color:var(--txt-2);background:rgba(56,189,248,.06);border-left:2px solid rgba(56,189,248,.5);padding:8px 12px;border-radius:0 8px 8px 0}
.card__impact b{color:#7dd3fc;font-weight:650}
.card__foot{margin-top:11px;font-size:11.5px;color:var(--txt-3);display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.card__src{color:var(--txt-3)}

/* 商机网格 */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.op{background:linear-gradient(160deg,rgba(124,58,237,.09),rgba(56,189,248,.05));border:1px solid var(--line);border-radius:var(--radius);padding:17px 18px;display:flex;flex-direction:column;gap:10px;transition:.16s}
.op:hover{border-color:rgba(167,139,250,.45);transform:translateY(-2px);box-shadow:var(--shadow)}
.op__head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.op__title{margin:0;font-size:16px;font-weight:700;color:#f4f1ff;line-height:1.4;overflow-wrap:anywhere}
.op__desc{margin:0;font-size:13.4px;color:var(--txt-2)}
.op__meta{display:flex;gap:7px;flex-wrap:wrap}
.pill{font-size:11px;font-weight:600;padding:3px 9px;border-radius:999px;border:1px solid var(--line)}
.pill--high{color:#bbf7d0;border-color:rgba(52,211,153,.4);background:rgba(52,211,153,.12)}
.pill--mid{color:#fde68a;border-color:rgba(251,191,36,.4);background:rgba(251,191,36,.12)}
.pill--low{color:#cbd5e1;border-color:var(--line);background:rgba(255,255,255,.04)}
.pill--time{color:#bae6fd;border-color:rgba(56,189,248,.35);background:rgba(56,189,248,.1)}
.pill--cat{color:#ddd6fe;border-color:rgba(167,139,250,.35);background:rgba(167,139,250,.1)}
.op__block{font-size:12.8px;color:var(--txt-2);background:rgba(0,0,0,.2);border:1px solid var(--line);border-radius:10px;padding:9px 12px}
.op__block b{display:block;color:var(--txt-3);font-size:11px;font-weight:600;letter-spacing:.5px;margin-bottom:3px;text-transform:uppercase}
.op__action{border-left:2px solid var(--acc-2)}
.pill--track{color:#ddd6fe;border-color:rgba(167,139,250,.4);background:rgba(167,139,250,.13)}
.pill--policy{color:#fde68a;border-color:rgba(251,191,36,.45);background:rgba(251,191,36,.14)}
.pill--market{color:#bae6fd;border-color:rgba(56,189,248,.4);background:rgba(56,189,248,.12)}
.op__title a{color:inherit;text-decoration:none}
.op__title a:hover{text-decoration:underline;color:#ddd6fe}
.op--policy{background:linear-gradient(160deg,rgba(251,191,36,.09),rgba(124,58,237,.06))}
.op--policy:hover{border-color:rgba(251,191,36,.42)}
.pill--local{color:#bbf7d0;border-color:rgba(52,211,153,.45);background:rgba(52,211,153,.14)}
.op--local{background:linear-gradient(160deg,rgba(52,211,153,.09),rgba(56,189,248,.05))}
.op--local:hover{border-color:rgba(52,211,153,.42)}
.op--local .op__policy{border-left-color:var(--ok)}
.op__policy{border-left:2px solid var(--warn)}
.op__policy a{color:#fcd34d;text-decoration:none;margin-left:4px}
.op__policy a:hover{text-decoration:underline}
.op__policy-tag{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:999px;font-size:11px;color:#fde68a;border:1px solid rgba(251,191,36,.35);background:rgba(251,191,36,.1)}
.ops-hint{margin:-6px 2px 16px;font-size:12px;color:var(--txt-3);line-height:1.6}
.ops-error{display:flex;align-items:flex-start;gap:12px;justify-content:space-between;margin-bottom:14px;padding:11px 14px;border-radius:12px;border:1px solid rgba(251,113,133,.4);background:rgba(251,113,133,.1);font-size:12.6px;color:#fecdd3}
.ops-error__msg{flex:1;min-width:0}
.ops-error__msg b{color:#fda4af}
.ops-error details{margin-top:6px}
.ops-error summary{cursor:pointer;color:var(--txt-2);font-size:11.5px}
.ops-error pre{margin:6px 0 0;padding:8px 10px;background:rgba(0,0,0,.4);border:1px solid var(--line);border-radius:8px;color:#fca5a5;white-space:pre-wrap;word-break:break-word;max-height:160px;overflow:auto;font-size:11px}
.ops-error .btn{flex-shrink:0}

/* 状态 */
.state{display:grid;place-items:center;padding:60px 20px;text-align:center}
.state__inner{max-width:440px}
.spinner{width:42px;height:42px;margin:0 auto 18px;border-radius:50%;border:3px solid rgba(255,255,255,.12);border-top-color:var(--acc);animation:spin .8s linear infinite}
.state__title{margin:0 0 6px;font-size:16px;font-weight:650;color:var(--txt)}
.state__desc{margin:0;font-size:13.4px;color:var(--txt-3)}
.state__action{margin-top:18px}
.state.is-error .spinner{display:none}
.state.is-error .state__title{color:#fecdd3}

/* 页脚 */
.foot{margin-top:44px;padding-top:18px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:11.5px;color:var(--txt-3)}

/* 弹窗 */
.modal{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:20px}
.modal[hidden]{display:none}
.modal__backdrop{position:absolute;inset:0;background:rgba(3,6,15,.72);backdrop-filter:blur(4px)}
.modal__card{position:relative;width:100%;max-width:520px;max-height:90vh;max-height:90dvh;overflow:auto;background:linear-gradient(180deg,#0d1424,#0a0f1c);border:1px solid var(--line-2);border-radius:18px;box-shadow:0 30px 80px -20px rgba(0,0,0,.9)}
.modal__head{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid var(--line)}
.modal__head h2{margin:0;font-size:16.5px;font-weight:700}
.modal__body{padding:18px 20px;display:flex;flex-direction:column;gap:16px}
.modal__foot{display:flex;align-items:center;gap:10px;padding:16px 20px;border-top:1px solid var(--line)}
.modal__card--sm{max-width:440px}
.modal__card--detail{max-width:660px}
#detailTitle{line-height:1.45;overflow-wrap:anywhere;padding-right:14px}
.card[data-detail],.op[data-detail]{cursor:pointer}
.op .card__foot{margin-top:auto}
.card__more{margin-left:auto;color:#7dd3fc;font-weight:600;white-space:nowrap}
.dt__tags{display:flex;gap:7px;flex-wrap:wrap}
.dt__block{background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.dt__block--acc{border-left:2px solid rgba(56,189,248,.55)}
.dt__block--warn{border-left:2px solid var(--warn)}
.dt__label{display:block;font-size:11px;font-weight:600;letter-spacing:.5px;color:var(--txt-3);margin-bottom:5px}
.dt__text{margin:0;font-size:13.8px;line-height:1.78;color:var(--txt)}
.dt__none{margin:0;font-size:12px;color:var(--txt-3)}
.dt__src{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:12.5px;color:var(--txt-2);border-top:1px dashed var(--line);padding-top:13px}
.dt__src .dt__label{margin:0}
.dt__link{color:#bae6fd;text-decoration:none}
.dt__link:hover{text-decoration:underline}
.dt__kind{font-size:11.5px;color:var(--txt-3)}
.btn[hidden]{display:none}
.toolbar__sel{font-size:12.5px;color:var(--txt-3);background:var(--panel);border:1px solid var(--line);padding:5px 12px;border-radius:999px}
.toolbar__sel b{color:var(--txt-2);font-weight:600}
.gen-opt__label{display:block;font-size:12.5px;color:var(--txt-3);margin-bottom:9px}
.gen-note{font-size:11.5px;color:var(--txt-3);line-height:1.5;max-width:220px}
.spacer{flex:1}
.field{display:flex;flex-direction:column;gap:6px}
.field--row{gap:8px}
.field__label{font-size:12.5px;font-weight:600;color:var(--txt-2)}
.field__hint{font-size:11.5px;color:var(--txt-3);line-height:1.5}
.input{font-family:inherit;font-size:13.5px;color:var(--txt);background:rgba(0,0,0,.3);border:1px solid var(--line-2);border-radius:10px;padding:10px 12px;outline:none;transition:.15s;width:100%}
.input:focus{border-color:var(--acc);box-shadow:0 0 0 3px rgba(56,189,248,.15)}
select.input option{color:#0f172a;background:#f1f5f9}
.model-row{display:flex;gap:8px;align-items:stretch}
.model-row .input{flex:1}
.btn--sm{padding:8px 12px;font-size:12.5px;flex-shrink:0}

/* 模型选择器 */
.picker{margin-top:4px;border:1px solid var(--line-2);border-radius:12px;background:rgba(0,0,0,.28);overflow:hidden}
.picker[hidden]{display:none}
.picker__bar{display:flex;gap:8px;align-items:center;padding:10px;border-bottom:1px solid var(--line)}
.picker__bar .input--sm{flex:1}
.input--sm{padding:7px 10px;font-size:12.5px}
.picker__list{max-height:220px;overflow:auto;padding:6px}
.picker__item{display:block;width:100%;text-align:left;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;color:var(--txt-2);background:transparent;border:none;border-radius:8px;padding:7px 10px;cursor:pointer}
.picker__item:hover{background:var(--panel-2);color:var(--txt)}
.picker__item.is-cur{background:rgba(56,189,248,.14);color:#bae6fd}
.picker__empty{padding:16px 12px;font-size:12.5px;color:var(--txt-3);text-align:center}
.picker__foot{padding:8px 12px;border-top:1px solid var(--line);font-size:11.5px;color:var(--txt-3)}

/* 错误详情 */
.state__meta{margin:8px 0 0;font-size:12px;color:var(--txt-3);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.state__detail{margin:12px auto 0;max-width:520px;text-align:left;font-size:12px}
.state__detail summary{cursor:pointer;color:var(--txt-2);font-size:12px}
.state__detail summary:hover{color:var(--txt)}
.state__detail pre{margin:8px 0 0;padding:10px 12px;background:rgba(0,0,0,.4);border:1px solid var(--line);border-radius:10px;color:#fca5a5;white-space:pre-wrap;word-break:break-word;max-height:180px;overflow:auto;font-size:11.5px}
.switch{display:inline-flex;align-items:center;gap:10px;cursor:pointer}
.switch input{position:absolute;opacity:0;pointer-events:none}
.switch__track{width:40px;height:22px;border-radius:999px;background:rgba(255,255,255,.14);border:1px solid var(--line-2);position:relative;transition:.18s;flex-shrink:0}
.switch__thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#cbd5e1;transition:.18s}
.switch input:checked + .switch__track{background:linear-gradient(135deg,#2563eb,#7c3aed);border-color:transparent}
.switch input:checked + .switch__track .switch__thumb{transform:translateX(18px);background:#fff}
.switch__text{font-size:13px;color:var(--txt-2)}
.modal__msg{font-size:12.5px;padding:10px 12px;border-radius:10px;border:1px solid var(--line)}
.modal__msg.is-ok{color:#bbf7d0;border-color:rgba(52,211,153,.4);background:rgba(52,211,153,.1)}
.modal__msg.is-err{color:#fecdd3;border-color:rgba(251,113,133,.4);background:rgba(251,113,133,.1)}

.demo-banner{margin:0 0 16px;font-size:12.5px;color:#fde68a;background:rgba(251,191,36,.1);border:1px solid rgba(251,191,36,.35);padding:9px 14px;border-radius:10px}

/* ===== 科幻控制台 HUD ===== */
main{perspective:1200px}
.panel{transform-style:preserve-3d}
.panel.is-active{animation:hudIn .38s cubic-bezier(.22,.7,.3,1) both}
@keyframes hudIn{from{opacity:0;transform:translateY(10px) rotateX(5deg)}to{opacity:1;transform:none}}
/* 卡片右上角 HUD 角标 */
.card::after,.op::after{content:"";position:absolute;top:9px;right:9px;width:12px;height:12px;border-top:1.5px solid rgba(125,211,252,.5);border-right:1.5px solid rgba(125,211,252,.5);border-top-right-radius:4px;opacity:.7;pointer-events:none}
.op::after{top:11px;right:11px}
/* 主导航:激活项科技辉光 */
.tab.is-active{text-shadow:0 0 14px rgba(56,189,248,.55)}
.tabs{position:relative}
/* 统计块轻微立体感 */
.stat{position:relative;overflow:hidden}
.stat::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:linear-gradient(90deg,transparent,rgba(125,211,252,.5),transparent)}
@media(prefers-reduced-motion:reduce){
  .panel.is-active{animation:none}
  .badge-new{animation:none}
}

/* ===== 移动端(手机竖屏 / 窄窗) ===== */
@media(max-width:640px){
  .shell{padding:14px 13px calc(34px + env(safe-area-inset-bottom))}

  /* 顶部:标题一行,状态胶囊两列;设置按钮收进右上角,不再独占一整行 */
  .masthead{gap:10px;position:relative}
  .logo{width:40px;height:40px;border-radius:12px}
  .masthead__text h1{font-size:20px}
  .masthead__sub{font-size:11.5px}
  .masthead__actions{width:100%;display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .masthead__actions .source-chip{width:100%;min-width:0;justify-content:center;padding:6px 8px}
  .masthead__actions .btn{position:absolute;top:2px;right:0;padding:8px 10px}
  .updated{margin:12px 2px 14px;font-size:12px}

  /* 主导航:四等分 + 吸顶,长列表里也能随时切看板 */
  .tabs{position:sticky;top:0;z-index:6;display:grid;grid-template-columns:repeat(5,1fr);gap:0;
    margin:0 -13px 16px;padding:0 13px;background:rgba(7,11,22,.88);
    backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
  .tab{justify-content:center;gap:5px;padding:10px 2px 12px;font-size:12px;letter-spacing:.2px}
  .tab__ico{font-size:11.5px}
  .tab.is-active::before{left:3px;right:3px;top:6px;bottom:4px}
  .tab.is-active::after{left:16%;right:16%}
  .tab__badge{top:4px;right:4px}

  /* 工具栏:状态与生成按钮同一行;按钮紧凑化 + 斜切角,不再整行大块 */
  .toolbar{gap:8px;margin-bottom:14px}
  .toolbar .spacer{display:none}
  .toolbar__status{margin-left:0;text-align:right;font-size:11.5px}
  .toolbar>.btn{flex-basis:auto;margin-left:auto;justify-content:center;padding:8px 14px;font-size:12.5px;
    clip-path:polygon(8px 0,100% 0,calc(100% - 8px) 100%,0 100%)}

  /* 筛选:改成横向滑动的一排,避免十几个赛道 chip 撑满屏幕 */
  .filters{gap:11px;margin-bottom:16px}
  .filter-group{display:block}
  .filter-group__label{display:block;min-width:0;margin-bottom:6px;font-size:11.5px}
  .filters .chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:5px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .filters .chips::-webkit-scrollbar{display:none}
  .filters .chip{flex:0 0 auto;padding:8px 13px;font-size:13px}

  /* 统计:两列 */
  .stats{grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:16px}
  .stat{padding:12px 13px}
  .stat__n{font-size:22px}

  /* 卡片 */
  .list{gap:10px}
  .grid{gap:10px}
  .card,.op{padding:14px 15px}
  .card__title{font-size:15.5px}
  .op__title{font-size:15px}
  .card__foot{gap:8px}
  .ops-hint{font-size:11.5px;margin-bottom:12px}
  .ops-error{flex-wrap:wrap}
  .state{padding:40px 12px}
  .foot{margin-top:28px;padding-top:14px}

  /* 弹窗:底部抽屉,标题与操作条吸边,小屏也能单手操作 */
  .modal{padding:0;place-items:end center}
  .modal__card{max-width:none;max-height:92vh;max-height:92dvh;border-radius:20px 20px 0 0;border-left:none;border-right:none;border-bottom:none}
  .modal__head{position:sticky;top:0;z-index:2;background:#0d1424;padding:14px 16px}
  .modal__head h2{font-size:15.5px}
  .modal__body{padding:14px 16px;gap:12px}
  .modal__foot{position:sticky;bottom:0;z-index:2;flex-wrap:wrap;background:#0b1120;padding:12px 16px calc(12px + env(safe-area-inset-bottom))}
  .modal__foot .spacer{display:none}
  .modal__foot .btn{flex:1;min-width:0;justify-content:center}
  .gen-note{width:100%;max-width:none;order:-1}
  .modal .chip{padding:9px 15px;font-size:13.5px}
  .icon-btn{padding:8px 12px;font-size:18px}
  .dt__text{font-size:14.5px}
  .input{font-size:16px}
  .picker__item{padding:10px}
}

/* 触屏没有真正的 hover:去掉悬停位移/高亮,否则点完一张卡会一直"亮着" */
@media(hover:none){
  .card:hover{border-color:var(--line);background:var(--panel);transform:none}
  .op:hover,.op--policy:hover,.op--local:hover{border-color:var(--line);transform:none;box-shadow:none}
  .btn:hover,.chip:hover,.tab:hover,.icon-btn:hover{transform:none}
  .btn:hover{border-color:var(--line-2)}
  .chip:not(.is-on):hover{border-color:var(--line);color:var(--txt-2)}
  .tab:not(.is-active):hover{color:var(--txt-3)}
  .icon-btn:hover{background:transparent;color:var(--txt-2)}
}

/* Netlify 免费档注入的右下角角标:hud 脚本会运行时插入 iframe#nl-badge-frame 及 .nl-wrap/#nl-badge/#nl-card(带内联 fixed 定位)。
   全局隐藏:id 以 nl- 开头的一律压掉,!important 压过内联样式;本应用自身没有任何 nl-* 元素,不会误伤。 */
.nl-wrap, [id^='nl-'], div[data-nl-ready], iframe[src*='netlify.com'] {
  display: none !important;
  visibility: hidden !important;
  width: 0 !important;
  height: 0 !important;
}

/* 手机/平板可读性与科幻感的折中:面板半透明深色(地球辉光可隐约透出但不吃字),3D 背景适度调暗。
   桌面端卡片是 3.5% 白的半透明,靠深色背景衬字;小屏地球更亮,故单独压底但保留透感。 */
@media(max-width:640px),(hover:none){
  :root{--panel:rgba(9,14,26,.74);--panel-2:rgba(13,19,33,.82)}
  #bg3d{opacity:.6}
  .op{background-color:rgba(11,15,29,.78);background-image:linear-gradient(160deg,rgba(124,58,237,.14),rgba(56,189,248,.07))}
}
