:root{--bg:#eef3f9;--surface:#ffffff;--surfaceAlt:#f7fafc;--line:#d6deea;--text:#0f172a;--muted:#5f6f87;--accent:#0b7a75;--actual:#1f2937;--best:#0284c7;--mid:#0f766e;--worst:#b91c1c}*{box-sizing:border-box}body,html{margin:0;padding:0;min-height:100%;background:radial-gradient(circle at 20% 0,#dbeafe 0,var(--bg) 50%);color:var(--text);font-family:IBM Plex Sans,Hiragino Kaku Gothic ProN,Yu Gothic,sans-serif}a{color:inherit;text-decoration:none}.appRoot{min-height:100svh}.appHeader{border-bottom:1px solid var(--line);background:color-mix(in srgb,#ffffff 92%,#e2e8f0 8%);position:-webkit-sticky;position:sticky;top:0;z-index:20}.headerInner{max-width:1200px;margin:0 auto;padding:14px 20px;display:flex;gap:16px;align-items:center;justify-content:space-between}.brandTitle{font-size:1.1rem;font-weight:700;letter-spacing:.02em}.brandSub{color:var(--muted);font-size:.78rem}.navRow{display:flex;flex-wrap:wrap;gap:8px}.userMenu{display:flex;align-items:center;gap:10px}.userLabel{white-space:nowrap}.navLink,.userLabel{font-size:.82rem;color:var(--muted)}.navLink{border:1px solid var(--line);border-radius:999px;padding:8px 12px;background:var(--surface)}.navLinkActive{color:#ffffff;background:var(--accent);border-color:transparent}.page{max-width:1200px;margin:0 auto;padding:22px 20px 40px}.pageTitle{margin:0;font-size:1.42rem}.pageLead{margin:8px 0 18px;color:var(--muted)}.kpiGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:12px;gap:12px}.kpiCard{border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:12px}.kpiLabel{font-size:.78rem;color:var(--muted)}.kpiValue{margin-top:6px;font-size:1.1rem;font-weight:700}.kpiSubValue{margin-top:4px;color:var(--muted);font-size:.78rem}.chartCard{margin-top:16px;border:1px solid var(--line);border-radius:16px;background:var(--surface);padding:12px}.chartSvg{width:100%;height:auto;display:block;border-radius:10px;background:linear-gradient(180deg,#ffffff,#f8fafc)}.legendRow{display:flex;flex-wrap:wrap;gap:16px;padding-top:10px}.legend{display:inline-flex;align-items:center;gap:6px;font-size:.82rem;color:var(--muted)}.dot{width:10px;height:10px;border-radius:999px;display:inline-block}.dot.actual{background:var(--actual)}.dot.best{background:var(--best)}.dot.mid{background:var(--mid)}.dot.worst{background:var(--worst)}.block{border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:14px;margin-top:16px}.blockTitle{margin:0 0 8px;font-size:.95rem}.blockList{margin:0;padding-left:18px;color:var(--muted);display:grid;grid-gap:6px;gap:6px}.tableWrap{border:1px solid var(--line);border-radius:14px;overflow:auto;background:var(--surface);margin-top:12px}.dataTable{width:100%;border-collapse:collapse;min-width:700px}.dataTable td,.dataTable th{text-align:left;border-bottom:1px solid var(--line);padding:10px;font-size:.86rem}.dataTable th{background:var(--surfaceAlt);color:#334155;font-weight:600;position:-webkit-sticky;position:sticky;top:0}.dataTable tbody tr:hover{background:#f8fafc}.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.stack{display:flex;flex-direction:column}.label,.muted{color:var(--muted)}.label{font-size:.78rem;font-weight:600}.input{width:100%;border:1px solid var(--line);border-radius:12px;padding:10px 12px;font-size:.9rem;background:var(--surface);color:var(--text)}.input:focus{outline:2px solid color-mix(in srgb,var(--accent) 40%,transparent);outline-offset:2px}.button{border:1px solid transparent;border-radius:999px;padding:10px 14px;font-size:.9rem;font-weight:700;color:#ffffff;background:var(--accent);cursor:pointer}.button:disabled{opacity:.7;cursor:not-allowed}.button.secondary{background:var(--surface);color:var(--text);border-color:var(--line)}.alert{border-radius:12px;padding:10px 12px;font-size:.86rem}.alert.success{border:1px solid rgba(11,122,117,.35);background:rgba(11,122,117,.08);color:#064e3b}.alert.danger,.alert.error{border:1px solid rgba(185,28,28,.35);background:rgba(185,28,28,.08);color:#7f1d1d}.link{text-decoration:underline;color:color-mix(in srgb,var(--accent) 90%,#0f172a 10%)}.inlineForm{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.inlineForm .input{border-radius:999px}.inlineForm .button,.inlineForm .input{padding:8px 10px;font-size:.82rem}@media (max-width:960px){.kpiGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:640px){.headerInner{flex-direction:column;align-items:flex-start}.kpiGrid{grid-template-columns:1fr}.page{padding:16px 12px 28px}}