.app-header[data-v-8f78bdcb]{z-index:20;height:var(--header-height);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--color-border);background:#1a1613db;align-items:center;gap:16px;padding:0 24px;display:flex;position:sticky;top:0}@media (width<=640px){.app-header[data-v-8f78bdcb]{gap:10px;padding:0 12px}.app-title[data-v-8f78bdcb]{font-size:16px}.user-info[data-v-8f78bdcb]{display:none}.header-right[data-v-8f78bdcb]{gap:8px}.btn-excel[data-v-8f78bdcb],.btn-logout[data-v-8f78bdcb]{padding:6px 10px;font-size:12px}}.logo-svg[data-v-8f78bdcb]{flex-shrink:0;width:auto;height:22px}.app-title[data-v-8f78bdcb]{letter-spacing:-.02em;white-space:nowrap;font-size:19px;font-weight:500}.header-spacer[data-v-8f78bdcb]{flex:1}.header-right[data-v-8f78bdcb]{align-items:center;gap:12px;display:flex}.user-info[data-v-8f78bdcb]{text-align:right;line-height:1.25}.user-name[data-v-8f78bdcb]{font-size:13px;font-weight:600}.user-role-desc[data-v-8f78bdcb]{color:var(--color-text-muted);font-size:11px}.role-badge[data-v-8f78bdcb]{border-radius:var(--radius-pill);align-items:center;gap:6px;padding:4px 10px;font-size:11px;font-weight:600;display:inline-flex}.role-admin[data-v-8f78bdcb]{color:#f2854a;background:#ed5d0029}.role-viewer[data-v-8f78bdcb]{color:#7db2ee;background:#4a90e229}.role-dot[data-v-8f78bdcb]{border-radius:var(--radius-pill);background:currentColor;width:6px;height:6px}.btn-admin[data-v-8f78bdcb]{border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);width:32px;height:32px;color:var(--color-text-secondary);background:0 0;justify-content:center;align-items:center;transition:color .15s,border-color .15s;display:inline-flex}.btn-admin[data-v-8f78bdcb]:hover{color:var(--color-text);border-color:var(--color-text-muted)}.btn-excel[data-v-8f78bdcb]{background:var(--color-accent);border-radius:var(--radius-sm);color:#fff;cursor:pointer;border:0;align-items:center;gap:7px;padding:7px 13px;font-family:inherit;font-size:13px;font-weight:600;display:inline-flex}.btn-logout[data-v-8f78bdcb]{border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);color:var(--color-text-secondary);cursor:pointer;background:0 0;padding:7px 13px;font-family:inherit;font-size:13px;font-weight:600}.toolbar[data-v-a5854ea7]{flex-wrap:wrap;align-items:center;gap:14px;padding:16px 24px 0;display:flex}.toolbar-left[data-v-a5854ea7]{flex-direction:column;display:flex}.toolbar-label[data-v-a5854ea7]{letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);font-size:11px;font-weight:600}.toolbar-row[data-v-a5854ea7]{align-items:center;gap:8px;margin-top:4px;display:flex}.toolbar-hint[data-v-a5854ea7]{color:var(--color-text-muted);font-size:13px}.toolbar-right[data-v-a5854ea7]{flex:1;justify-content:flex-end;align-items:center;gap:8px;display:flex}.period-select[data-v-a5854ea7]{appearance:none;background:var(--color-input-bg) url("data:image/svg+xml;utf8,<svg xmlns=%22http://www.w3.org/2000/svg%22 width=%2212%22 height=%2212%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%238E8682%22 stroke-width=%222%22><path d=%22M6 9l6 6 6-6%22/></svg>") no-repeat right 9px center;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;outline:none;padding:5px 30px 5px 11px;font-family:inherit;font-size:13px}.period-arrow[data-v-a5854ea7]{border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-input-bg);width:26px;height:26px;color:var(--color-text-secondary);cursor:pointer;justify-content:center;align-items:center;font-family:inherit;font-size:18px;line-height:1;transition:background .12s,color .12s;display:inline-flex}.period-arrow[data-v-a5854ea7]:hover:not(:disabled){background:var(--color-surface-hover);color:var(--color-text)}.period-arrow[data-v-a5854ea7]:disabled{opacity:.35;cursor:not-allowed}.seg-group[data-v-a5854ea7]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:3px;display:inline-flex}.seg-btn[data-v-a5854ea7]{border-radius:var(--radius-sm);cursor:pointer;color:#b5ada8;background:0 0;border:0;padding:6px 13px;font-family:inherit;font-size:12.5px;font-weight:600;transition:background .12s}.seg-active[data-v-a5854ea7]{background:var(--color-accent);color:#fff}@media (width<=640px){.toolbar[data-v-a5854ea7]{flex-direction:column;align-items:flex-start;gap:10px;padding:12px 12px 0}.toolbar-right[data-v-a5854ea7]{flex-wrap:wrap;flex:none;justify-content:flex-start;gap:6px}.toolbar-hint[data-v-a5854ea7]{display:none}.seg-btn[data-v-a5854ea7]{padding:5px 10px;font-size:12px}}.modal-overlay[data-v-6fad84f6]{z-index:40;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#14110f8c;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal-card[data-v-6fad84f6]{background:var(--color-surface);border:1px solid var(--color-border-strong);border-radius:var(--radius-lg);width:100%;max-width:520px;padding:24px;animation:.2s cubic-bezier(.22,1,.36,1) both fade-up;box-shadow:0 20px 50px #00000080}.modal-header[data-v-6fad84f6]{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:4px;display:flex}.modal-title[data-v-6fad84f6]{font-size:17px;font-weight:600}.modal-close[data-v-6fad84f6]{color:var(--color-text-muted);cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:22px;line-height:1}.modal-desc[data-v-6fad84f6]{color:var(--color-text-muted);margin-bottom:18px;font-size:13px}.file-input-hidden[data-v-6fad84f6]{display:none}.modal-actions[data-v-6fad84f6]{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.btn-choose[data-v-6fad84f6]{border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;background:0 0;align-items:center;gap:8px;padding:9px 15px;font-family:inherit;font-size:13px;font-weight:600;display:inline-flex}.file-name[data-v-6fad84f6]{color:var(--color-text-secondary);font-size:12px}.file-name-empty[data-v-6fad84f6]{color:var(--color-text-dim)}.actions-spacer[data-v-6fad84f6]{flex:1}.btn-upload[data-v-6fad84f6]{border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;cursor:pointer;border:0;padding:9px 20px;font-family:inherit;font-size:13px;font-weight:600}.btn-upload[data-v-6fad84f6]:disabled{color:#7a736e;cursor:not-allowed;background:#3a342f}.status-box[data-v-6fad84f6]{border-radius:var(--radius-md);color:var(--color-text-secondary);border:1px solid var(--color-border);background:#ffffff0a;align-items:center;gap:10px;margin-top:16px;padding:11px 14px;font-size:13px;display:flex}.status-success[data-v-6fad84f6]{color:var(--color-green-light);background:#2da02c1a;border-color:#2da02c4d}.status-error[data-v-6fad84f6]{color:var(--color-red);background:#e0705f1a;border-color:#e0705f4d}.spinner[data-v-6fad84f6]{border:2px solid #ffffff40;border-top-color:var(--color-accent);border-radius:var(--radius-pill);width:14px;height:14px;animation:.7s linear infinite spin;display:inline-block}.kpi-cards-section[data-v-04a5931b]{padding:16px 24px 0}.cards-grid[data-v-04a5931b]{grid-template-columns:repeat(auto-fill,minmax(224px,1fr));gap:14px;display:grid}.kpi-card[data-v-04a5931b]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:17px 19px}.card-header[data-v-04a5931b]{align-items:center;gap:7px;margin-bottom:10px;display:flex}.card-dot[data-v-04a5931b]{border-radius:2px;flex-shrink:0;width:7px;height:7px}.card-name[data-v-04a5931b]{color:var(--color-text-muted);letter-spacing:-.01em;font-size:12px}.card-value[data-v-04a5931b]{letter-spacing:-.02em;color:var(--color-text);font-size:29px;font-weight:500;line-height:1}.card-delta-row[data-v-04a5931b]{flex-wrap:wrap;align-items:center;gap:6px;margin-top:7px;display:flex}.card-delta[data-v-04a5931b]{font-size:12px;font-weight:600}.card-target[data-v-04a5931b]{color:var(--color-text-dim);font-size:11px}.card-bar-track[data-v-04a5931b]{border-radius:var(--radius-pill);background:#ffffff14;height:5px;margin-top:11px;overflow:hidden}.card-bar-fill[data-v-04a5931b]{border-radius:var(--radius-pill);height:100%}@media (width<=640px){.kpi-cards-section[data-v-04a5931b]{padding:12px 12px 0}.cards-grid[data-v-04a5931b]{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}.kpi-card[data-v-04a5931b]{padding:14px 15px}.card-value[data-v-04a5931b]{font-size:24px}}.chart-card[data-v-45bb543a]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:20px 20px 16px}.chart-title[data-v-45bb543a]{color:var(--color-text);font-size:15px;font-weight:600}.chart-sub[data-v-45bb543a]{color:var(--color-text-muted);margin-bottom:14px;font-size:12px}.chart-canvas-wrap[data-v-45bb543a]{height:260px;position:relative}.kpi-table-section[data-v-fc5912ea]{padding:26px 24px 0}.table-label[data-v-fc5912ea]{letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:12px;font-size:11px;font-weight:600}.table-wrap[data-v-fc5912ea]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:auto}table[data-v-fc5912ea]{border-collapse:collapse;width:100%;min-width:1600px;font-size:12.5px}.table-th[data-v-fc5912ea]{background:var(--color-surface-hover);letter-spacing:.02em;color:#b5ada8;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;border-bottom:1px solid #ffffff1a;padding:11px 14px;font-size:11px;font-weight:600;position:sticky;top:0}.th-active[data-v-fc5912ea]{color:var(--color-accent)}.th-left[data-v-fc5912ea]{text-align:left}.th-right[data-v-fc5912ea]{text-align:right}.table-row[data-v-fc5912ea]{border-top:1px solid #ffffff0f}.table-td[data-v-fc5912ea]{white-space:nowrap;color:var(--color-text-secondary);padding:9px 14px;font-size:12px}.td-left[data-v-fc5912ea]{text-align:left}.td-right[data-v-fc5912ea]{text-align:right}.td-str[data-v-fc5912ea]{color:var(--color-text);font-weight:600}@media (width<=640px){.kpi-table-section[data-v-fc5912ea]{padding:20px 12px 0}.table-th[data-v-fc5912ea]{padding:9px 10px;font-size:10px}.table-td[data-v-fc5912ea]{padding:7px 10px;font-size:11px}}.login-page[data-v-25f59d10]{background:radial-gradient(1200px 600px at 50% -10%, #ed5d001a, transparent 60%), var(--color-bg);justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.login-container[data-v-25f59d10]{width:100%;max-width:400px;animation:.4s cubic-bezier(.22,1,.36,1) both fade-up}.login-logo[data-v-25f59d10]{align-items:center;gap:11px;margin-bottom:26px;display:flex}.logo-svg[data-v-25f59d10]{flex-shrink:0;width:auto;height:26px}.logo-text[data-v-25f59d10]{letter-spacing:-.02em;font-size:21px;font-weight:500}.login-card[data-v-25f59d10]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:28px;box-shadow:0 14px 32px #0006}.login-card h1[data-v-25f59d10]{letter-spacing:-.02em;margin:0 0 4px;font-size:26px;font-weight:500}.login-subtitle[data-v-25f59d10]{color:var(--color-text-muted);margin:0 0 22px;font-size:14px}.field-label[data-v-25f59d10]{color:var(--color-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600;display:block}.field-input[data-v-25f59d10]{background:var(--color-input-bg);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);width:100%;color:var(--color-text);outline:none;margin-bottom:14px;padding:10px 12px;font-family:inherit;font-size:14px}.field-input[data-v-25f59d10]:focus{border-color:var(--color-accent)}.login-error[data-v-25f59d10]{border-radius:var(--radius-sm);color:var(--color-red);background:#e0705f1f;border:1px solid #e0705f52;align-items:center;gap:8px;margin-top:14px;padding:9px 12px;font-size:13px;display:flex}.login-btn[data-v-25f59d10]{background:var(--color-accent);color:#fff;border-radius:var(--radius-sm);cursor:pointer;border:0;width:100%;margin-top:20px;padding:11px;font-family:inherit;font-size:14px;font-weight:600}.login-btn[data-v-25f59d10]:disabled{opacity:.6;cursor:not-allowed}.loading-text[data-v-208a8b7b],.error-text[data-v-208a8b7b],.empty-text[data-v-208a8b7b]{text-align:center;color:var(--color-text-muted);padding:40px 24px;font-size:14px}.error-text[data-v-208a8b7b]{color:var(--color-red)}.charts-section[data-v-208a8b7b]{padding:26px 24px 0}.section-label[data-v-208a8b7b]{letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:12px;font-size:11px;font-weight:600}.charts-grid[data-v-208a8b7b]{grid-template-columns:repeat(auto-fill,minmax(480px,1fr));gap:18px;display:grid}.bottom-spacer[data-v-208a8b7b]{height:40px}@media (width<=640px){.charts-section[data-v-208a8b7b]{padding:20px 12px 0}.charts-grid[data-v-208a8b7b]{grid-template-columns:1fr;gap:12px}}@font-face{font-family:Inter Tight;src:url("/static/assets/InterTight-VariableFont_wght-CLj8w7h3.3cdfc5dab062.ttf")format("truetype-variations");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Inter Tight;src:url("/static/assets/InterTight-Italic-VariableFont_wght-Bm94u7QB.b943a16806df.ttf")format("truetype-variations");font-weight:100 900;font-style:italic;font-display:swap}:root{--color-bg:#1a1613;--color-surface:#241f1b;--color-surface-hover:#2a2422;--color-input-bg:#1e1a17;--color-border:#ffffff17;--color-border-strong:#ffffff29;--color-text:#f7f3ee;--color-text-secondary:#c9c2bb;--color-text-muted:#8e8682;--color-text-dim:#7a736e;--color-accent:#ed5d00;--color-blue:#4a90e2;--color-green:#2da03c;--color-green-light:#5fbf5e;--color-red:#e0705f;--color-muted:#8e8682;--radius-sm:6px;--radius-md:8px;--radius-lg:14px;--radius-pill:999px;--font-family:"Inter Tight", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--header-height:60px}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-family);-webkit-font-smoothing:antialiased}#app{min-height:100vh}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff24;border-radius:8px}::-webkit-scrollbar-thumb:hover{background:#ffffff3d}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fade-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
