/* ═══════════════════════════════════════════════════════════════════════════
   GOAT · 控制台层 v2.11.0（叠在 styles.css 之上）
   内容：背景网格纹理 / 模块总览（Launcher）/ 命令面板 / 分段控件与篮子芯片 /
         移动端 Dock / 紧凑模式 / 角标括号 / 细微动效。
   规则：所有装饰都是 CSS，零图片；所有动效可被 prefers-reduced-motion 关闭。
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 背景：极淡的坐标网格 + 顶部光晕（夜间）；日间只保留网格 ── */
body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background-image:linear-gradient(var(--hair) 1px,transparent 1px),linear-gradient(90deg,var(--hair) 1px,transparent 1px);
  background-size:48px 48px;opacity:.35;
  -webkit-mask-image:radial-gradient(ellipse at 50% 0%,#000 30%,transparent 80%);mask-image:radial-gradient(ellipse at 50% 0%,#000 30%,transparent 80%)}
body::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse 60% 40% at 80% -10%,rgba(243,177,63,.10),transparent 60%),radial-gradient(ellipse 40% 30% at 5% 110%,rgba(92,200,255,.06),transparent 60%)}
[data-theme="day"] body::after{background:radial-gradient(ellipse 60% 40% at 80% -10%,rgba(178,111,6,.06),transparent 60%)}

/* ── 角标括号：给主要卡片一点仪表感 ── */
.input-card::before,.result-area::before,.insight-card::before,.launcher-head::before{content:"";position:absolute;top:-1px;left:-1px;width:12px;height:12px;border-top:1.5px solid var(--gold);border-left:1.5px solid var(--gold);border-top-left-radius:var(--r-lg);opacity:.55;pointer-events:none}
.insight-card{position:relative}
.input-card::after{content:"";position:absolute;bottom:-1px;right:-1px;width:12px;height:12px;border-bottom:1.5px solid var(--gold);border-right:1.5px solid var(--gold);border-bottom-right-radius:var(--r-lg);opacity:.35;pointer-events:none}

/* ── 结果区守卫：第二批模块的渲染器不重置 empty-state 类，结果一旦出现就按正文排版 ── */
.result-area.empty-state:has(.result-head,.data-table,.notice,.error-box,.loading,.stat-row,.hold-grid){display:block;text-align:left;color:var(--text)}

