/* ── 苹果语义调色板(HIG):tint = 印章绯红,其余全部黑白灰 ──
   L1/L2 共用同一套;深色随系统自动翻转;L3 恒为深色(保险库的「暗室」感)。
   组件一律引用变量,勿写死颜色。 */
:root{
  --tint:#0066CC;                   /* apple.com 链接蓝 */
  --primary:var(--tint);
  --primary-soft:#0077ED;
  --btn-bg:#0071E3;                 /* 官网按钮蓝(购买按钮同款) */
  --btn-hover:#0077ED;
  --hanko:#9E2B25;                  /* 印章绯红:仅日付印(内容色,非 UI 色) */
  --paper:#FFFFFF;                  /* apple.com:纯白页面 */
  --card:#F5F5F7;                   /* 浅灰磁贴(官网产品卡的灰) */
  --ink:#1D1D1F;                    /* 官网正文黑 */
  --muted:#6E6E73;                  /* 官网次级灰 */
  --line:rgba(0,0,0,.10);           /* 发丝分割线 */
  --fill:#FFFFFF;                   /* 灰磁贴内的输入框:白色圆角(官网搜索框式) */
  --tag-bg:rgba(0,102,204,.10);     /* tint 淡染 */
  --ok:#1F7A43;
  --danger:#D70015;
  --radius:18px;                    /* 磁贴 */
  --radius-s:10px;                  /* 控件 */
  --bg:var(--paper);                /* 兼容旧引用 */
}
/* 深色调色板(apple.com 夜间:黑底 + #1D1D1F 磁贴)。两处引用:系统深色 + L3 */
@media (prefers-color-scheme:dark){
  body:not(.l3){
    --primary:#2997FF;--primary-soft:#64B2FF;
    --btn-bg:#0071E3;--btn-hover:#0077ED;
    --hanko:#C4554E;
    --paper:#000;--card:#1D1D1F;--ink:#F5F5F7;--muted:#86868B;
    --line:rgba(255,255,255,.14);--fill:#2C2C2E;
    --tag-bg:rgba(41,151,255,.14);--ok:#30D158;--danger:#FF453A;
  }
}
body.l3{
  --primary:#2997FF;--primary-soft:#64B2FF;
  --btn-bg:#0071E3;--btn-hover:#0077ED;
  --hanko:#C4554E;
  --paper:#000;--card:#1D1D1F;--ink:#F5F5F7;--muted:#86868B;
  --line:rgba(255,255,255,.14);--fill:#2C2C2E;
  --tag-bg:rgba(41,151,255,.14);--ok:#30D158;--danger:#FF453A;
}
*{box-sizing:border-box;margin:0;padding:0}
[hidden]{display:none!important}
html{font-size:16px}
/* select 的基础外观:放在最前面当兜底,后面各页的定宽规则照常覆盖。
   原本有几处裸 select 沿用浏览器默认样式,高度只有 19px,移动端很难点中。 */
