:root{--bg: #f5f6f8;--surface: #ffffff;--surface-2: #f6f7f9;--surface-warm: #faf8fd;--fg: #1f2430;--fg-2: #3a414d;--muted: #6b737f;--meta: #6f7783;--border: #e4e7eb;--border-soft: #eef0f3;--accent: #6d28b4;--accent-2: #9858d8;--accent-on: #ffffff;--accent-deep: #2a1b3d;--accent-deep-2: #3a2a55;--on-accent-12: rgba(255,255,255,.12);--on-accent-20: rgba(255,255,255,.2);--accent-soft: color-mix(in oklab, var(--accent), white 88%);--accent-hover: color-mix(in oklab, var(--accent), black 10%);--accent-active: color-mix(in oklab, var(--accent), black 18%);--success: #15803d;--success-soft: color-mix(in oklab, var(--success), white 86%);--warn: #b45309;--warn-soft: color-mix(in oklab, var(--warn), white 86%);--danger: #b91c1c;--danger-soft: color-mix(in oklab, var(--danger), white 88%);--font-display: "Inter", -apple-system, BlinkMacSystemFont, "Noto Sans TC", system-ui, sans-serif;--font-body: "Inter", -apple-system, BlinkMacSystemFont, "Noto Sans TC", system-ui, sans-serif;--font-mono: ui-monospace, "JetBrains Mono", "SF Mono", Menlo, monospace;--fs-h1: 34px;--fs-h2: 24px;--fs-h3: 18px;--fs-lead: 17px;--fs-body: 15px;--fs-sm: 13px;--fs-meta: 12px;--leading-body: 1.55;--leading-tight: 1.2;--gap-xs: 6px;--gap-sm: 10px;--gap-md: 16px;--gap-lg: 24px;--gap-xl: 36px;--radius-sm: 8px;--radius: 12px;--radius-lg: 16px;--radius-pill: 999px;--elev-ring: 0 0 0 1px var(--border);--elev-raised: 0 2px 10px color-mix(in oklab, var(--fg), transparent 90%);--elev-pop: 0 8px 28px color-mix(in oklab, var(--fg), transparent 84%);--sidebar-w: 240px}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--leading-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}img,svg{display:block;max-width:100%}svg:not([width]):not(.chart-svg){width:1.1em;height:1.1em}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}p{text-wrap:pretty;margin:0}h1,h2,h3,h4{text-wrap:balance;margin:0}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh}.sidebar{background:linear-gradient(180deg,var(--accent-deep) 0%,var(--accent) 46%,var(--accent-deep-2) 100%);color:var(--accent-on);padding:22px 16px;display:flex;flex-direction:column;gap:28px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:12px}.brand-mark{width:40px;height:40px;flex:none;display:grid;place-items:center;background:var(--on-accent-12);border:1px solid var(--on-accent-20);border-radius:11px}.brand-mark svg{width:22px;height:22px}.brand-name{font-size:17px;font-weight:700;letter-spacing:-.01em;line-height:1.15}.brand-sub{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#ffffffb3;font-family:var(--font-mono);margin-top:2px}.nav{display:flex;flex-direction:column;gap:4px}.nav-label{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#ffffff8c;font-family:var(--font-mono);margin:0 0 8px 8px}.nav-item{display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:9px;color:#ffffffd1;font-size:14px;font-weight:500;border:1px solid transparent;transition:background .15s ease,color .15s ease}.nav-item svg{width:18px;height:18px;flex:none;opacity:.9}.nav-item:hover{background:var(--on-accent-12);color:var(--accent-on)}.nav-item.active{background:var(--accent-on);color:var(--accent);font-weight:600;box-shadow:var(--elev-raised)}.nav-item .badge-count{margin-left:auto;font-family:var(--font-mono);font-size:11px;background:var(--on-accent-20);color:var(--accent-on);padding:1px 7px;border-radius:999px}.nav-item.active .badge-count{background:var(--danger);color:var(--accent-on)}.sidebar-foot{margin-top:auto;font-size:11px;color:#fff9;line-height:1.5}.brand-menu{cursor:pointer;color:var(--accent-on);transition:background .15s ease}.brand-menu:hover{background:var(--on-accent-20)}.app.is-collapsed{grid-template-columns:76px 1fr}.app.is-collapsed .sidebar{padding:22px 12px}.app.is-collapsed .brand{justify-content:center}.app.is-collapsed .brand a,.app.is-collapsed .nav-label,.app.is-collapsed .nav-item span,.app.is-collapsed .sidebar-foot{display:none}.app.is-collapsed .nav-item{justify-content:center;padding:11px}.main{min-width:0;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-md);padding:18px 32px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:20}.topbar-title h1{font-size:var(--fs-h1);font-weight:700;letter-spacing:-.02em}.topbar-title p{color:var(--muted);font-size:var(--fs-sm);margin-top:2px}.topbar-meta{display:flex;align-items:center;gap:14px}.user-menu{display:inline-flex;align-items:center;gap:10px;padding:5px 6px;border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--surface)}.user-menu .avatar{width:30px;height:30px;border-radius:999px;background:var(--accent);color:var(--accent-on);display:grid;place-items:center;font-size:13px;font-weight:700;flex:none}.user-menu .user-meta{display:flex;flex-direction:column;line-height:1.2}.user-menu .user-meta b{font-size:13px;font-weight:600;color:var(--fg)}.user-menu .user-meta small{font-size:11px;color:var(--muted)}.user-menu .user-logout{display:inline-flex;align-items:center;gap:5px;margin-left:4px;padding:6px 12px;border:none;border-left:1px solid var(--border);border-radius:0 var(--radius-pill) var(--radius-pill) 0;background:transparent;color:var(--muted);font-size:13px;font-weight:600;cursor:pointer;transition:color .15s ease,background .15s ease}.user-menu .user-logout:hover{color:var(--accent);background:var(--accent-soft)}.user-menu .user-logout svg{width:15px;height:15px}.content{padding:28px 32px 48px;max-width:1320px;width:100%}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.card-pad-lg{padding:24px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-md);margin-bottom:16px;flex-wrap:wrap}.panel-head h2{font-size:var(--fs-h2);font-weight:700;letter-spacing:-.01em}.panel-head h3{font-size:var(--fs-h3);font-weight:600}.panel-sub{color:var(--muted);font-size:var(--fs-sm);margin-top:2px}.eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--gap-md)}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap-md)}.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gap-lg)}.grid-2-1{display:grid;grid-template-columns:1.6fr 1fr;gap:var(--gap-lg);align-items:start}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px}.stat-card .label{font-size:var(--fs-sm);color:var(--muted);display:flex;align-items:center;gap:7px}.stat-card .label svg{width:15px;height:15px;color:var(--accent)}.stat-card .value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:38px;font-weight:700;letter-spacing:-.03em;line-height:1.1;margin-top:8px}.stat-card .value .unit{font-size:16px;color:var(--muted);margin-left:3px;font-weight:500}.stat-card .delta{font-size:12px;font-family:var(--font-mono);margin-top:6px;display:inline-flex;align-items:center;gap:4px}.stat-card.is-danger .value{color:var(--danger)}.stat-card.is-accent .value{color:var(--accent)}.delta.up{color:var(--success)}.delta.down{color:var(--danger)}.btn{display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:var(--radius-sm);border:1px solid transparent;font-size:14px;font-weight:500;transition:background .15s ease,border-color .15s ease}.btn:active{transform:translateY(1px)}.btn:focus-visible{outline:none;box-shadow:0 0 0 3px color-mix(in oklab,var(--accent),transparent 70%)}.btn-primary{background:var(--accent);color:var(--accent-on);border-color:var(--accent)}.btn-primary:hover{background:var(--accent-hover)}.btn-secondary{background:var(--surface);color:var(--fg);border-color:var(--border)}.btn-secondary:hover{border-color:var(--fg-2)}.btn-ghost{background:transparent;color:var(--accent);border-color:transparent;padding-inline:8px}.btn-ghost:hover{background:var(--accent-soft)}.btn-sm{padding:6px 12px;font-size:13px}.controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.search{position:relative;flex:1 1 220px;min-width:180px}.search svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--muted);pointer-events:none}.search input{width:100%;padding:9px 12px 9px 36px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--fg);font:inherit;font-size:14px}.search input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--accent),transparent 82%)}.select{position:relative}.select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:9px 30px 9px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--fg);font:inherit;font-size:14px;cursor:pointer}.select:after{content:"▾";position:absolute;right:11px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none;font-size:12px}.select select:focus{outline:none;border-color:var(--accent)}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.ds-table{width:100%;border-collapse:collapse;font-size:14px}.ds-table th,.ds-table td{padding:13px 16px;text-align:left;border-bottom:1px solid var(--border-soft);white-space:nowrap}.ds-table thead th{background:var(--surface-2);color:var(--muted);font-weight:600;font-size:12px;letter-spacing:.03em;position:sticky;top:0}.ds-table th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.ds-table th.sortable:hover{color:var(--fg)}.ds-table th.sortable .arrow{opacity:.35;margin-left:4px}.ds-table th.sortable.sorted .arrow{opacity:1;color:var(--accent)}.ds-table tbody tr{transition:background .12s ease}.ds-table tbody tr.clickable{cursor:pointer}.ds-table tbody tr:hover{background:var(--accent-soft)}.ds-table tbody tr:last-child td{border-bottom:0}.ds-table .num-col{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.ds-table .rank{color:var(--meta);font-family:var(--font-mono);width:30px}.cust-name{font-weight:600}.cust-name .sub{display:block;font-weight:400;font-size:12px;color:var(--muted)}.empty-row td{text-align:center;color:var(--muted);padding:40px}.score{display:flex;align-items:center;gap:10px;min-width:150px}.score-track{display:block;flex:1;height:9px;border-radius:999px;background:var(--border);overflow:hidden;min-width:70px}.score-fill{display:block;height:100%;border-radius:999px}.score-val{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:700;font-size:14px;width:30px;text-align:right}.tag{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:var(--radius-pill);font-size:12px;font-weight:500;border:1px solid var(--border);color:var(--muted);white-space:nowrap}.tag-dot:before{content:"";width:6px;height:6px;border-radius:999px;background:currentColor}.risk{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--radius-pill);font-size:12px;font-weight:600;white-space:nowrap}.risk svg{width:13px;height:13px;flex:none}.risk:not(:has(svg)):before{content:"";width:7px;height:7px;border-radius:999px;background:currentColor}.risk-high{color:var(--danger);background:var(--danger-soft)}.risk-mid{color:var(--warn);background:var(--warn-soft)}.risk-low{color:var(--success);background:var(--success-soft)}:root,.sw-root{--sw-bg: #2a1b3d;--sw-ink: #f7f3fd;--sw-ink-soft: #cfc6e0;--sw-accent: #9858d8;--sw-font-display: "Inter", -apple-system, BlinkMacSystemFont, "Noto Sans TC", system-ui, sans-serif;--sw-font-body: "Inter", -apple-system, BlinkMacSystemFont, "Noto Sans TC", system-ui, sans-serif}.sw-topcta,.sw-btn--primary{background:var(--sw-accent)!important;color:#fff!important}.sw-nav{background:color-mix(in srgb,#1d1329 62%,transparent)!important;border-color:color-mix(in srgb,#9858d8 32%,transparent)!important}.sw-copylayer:before{width:min(64vw,860px)!important;background:linear-gradient(90deg,rgba(23,15,35,.94) 0%,rgba(23,15,35,.8) 40%,rgba(23,15,35,.4) 72%,transparent 100%)!important;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.sw-copy__title{text-shadow:0 2px 26px rgba(15,9,25,.95),0 1px 3px rgba(15,9,25,.8)!important}.sw-copy__body{color:#e8e1f4!important;text-shadow:0 1px 14px rgba(15,9,25,.9)!important}.sw-particles{display:none!important}.intro{background:var(--bg);color:var(--fg);overflow-x:hidden}.intro [data-reveal]{opacity:0;transform:translateY(28px);transition:opacity .7s ease,transform .7s cubic-bezier(.22,1,.36,1)}.intro [data-reveal].in-view{opacity:1;transform:none}@media (prefers-reduced-motion: reduce){.intro [data-reveal]{transition:none;opacity:1;transform:none}}.intro-progress{position:fixed;top:0;left:0;right:0;height:3px;background:var(--accent-2);transform-origin:left;z-index:90}.intro-nav{position:sticky;top:0;z-index:80;display:flex;align-items:center;gap:26px;padding:12px 32px;background:color-mix(in oklab,var(--surface),transparent 12%);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border-soft)}.intro-brand{display:inline-flex;align-items:center;gap:8px;font-weight:800;font-size:16px}.intro-brand svg{width:20px;height:20px;color:var(--accent)}.intro-brand-sub{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--meta);font-weight:500}.intro-nav nav{display:flex;gap:20px;margin-left:auto}.intro-nav nav a{font-size:14px;color:var(--muted)}.intro-nav nav a:hover{color:var(--accent)}.intro-hero{position:relative;min-height:92vh;display:flex;flex-direction:column;justify-content:center;padding:96px 8vw 80px;background:linear-gradient(160deg,#2a1b3d,#3a2a55 60%,#4a356e);color:#f2eafb}.intro-hero .eyebrow{color:#c4a5f0}.intro-hero h1{font-size:clamp(52px,8vw,96px);font-weight:800;letter-spacing:.04em;margin:10px 0 18px;line-height:1.1}.intro-hero-sub{max-width:620px;font-size:18px;line-height:1.7;color:#f2eafbd9;margin:0 0 30px}.intro-hero-cta{display:flex;gap:12px;flex-wrap:wrap}.btn-hero-ghost{background:transparent;color:#f2eafb;border:1px solid rgba(242,234,251,.35)}.btn-hero-ghost:hover{background:#f2eafb1a}.intro-hero-rings{position:absolute;right:-8vw;top:50%;width:44vw;aspect-ratio:1;transform:translateY(-50%);border-radius:999px;background:radial-gradient(circle,transparent 30%,rgba(152,88,216,.18) 31%,transparent 40%,rgba(152,88,216,.14) 41%,transparent 52%,rgba(152,88,216,.1) 53%,transparent 64%,rgba(152,88,216,.07) 65%,transparent 76%);pointer-events:none}.intro-scroll-hint{position:absolute;bottom:26px;left:50%;transform:translate(-50%);font-size:12px;color:#f2eafb8c;font-family:var(--font-mono);animation:intro-bob 2s ease-in-out infinite}@keyframes intro-bob{50%{transform:translate(-50%,6px)}}.intro-section{padding:96px 8vw}.intro-section.is-tint{background:var(--surface-warm)}.intro-section-head{max-width:720px;margin-bottom:44px}.intro-section-head h2{font-size:clamp(28px,3.6vw,40px);margin:8px 0 12px}.intro-sub{color:var(--muted);font-size:16px;line-height:1.7;margin:0}.intro-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.intro-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:26px}.intro-card h3{margin:12px 0 8px;font-size:18px}.intro-card p{margin:0;font-size:14px;line-height:1.7;color:var(--muted)}.intro-card-icon{width:40px;height:40px;border-radius:12px;background:var(--accent-soft);color:var(--accent);display:inline-grid;place-items:center}.intro-card-icon svg{width:20px;height:20px}.intro-feature{display:grid;grid-template-columns:5fr 7fr;gap:44px;align-items:center;margin-top:60px}.intro-feature.is-flip .intro-feature-text{order:2}.intro-feature-text h3{font-size:24px;margin:14px 0 10px}.intro-feature-text p{color:var(--muted);font-size:15px;line-height:1.75;margin:0}.intro-feature-shot{margin:0}.intro-feature-shot img{width:100%;border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--elev-pop)}.intro-feature-shot figcaption{text-align:center;font-size:12px;color:var(--meta);margin-top:10px}.intro-layers{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.intro-layer{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--accent);border-radius:var(--radius-sm);padding:18px}.intro-layer b{color:var(--accent)}.intro-layer p{margin:8px 0 0;font-size:13px;line-height:1.6;color:var(--muted)}.intro-layer-arrow{color:var(--meta);align-self:center}.intro-note{margin-top:22px;font-size:13px;color:var(--muted)}.intro-phases{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:34px}.intro-final{min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:90px 8vw;background:linear-gradient(200deg,#2a1b3d,#1d1329);color:#f2eafb}.intro-final h2{font-size:clamp(26px,3.4vw,38px);max-width:760px;margin:0 0 14px}.intro-final>p{color:#f2eafbbf;margin:0 0 28px}.intro-foot{margin-top:60px;font-size:12px;color:#f2eafb80;line-height:1.9}@media (max-width: 900px){.intro-grid-3,.intro-layers{grid-template-columns:1fr}.intro-feature{grid-template-columns:1fr;gap:20px}.intro-feature.is-flip .intro-feature-text{order:0}.intro-nav nav{display:none}.intro-hero-rings{display:none}}:root[data-theme=dark]{--bg: #16121e;--surface: #201a2c;--surface-2: #272033;--surface-warm: #241d31;--fg: #ece9f3;--fg-2: #cbc5d8;--muted: #9b94ab;--meta: #938ca8;--border: #352c47;--border-soft: #2b2439;--accent: #a06ae0;--accent-2: #b184e6;--accent-soft: color-mix(in oklab, #a06ae0, #201a2c 78%);--accent-hover: color-mix(in oklab, #a06ae0, white 12%);--accent-active: color-mix(in oklab, #a06ae0, white 20%);--success: #4cb576;--warn: #d98f3a;--danger: #e05c5c;--success-soft: color-mix(in oklab, #4cb576, #201a2c 80%);--warn-soft: color-mix(in oklab, #d98f3a, #201a2c 80%);--danger-soft: color-mix(in oklab, #e05c5c, #201a2c 78%);--elev-raised: 0 2px 10px rgba(0, 0, 0, .4);--elev-pop: 0 8px 28px rgba(0, 0, 0, .55)}:root[data-theme=dark] body{color-scheme:dark}.theme-btn{display:grid;place-items:center;width:38px;height:38px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--muted);transition:color .15s ease,border-color .15s ease}.theme-btn:hover{color:var(--accent);border-color:var(--accent)}.theme-btn svg{width:17px;height:17px}.tier-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.tier-cell{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.tier-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}.tier-head b{color:var(--accent)}.tier-last{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--success)}.tier-scope{margin:6px 0 2px;font-size:12px;color:var(--fg-2);line-height:1.5}.tier-source{margin:0;font-size:11px;color:var(--meta);font-family:var(--font-mono)}.q-card{display:flex;flex-direction:column;gap:6px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px}.q-card .q-label{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}.q-card .q-label svg{width:14px;height:14px;color:var(--accent)}.q-card .q-answer{font-size:15px;font-weight:700;color:var(--fg)}.q-card .q-hint{font-size:12px;color:var(--muted)}.heatmap{border-collapse:separate;border-spacing:4px;width:100%}.heatmap th{font-size:12px;color:var(--muted);font-weight:600;padding:4px 6px;text-align:center}.heatmap th.row-h{text-align:left}.heatmap td{text-align:center;border-radius:8px;padding:10px 6px;font-family:var(--font-mono);font-size:13px;font-weight:700}.heatmap td .sub{display:block;font-size:10px;font-weight:500;opacity:.75}.empty-state{display:flex;flex-direction:column;align-items:center;gap:6px;padding:40px 20px;text-align:center}.empty-state .empty-icon{width:44px;height:44px;border-radius:999px;background:var(--surface-2);border:1px solid var(--border-soft);display:grid;place-items:center;color:var(--meta);margin-bottom:4px}.empty-state .empty-icon svg{width:22px;height:22px}.empty-state.is-positive .empty-icon{background:var(--success-soft);border-color:transparent;color:var(--success)}.empty-state .empty-title{font-size:var(--fs-body);font-weight:600;color:var(--fg-2);margin:0}.empty-state .empty-hint{font-size:var(--fs-sm);color:var(--muted);margin:0}.empty-state .btn{margin-top:8px}.trend{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:600}.trend.up{color:var(--success)}.trend.down{color:var(--danger)}.competitor-yes{color:var(--danger);font-weight:600}.competitor-no{color:var(--muted)}.ai-action{display:inline-flex;align-items:center;gap:6px;color:var(--fg-2)}.ai-action svg{width:14px;height:14px;color:var(--accent);flex:none}.alert-row{display:grid;grid-template-columns:6px 1fr auto;gap:16px;align-items:center;padding:16px 18px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.alert-row+.alert-row{margin-top:12px}.alert-bar{width:6px;align-self:stretch;border-radius:999px}.alert-row.lvl-high{border-color:color-mix(in oklab,var(--danger),white 70%)}.alert-row.lvl-high .alert-bar{background:var(--danger)}.alert-row.lvl-mid .alert-bar{background:var(--warn)}.alert-row.lvl-low .alert-bar{background:var(--success)}.alert-body h3{font-size:16px;font-weight:600;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.alert-reason{color:var(--muted);font-size:13px;margin-top:5px}.alert-reason b{color:var(--danger);font-weight:600}.alert-meta{display:flex;gap:18px;margin-top:9px;font-size:12px;color:var(--meta);flex-wrap:wrap}.alert-meta .num{color:var(--fg-2)}.alert-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px}.detail-grid{display:grid;grid-template-columns:320px 1fr;gap:var(--gap-lg);align-items:start}.kv{display:grid;grid-template-columns:auto 1fr;gap:10px 16px;font-size:14px}.kv dt{color:var(--muted)}.kv dd{margin:0;text-align:right;font-weight:500}.bigscore{text-align:center;padding:8px 0 4px}.bigscore .ring-wrap{position:relative;width:150px;height:150px;margin:0 auto}.bigscore .ring-num{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;font-family:var(--font-mono);font-weight:700;font-size:40px}.next-step{display:flex;gap:12px;padding:14px 16px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-warm)}.next-step .step-mark{width:30px;height:30px;flex:none;border-radius:8px;background:var(--accent);color:var(--accent-on);display:grid;place-items:center}.next-step .step-mark svg{width:16px;height:16px}.next-step h4{font-size:14px;font-weight:600}.next-step p{font-size:13px;color:var(--muted);margin-top:3px}.legend{display:flex;flex-wrap:wrap;gap:12px 18px;font-size:13px}.legend-item{display:flex;align-items:center;gap:7px;color:var(--fg-2)}.legend-dot{width:10px;height:10px;border-radius:3px;flex:none}.chart-svg{width:100%;height:auto}.bars{display:flex;flex-direction:column;gap:10px}.bar-row{display:grid;grid-template-columns:64px 1fr 44px;align-items:center;gap:12px;font-size:13px}.bar-track{height:22px;background:var(--surface-2);border-radius:6px;overflow:hidden}.bar-fill{height:100%;border-radius:6px;background:var(--accent);display:flex;align-items:center}.bar-row .num{text-align:right}.launch-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gap-md)}.launch-card{display:flex;flex-direction:column;gap:12px;padding:22px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.launch-card:hover{border-color:var(--accent);box-shadow:var(--elev-raised);transform:translateY(-2px)}.launch-card .lc-icon{width:42px;height:42px;border-radius:11px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center}.launch-card .lc-icon svg{width:22px;height:22px}.launch-card h3{font-size:17px;font-weight:600}.launch-card p{font-size:13px;color:var(--muted)}.launch-card .lc-foot{margin-top:auto;font-size:13px;color:var(--accent);font-weight:600;display:flex;align-items:center;gap:6px}.launch-card .lc-foot svg{width:15px;height:15px;flex:none}.muted{color:var(--muted)}.row{display:flex;align-items:center;gap:var(--gap-md)}.row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-md)}.wrap{flex-wrap:wrap}.spacer{flex:1}.result-count{font-size:13px;color:var(--muted);font-family:var(--font-mono)}@media (max-width: 1024px){.grid-4{grid-template-columns:repeat(2,1fr)}.grid-2-1,.grid-2,.grid-3,.detail-grid,.launch-grid{grid-template-columns:1fr}}@media (max-width: 760px){.app{grid-template-columns:1fr}.sidebar{position:static;height:auto;flex-direction:column}.nav{flex-direction:row;flex-wrap:wrap}.nav-label{display:none}.grid-4{grid-template-columns:1fr 1fr}.content,.topbar{padding-inline:18px}.topbar-title h1{font-size:24px}}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg, #f5f2f0)}.login-card{width:380px;max-width:92vw;background:var(--surface, #fff);border:1px solid var(--border, #e5ddd8);border-radius:16px;padding:36px 32px;box-shadow:0 12px 40px #50141414}.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:6px}.login-brand .mark{width:38px;height:38px;color:var(--accent, #8c1d2b)}.login-title{font-size:22px;font-weight:800;color:var(--fg, #2a2320)}.login-sub{color:var(--muted, #8a7d76);font-size:13px;margin:4px 0 24px}.field{margin-bottom:16px}.field label{display:block;font-size:13px;font-weight:600;color:var(--fg-2,#5a4f48);margin-bottom:6px}.field input{width:100%;box-sizing:border-box;padding:11px 13px;border:1px solid var(--border,#e5ddd8);border-radius:9px;font-size:15px;background:var(--bg,#faf8f7)}.field input:focus{outline:none;border-color:var(--accent,#8c1d2b)}.login-btn{width:100%;padding:12px;border:none;border-radius:9px;background:var(--accent,#8c1d2b);color:#fff;font-size:15px;font-weight:700;cursor:pointer}.login-btn:hover{filter:brightness(1.08)}.login-btn:disabled{opacity:.6;cursor:default}.login-err{color:var(--danger,#c0392b);font-size:13px;margin-top:12px;min-height:18px}.login-hint{margin-top:20px;padding-top:16px;border-top:1px solid var(--border,#eee);font-size:12px;color:var(--meta,#a79c95);line-height:1.7}.login-hint b{color:var(--fg-2,#5a4f48)}.pg-field{margin-bottom:18px}.pg-field-label{font-size:var(--fs-body);font-weight:600}.pg-slider-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}.pg-slider-val{font-family:var(--font-mono);font-weight:700;color:var(--accent)}.pg-range{width:100%;accent-color:var(--accent);cursor:pointer}.pg-seg{display:inline-flex;gap:6px;margin-top:8px}.pg-seg-btn{padding:6px 14px;border:1px solid var(--border);border-radius:8px;background:var(--surface);cursor:pointer;font-size:var(--fs-body)}.pg-seg-btn.is-on{background:var(--accent);color:var(--accent-on);border-color:var(--accent)}.pg-toggle{margin-top:8px;padding:8px 16px;border:1px solid var(--border);border-radius:8px;background:var(--surface);cursor:pointer;width:100%;text-align:left}.pg-toggle.is-on{background:var(--danger-soft);border-color:var(--danger);color:var(--danger);font-weight:600}.pg-big-num{font-family:var(--font-display);font-size:64px;font-weight:800;line-height:1;letter-spacing:-.02em}.pg-num-label{font-size:var(--fs-body);opacity:.7;margin-top:4px}.pg-action{margin-top:12px;font-size:var(--fs-body);font-weight:600}.pg-risk-row{display:flex;justify-content:space-between;align-items:center;font-weight:600;margin-bottom:6px}.pg-risk-badge{color:#fff;padding:2px 12px;border-radius:999px;font-weight:700}.pg-bd-title{font-size:var(--fs-lead);font-weight:700;margin-bottom:12px}.pg-bd-row{display:flex;justify-content:space-between;align-items:baseline;padding:7px 0;border-bottom:1px dashed var(--border-soft);font-size:var(--fs-body);gap:12px}.pg-bd-row b{font-family:var(--font-mono);white-space:nowrap}.pg-bd-detail{font-style:normal;opacity:.5;font-size:.8em;font-family:var(--font-mono)}.pg-bd-total{border-bottom:none;border-top:2px solid var(--border);margin-top:4px;padding-top:10px;font-weight:700}.pg-bd-total b{color:var(--accent);font-size:1.15em}.pg-arch-title{font-weight:700;font-size:var(--fs-lead)}.pg-arch-tech{font-family:var(--font-mono);color:var(--accent);font-size:.85em;margin:4px 0}.pg-arch-detail{opacity:.7;font-size:var(--fs-body)}.pg-code{font-family:var(--font-mono);background:var(--accent-soft);padding:2px 8px;border-radius:5px;font-size:.85em}.pg-dim{display:flex;justify-content:space-between;padding:9px 14px;border-left:4px solid var(--border);background:var(--surface);border-radius:6px;font-size:var(--fs-body)}.pg-dim.is-live{border-left-color:#16a34a;background:#16a34a12}.pg-dim-w{font-family:var(--font-mono);font-weight:700;opacity:.7}.pg-timeline{display:flex;align-items:flex-start}.pg-tl-node{flex:1;position:relative;text-align:center;padding-top:28px}.pg-tl-line{position:absolute;top:9px;left:-50%;width:100%;height:3px;background:var(--border);z-index:0}.pg-tl-node.is-now .pg-tl-line,.pg-tl-node.is-done .pg-tl-line{background:var(--accent)}.pg-tl-dot{position:absolute;top:0;left:50%;transform:translate(-50%);width:20px;height:20px;border-radius:50%;z-index:1;display:flex;align-items:center;justify-content:center;font-size:11px;line-height:1;color:#fff;background:var(--surface);border:3px solid var(--border)}.pg-tl-node.is-done .pg-tl-dot{background:var(--accent);border-color:var(--accent)}.pg-tl-node.is-now .pg-tl-dot{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 0 0 5px var(--accent-soft);animation:pg-pulse 2s infinite}@keyframes pg-pulse{0%,to{box-shadow:0 0 0 4px var(--accent-soft)}50%{box-shadow:0 0 0 8px var(--accent-soft)}}.pg-tl-date{font-family:var(--font-mono);font-size:.8em;opacity:.6}.pg-tl-label{font-weight:700;font-size:var(--fs-body);margin-top:2px}.pg-tl-node.is-now .pg-tl-label{color:var(--accent)}.pg-tl-sub{font-size:.78em;opacity:.6;margin-top:1px}.pg-slides-btn{display:inline-flex;align-items:center;gap:6px;margin-left:12px;padding:7px 16px;background:var(--accent);color:var(--accent-on);border-radius:8px;font-weight:600;font-size:var(--fs-body);text-decoration:none;white-space:nowrap;transition:background .15s}.pg-slides-btn:hover{background:var(--accent-hover)}
