:root{--space: 4px;--radius: 10px;--radius-sm: 6px;--bg: #f5f6f7;--surface: #ffffff;--surface-2: #f0f2f4;--border: #e1e4e8;--text: #1b2733;--text-muted: #61707d;--text-faint: #9aa6b1;--brand: #00574b;--brand-strong: #003d34;--brand-soft: #e3efec;--link: #0a6b5c;--ok: #1a7f4b;--ok-bg: #e4f4ea;--warn: #b9750a;--warn-bg: #fdf0db;--low: #c0392b;--low-bg: #fbe7e4;--shadow: 0 1px 2px rgba(16, 32, 40, .06), 0 2px 8px rgba(16, 32, 40, .05);--maxw: 1160px;font-family:Pretendard,Apple SD Gothic Neo,Malgun Gothic,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}html,body,#root{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;cursor:pointer}:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--radius-sm)}.container{max-width:var(--maxw);margin:0 auto;padding:calc(var(--space) * 6) calc(var(--space) * 5) calc(var(--space) * 16)}.app-header{background:var(--brand);color:#fff;border-bottom:3px solid var(--brand-strong)}.app-header .inner{max-width:var(--maxw);margin:0 auto;padding:calc(var(--space) * 4) calc(var(--space) * 5);display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--space) * 3);justify-content:space-between}.app-header h1{font-size:18px;margin:0;letter-spacing:-.2px}.app-header h1 a{color:#fff}.app-header h1{display:inline-flex;align-items:baseline;gap:12px;flex-wrap:wrap}.app-header h1 .doc-link{font-size:12.5px;font-weight:600;letter-spacing:0;color:#eafff9;text-decoration:none;white-space:nowrap;padding:3px 10px;border-radius:999px;background:#ffffff29;border:1px solid rgba(255,255,255,.34)}.app-header h1 .doc-link:hover{background:#ffffff47;text-decoration:none}.app-header .meta-badges{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.header-title{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.window-caption{font-size:12.5px;font-weight:600;color:#cfeee6;background:#ffffff1f;border:1px solid rgba(255,255,255,.22);border-radius:999px;padding:2px 10px;white-space:nowrap}.basis-note{font-size:11.5px;line-height:1.3;color:#dff5ef;background:#ffffff14;border:1px solid rgba(255,255,255,.18);border-radius:8px;padding:3px 9px}.basis-note strong{color:#fff;font-weight:700}.header-controls{display:flex;flex-wrap:wrap;align-items:center;gap:12px;justify-content:flex-end}.year-window{display:flex;align-items:center;gap:8px;background:#ffffff1f;border:1px solid rgba(255,255,255,.22);border-radius:var(--radius-sm);padding:4px 10px}.year-window .yw-title{font-size:11px;font-weight:700;color:#eafff8;opacity:.85}.year-window .yw-field{display:inline-flex;align-items:center;gap:5px}.year-window .yw-label{font-size:11px;color:#cfeee6}.year-window .yw-dash{color:#cfeee6}.year-window select{font:inherit;font-size:13px;font-weight:600;padding:3px 6px;border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.3);background:var(--surface);color:var(--text)}.year-window.yw-edition{flex-wrap:wrap}.year-window .yw-range-label{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:#eafff8}.year-window .yw-range-label strong{font-weight:700}.year-window .yw-range-years{color:#cfeee6}.year-window .yw-est{font-size:9.5px;font-weight:700;letter-spacing:.3px;padding:1px 5px;border-radius:999px;cursor:help;background:#ffffff2e;color:#ffe9b8;border:1px solid rgba(255,255,255,.28)}.year-window .yw-toggle{font:inherit;font-size:11px;font-weight:600;color:#eafff8;cursor:pointer;background:transparent;border:1px solid rgba(255,255,255,.28);border-radius:999px;padding:2px 8px}.year-window .yw-toggle:hover,.year-window .yw-toggle:focus-visible{background:#ffffff24;outline:none}.year-window .yw-manual,.year-window .yw-range{display:inline-flex;align-items:center;gap:8px}.year-window .yw-manual{flex-basis:100%;padding-top:2px}@media (max-width: 700px){.header-controls{justify-content:flex-start;width:100%}}.breadcrumbs{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:13px;color:var(--text-muted);margin-bottom:calc(var(--space) * 4)}.breadcrumbs .sep{color:var(--text-faint)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:calc(var(--space) * 4)}.card-grid{display:grid;gap:calc(var(--space) * 4);grid-template-columns:repeat(3,1fr)}@media (max-width: 880px){.card-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 560px){.card-grid{grid-template-columns:1fr}}.section{margin-bottom:calc(var(--space) * 8)}.section>h2{font-size:16px;margin:0 0 calc(var(--space) * 3);display:flex;align-items:center;gap:8px}.section-sub{color:var(--text-muted);font-size:13px;margin:-4px 0 12px}.kpi-row{display:flex;flex-wrap:wrap;gap:calc(var(--space) * 4)}.kpi{min-width:90px}.kpi .label{font-size:11px;color:var(--text-muted)}.kpi .value{font-size:20px;font-weight:700;letter-spacing:-.3px}.kpi .value.dash{color:var(--text-faint);font-weight:600}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}table.rank{width:100%;border-collapse:collapse;font-size:13px;min-width:640px}table.rank th,table.rank td{padding:10px 12px;text-align:right;white-space:nowrap;border-bottom:1px solid var(--border)}table.rank th{background:var(--surface-2);color:var(--text-muted);font-weight:600;position:sticky;top:0}table.rank th.left,table.rank td.left{text-align:left}table.rank tbody tr:hover{background:var(--brand-soft)}table.rank td.num{font-variant-numeric:tabular-nums}table.rank td.dash{color:var(--text-faint)}table.rank .rank-no{color:var(--text-faint);font-variant-numeric:tabular-nums}table.rank a.row-link{font-weight:600;color:var(--text)}table.rank a.row-link:hover{color:var(--link)}.fwci-col{background:var(--brand-soft)}table.rank tbody.pinned-overall .overall-row{background:var(--brand-soft);font-weight:700}table.rank tbody.pinned-overall .overall-row:hover{background:var(--brand-soft)}table.rank tbody.pinned-overall .overall-row td{border-bottom:2px solid var(--brand)}table.rank .overall-row .rank-no{color:var(--brand)}table.rank .overall-row .overall-tag{font-size:10px;font-weight:700;letter-spacing:.2px;padding:1px 6px;border-radius:999px;white-space:nowrap;background:var(--brand);color:#fff}.badge{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:600;padding:2px 8px;border-radius:999px;border:1px solid transparent;white-space:nowrap}.badge.cov-ok{color:var(--ok);background:var(--ok-bg);border-color:#bfe3cd}.badge.cov-warn{color:var(--warn);background:var(--warn-bg);border-color:#f0d9a8}.badge.cov-low{color:var(--low);background:var(--low-bg);border-color:#f1c3bc}.badge.source{color:var(--text-muted);background:var(--surface-2);border-color:var(--border)}.badge.asof{color:var(--text-muted);background:transparent;border-color:var(--border)}.badge.nodata{color:#6b5b00;background:#fff6d6;border-color:#ece0a3}.badge.ms-matched{color:var(--ok);background:var(--ok-bg);border-color:#bfe3cd}.badge.ms-unmatched{color:var(--text-muted);background:var(--surface-2);border-color:var(--border)}.badge.ms-no_profile{color:#5b4a86;background:#efeaf9;border-color:#d8cdf0}.badge.ms-ambiguous{color:var(--warn);background:var(--warn-bg);border-color:#f0d9a8}.badge.ms-excluded{color:var(--text-faint);background:var(--surface-2);border-color:var(--border)}.badge-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.app-header .badge{background:#ffffff24;color:#eafff8;border-color:#ffffff40}.app-header .badge.cov-ok{background:#ffffff2e}.app-header .badge.cov-warn{color:#ffe1ad}.app-header .badge.cov-low{color:#ffd2cb}.app-header .badge.cpf-headline{background:#fff3;border-color:#ffffff59}.app-header .badge.cpf-headline strong{font-size:13px;font-weight:800;letter-spacing:.2px}.app-header .badge.cpf-headline .metric-label-text{font-weight:700}.app-header .badge.cpf-headline .cpf-sub{font-size:10px;font-weight:600;opacity:.75}.app-header .badge.irn-headline{background:#5eead42e;border-color:#5eead480;color:#d5fbf1}.app-header .badge.irn-headline strong{font-size:13px;font-weight:800;letter-spacing:.2px}.app-header .badge.irn-headline .metric-label-text{font-weight:700}.app-header .badge.irn-headline .cpf-sub{font-size:10px;font-weight:600;opacity:.75}.app-header .badge.qs-official{background:#ffd66633;border-color:#ffd6668c;color:#ffe9b8}.badge.qs-official .qs-official-tag{font-size:9.5px;font-weight:800;letter-spacing:.4px;padding:1px 5px;border-radius:999px;background:#ffd666d9;color:#4a3600}.badge.qs-official strong{font-size:13px;font-weight:800}.badge.qs-official .qs-official-scale{font-size:10px;opacity:.8}.badge.qs-official .qs-official-rank{font-size:10.5px;opacity:.85}.app-header .badge.cpf-headline.qs-actual-primary{background:#5eead42e;border-color:#5eead48c;color:#d5fbf1}.app-header .badge.cpf-headline.qs-actual-primary .qs-official-rank{font-size:10.5px;opacity:.9}.app-header .badge.cpf-secondary{background:#ffffff14;border-color:#ffffff2e;opacity:.82;font-size:11px}.app-header .badge.cpf-secondary strong{font-size:12px;font-weight:700}.app-header .badge.cpf-secondary .metric-label-text{font-weight:600;opacity:.85}.col-sub{display:block;font-size:9.5px;font-weight:600;opacity:.7}.filters{display:flex;flex-wrap:wrap;gap:calc(var(--space) * 2);align-items:end;margin-bottom:calc(var(--space) * 4)}.field{display:flex;flex-direction:column;gap:4px}.field label{font-size:11px;color:var(--text-muted);font-weight:600}.field input,.field select{font:inherit;padding:7px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);min-width:160px}.state{padding:calc(var(--space) * 8);text-align:center;color:var(--text-muted);background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius)}.state.error{color:var(--low);border-color:#f1c3bc;background:var(--low-bg)}.state .retry{margin-top:12px;padding:7px 16px;border:1px solid currentColor;border-radius:var(--radius-sm);background:transparent;color:inherit;font-weight:600}.state .err-code{font-size:11px;opacity:.7;display:block;margin-top:4px;font-variant-numeric:tabular-nums}.skeleton{height:14px;border-radius:4px;background:linear-gradient(90deg,var(--surface-2) 25%,#e7eaee 37%,var(--surface-2) 63%);background-size:400% 100%;animation:shimmer 1.3s ease infinite}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.chart-caption{font-size:11.5px;color:var(--text-muted);margin-top:8px}.chart-empty{color:var(--text-faint);padding:24px;text-align:center}.ts-band-note{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-muted);margin-top:8px}.ts-band-swatch{display:inline-block;width:22px;height:12px;flex:0 0 auto;background:#00574b1a;border:1px solid rgba(0,87,75,.3);border-radius:3px}.prof-card{display:flex;flex-direction:column;gap:10px}.prof-card .name{font-size:15px;font-weight:700}.prof-card .name small{color:var(--text-muted);font-weight:500;font-size:12px;margin-left:6px}.prof-card .sub{font-size:12px;color:var(--text-muted)}.prof-card .metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.prof-card .metrics .m .l{font-size:10.5px;color:var(--text-muted)}.prof-card .metrics .m .v{font-size:16px;font-weight:700}.prof-card .metrics .m .v.dash{color:var(--text-faint)}.prof-card .metrics .m.fwci{background:var(--brand-soft);border-radius:var(--radius-sm);padding:4px 6px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable .th-inner{display:inline-flex;align-items:center;gap:4px;justify-content:flex-end}th.sortable.left .th-inner{justify-content:flex-start}th.sortable .arrow{font-size:9px;opacity:.4}th.sortable .arrow.active{opacity:1;color:var(--brand)}th.sortable:hover{color:var(--text)}th.sortable:hover .arrow{opacity:.7}.metric-label{display:inline-flex;align-items:center;gap:4px}.info-tip{position:relative;display:inline-flex;align-items:center;color:var(--text-faint);cursor:help}.info-tip:hover,.info-tip:focus-visible,.info-tip:focus{color:var(--brand);outline:none}.info-ico{display:block}.tip-bubble{position:absolute;z-index:60;top:calc(100% + 8px);left:50%;transform:translate(-50%);width:max-content;max-width:250px;background:var(--brand-strong);color:#fff;padding:8px 10px;border-radius:var(--radius-sm);box-shadow:0 4px 14px #10202838;font-size:12px;font-weight:500;line-height:1.45;white-space:normal;text-align:left;flex-direction:column;gap:3px;display:none}.tip-bubble strong{font-size:11px;font-weight:700;opacity:.92}.info-tip:hover .tip-bubble,.info-tip:focus-visible .tip-bubble,.info-tip:focus .tip-bubble{display:flex}.tip-bubble:after{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-bottom-color:var(--brand-strong)}.kpi .label .metric-label{gap:4px}.kpi .label .metric-label-text{font-size:11px}.ts-toolbar{display:flex;justify-content:flex-start;margin-bottom:8px}.ts-metric-pick{display:inline-flex;align-items:center;gap:6px}.ts-pick-label{font-size:11px;font-weight:700;color:var(--text-muted)}.ts-metric-pick select{font:inherit;font-size:13px;font-weight:600;padding:4px 8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text)}.ts-metric-checks{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 12px;margin:0;width:100%}.ts-metric-checks legend{padding:0 6px}.ts-check{display:inline-flex;align-items:center;gap:5px}.ts-check input{margin:0;cursor:pointer}.ts-check input:disabled{cursor:not-allowed}.ts-check-lbl{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--text);cursor:pointer}.ts-check input:disabled+.ts-check-lbl{cursor:not-allowed;opacity:.85}.ts-color-chip{width:12px;height:12px;border-radius:3px;border:2px solid;box-sizing:border-box;flex:none}.ts-missing{list-style:none;margin:8px 0 0;padding:0;font-size:11.5px;color:var(--text-muted)}.ts-missing li{margin:2px 0}.ts-missing li:before{content:"· "}.ts-tip{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;box-shadow:0 4px 14px #0000001a;font-size:12px}.ts-tip-year{font-weight:700;margin-bottom:4px;color:var(--text)}.ts-tip-list{list-style:none;margin:0;padding:0}.ts-tip-list li{display:flex;align-items:center;gap:6px;padding:1px 0}.ts-tip-chip{width:10px;height:10px;border-radius:2px;flex:none}.ts-tip-name{color:var(--text-muted);margin-right:auto}.ts-tip-val{font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}.muted{color:var(--text-muted)}.note{font-size:12px;color:var(--text-muted);background:var(--surface-2);border-radius:var(--radius-sm);padding:10px 12px}.dl{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;font-size:13px}.dl dt{color:var(--text-muted)}.dl dd{margin:0}.auth-splash{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg)}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,var(--brand) 0%,var(--brand-strong) 100%);padding:24px}.login-card{width:100%;max-width:380px;background:var(--surface);border-radius:var(--radius);box-shadow:0 12px 40px #00000047;padding:32px 28px;display:flex;flex-direction:column;gap:14px}.login-card h1{font-size:20px;margin:0;color:var(--brand);letter-spacing:-.3px}.login-sub{margin:-8px 0 6px;font-size:12.5px;color:var(--text-muted)}.login-card .field{gap:5px}.login-card .field input{min-width:0;width:100%}.login-error{font-size:12.5px;color:var(--low);background:var(--low-bg);border:1px solid #f1c3bc;border-radius:var(--radius-sm);padding:8px 10px}.login-btn{margin-top:4px;padding:10px 16px;border:none;border-radius:var(--radius-sm);background:var(--brand);color:#fff;font-weight:700;font-size:14px}.login-btn:hover:not(:disabled){background:var(--brand-strong)}.login-btn:disabled{opacity:.55;cursor:not-allowed}.login-note{margin:6px 0 0;font-size:11.5px;color:var(--text-faint);line-height:1.5}.navbar-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.user-bar{display:flex;align-items:center;gap:10px}.user-name{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:#eafff8}.role-tag{font-size:10px;font-weight:800;letter-spacing:.3px;padding:1px 7px;border-radius:999px;white-space:nowrap;background:#ffffff2e;color:#eafff8;border:1px solid rgba(255,255,255,.3)}.role-tag.admin{background:#ffd666e6;color:#4a3600;border-color:transparent}.role-tag.editor{background:#5eead4d9;color:#063b33;border-color:transparent}.section-head-row .role-tag.admin{background:var(--warn-bg);color:var(--warn);border:1px solid #f0d9a8}.logout-btn{font:inherit;font-size:11.5px;font-weight:600;color:#eafff8;background:#ffffff24;border:1px solid rgba(255,255,255,.3);border-radius:999px;padding:3px 12px}.logout-btn:hover{background:#ffffff42}.btn{font:inherit;font-size:13px;font-weight:600;padding:7px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);color:var(--text)}.btn.sm{font-size:11.5px;padding:4px 9px}.btn.primary{background:var(--brand);color:#fff;border-color:var(--brand)}.btn.primary:hover:not(:disabled){background:var(--brand-strong)}.btn.ghost{background:var(--surface);color:var(--text)}.btn.ghost:hover:not(:disabled){background:var(--surface-2)}.btn.ghost.danger{color:var(--low);border-color:#f1c3bc}.btn.ghost.danger:hover:not(:disabled){background:var(--low-bg)}.btn.danger-solid{background:var(--low);color:#fff;border-color:var(--low)}.btn.danger-solid:hover:not(:disabled){background:#a5301f}.btn:disabled{opacity:.5;cursor:not-allowed}.section-head-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px;flex-wrap:wrap}.section-head-row h2{margin:0;font-size:16px;display:inline-flex;align-items:center;gap:8px}.row-actions{display:inline-flex;gap:6px}.admin-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--ok-bg);color:var(--ok);border:1px solid #bfe3cd;border-radius:var(--radius-sm);padding:10px 14px;margin-bottom:16px;font-weight:600;font-size:13px}.banner-x,.modal-x{background:transparent;border:none;color:inherit;font-size:14px;line-height:1;padding:2px 4px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#10202880;display:flex;align-items:center;justify-content:center;padding:24px}.modal-card{width:100%;max-width:520px;max-height:90vh;overflow-y:auto;background:var(--surface);border-radius:var(--radius);box-shadow:0 16px 48px #00000052;display:flex;flex-direction:column}.modal-card.wide{max-width:720px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.modal-head h3{margin:0;font-size:16px}.modal-body{padding:18px 20px}.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--border)}.modal-inline-actions{display:flex;justify-content:space-between;gap:8px;margin-top:14px}.admin-form .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px}.admin-form .field{gap:5px}.admin-form .field input,.admin-form .field select{min-width:0;width:100%}.admin-form .field.span2{grid-column:1 / -1}.form-hint{font-size:11.5px;color:var(--text-muted);line-height:1.5;margin:12px 0 0}.form-error{font-size:12.5px;color:var(--low);background:var(--low-bg);border:1px solid #f1c3bc;border-radius:var(--radius-sm);padding:8px 10px;margin-top:12px}@media (max-width: 520px){.admin-form .form-grid{grid-template-columns:1fr}}.badge.job-queued{color:var(--text-muted);background:var(--surface-2);border-color:var(--border)}.badge.job-running{color:var(--link);background:var(--brand-soft);border-color:#bfe0d8}.badge.job-quota_wait{color:var(--warn);background:var(--warn-bg);border-color:#f0d9a8}.badge.job-done{color:var(--ok);background:var(--ok-bg);border-color:#bfe3cd}.badge.job-failed{color:var(--low);background:var(--low-bg);border-color:#f1c3bc}
