:root{--color-paper: oklch(96.8% .004 220);--color-paper-2: oklch(100% 0 0);--color-paper-3: oklch(97.6% .004 210);--color-ink: oklch(28% .02 240);--color-ink-dim: oklch(55% .02 230);--color-accent: oklch(51% .2 264);--color-accent-2: oklch(45% .19 264);--color-accent-soft: oklch(96% .02 264);--color-warn: oklch(55% .13 70);--color-warn-soft: oklch(97% .03 90);--color-danger: oklch(52% .17 28);--color-danger-soft: oklch(96% .02 25);--color-ok: oklch(48% .11 155);--color-ok-soft: oklch(96% .02 155);--color-rule: oklch(90% .01 220);--color-rule-strong: oklch(84% .015 220);--color-focus: oklch(51% .2 264);--font-display: "Sora", "Noto Sans SC", "Segoe UI", sans-serif;--font-body: "Noto Sans SC", "Segoe UI", sans-serif;--font-mono: ui-monospace, "SFMono-Regular", Consolas, monospace;--text-xs: .75rem;--text-sm: .8125rem;--text-md: .9375rem;--text-lg: 1.125rem;--text-xl: 1.5rem;--text-2xl: 2rem;--space-2xs: 4px;--space-xs: 8px;--space-sm: 12px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--space-2xl: 48px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--shadow: 0 10px 30px oklch(28% .02 240 / .07);--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-in-out: cubic-bezier(.45, 0, .55, 1);--dur-fast: .12s;--dur-med: .2s;--sidebar-w: 248px;--topbar-h: 64px}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;overflow-x:clip;background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);font-size:15px;line-height:1.45}h1,h2,h3,h4{font-family:var(--font-display);font-style:normal;font-weight:600;margin:0}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}a{color:var(--color-accent)}#root{min-height:100dvh}.login{min-height:100dvh;display:grid;place-items:center;padding:var(--space-lg);background:var(--color-paper)}.login-card{width:min(420px,100%);background:var(--color-paper-2);border:1px solid var(--color-rule);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:var(--space-xl)}.login-card h1,.login-brand{display:flex;align-items:center;gap:10px;font-size:var(--text-xl);letter-spacing:.02em}.login-brand img{display:block;border-radius:7px}.login-card p{color:var(--color-ink-dim);margin:var(--space-xs) 0 var(--space-lg)}.login-card label{display:block;font-size:var(--text-xs);color:var(--color-ink-dim);margin-bottom:var(--space-2xs);font-family:var(--font-mono)}.login-card input{width:100%;margin-bottom:var(--space-md);background:var(--color-paper);border:1px solid var(--color-rule);padding:10px 12px;border-radius:var(--radius-sm)}.login-card input:focus-visible,.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible,.btn:focus-visible,.icon-btn:focus-visible,.nav-link:focus-visible,.date-input:focus-visible{outline:3px solid var(--color-focus);outline-offset:2px}.hint{font-size:var(--text-xs);color:var(--color-ink-dim);font-family:var(--font-mono)}.err{color:var(--color-danger);font-size:var(--text-sm);min-height:1.2em}.shell{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:100dvh}.sidebar{background:var(--color-paper-2);border-right:1px solid var(--color-rule);padding:var(--space-md) var(--space-sm);display:flex;flex-direction:column;gap:var(--space-lg)}.brand{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:var(--text-md);font-weight:700;letter-spacing:.02em;color:var(--color-ink);padding:4px var(--space-xs)}.brand img{display:block;border-radius:6px}.nav-group{display:flex;flex-direction:column;gap:2px}.nav-label{font-family:var(--font-display);font-size:var(--text-md);font-weight:700;letter-spacing:.04em;color:var(--color-ink);padding:8px 10px;border-radius:var(--radius-sm)}.nav-label-site{color:var(--color-accent);background:var(--color-accent-soft)}.nav-label-human{color:var(--color-ok);background:var(--color-ok-soft)}.nav-label-analytics{color:var(--color-warn);background:var(--color-warn-soft)}.nav-link{display:flex;align-items:center;justify-content:space-between;text-decoration:none;color:var(--color-ink);padding:8px 10px;border-radius:var(--radius-sm);border:1px solid transparent;background:transparent;text-align:left;width:100%}.nav-link:hover,.nav-link.is-hover{background:var(--color-paper-3)}.nav-link.active{border-color:transparent;background:var(--color-accent-soft);color:var(--color-accent)}.nav-link:active,.nav-link.is-active{transform:translateY(1px)}.main{display:flex;flex-direction:column;min-width:0}.topbar{min-height:var(--topbar-h);display:flex;align-items:center;gap:var(--space-md);padding:10px var(--space-lg);border-bottom:1px solid var(--color-rule);background:var(--color-paper-2);position:sticky;top:0;z-index:5}.top-metrics{display:flex;gap:var(--space-lg);flex:1;min-width:0}.metric{display:flex;flex-direction:column;min-width:0}.metric b{font-family:var(--font-mono);font-size:var(--text-lg);font-weight:600}.metric span{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-ink-dim);font-family:var(--font-mono)}.metric.warn b{color:var(--color-warn)}.metric.danger b{color:var(--color-danger)}.metric.ok b{color:var(--color-ok)}.date-input{background:var(--color-paper-2);border:1px solid var(--color-rule);padding:6px 8px;border-radius:var(--radius-sm);font-family:var(--font-mono)}.btn{background:var(--color-accent);color:#fff;border:0;padding:8px 12px;border-radius:var(--radius-sm);font-weight:600;font-size:var(--text-sm)}.btn:active,.btn.is-active{transform:translateY(1px)}.btn:disabled,.btn.is-disabled{opacity:.45;cursor:not-allowed}.btn.ghost{background:transparent;color:var(--color-ink);border:1px solid var(--color-rule)}.btn.btn-sm{padding:2px 7px;font-size:11px;font-weight:500}.btn.danger{background:var(--color-danger);color:#fff}.btn.success{background:var(--color-ok);color:#fff}.btn:hover,.btn.is-hover{background:var(--color-accent-2)}.btn.danger:hover,.btn.danger.is-hover{filter:brightness(1.08);background:var(--color-danger)}.btn.success:hover,.btn.success.is-hover{filter:brightness(1.05);background:var(--color-ok)}.btn.ghost:hover,.btn.ghost.is-hover{background:var(--color-paper-3);filter:none}.content{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-lg);max-width:1480px}.page-head{display:flex;justify-content:space-between;align-items:end;gap:var(--space-md)}.page-head h1{font-size:var(--text-xl)}.page-head p{margin:4px 0 0;color:var(--color-ink-dim);font-size:var(--text-sm)}.spark{display:flex;align-items:end;gap:3px;height:28px}.spark i{display:block;width:8px;background:var(--color-accent-2);min-height:2px}.section-title{font-size:var(--text-lg);margin:var(--space-sm) 0}.module{display:flex;flex-direction:column;gap:var(--space-sm)}.module-h{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);padding:0 2px}.module-h strong{font-weight:600}.module-h em{font-style:normal;font-family:var(--font-mono);color:var(--color-ink-dim);font-size:var(--text-sm)}.module-h .add-card{margin-left:auto;padding:4px 10px}.module-slots{display:grid;grid-template-columns:1fr;gap:var(--space-sm);align-items:start}.slot{height:fit-content;background:var(--color-paper-2);border:1px solid var(--color-rule);border-radius:var(--radius-md);box-shadow:var(--shadow);padding:var(--space-sm) var(--space-md);min-width:0;cursor:pointer}.slot.is-done{border-color:var(--color-ok)}.slot.is-miss{border-color:var(--color-rule-strong)}.slot-h{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.slot-title{font-weight:600;flex:0 1 auto;width:auto;max-width:10em;background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);padding:4px 6px;text-align:left;color:inherit;cursor:text;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slot-title:hover,.slot-title.is-hover{border-color:var(--color-rule-strong);background:var(--color-paper-3)}.title-input{flex:0 0 auto;width:10em;font-weight:600;font-size:var(--text-sm);background:var(--color-paper-3);border:1px solid var(--color-accent);border-radius:var(--radius-sm);padding:4px 6px}.time-pair{display:inline-flex;align-items:center;gap:2px;flex:0 0 auto}.time-colon{font-family:var(--font-mono);color:var(--color-accent);font-weight:600;padding:0 2px}.slot-h .time{font-family:var(--font-mono);color:var(--color-accent);font-size:var(--text-sm);width:3.4rem;background:var(--color-accent-soft);border:1px solid var(--color-accent);border-radius:var(--radius-sm);padding:4px;cursor:pointer}.slot-h .time:hover,.slot-h .time.is-hover{background:#fff}.row-actions{cursor:default;margin-left:auto;flex-shrink:0}.slot-preview{display:flex;flex-wrap:wrap;gap:6px 10px;margin-top:8px;font-size:12px;line-height:1.3}.slot-preview.is-empty{color:var(--color-ink-dim)}.slot-preview .kv{display:inline-flex;align-items:baseline;gap:4px;max-width:100%}.color-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px;vertical-align:middle}.color-field{display:flex;align-items:center;gap:8px}.color-field select{flex:1;min-width:0}.slot-preview em{font-style:normal;color:var(--color-ink-dim)}.slot-preview b{font-weight:600;color:var(--color-ink)}.slot .fields{cursor:default;margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--color-rule)}.fields{display:grid;grid-template-columns:1fr;gap:var(--space-sm)}.field label{display:flex;justify-content:space-between;font-size:11px;color:var(--color-ink-dim);margin-bottom:4px;font-family:var(--font-mono)}.field input,.field select,.field textarea{width:100%;background:var(--color-paper);border:1px solid var(--color-rule);padding:7px 8px;border-radius:var(--radius-sm)}.field textarea{min-height:64px;resize:vertical}.field.locked input,.field.locked select,.field.locked textarea{border-color:var(--color-warn)}.lock{background:none;border:0;color:var(--color-ink-dim);padding:0;font-size:11px;font-family:var(--font-mono)}.lock.on{color:var(--color-warn)}.check{display:flex;align-items:center;gap:6px;font-size:var(--text-sm)}.badge{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;padding:2px 6px;border:1px solid var(--color-rule)}.badge.ok{color:var(--color-ok);border-color:var(--color-ok)}.badge.miss{color:var(--color-warn);border-color:var(--color-warn)}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-lg)}.card{border:1px solid var(--color-rule);background:var(--color-paper-2);border-radius:var(--radius-md);box-shadow:var(--shadow);padding:var(--space-md);min-width:0}.card h2{font-size:var(--text-md);margin-bottom:var(--space-sm)}.heat{display:grid;grid-template-columns:repeat(10,1fr);gap:4px}.heat b{aspect-ratio:1;display:block;background:var(--color-paper-3)}.heat b[data-r="1"]{background:#cad8f3}.heat b[data-r="2"]{background:#9db7eb}.heat b[data-r="3"]{background:#6089e1}.heat b[data-r="4"]{background:#2759d6}.mod-row{display:grid;grid-template-columns:140px 1fr 52px;gap:var(--space-sm);align-items:center;font-size:var(--text-sm);padding:6px 0;border-bottom:1px solid var(--color-rule)}.bar{height:8px;background:var(--color-paper);overflow:hidden}.bar>i{display:block;height:100%;background:var(--color-accent)}.chart{width:100%;height:160px}.chart polyline{fill:none;stroke:var(--color-accent);stroke-width:2}.chart circle{fill:var(--color-accent)}.chart text{fill:var(--color-ink-dim);font-size:10px;font-family:var(--font-mono)}.table{width:100%;border-collapse:collapse;font-size:var(--text-sm)}.table th,.table td{text-align:left;padding:8px 6px;border-bottom:1px solid var(--color-rule)}.table th{font-family:var(--font-mono);font-size:11px;color:var(--color-ink-dim);font-weight:500}.table input,.table select{width:100%;min-width:0;background:var(--color-paper);border:1px solid var(--color-rule);border-radius:var(--radius-sm);padding:4px 6px}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#202a3273;display:grid;place-items:center;z-index:20;padding:var(--space-lg)}.modal{width:min(440px,100%);background:var(--color-paper-2);border:1px solid var(--color-rule);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:var(--space-lg)}.row-actions{display:flex;gap:var(--space-xs);flex-wrap:wrap}.menu-btn{display:none}.empty{color:var(--color-ink-dim);font-size:var(--text-sm)}@media(min-width:480px)and (max-width:900px){.fields{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:901px){.module-slots{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1480px){.module-slots{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:900px){.shell{grid-template-columns:1fr}.sidebar{display:none}.sidebar.open{display:flex;position:fixed;inset:0 auto 0 0;width:min(80vw,260px);z-index:15}.menu-btn{display:inline-flex}.topbar{flex-wrap:wrap;height:auto}.top-metrics{gap:var(--space-sm);flex:1 1 100%;order:3}.content{padding:var(--space-sm)}.slot-h{flex-wrap:wrap}.row-actions{width:100%}.grid-2{grid-template-columns:1fr}.heat{grid-template-columns:repeat(7,1fr)}.mod-row{grid-template-columns:1fr 1fr}.table{display:block;overflow-x:auto}}.radar-lowest{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--space-sm)}.radar-cat{border:1px solid var(--color-rule);border-radius:var(--radius-sm);padding:10px;display:flex;flex-direction:column;gap:4px;min-width:0}.radar-add{display:flex;gap:8px;align-items:stretch}.radar-add input{flex:1;width:auto;min-width:0}.radar-add .btn{flex:0 0 auto;white-space:nowrap}.radar-filters{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin:0 0 var(--space-md)}.radar-filters input:not([type=checkbox]),.radar-filters select{background:var(--color-paper);border:1px solid var(--color-rule);border-radius:var(--radius-sm);padding:7px 8px}.radar-list{display:flex;flex-direction:column;gap:6px}.radar-row{border:1px solid var(--color-rule);border-radius:var(--radius-sm)}.radar-row-h{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;gap:8px;align-items:center;background:transparent;border:0;padding:8px 10px 4px;text-align:left;color:inherit}.radar-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.radar-time{font-family:var(--font-mono);white-space:nowrap}.radar-row-meta{display:flex;flex-wrap:wrap;gap:4px 12px;padding:0 10px 8px;color:var(--color-ink-dim);font-size:var(--text-sm)}.radar-ext{color:var(--color-accent);text-decoration:none;white-space:nowrap;background:none;border:0;padding:0;font:inherit;cursor:pointer}.radar-ext:hover{text-decoration:underline}.radar-modal-bg{z-index:80}.radar-offer-modal{width:min(640px,100%);max-height:min(80vh,720px);overflow:auto}.radar-offer-list{display:flex;flex-direction:column;gap:6px}.radar-offer{border:1px solid var(--color-rule);border-radius:var(--radius-sm)}@media(max-width:900px){.radar-row-h{grid-template-columns:1fr auto}}.yue-hud{display:flex;flex-wrap:wrap;gap:var(--space-sm) var(--space-lg);align-items:baseline;color:var(--color-ink-dim);font-size:var(--text-sm);margin-bottom:var(--space-md)}.yue-hud strong{color:var(--color-ink);font-family:var(--font-mono);font-weight:600}.yue-pill{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:999px;background:var(--color-warn-soft);color:var(--color-warn);font-size:var(--text-xs)}.yue-banner{padding:8px 12px;border-radius:var(--radius-sm);margin-bottom:var(--space-md);font-size:var(--text-sm)}.yue-banner.error{background:var(--color-danger-soft);color:var(--color-danger)}.yue-banner.warn{background:var(--color-warn-soft);color:var(--color-warn)}.yue-banner.ok{background:var(--color-ok-soft);color:var(--color-ok)}.yue-table-card{margin-bottom:0}.yue-table-wrap{overflow-x:auto}.yue-row-alert td:first-child{font-weight:600}.yue-muted{color:var(--color-ink-dim);font-size:var(--text-xs)}.yue-rate{width:4.5rem;background:var(--color-paper);border:1px solid var(--color-rule);border-radius:var(--radius-sm);padding:4px 6px}.yue-trend{font-family:var(--font-mono);font-size:var(--text-xs)}.yue-alert{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--color-danger)}