/* ── 分段控件（替代短 select）与篮子芯片（替代长 select） ── */
select.is-enhanced{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden;clip:rect(0 0 0 0)}
.sel-enh{display:flex;flex-wrap:wrap;gap:4px;min-height:40px;align-items:center}
.sel-enh.mode-native{display:none}
.mode-seg{display:inline-flex;flex-wrap:nowrap;gap:0;padding:3px;border:1px solid var(--hair2);border-radius:var(--r-sm);background:var(--bg2);width:100%;overflow-x:auto;scrollbar-width:none}
.mode-seg::-webkit-scrollbar{display:none}
.seg-btn{flex:1 1 auto;height:32px;padding:0 10px;border:0;border-radius:5px;background:transparent;color:var(--muted);font-family:var(--mono);font-size:11.5px;letter-spacing:.02em;cursor:pointer;white-space:nowrap;transition:background .15s var(--ease),color .15s var(--ease),box-shadow .15s var(--ease)}
.seg-btn:hover{color:var(--text)}
.seg-btn[data-on]{background:var(--panel3);color:var(--gold2);box-shadow:0 0 0 1px rgba(243,177,63,.45),0 4px 12px -6px rgba(0,0,0,.6)}
[data-theme="day"] .seg-btn[data-on]{background:#fff;color:var(--gold);box-shadow:0 0 0 1px rgba(154,91,0,.4),0 4px 12px -8px rgba(20,26,36,.3)}
.mode-chips{padding:6px 0 0}
.chip-btn{height:28px;padding:0 10px;border:1px solid var(--hair2);border-radius:5px;background:var(--bg2);color:var(--muted);font-family:var(--mono);font-size:11.5px;cursor:pointer;transition:border-color .15s var(--ease),color .15s var(--ease),background .15s var(--ease)}
.chip-btn:hover{border-color:var(--cyan);color:var(--text)}
.chip-btn[data-on]{border-color:var(--gold);color:var(--gold2);background:rgba(243,177,63,.12);box-shadow:0 0 12px -4px rgba(243,177,63,.6)}
[data-theme="day"] .chip-btn[data-on]{background:rgba(154,91,0,.1);color:var(--gold);box-shadow:none}
.form-grid label.has-enh{grid-column:1 / -1}
.form-grid.compact label.has-enh{grid-column:auto;min-width:260px}
/* 支持 :has() 的浏览器：含增强控件的表单改用自适应轨道，分段占两轨、芯片云整行、按钮跟在后面（不支持则回退为整行） */
.form-grid:not(.compact):not(.journal-form):has(label.has-enh){grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.form-grid:not(.journal-form) label.has-enh:has(.mode-seg){grid-column:span 2}
.form-grid label.has-enh:has(.mode-chips){grid-column:1 / -1}
.form-grid:not(.journal-form):has(label.has-enh) .primary-button{grid-column:auto;justify-self:stretch}
.form-grid.journal-form label.has-enh{grid-column:span 2}
.seg-btn:focus-visible,.chip-btn:focus-visible{outline-offset:-2px}

/* ── 模块总览（Launcher） ── */
.launcher{display:none}
.launcher-open .launcher{display:block;animation:fade .25s var(--ease)}
.launcher-open .intro,.launcher-open .module-panel,.launcher-open main>footer{display:none!important}
.launcher-head{position:relative;display:flex;justify-content:space-between;align-items:flex-end;gap:20px;padding:22px 24px;margin-bottom:18px;border:1px solid var(--hair);border-radius:var(--r-lg);background:radial-gradient(circle at 95% -60%,rgba(243,177,63,.18),transparent 55%),var(--panel);box-shadow:var(--shadow)}
[data-theme="day"] .launcher-head{background:radial-gradient(circle at 95% -60%,rgba(154,91,0,.10),transparent 55%),var(--panel)}
.launcher-head h2{font-size:28px;margin:6px 0 6px;letter-spacing:-.03em}
.launcher-sub{margin:0;color:var(--muted);font-size:12.5px;max-width:620px;line-height:1.7}
.launcher-tools{display:flex;gap:6px;flex:0 0 auto}
.launcher-recent{margin-bottom:18px}
.launcher-recent h3,.lgroup h3{display:flex;align-items:center;gap:10px;margin:0 0 10px;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--text)}
.lgroup h3 small{font-family:var(--sans);font-size:11.5px;color:var(--muted);letter-spacing:0;text-transform:none;font-weight:400}
.lgroup h3 .led{background:var(--gc);box-shadow:0 0 8px var(--gc)}
.lgroup-count{margin-left:auto;font-weight:400;color:var(--dim)}
.lgroup{margin-bottom:20px;padding-top:14px;border-top:1px solid var(--hair)}
.lgroup[data-group="home"]{--gc:var(--g-home)}.lgroup[data-group="structure"]{--gc:var(--g-structure)}.lgroup[data-group="flow"]{--gc:var(--g-flow)}.lgroup[data-group="timing"]{--gc:var(--g-timing)}.lgroup[data-group="research"]{--gc:var(--g-research)}.lgroup[data-group="log"]{--gc:var(--g-log)}.lgroup[data-group="body"]{--gc:var(--g-body)}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(228px,1fr));gap:10px}
.tiles-compact{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}
.tile{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:5px;min-height:118px;padding:13px 14px 12px;text-align:left;cursor:pointer;border:1px solid var(--hair);border-radius:var(--r);background:var(--panel);color:var(--text);box-shadow:var(--shadow);transition:transform .18s var(--ease),border-color .18s var(--ease),box-shadow .18s var(--ease);overflow:hidden}
.tile::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--gc,var(--gold));opacity:.8}
.tile::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 100% 0%,color-mix(in srgb,var(--gc,var(--gold)) 18%,transparent),transparent 55%);opacity:0;transition:opacity .2s var(--ease);pointer-events:none}
.tile:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--gc,var(--gold)) 55%,transparent);box-shadow:var(--shadow-hi)}
.tile:hover::after{opacity:1}
.tile[data-group="home"]{--gc:var(--g-home)}.tile[data-group="structure"]{--gc:var(--g-structure)}.tile[data-group="flow"]{--gc:var(--g-flow)}.tile[data-group="timing"]{--gc:var(--g-timing)}.tile[data-group="research"]{--gc:var(--g-research)}.tile[data-group="log"]{--gc:var(--g-log)}.tile[data-group="body"]{--gc:var(--g-body)}
.tile-top{display:flex;justify-content:space-between;align-items:center;width:100%}
.tile-code{font-size:10px;color:var(--gc,var(--gold));border-color:color-mix(in srgb,var(--gc,var(--gold)) 45%,transparent);background:color-mix(in srgb,var(--gc,var(--gold)) 10%,transparent);border-bottom-width:1px}
.tile-since{font-family:var(--mono);font-size:9.5px;color:var(--dim);letter-spacing:.04em;display:inline-flex;align-items:center;gap:5px}
.tile-run{display:inline-flex;align-items:center;gap:4px;color:var(--muted)}
.tile-run .led{width:5px;height:5px;background:var(--gold);box-shadow:0 0 6px var(--gold)}
.tile-name{font-family:var(--grot);font-size:14.5px;font-weight:600;letter-spacing:-.01em;line-height:1.2;margin-top:2px}
.tile-zh{font-size:11.5px;color:var(--muted)}
.tile-desc{font-size:11px;color:var(--muted);line-height:1.55;margin-top:auto;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tiles-compact .tile{min-height:88px}
.tiles-compact .tile-desc{display:none}

/* ── 命令面板 ── */
.palette{position:fixed;inset:0;z-index:80;display:grid;place-items:start center;padding:12vh 16px 0}
.palette[hidden]{display:none}
.palette-backdrop{position:absolute;inset:0;background:rgba(3,5,8,.62);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
[data-theme="day"] .palette-backdrop{background:rgba(20,26,36,.45)}
.palette-box{position:relative;width:min(640px,100%);border:1px solid var(--hair2);border-radius:var(--r-lg);background:var(--panel);box-shadow:0 40px 100px -20px rgba(0,0,0,.8),var(--glow-gold);overflow:hidden;animation:palIn .18s var(--ease)}
@keyframes palIn{from{opacity:0;transform:translateY(-8px) scale(.985)}to{opacity:1;transform:none}}
.palette-field{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--hair)}
.palette-prompt{font-family:var(--mono);color:var(--gold);font-weight:700}
.palette-field input{height:36px;border:0;background:transparent;padding:0;font-size:14px;box-shadow:none}
.palette-field input:focus{box-shadow:none}
.palette-list{list-style:none;margin:0;padding:6px;max-height:min(52vh,440px);overflow-y:auto}
.palette-item{display:grid;grid-template-columns:34px 1fr auto auto;gap:10px;align-items:center;padding:9px 10px;border-radius:7px;cursor:pointer;border-left:2px solid transparent}
.palette-item.is-active{background:var(--panel3);border-left-color:var(--gc,var(--gold))}
.palette-item[data-group="home"]{--gc:var(--g-home)}.palette-item[data-group="structure"]{--gc:var(--g-structure)}.palette-item[data-group="flow"]{--gc:var(--g-flow)}.palette-item[data-group="timing"]{--gc:var(--g-timing)}.palette-item[data-group="research"]{--gc:var(--g-research)}.palette-item[data-group="log"]{--gc:var(--g-log)}.palette-item[data-group="body"]{--gc:var(--g-body)}
.pi-code{text-align:center;color:var(--gc,var(--gold))}
.pi-name{font-family:var(--grot);font-weight:600;font-size:13.5px}
.pi-zh{font-size:12px;color:var(--muted)}
.pi-group{font-family:var(--mono);font-size:10px;color:var(--dim);letter-spacing:.08em;text-transform:uppercase;padding:2px 6px;border:1px solid var(--hair);border-radius:4px}
.palette-empty{padding:18px;text-align:center;color:var(--muted);font-family:var(--mono);font-size:12px}
.palette-foot{display:flex;gap:16px;flex-wrap:wrap;padding:8px 14px;border-top:1px solid var(--hair);font-family:var(--mono);font-size:10.5px;color:var(--dim)}
.palette-foot kbd{margin-right:2px}
.palette-hotkeys{margin-left:auto;border:1px solid var(--hair2);background:transparent;color:var(--muted);border-radius:5px;padding:2px 8px;font:inherit;cursor:pointer}
.palette-hotkeys[aria-pressed="true"]{color:var(--gold);border-color:rgba(243,177,63,.4)}
[data-theme="day"] .palette-hotkeys[aria-pressed="true"]{border-color:rgba(154,91,0,.4)}

/* ── 移动端 Dock ── */
.dock{display:none}
@media(max-width:980px){
  html{scroll-padding-bottom:calc(72px + env(safe-area-inset-bottom));scroll-padding-top:var(--topbar)}
  .chip-btn{height:36px;padding:0 12px}
  .sel-enh,.mode-chips{gap:8px}
  .seg-btn{height:40px}
  .form-grid label.has-enh,.form-grid:not(.journal-form) label.has-enh:has(.mode-seg),.form-grid.journal-form label.has-enh{grid-column:1 / -1}
  .has-console .dock{position:fixed;left:0;right:0;bottom:0;z-index:60;display:grid;grid-template-columns:repeat(5,1fr);padding:6px 8px calc(6px + env(safe-area-inset-bottom));border-top:1px solid var(--hair2);background:var(--bg);background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(18px) saturate(1.2);-webkit-backdrop-filter:blur(18px) saturate(1.2)}
  .dock-btn{display:flex;flex-direction:column;align-items:center;gap:2px;height:48px;border:0;background:transparent;color:var(--muted);border-radius:8px;cursor:pointer;font-family:var(--mono)}
  .dock-btn i{font-style:normal;font-size:17px;line-height:1}
  .dock-btn span{font-size:9.5px;letter-spacing:.06em}
  .dock-btn:active{background:var(--panel2);color:var(--gold2)}
  .palette{padding:6vh 10px 0}
  .palette-item{grid-template-columns:32px 1fr auto}
  .palette-item .pi-zh{display:none}
  .launcher-head{flex-direction:column;align-items:flex-start;padding:18px}
  .launcher-head h2{font-size:24px}
  .launcher-tools{width:100%}
  .launcher-tools .ghost-button{flex:1 1 auto;justify-content:center}
  .tiles{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px}
  .tile{min-height:84px;padding:11px 12px}
  .tile-name{font-size:13px}
  .tile-desc{display:none}
}
@media(max-width:620px){
  .tiles{grid-template-columns:1fr 1fr}
  .launcher-tools .ghost-button kbd{display:none}
}

/* ── 紧凑模式：收起所有 Insight 卡，工作区更密 ── */
.compact .insight-card{margin-bottom:10px}
.compact .input-card{padding:14px 16px}
.compact .result-area{padding:16px}
.compact main{padding-top:18px}

/* ── Fitness（Hermes 2026-08-28 并入，2026-09-06 随控制台换肤）：训练跟练与打卡页的嵌入框架 ── */
.fitness-frame{display:block;width:100%;height:calc(100vh - var(--topbar) - 150px);min-height:560px;border:1px solid var(--hair);border-radius:var(--r-lg);background:#0b1020}
@media(max-width:620px){.fitness-frame{height:calc(100vh - 190px);border-radius:var(--r)}}

/* ── 打印：只打印当前工作区 ── */
@media print{.topbar,.sidebar,.dock,.launcher,.intro-nav,.top-actions{display:none!important}main{padding:0}.module-panel.active{display:block}}
