:root{--navy:#1c2b36;--navy-2:#24343f;--orange:#d4541a;--bg:#f7f7f8;--card:#ffffff;--border:#e7e8ea;--text:#1c2b36;--muted:#6b7280;--muted-2:#9ca3af;--green:#15803d;--green-bg:#dcfce7;--red:#b91c1c;--red-bg:#fee2e2;--amber:#b45309;--amber-bg:#fef3c7;--sidebar-w:224px;--radius:10px;--shadow:0 1px 2px rgba(16,24,40,0.05),0 1px 3px rgba(16,24,40,0.04)}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:rgba(0,0,0,.13);border-radius:99px}::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.28)}*{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.13) transparent}body,html{margin:0;padding:0;overflow-x:hidden}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}.app{display:flex;min-height:100vh}.content{flex:1 1;margin-left:var(--sidebar-w);min-width:0}.main{padding:20px 28px 48px;max-width:1400px}.sidebar{position:fixed;top:0;left:0;bottom:0;width:var(--sidebar-w);background:var(--navy);color:#cdd6de;display:flex;flex-direction:column;padding:16px 10px;overflow-y:auto}.brand{color:#fff;font-weight:700;font-size:17px;padding:6px 10px 14px;letter-spacing:.2px}.nav-group{margin-top:14px}.nav-group-title{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:#6b7c88;padding:4px 10px;margin-bottom:2px}.nav-item{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:8px;color:#b8c2cc;font-size:13.5px;cursor:pointer;line-height:1}.nav-item:hover{background:var(--navy-2);color:#fff}.nav-item.active{background:var(--orange);color:#fff}.nav-item .ico{width:16px;height:16px;flex:none;opacity:.95}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:2px 0 14px}.topbar h1{font-size:18px;margin:0;font-weight:650}.topbar-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.status-pill{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted);background:#fff;border:1px solid var(--border);border-radius:999px;padding:5px 11px}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--orange)}.dur{border:1px solid var(--border);border-radius:8px;padding:6px 10px;font-size:12.5px;background:#fff;color:var(--text);cursor:pointer}.settings-page{gap:20px;max-width:860px}.settings-page,.settings-section{display:flex;flex-direction:column}.settings-section{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:24px 28px;gap:16px}.settings-section-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.settings-section-title{font-size:15px;font-weight:650;color:var(--text);margin-bottom:3px}.settings-section-sub{font-size:12.5px;color:var(--muted)}.sync-disclaimer{display:flex;align-items:flex-start;gap:10px;font-size:13px;color:#7c5a2a;background:#fef9ec;border:1px solid #f5dfa0;border-radius:8px;padding:12px 14px}.sync-meta{font-size:12px;color:var(--muted)}.sync-btn{display:inline-flex;align-items:center;gap:7px;background:var(--orange);color:#fff;border:none;border-radius:8px;padding:9px 18px;font-size:13.5px;font-weight:600;cursor:pointer;align-self:flex-start}.sync-btn:hover:not(:disabled){background:#bf4615}.sync-tag{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:4px 11px;font-size:12px;font-weight:600;white-space:nowrap;flex:none}.sync-tag-idle{background:var(--bg);color:var(--muted);border:1px solid var(--border)}.sync-tag-running{background:#fff8ec;color:#b45309;border:1px solid #fde68a}.sync-tag-done{background:var(--green-bg);color:var(--green);border:1px solid #bbf7d0}.sync-tag-error{background:var(--red-bg);color:var(--red);border:1px solid #fecaca}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.spin{display:inline-block;animation:spin 1s linear infinite}.add-map-btn{border:1px solid var(--border);background:var(--card);color:var(--text);border-radius:8px;padding:7px 13px;font-size:13px;cursor:pointer;white-space:nowrap;flex:none}.add-map-btn:hover,.catmap-add-form{background:var(--bg)}.catmap-add-form{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;border:1px solid var(--border);border-radius:8px;padding:14px 14px 10px}.catmap-add-field{display:flex;flex-direction:column;gap:5px;flex:1 1;min-width:180px}.catmap-add-field label{font-size:11px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;color:var(--muted)}.catmap-add-hint{font-size:11px;color:var(--muted);margin-top:5px}.catmap-input{border:1px solid var(--border);border-radius:7px;padding:8px 10px;font-size:13px;color:var(--text);background:#fff;width:100%}.catmap-input:focus{outline:none;border-color:var(--orange)}.catmap-save-btn{background:var(--orange);color:#fff;border:none;border-radius:7px;padding:8px 18px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}.catmap-save-btn:disabled{opacity:.5;cursor:default}.catmap-search-wrap{display:flex;align-items:center;justify-content:space-between;gap:10px}.catmap-search{border:1px solid var(--border);border-radius:7px;padding:7px 10px;font-size:13px;color:var(--text);background:var(--bg);width:260px}.catmap-search:focus{outline:none;border-color:var(--orange)}.catmap-count{font-size:12px;color:var(--muted);white-space:nowrap}.catmap-table-wrap{overflow-x:auto;max-height:460px;overflow-y:auto;border:1px solid var(--border);border-radius:8px}.catmap-table{width:100%;border-collapse:collapse;font-size:13px}.catmap-table th{text-align:left;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:var(--bg);position:-webkit-sticky;position:sticky;top:0;z-index:1}.catmap-table td,.catmap-table th{padding:9px 12px;border-bottom:1px solid var(--border)}.catmap-table tr:last-child td{border-bottom:none}.catmap-table tr:hover td{background:#fafbfc}.biz-badge{display:inline-block;background:#eef2ff;color:#4f46e5;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:500}.del-btn{border:none;background:none;color:var(--muted-2);cursor:pointer;font-size:12px;padding:4px 6px;border-radius:5px}.del-btn:hover{background:var(--red-bg);color:var(--red)}.catmap-msg{border-radius:7px;padding:9px 14px;font-size:13px;font-weight:500}.daterange{position:relative}.dr-trigger{cursor:pointer;gap:7px}.dr-trigger .ico{width:13px;height:13px}.dr-pop{position:absolute;top:calc(100% + 8px);right:0;z-index:40;width:300px;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 10px 30px rgba(16,24,40,.12);padding:12px}.dr-presets{display:flex;flex-direction:column;gap:2px;margin-bottom:10px}.dr-preset-btn{text-align:left;border:none;background:none;padding:7px 9px;border-radius:7px;font-size:13px;color:var(--text);cursor:pointer}.dr-preset-btn:hover{background:var(--bg)}.dr-preset-btn.active{background:#fdece2;color:var(--orange);font-weight:600}.dr-custom{gap:10px;padding-top:12px;border-top:1px solid var(--border)}.dr-custom,.dr-custom label{display:flex;flex-direction:column}.dr-custom label{gap:5px;font-size:11px;text-transform:uppercase;color:var(--muted);font-weight:600;letter-spacing:.04em;cursor:default}.dr-custom input[type=date]{border:1px solid var(--border);border-radius:7px;padding:7px 10px;font-size:13px;width:100%;color:var(--text);background:var(--surface);box-sizing:border-box}.dr-apply{background:var(--orange);color:#fff;border:none;border-radius:7px;padding:9px 14px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}.filterbar{display:flex;align-items:center;gap:10px;flex-wrap:nowrap;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:9px 14px;margin-bottom:16px;box-shadow:var(--shadow)}.ss-wrap{position:relative;flex:1 1;min-width:0}.ss-field{display:flex;align-items:center;gap:6px;min-width:0}.ss-field label{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-2);font-weight:600;white-space:nowrap;flex:none}.ss-input-wrap{flex:1 1;position:relative;min-width:0}.ss-input{width:100%;border:1px solid var(--border);border-radius:7px;padding:6px 20px 6px 8px;font-size:12px;background:#fff;color:var(--text);outline:none;cursor:pointer;min-width:0}.ss-input:focus{border-color:var(--orange)}.ss-arrow{position:absolute;right:6px;top:50%;transform:translateY(-50%);font-size:8px;color:var(--muted-2);pointer-events:none;line-height:1}.ss-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 20px rgba(16,24,40,.12);max-height:210px;overflow-y:auto}.ss-option{padding:7px 10px;font-size:12px;cursor:pointer;color:var(--text);white-space:nowrap}.ss-option:hover{background:var(--bg)}.ss-option.selected{color:var(--orange);font-weight:600;background:#fdece2}.clear-btn{flex:none;border:1px solid var(--border);background:#fff;color:var(--muted);border-radius:8px;padding:7px 13px;font-size:12px;cursor:pointer}.clear-btn:hover{color:var(--red);border-color:var(--red)}.view-toggle{display:flex;align-items:center;gap:0;flex:none;border:1px solid var(--border);border-radius:8px;overflow:hidden}.view-toggle-label{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-2);font-weight:600;padding:0 8px;border-right:1px solid var(--border);background:var(--bg);white-space:nowrap}.view-toggle-btn{flex:none;border:none;background:#fff;color:var(--muted);padding:7px 11px;font-size:11.5px;font-weight:500;cursor:pointer;transition:background .15s,color .15s}.view-toggle-btn+.view-toggle-btn{border-left:1px solid var(--border)}.view-toggle-btn.active{background:var(--orange);color:#fff;font-weight:600}.view-toggle-btn:not(.active):hover{background:#fdece2;color:var(--orange)}.pill{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;border:1px solid var(--border);border-radius:8px;padding:6px 11px;font-size:12.5px;background:#fff;color:var(--text)}.pill.muted{color:var(--muted)}.grid{display:grid;grid-gap:14px;gap:14px}.kpi-row{grid-template-columns:repeat(auto-fit,minmax(138px,1fr));gap:12px}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.kpi .khead{display:flex;align-items:flex-start;justify-content:space-between;gap:6px}.kpi .label{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em;line-height:1.3}.kpi .kicons{display:flex;align-items:center;gap:5px;color:var(--muted-2);flex:none}.kpi .idot,.kpi .kicons .ico{width:14px;height:14px}.kpi .idot{border:1.4px solid var(--muted-2);border-radius:50%;font-size:9px;font-style:italic;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;cursor:help;position:relative}.kpi .idot:hover{border-color:var(--navy);color:var(--navy)}.kpi .idot .tip{display:none;bottom:calc(100% + 8px);background:var(--navy);color:#fff;font-size:11px;padding:7px 10px;border-radius:7px;white-space:normal;width:200px;text-align:center;pointer-events:none;z-index:200;line-height:1.45;font-style:normal;font-weight:400;box-shadow:0 4px 14px rgba(0,0,0,.22)}.kpi .idot .tip,.kpi .idot .tip:after{position:absolute;left:50%;transform:translateX(-50%)}.kpi .idot .tip:after{content:"";top:100%;border:5px solid transparent;border-top:5px solid var(--navy)}.kpi .idot:hover .tip{display:block}.kpi .value{font-size:22px;font-weight:700;margin-top:8px;letter-spacing:-.02em}.kpi .sub{font-size:11.5px;color:var(--muted);margin-top:4px}.kpi .delta{font-size:12px;margin-top:4px}.spark{display:flex;align-items:flex-end;gap:1.5px;height:22px;margin-top:8px}.spark span{flex:1 1;background:var(--orange);opacity:.85;border-radius:1px;min-height:2px}.up{color:var(--green)}.down{color:var(--red)}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600}.badge.green{background:var(--green-bg);color:var(--green)}.badge.red{background:var(--red-bg);color:var(--red)}.badge.amber{background:var(--amber-bg);color:var(--amber)}.callout-row{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px;margin-top:16px}.callout{border:1px solid var(--border);border-left-width:4px}.callout.good{border-color:#cdeadb;border-left-color:var(--green);background:#f6fbf8}.callout.bad{border-color:#f2d3d3;border-left-color:var(--red);background:#fdf7f7}.callout .k{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.callout.good .k{color:var(--green)}.callout.bad .k{color:var(--red)}.callout .v{font-size:17px;font-weight:700;margin-top:6px}.callout .m{font-size:12.5px;color:var(--muted);margin-top:3px}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;gap:8px}.card-header .card-title{margin:0}.export-btn{border:1px solid var(--border);background:#fff;color:var(--muted);border-radius:7px;padding:4px 9px;font-size:11px;cursor:pointer;white-space:nowrap;flex:none}.export-btn:hover{color:var(--text);border-color:var(--muted-2);background:var(--bg)}.card-title{font-size:14px;font-weight:650;margin:0 0 12px}.cdot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:middle;flex:none}.warn{color:var(--amber)}.down,.up,.warn{font-weight:600}table.data{width:100%;border-collapse:collapse;font-size:12.5px}table.data td,table.data th{text-align:right;padding:6px 7px;border-bottom:1px solid var(--border);white-space:nowrap}table.data td:first-child,table.data th:first-child{text-align:left}table.data thead th{color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.03em}table.data tbody tr:hover{background:#fafbfc}table.data td.r,table.data th.r{text-align:right}.section-title{font-size:14px;font-weight:650;margin:22px 0 10px}.two-col{grid-template-columns:1.6fr 1fr}.eq-col>*,.two-col>*{min-width:0}.eq-col{grid-template-columns:1fr 1fr}.chart-card h3{font-size:13px;margin:0 0 12px;font-weight:600}.legend{display:flex;flex-direction:column;gap:8px;margin-left:8px}.legend .row{display:flex;align-items:center;gap:8px;font-size:12.5px}.legend .dot{width:10px;height:10px;border-radius:3px;flex:none}@media (max-width:900px){.two-col{grid-template-columns:1fr}}