select{
  min-height:34px;border:1px solid var(--line);border-radius:6px;
  padding:7px 8px;font-size:.85rem;font-family:inherit;
  color:var(--ink);background:var(--card);
}
body{
  font-family:-apple-system,"Hiragino Sans","Noto Sans SC","PingFang SC",sans-serif;
  background:var(--paper);color:var(--ink);
  min-height:100vh;display:flex;flex-direction:column;
}
/* ── 顶栏:毛玻璃(苹果式),内容从底下透过去 ── */
header{
  position:sticky;top:0;z-index:20;
  background:color-mix(in srgb, var(--paper) 80%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
  color:var(--ink);
  border-bottom:.5px solid var(--line);
  padding:10px 20px;display:flex;align-items:center;gap:12px;
}
header h1{
  font-family:"Hiragino Mincho ProN","Noto Serif SC","Songti SC",serif;
  font-size:1.25rem;font-weight:600;letter-spacing:.35em;
}
/* 以下几处用 padding 把触摸区补到 WCAG 2.5.8 要求的 24×24,
   再用等量负 margin 抵消,视觉位置不变 */
header .brand{display:inline-block;color:inherit;text-decoration:none;padding:3px 0}
header .date{font-size:.78rem;color:var(--muted);letter-spacing:.05em}
/* 加了 padding 后 baseline 对齐会歪,改成居中 */
header .logout-slot{margin-left:auto;display:flex;align-items:center;gap:8px}
header .uname{font-size:.72rem;color:var(--muted);white-space:nowrap}
/* 顶栏动作按苹果惯例用 tint 色 */
header .logout{
  background:none;border:none;color:var(--primary);
  font-size:.78rem;cursor:pointer;font-family:inherit;
  padding:6px 8px;margin:-6px -8px;
}
header .logout:hover{color:var(--primary-soft)}
header .login-link{
  color:var(--primary);font-size:.78rem;text-decoration:none;white-space:nowrap;
  display:inline-block;padding:6px 10px;margin:-6px -10px;
}
header .login-link:hover{color:var(--primary-soft)}
/* 狭い画面では日付を落とす。L2 はユーザー名と登出が増えるぶん L1 より窮屈で、
   375px だと站名が2行に折れてヘッダーが倍の高さになる */
@media (max-width:480px){
  header{padding:12px 14px;gap:10px}
  header h1{font-size:1.1rem;letter-spacing:.2em;white-space:nowrap}
  header .date{display:none}
}
/* ── 导航(顶栏已 sticky,导航随内容滚动)── */
nav{
  display:flex;background:var(--card);border-bottom:.5px solid var(--line);
}
nav a{
  flex:1;padding:12px 0;border:none;background:none;cursor:pointer;
  font-size:.88rem;color:var(--muted);border-bottom:2px solid transparent;
  font-family:inherit;text-align:center;text-decoration:none;
}
nav a.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
nav a:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
main{flex:1;max-width:680px;width:100%;margin:0 auto;padding:20px 16px 60px}
/* ── 快速记录 ── */
.composer{
  background:var(--card);border:none;border-radius:var(--radius);
  padding:14px;display:flex;flex-direction:column;gap:10px;
}
.composer textarea{
  border:none;resize:vertical;min-height:64px;font-family:inherit;
  font-size:.95rem;outline:none;background:transparent;color:var(--ink);
}
.composer .row{display:flex;gap:8px;align-items:center}
.composer input[type=text]{
  flex:1;border:1px solid var(--line);border-radius:6px;padding:7px 10px;
  font-size:.82rem;font-family:inherit;
}
/* apple.com 式药丸按钮 + 按下弹性微缩;次级按钮为 tint 淡染药丸 */
.btn{
  background:var(--btn-bg);color:#fff;border:none;border-radius:980px;
  padding:10px 22px;font-size:.9rem;font-weight:500;cursor:pointer;font-family:inherit;
  transition:transform .18s cubic-bezier(.32,1.4,.5,1),background .15s ease,opacity .15s ease;
}
.btn:hover{background:var(--btn-hover)}
.btn:active{transform:scale(.96)}
.btn.ghost{background:var(--tag-bg);border:none;color:var(--primary)}
.btn.ghost:hover{background:var(--tag-bg);color:var(--primary-soft)}
/* 标签筛选条 */
.filter-bar{
  margin-top:14px;display:none;align-items:center;gap:8px;
  font-size:.78rem;color:var(--muted);
}
.filter-bar.on{display:flex}
.filter-bar .clear{
  background:none;border:none;color:var(--muted);cursor:pointer;
  font-size:.78rem;font-family:inherit;text-decoration:underline;
}
/* 时间线 */
.timeline{margin-top:26px;position:relative;padding-left:74px}
.timeline::before{
  content:"";position:absolute;left:56px;top:6px;bottom:6px;
  width:1px;background:var(--line);
}
.entry{position:relative;margin-bottom:22px}
.stamp{ /* 签名元素:日付印 */
  position:absolute;left:-74px;top:0;width:46px;height:46px;
  border:1.5px solid var(--hanko);border-radius:50%;color:var(--hanko);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  font-size:.58rem;line-height:1.25;background:var(--card);
  transform:rotate(-6deg);letter-spacing:.02em;
}
.stamp b{font-size:.82rem;font-weight:700}
.bubble{
  background:var(--card);border:none;border-radius:var(--radius);
  padding:12px 14px;font-size:.92rem;line-height:1.65;white-space:pre-wrap;
}
.bubble .meta{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap}
.tag{
  font-size:.7rem;color:var(--primary);background:var(--tag-bg);
  border-radius:4px;padding:2px 8px;border:none;cursor:pointer;font-family:inherit;
}
.empty{color:var(--muted);font-size:.85rem;text-align:center;padding:30px 0}
/* ── 工具网格:白卡浮在灰底上,无边框大圆角(设置 App 式)── */
.tool-block{
  background:var(--card);border:none;border-radius:var(--radius);
  padding:18px 16px;margin-bottom:18px;
}
.tool-block h2{
  font-size:1.02rem;font-weight:600;color:var(--ink);margin-bottom:12px;
}
/* 汇率 */
.fx-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.fx-row input{
  width:130px;border:1px solid var(--line);border-radius:6px;padding:8px 10px;
  font-size:1rem;font-family:inherit;
}
.fx-row .eq{color:var(--muted)}
.fx-row .fx-rate{width:140px}
/* 窄屏下 flex 会把「牌价日期」和日期框拆到两行,标签就认不出对应哪个控件了 */
.fx-rate-row{display:grid;grid-template-columns:auto 1fr;gap:8px 10px;align-items:center}
.fx-rate-row .fx-rate,.fx-rate-row .fx-date{width:100%}
.fx-line{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.fx-group{flex:1;min-width:296px;display:flex;flex-direction:column;gap:5px}
.fx-lbl{display:block;font-size:.72rem;color:var(--muted)}
.fx-pair{display:flex;gap:8px}
.fx-pair select{
  flex:0 0 auto;width:118px;border:1px solid var(--line);border-radius:6px;
  padding:8px 6px;font-size:.88rem;font-family:inherit;color:var(--ink);
  background:var(--card);
}
.fx-pair input{
  flex:1;min-width:170px;border:1px solid var(--line);border-radius:6px;
  padding:8px 10px;font-size:.95rem;font-family:inherit;
}
.fx-pair input::placeholder{font-size:.82rem}
.fx-line .fx-swap{flex:0 0 auto;padding:7px 10px;margin-bottom:1px}
.fx-rate-row{margin-top:10px}
.fx-row .fx-fee{width:72px}
.fx-cc-group{margin-top:12px;display:flex;flex-direction:column;gap:5px}
.fx-cc-row{margin-top:0}
.fx-row .fx-date{
  border:1px solid var(--line);border-radius:6px;padding:7px 8px;
  font-size:.85rem;font-family:inherit;color:var(--ink);background:var(--card);
}
.fx-cmp-btn{margin-top:10px;padding:6px 14px;font-size:.8rem}
.fx-cmp{margin-top:8px}
.fx-cmp-row{
  display:flex;align-items:center;gap:10px;padding:8px 4px;
  border-bottom:1px dashed var(--line);font-size:.85rem;
}
.fx-cmp-row .n{flex:1;min-width:0}
.fx-cmp-row .f{color:var(--muted);font-size:.78rem}
.fx-cmp-row .best{
  font-size:.68rem;color:var(--ok);border:1px solid var(--ok);
  border-radius:4px;padding:1px 6px;
}
/* 折叠科普:发丝描边圆角块,磁贴内外都成立 */
.fx-detail{
  margin-top:12px;border:.5px solid var(--line);border-radius:12px;
  background:none;
  padding:10px 12px;font-size:.8rem;color:var(--muted);line-height:1.7;
}
.fx-detail summary{
  cursor:pointer;color:var(--ink);font-weight:600;font-size:.82rem;
  padding:5px 0;   /* 触摸区补到 24px 以上 */
}
.fx-detail p{margin:.6em 0 0}
.fx-detail b{color:var(--ink)}
.fx-cc-row select{
  border:1px solid var(--line);border-radius:6px;padding:7px 8px;
  font-size:.88rem;font-family:inherit;color:var(--ink);background:var(--card);
}
.fx-cc{
  margin-top:10px;padding:10px 12px;border:1px solid var(--line);
  border-radius:6px;background:var(--tag-bg);font-size:.9rem;font-weight:600;
}
.fx-cc-sub{margin-top:4px;font-size:.75rem;font-weight:400;color:var(--muted)}
.fx-note{font-size:.72rem;color:var(--muted);margin-top:8px}
/* 单词卡 */
.card-flip{
  border:1px solid var(--line);border-radius:var(--radius);padding:26px 16px;
  text-align:center;cursor:pointer;user-select:none;background:var(--paper);
}
.card-flip .word{font-size:1.4rem;font-weight:700;letter-spacing:.02em}
.card-flip .meaning{margin-top:8px;color:var(--primary);font-size:.95rem;min-height:1.4em;white-space:pre-wrap}
.card-flip .hint{margin-top:10px;font-size:.7rem;color:var(--muted)}
.card-nav{display:flex;gap:8px;margin-top:12px;justify-content:center;align-items:center}
.w-count{font-size:.75rem;color:var(--muted);min-width:44px;text-align:center}
.btn.ghost.danger{color:var(--danger);border-color:var(--danger)}
.word-form{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}
.word-form input{
  flex:1;min-width:120px;border:1px solid var(--line);border-radius:6px;
  padding:8px 10px;font-size:.85rem;font-family:inherit;
}
/* 班表 */
.week-nav{
  display:flex;align-items:center;justify-content:center;gap:12px;
  margin-bottom:10px;font-size:.8rem;color:var(--muted);
}
.week-nav .btn{padding:4px 12px}
.shift-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.shift-cell{
  border:1px solid var(--line);border-radius:6px;padding:8px 2px;text-align:center;
  font-size:.72rem;cursor:pointer;background:var(--paper);
}
.shift-cell.today{border-color:var(--primary);border-width:1.5px}
.shift-cell .d{color:var(--muted)}
.shift-cell .s{display:block;margin-top:4px;font-weight:700;min-height:1.2em}
.s.day{color:var(--ink)} .s.night{color:var(--hanko)} .s.off{color:var(--muted)}
.shift-note{font-size:.72rem;color:var(--muted);margin-top:8px}
/* 书签 */
.bm-form{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.bm-form input{
  flex:1;min-width:140px;border:1px solid var(--line);border-radius:6px;
  padding:8px 10px;font-size:.85rem;font-family:inherit;
}
.bm-item{
  display:flex;align-items:center;gap:6px;border-bottom:1px dashed var(--line);
}
.bm-item a{
  flex:1;display:flex;justify-content:space-between;gap:10px;padding:10px 4px;
  color:var(--ink);text-decoration:none;font-size:.9rem;min-width:0;
}
.bm-item a:hover{color:var(--primary)}
.bm-item .url{color:var(--muted);font-size:.72rem;max-width:45%;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.bm-del{
  background:none;border:none;color:var(--muted);font-size:1rem;cursor:pointer;
  padding:4px 8px;font-family:inherit;
}
.bm-del:hover{color:var(--danger)}
/* ── 工具目录 ── */
.menu-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
/* apple.com 产品磁贴:浅灰底、文字居中、悬停轻浮 */
.menu-card{
  background:var(--card);border:none;border-radius:var(--radius);
  padding:26px 14px 24px;text-decoration:none;color:var(--ink);
  display:flex;flex-direction:column;gap:6px;align-items:center;text-align:center;
  transition:transform .2s cubic-bezier(.32,1.4,.5,1),opacity .15s ease;
}
.menu-card:hover{transform:scale(1.015)}
.menu-card:active{transform:scale(.98)}
.menu-card.disabled{opacity:.55;cursor:default}
.menu-card.disabled:hover{transform:none}
.menu-card b{font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--ink)}
.menu-card span{font-size:.75rem;color:var(--muted);line-height:1.5}
.crumb{
  display:inline-block;font-size:.82rem;color:var(--primary);
  text-decoration:none;padding:5px 8px;margin:0 0 4px -8px;
}
.crumb:hover{color:var(--primary-soft)}
/* apple.com 式大标题:居中、大、收紧字距 */
.tool-title{
  text-align:center;font-size:2.1rem;font-weight:700;color:var(--ink);
  letter-spacing:-.015em;line-height:1.15;margin:14px 0 24px;
}
/* ── 科学计算器(暗色面板)── */
.calc-app{
  background:#1B1917;border-radius:16px;padding:16px;margin-bottom:14px;
}
.calc-ind{
  height:1.1em;display:flex;gap:10px;font-size:.72rem;color:#9B948C;
  padding:0 4px;
}
.calc-display{
  width:100%;border:none;background:transparent;color:#FAF9F6;
  font-size:2.1rem;font-family:inherit;text-align:right;outline:none;
  padding:4px;
}
.calc-display::placeholder{color:#5A554F}
.calc-result{
  color:#FAF9F6;text-align:right;font-size:1.5rem;font-weight:600;
  padding:0 4px 8px;word-break:break-all;
}
.calc-result.err{color:#E8685F;font-size:.85rem;font-weight:400}
.calc-pad{display:grid;gap:7px;margin-top:8px}
.calc-pad.sci{grid-template-columns:repeat(5,1fr)}
.calc-pad.main{grid-template-columns:repeat(4,1fr)}
.calc-key{
  border:none;border-radius:10px;padding:13px 0;font-size:1.05rem;
  cursor:pointer;font-family:inherit;background:#3A3733;color:#FAF9F6;
}
.calc-key:active{filter:brightness(1.35)}
.calc-pad.sci .calc-key{
  background:#242220;color:#C9C2B8;font-size:.82rem;padding:9px 0;
}
.calc-key.util{background:#4A4540;color:#FAF9F6}
.calc-key.op{background:#FF9F0A;color:#fff;font-size:1.2rem}  /* 苹果计算器橙 */
.calc-key.eq{background:#FF9F0A;color:#fff;font-size:1.3rem;font-weight:600}
.calc-key.on{outline:2px solid #E8685F;color:#E8685F}
/* ── 函数图像(Desmos 式)── */
.g-panel{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:12px;
}
.g-rows{display:flex;flex-direction:column;gap:8px}
.g-item{display:flex;flex-direction:column;gap:6px}
.g-row{display:flex;align-items:center;gap:8px}
.g-dom-btn{
  background:none;border:1px solid var(--line);border-radius:6px;
  color:var(--muted);font-size:.72rem;cursor:pointer;font-family:inherit;
  padding:5px 9px;flex-shrink:0;
}
.g-dom-btn:hover{border-color:var(--primary-soft)}
.g-dom-btn.on{color:var(--primary);border-color:var(--primary)}
/* 定义域行:2D 与 3D 共用同一套结构与样式 */
.g-dom-line{
  display:flex;align-items:center;gap:6px;margin-left:20px;flex-wrap:wrap;
  font-size:.75rem;color:var(--muted);
}
.g-dom-line input{
  width:104px;border:1px solid var(--line);border-radius:6px;padding:6px 8px;
  font-size:.8rem;font-family:inherit;
}
.g-dom-line input::placeholder{font-size:.75rem}
.g-dom-line b{color:var(--ink);font-weight:600;margin-left:4px}
.g-dom-line[hidden]{display:none}
.g-row .g-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}
.g-row input{
  flex:1;border:1px solid var(--line);border-radius:6px;padding:9px 11px;
  font-size:.95rem;font-family:inherit;color:var(--ink);background:var(--paper);
  min-width:0;
}
.g-row input:focus{outline:2px solid var(--primary-soft);outline-offset:-1px}
.g-row.err input{border-color:var(--danger);outline-color:var(--danger)}
.g-mode-switch{display:flex;justify-content:center;gap:8px;margin:-6px 0 14px}
.g-mode-switch button{
  border:1px solid var(--line);background:var(--card);border-radius:6px;
  padding:7px 16px;font-size:.82rem;cursor:pointer;font-family:inherit;
  color:var(--muted);
}
.g-mode-switch button.on{color:var(--primary);border-color:var(--primary);font-weight:600}
.g3-canvas{
  width:100%;height:62vh;min-height:320px;display:block;border-radius:8px;
  border:1px solid var(--line);touch-action:none;
  cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M12 2.5v19M2.5 12h19' stroke='%23fff' stroke-width='5' stroke-linecap='round'/%3E%3Cpath d='M12 2.5v19M2.5 12h19' stroke='%23171717' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E") 12 12, crosshair;
}
.g-gate{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:32px 20px;text-align:center;color:var(--muted);font-size:.9rem;line-height:1.9;
}
.g-gate a{color:var(--primary);text-decoration:none;font-weight:600}
.g-toolbar{display:flex;align-items:center;gap:12px}
.g-addbtn{
  background:none;border:none;color:var(--muted);font-size:.8rem;cursor:pointer;
  font-family:inherit;padding:8px 2px;text-align:left;
}
.g-addbtn:hover{color:var(--primary)}
.g-addbtn:disabled{opacity:.45;cursor:default}
.g-kb-btn{padding:5px 12px;font-size:.78rem}
.g-kb{
  display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin:8px 0;
}
.g-key{
  border:1px solid var(--line);background:var(--card);border-radius:6px;
  padding:9px 0;font-size:.85rem;cursor:pointer;font-family:inherit;color:var(--ink);
}
.g-key:hover{border-color:var(--primary-soft)}
.g-coord{
  position:absolute;pointer-events:none;z-index:3;
  background:var(--card);border:1px solid var(--line);border-radius:6px;
  padding:6px 9px;font-size:.75rem;color:var(--ink);
  box-shadow:0 2px 8px rgba(26,25,23,.1);white-space:nowrap;
}
.g-coord .c{display:flex;align-items:center;gap:6px;line-height:1.5}
.g-coord .d{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.g-wrap{position:relative}
.g-canvas{
  width:100%;height:62vh;min-height:320px;display:block;border-radius:8px;
  border:1px solid var(--line);touch-action:none;
  cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M12 2.5v19M2.5 12h19' stroke='%23fff' stroke-width='5' stroke-linecap='round'/%3E%3Cpath d='M12 2.5v19M2.5 12h19' stroke='%23171717' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E") 12 12, crosshair;
}
.g-ctrl{
  position:absolute;right:10px;bottom:10px;display:flex;flex-direction:column;gap:6px;
}
.g-ctrl button{
  min-width:36px;height:36px;border-radius:8px;border:1px solid var(--line);
  background:var(--card);color:var(--ink);font-size:1.1rem;cursor:pointer;
  font-family:inherit;box-shadow:0 1px 3px rgba(26,25,23,.12);padding:0 6px;
}
.g-ctrl .ctrl-mode{font-size:.72rem}
/* 全屏模式:画布铺满,控件浮在右下 */
.g-wrap:fullscreen{background:var(--card)}
.g-wrap:fullscreen .g-canvas,
.g-wrap:fullscreen .g3-canvas{
  width:100vw;height:100vh;border:none;border-radius:0;
}
.g-wrap:fullscreen .g-ctrl{right:20px;bottom:20px}
/* CSS 兜底全屏(iOS Safari 等不支持 Fullscreen API 的环境) */
.g-wrap.g-full{position:fixed;inset:0;z-index:50;background:var(--card);margin:0}
.g-wrap.g-full .g-canvas,
.g-wrap.g-full .g3-canvas{
  width:100vw;height:100vh;min-height:0;border:none;border-radius:0;
}
.g-wrap.g-full .g-ctrl{right:20px;bottom:20px}
body.g-full-lock{overflow:hidden}
.g-ctrl button:hover{border-color:var(--primary)}
/* 情绪功耗 */
.em-hero{text-align:center}
.em-hero .fx-lbl{text-align:center}
.em-total{
  font-size:2.6rem;font-weight:700;color:var(--ink);margin:6px 0 2px;
  font-variant-numeric:tabular-nums;letter-spacing:.02em;
}
.em-total.is-empty{color:var(--muted);font-weight:400;font-size:2rem}
.em-sub{font-size:.82rem;color:var(--muted)}
.em-warn{
  margin-top:12px;font-size:.75rem;color:var(--muted);line-height:1.7;
  border-top:1px dashed var(--line);padding-top:10px;
}
.em-warn b{color:var(--ink)}
.em-rows{display:flex;flex-direction:column;gap:10px}
.em-row{
  display:grid;grid-template-columns:78px 1fr auto;gap:8px 10px;
  align-items:center;font-size:.85rem;
}
.em-row .n{color:var(--ink)}
.em-track{height:8px;border-radius:4px;background:var(--line);overflow:hidden}
.em-fill{display:block;height:100%;background:var(--ink);border-radius:4px}
.em-row b{font-variant-numeric:tabular-nums;white-space:nowrap}
.em-meta{
  grid-column:2 / 4;font-size:.72rem;color:var(--muted);margin-top:-4px;
}
.em-global{
  font-size:1.7rem;font-weight:700;color:var(--ink);margin:6px 0 2px;
  font-variant-numeric:tabular-nums;
}
.em-param-lbl{margin-top:14px}
.em-params{display:flex;flex-direction:column;gap:8px}
.em-param{display:flex;align-items:center;gap:6px;font-size:.8rem;flex-wrap:wrap}
.em-param .n{flex:0 0 78px;color:var(--ink)}
.em-param input{
  width:62px;border:1px solid var(--line);border-radius:6px;padding:5px 7px;
  font-size:.8rem;font-family:inherit;color:var(--ink);background:var(--card);
}
.em-param input::placeholder{color:var(--muted);opacity:1}
.em-param .u{color:var(--muted);font-size:.72rem}
.em-tag{
  font-size:.65rem;border-radius:4px;padding:1px 6px;flex:0 0 auto;
}
.em-tag.meas{color:var(--ok);border:1px solid var(--ok)}
.em-tag.assume{color:var(--muted);border:1px solid var(--line)}
.em-cite-note{
  margin-top:10px;padding-top:10px;border-top:1px dashed var(--line);
}
/* 图片压缩 */
.im-drop{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  padding:26px 16px;margin-bottom:4px;cursor:pointer;text-align:center;
  border:1px dashed var(--line);border-radius:10px;background:var(--card);
  transition:border-color .15s,background .15s;
}
.im-drop:hover,.im-drop.over{border-color:var(--ink);background:var(--bg)}
.im-drop b{font-size:.92rem;color:var(--ink)}
.im-drop span{font-size:.75rem;color:var(--muted)}
/* 三个 select 同宽,和信用卡汇率页的定宽 select 一个样式 */
#im-fmt,#im-mode,#im-max{
  flex:0 0 auto;width:160px;border:1px solid var(--line);border-radius:6px;
  padding:8px 6px;font-size:.88rem;font-family:inherit;color:var(--ink);
  background:var(--card);
}
.im-q-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:120px}
.im-q-wrap input[type=range]{flex:1;accent-color:var(--ink);min-width:90px}
.im-q-val{
  font-size:.8rem;color:var(--muted);font-variant-numeric:tabular-nums;
  min-width:2.2em;text-align:right;
}
/* 要压过 .fx-row input 的 width:130px,得带上 .fx-row */
.fx-row .im-kb{
  width:84px;border:1px solid var(--line);border-radius:6px;padding:8px 10px;
  font-size:.9rem;font-family:inherit;color:var(--ink);background:var(--card);
}
.im-kb::placeholder{color:var(--muted);opacity:1}
.fx-row .im-kb-u{font-size:.8rem;white-space:nowrap}
.im-png-note{margin-top:6px}
.im-list{display:flex;flex-direction:column;gap:10px;margin-top:16px}
.im-item{
  display:grid;grid-template-columns:56px 1fr auto;gap:4px 12px;align-items:center;
  padding:10px;border:1px solid var(--line);border-radius:10px;
}
.im-thumb{
  grid-row:span 1;width:56px;height:56px;object-fit:cover;border-radius:6px;
  background:var(--bg);border:1px solid var(--line);
}
.im-info{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0}
.im-name{
  flex:1 1 100%;font-size:.85rem;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.im-size{font-size:.8rem;color:var(--ink);font-variant-numeric:tabular-nums}
.im-badge{
  font-size:.7rem;border-radius:4px;padding:1px 6px;
  color:var(--ok);border:1px solid var(--ok);
}
.im-badge.up{color:var(--muted);border-color:var(--line)}
.im-meta{flex:1 1 100%;font-size:.72rem;color:var(--muted)}
.im-dl{padding:6px 14px;font-size:.8rem}
.im-actions{margin-top:14px}
/* 入院経過(L2) */
.sm-backend{
  font-size:.75rem;padding:7px 10px;border-radius:6px;margin-bottom:14px;
  border:1px solid var(--line);color:var(--muted);
}
.sm-backend.ok{color:var(--ok);border-color:var(--ok)}
.sm-backend.warn{color:var(--muted);border-style:dashed}
/* 2つの日付を1行に。→ を挟むと 375px で3行に割れるので置かない */
.sm-dates{flex-wrap:nowrap;gap:8px}
.fx-row .sm-date{flex:1 1 0;width:auto;min-width:0}
.sm-text,.sm-out{
  display:block;width:100%;margin-bottom:4px;
  border:1px solid var(--line);border-radius:8px;padding:9px 11px;
  font-size:.9rem;font-family:inherit;line-height:1.7;color:var(--ink);
  background:var(--card);resize:vertical;
}
.sm-text::placeholder{color:var(--muted);opacity:1}
.sm-out{margin-top:4px;line-height:1.9}
.sm-actions{margin-top:14px}
.sm-out-wrap{margin-top:18px;padding-top:16px;border-top:1px dashed var(--line)}
.sm-code{
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:1.1rem;letter-spacing:.12em;color:var(--ink);margin:0 4px;
}
/* 图片转 PDF */
#pd-size,#pd-orient,#pd-margin,#pd-quality{
  flex:0 0 auto;width:172px;border:1px solid var(--line);border-radius:6px;
  padding:8px 6px;font-size:.88rem;font-family:inherit;color:var(--ink);
  background:var(--card);
}
#pd-orient:disabled{color:var(--muted);background:var(--bg)}
.pd-list{display:flex;flex-direction:column;gap:8px;margin-top:16px}
.pd-item{
  display:flex;align-items:center;gap:10px;
  padding:8px 10px;border:1px solid var(--line);border-radius:10px;
}
.pd-no{
  flex:0 0 auto;width:20px;text-align:center;font-size:.8rem;color:var(--muted);
  font-variant-numeric:tabular-nums;
}
.pd-thumb{
  flex:0 0 auto;width:48px;height:48px;border-radius:6px;
  background:var(--bg);border:1px solid var(--line);
}
.pd-info{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.pd-name{
  font-size:.85rem;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.pd-meta{font-size:.72rem;color:var(--muted)}
.pd-nav{display:flex;gap:4px;flex:0 0 auto}
.pd-btn{padding:5px 9px;font-size:.8rem;line-height:1}
.pd-btn:disabled{opacity:.35;cursor:default}
.pd-result{
  margin-top:14px;padding:12px;border:1px solid var(--line);border-radius:10px;
  background:var(--bg);
}
.pd-done{display:flex;align-items:center;justify-content:space-between;gap:12px}
.pd-done b{font-size:.95rem;color:var(--ink);font-variant-numeric:tabular-nums}
.pd-notes{margin-top:8px;font-size:.72rem;color:var(--muted);line-height:1.6}
/* 配色对比度 */
.co-line{margin-bottom:2px}
/* 同样要带上 .fx-row 才压得过 .fx-row input 的 width:130px */
.fx-row .co-pick{
  flex:0 0 auto;width:52px;height:38px;padding:2px;cursor:pointer;
  border:1px solid var(--line);border-radius:6px;background:var(--card);
}
.fx-row .co-hex{
  width:126px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  text-transform:uppercase;
}
.co-hex.bad{border-color:var(--danger)}
.co-eye{padding:8px 12px;font-size:.85rem}
.co-preview{
  margin-top:16px;padding:16px;border-radius:10px;border:1px solid var(--line);
}
.co-preview p{margin:0 0 8px}
.co-pv-body{font-size:16px;line-height:1.6}
.co-pv-bold{font-size:18.66px;font-weight:700}
.co-pv-large{font-size:24px}
.co-pv-ui{
  display:inline-block;padding:5px 12px;border:2px solid;border-radius:6px;
  font-size:.85rem;
}
.co-result{margin-top:16px;text-align:center}
.co-ratio{
  font-size:2.4rem;font-weight:700;color:var(--ink);
  font-variant-numeric:tabular-nums;letter-spacing:.02em;
}
.co-ratio.weak{color:var(--muted)}
.co-verdict{font-size:.85rem;color:var(--muted);margin-top:2px}
.co-rules{display:flex;flex-direction:column;gap:6px;margin-top:14px}
.co-rule{
  display:grid;grid-template-columns:76px auto 1fr;gap:4px 10px;align-items:center;
  font-size:.85rem;
}
.co-rule b{color:var(--muted)}
.co-rule.ok b{color:var(--ink)}
.co-mark{
  font-size:.7rem;border-radius:4px;padding:1px 7px;justify-self:start;
  color:var(--muted);border:1px solid var(--line);
}
.co-rule.ok .co-mark{color:var(--ok);border-color:var(--ok)}
.co-need{font-size:.72rem;color:var(--muted);grid-column:2 / 4}
.co-suggest{
  display:flex;align-items:center;flex-wrap:wrap;gap:8px;
  margin-top:14px;padding:10px 12px;font-size:.82rem;color:var(--ink);
  border:1px dashed var(--line);border-radius:8px;
}
.co-suggest span{flex:1;min-width:180px}
.co-sw{
  flex:0 0 auto!important;min-width:0!important;
  width:20px;height:20px;border-radius:4px;border:1px solid var(--line);
}
.co-apply{padding:5px 12px;font-size:.8rem;flex:0 0 auto}
.co-fmt-lbl{margin-top:16px}
.co-fmt{
  font-size:.75rem;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  line-height:1.8;word-break:break-word;
}
.co-scale{display:flex;flex-direction:column;gap:0;margin-top:12px;border-radius:8px;overflow:hidden}
.co-step{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  padding:9px 12px;cursor:pointer;font-size:.78rem;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}
.co-step b{font-weight:600}
/* 单位换算 */
.u-table-lbl{margin-top:16px}
.u-table{margin-top:6px}
.u-row{
  display:flex;align-items:center;gap:12px;padding:7px 2px;
  border-bottom:1px dashed var(--line);font-size:.85rem;
}
.u-row .n{flex:1;min-width:0;color:var(--muted)}
.u-row b{font-variant-numeric:tabular-nums}
.u-row.self{background:var(--tag-bg)}
.u-row.self .n{color:var(--ink)}
/* 网络测试 */
.net-run{margin-top:10px}
.net-grid{display:flex;gap:14px;flex-wrap:wrap;margin-top:14px}
.net-cell{
  flex:1;min-width:110px;display:flex;flex-direction:column;gap:3px;
  padding:12px;border:1px solid var(--line);border-radius:var(--radius);
  background:var(--tag-bg);
}
.net-cell .c{font-size:.72rem;color:var(--muted)}
.net-cell b{font-size:1.35rem;color:var(--ink)}
.net-info{margin-top:12px}
.net-ref{margin-top:14px}
.grade{margin-bottom:14px}
.grade-top{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.grade-top b{font-size:1.25rem;color:var(--ink)}
.grade-desc{font-size:.8rem;color:var(--muted)}
.grade-scale{display:flex;gap:5px;margin-top:10px}
.grade-scale .seg{flex:1;display:flex;flex-direction:column;gap:4px;align-items:center}
.grade-scale .bar{
  width:100%;height:6px;border-radius:3px;background:var(--line);
}
.grade-scale .lb{font-size:.68rem;color:var(--muted)}
.grade-scale .seg.on .bar{background:var(--ink);height:10px;margin-top:-2px}
.grade-scale .seg.on .lb{color:var(--ink);font-weight:700}
.grade-bars{margin-top:14px;display:flex;flex-direction:column;gap:8px}
.gb-row{display:flex;align-items:center;gap:10px;font-size:.8rem}
.gb-n{flex:0 0 32px;color:var(--muted)}
.gb-track{
  flex:1;height:8px;border-radius:4px;background:var(--line);
  overflow:hidden;min-width:60px;
}
.gb-fill{display:block;height:100%;background:var(--ink);border-radius:4px}
.gb-v{flex:0 0 auto;color:var(--muted);font-size:.75rem}
.ref-head{
  font-size:.72rem;color:var(--muted);margin:12px 0 4px;
}
.ref-head:first-child{margin-top:0}
.ref-row{
  display:flex;align-items:center;gap:10px;padding:6px 2px;
  border-bottom:1px dashed var(--line);font-size:.85rem;color:var(--muted);
}
.ref-row .mk{flex:0 0 16px;text-align:center;font-weight:700}
.ref-row .n{flex:1;min-width:0}
.ref-row .w{font-size:.75rem}
.ref-row.ok{color:var(--ink)}
.ref-row.ok .mk{color:var(--ok)}
.net-row{
  display:flex;gap:12px;padding:7px 2px;font-size:.85rem;
  border-bottom:1px dashed var(--line);
}
.net-row .n{flex:0 0 92px;color:var(--muted);font-size:.8rem}
.net-row .v{flex:1;min-width:0;word-break:break-all}
/* 二维码 */
.qr-fields{display:flex;flex-direction:column;gap:5px;margin-top:12px}
.qr-in{
  border:1px solid var(--line);border-radius:6px;padding:9px 11px;
  font-size:.95rem;font-family:inherit;color:var(--ink);background:var(--paper);
}
.qr-in:focus{outline:2px solid var(--primary-soft);outline-offset:-1px}
.qr-sub{margin-top:6px}
.qr-check{display:flex;align-items:center;gap:6px;font-size:.8rem;color:var(--muted)}
/* select 变高后 flex 会把「标签」和它的下拉框拆到两行,改用两列网格成对排列 */
.qr-opts{
  margin-top:14px;display:grid;grid-template-columns:auto 1fr;
  gap:8px 10px;align-items:center;
}
.qr-opts select{
  border:1px solid var(--line);border-radius:6px;padding:7px 8px;
  font-size:.85rem;font-family:inherit;color:var(--ink);background:var(--card);
}
.qr-out{margin-top:14px;text-align:center}
.qr-canvas{
  max-width:100%;border:1px solid var(--line);border-radius:6px;
  image-rendering:pixelated;background:#fff;
}
/* 云剪贴板 */
.cb-code-input{text-transform:uppercase}
.cb-text{
  width:100%;min-height:72px;border:1px solid var(--line);border-radius:6px;
  padding:8px 10px;font-size:.9rem;font-family:inherit;resize:vertical;
  color:var(--ink);background:var(--card);margin-bottom:10px;
}
.cb-upload-row{align-items:center}
.cb-upload-row input[type=file]{
  flex:1;min-width:140px;border:1px dashed var(--line);border-radius:6px;
  padding:7px 10px;font-size:.78rem;color:var(--muted);font-family:inherit;
}
.clip-code{
  font-size:2rem;font-weight:700;letter-spacing:.35em;color:var(--primary);
  text-align:center;padding:10px 0 2px;font-family:"Hiragino Mincho ProN","Noto Serif SC",serif;
}
.cb-pre{
  background:var(--paper);border:1px solid var(--line);border-radius:6px;
  padding:10px 12px;font-size:.88rem;font-family:inherit;white-space:pre-wrap;
  word-break:break-all;margin-bottom:10px;max-height:300px;overflow-y:auto;
}
.cb-img{max-width:100%;border-radius:6px;display:block;margin-bottom:10px}
.cb-item{
  display:flex;align-items:center;gap:8px;padding:8px 4px;
  border-bottom:1px dashed var(--line);font-size:.8rem;color:var(--muted);
  flex-wrap:wrap;
}
.cb-item b{color:var(--primary);letter-spacing:.08em}
.cb-item span{flex:1;min-width:0}
/* 创建分享选项 */
.cb-opts{
  display:flex;gap:14px;flex-wrap:wrap;align-items:center;
  font-size:.8rem;color:var(--muted);margin-bottom:12px;
}
.cb-opts label{display:flex;align-items:center;gap:6px}
.cb-opts select,.cb-opts input{
  border:1px solid var(--line);border-radius:6px;padding:6px 8px;
  font-size:.82rem;font-family:inherit;color:var(--ink);background:var(--card);
}
.cb-opts input[type=number]{width:64px}
.cb-opts .cb-pw-opt input{width:110px}
.cb-create{width:100%;padding:10px 0}
/* 创建成功面板 */
.cb-panel{
  border:1px solid var(--line);border-radius:var(--radius);
  padding:14px;margin-top:12px;background:var(--paper);
}
.cb-link{
  text-align:center;font-size:.78rem;color:var(--muted);
  word-break:break-all;margin-bottom:4px;
}
#cb-result{margin-top:4px}
footer{
  text-align:center;font-size:.7rem;color:var(--muted);padding:14px;
}
/* ── 登录页 ── */
/* apple.com 账户登录页式:无卡片、居中大标题、描边圆角输入、整宽药丸按钮 */
.login-card{
  background:none;border:none;
  padding:0;margin:9vh auto 0;max-width:340px;width:100%;
  display:flex;flex-direction:column;gap:14px;
}
.login-card h2{
  font-size:1.7rem;font-weight:700;color:var(--ink);
  letter-spacing:-.015em;text-align:center;margin-bottom:8px;
}
/* 全局填充式规则特异性更高((0,3,2)),这里必须 !important 拿回描边式 */
.login-card input{
  background:transparent!important;
  border:1px solid color-mix(in srgb, var(--muted) 55%, transparent)!important;
  border-radius:12px!important;padding:13px 14px;
  font-size:1rem;font-family:inherit;color:var(--ink);
}
.login-card .btn{width:100%;padding:13px;font-size:1rem;margin-top:4px}
.login-card input:focus{outline:none}
.form-error{color:var(--danger);font-size:.78rem;text-align:center}
.auth-alt{font-size:.75rem;color:var(--muted);text-align:center}
.auth-alt a{color:var(--primary);text-decoration:none}
/* ── 弹窗 ── */
.modal-overlay{
  position:fixed;inset:0;background:rgba(26,25,23,.45);z-index:20;
  display:flex;align-items:flex-start;justify-content:center;
}
.modal-card{margin-top:18vh;width:min(320px,86vw)}
/* ── L3 笔记 ── */
.v-tip{flex:1;font-size:.72rem;color:var(--muted)}
.v-note{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:12px 14px;margin-top:16px;
}
.v-meta{
  display:flex;gap:10px;align-items:center;font-size:.72rem;color:var(--muted);
  margin-bottom:8px;
}
.v-meta span{flex:1}
.v-act{
  background:none;border:none;color:var(--primary);font-size:.75rem;
  cursor:pointer;font-family:inherit;
}
.v-act.danger{color:var(--danger)}
.v-body{font-size:.92rem;line-height:1.65}
.v-body p{margin:.35em 0}
.v-body h2{font-size:1.05rem;margin:.5em 0 .3em}
.v-body h3{font-size:.98rem;margin:.5em 0 .3em}
.v-body h4{font-size:.92rem;margin:.5em 0 .3em}
.v-body ul{padding-left:1.3em;margin:.35em 0}
.v-body code{
  background:var(--paper);border:1px solid var(--line);border-radius:4px;
  padding:1px 5px;font-size:.85em;
}
.v-edit{
  width:100%;min-height:100px;border:1px solid var(--line);border-radius:6px;
  padding:8px 10px;font-size:.9rem;font-family:inherit;resize:vertical;
}
/* ── 公开首页 ── */
.hello{color:var(--muted);font-size:.9rem;text-align:center;padding:40px 0}
.hello a{color:var(--primary)}
@media (prefers-reduced-motion:no-preference){
  .entry{animation:rise .25s ease both}
  @keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
}

/* ══ 苹果化收尾(置于文件末,同特异性时覆盖前文的边框写法)══ */
/* 输入控件统一为填充式:灰填充、无边框、圆角、tint 聚焦环 */
main input:not([type=color]):not([type=range]):not([type=checkbox]):not(.calc-display),
main textarea,
main select{
  background:var(--fill);border-color:transparent;border-radius:var(--radius-s);
  color:var(--ink);
}
/* select 的组件规则(类+元素)特异性更高,这三项必须强制统一 */
main select{
  background:var(--fill)!important;
  border-color:transparent!important;
  border-radius:var(--radius-s)!important;
}
main input:focus-visible,main textarea:focus-visible,main select:focus-visible,
.login-card input:focus{
  outline:none;
  box-shadow:0 0 0 3px color-mix(in srgb, var(--primary) 30%, transparent);
}
/* 减弱动效偏好:一律静止 */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important;animation:none!important}
}
