:root{--font-sans: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, system-ui, sans-serif;--font-serif: ui-serif, Georgia, "Times New Roman", serif;--font-mono: ui-monospace, "SF Mono", Monaco, Consolas, "Courier New", monospace;--border-radius-md: 8px;--border-radius-lg: 12px;--border-radius-xl: 16px;--purple-50:#EEEDFE;--purple-100:#CECBF6;--purple-200:#AFA9EC;--purple-400:#7F77DD;--purple-600:#534AB7;--purple-800:#3C3489;--purple-900:#26215C;--teal-50:#E1F5EE;--teal-100:#9FE1CB;--teal-200:#5DCAA5;--teal-400:#1D9E75;--teal-600:#0F6E56;--teal-800:#085041;--teal-900:#04342C;--coral-50:#FAECE7;--coral-100:#F5C4B3;--coral-200:#F0997B;--coral-400:#D85A30;--coral-600:#993C1D;--coral-800:#712B13;--coral-900:#4A1B0C;--pink-50:#FBEAF0;--pink-100:#F4C0D1;--pink-200:#ED93B1;--pink-400:#D4537E;--pink-600:#993556;--pink-800:#72243E;--pink-900:#4B1528;--gray-50:#F1EFE8;--gray-100:#D3D1C7;--gray-200:#B4B2A9;--gray-400:#888780;--gray-600:#5F5E5A;--gray-800:#444441;--gray-900:#2C2C2A;--blue-50:#E6F1FB;--blue-100:#B5D4F4;--blue-200:#85B7EB;--blue-400:#378ADD;--blue-600:#185FA5;--blue-800:#0C447C;--blue-900:#042C53;--green-50:#EAF3DE;--green-100:#C0DD97;--green-200:#97C459;--green-400:#639922;--green-600:#3B6D11;--green-800:#27500A;--green-900:#173404;--amber-50:#FAEEDA;--amber-100:#FAC775;--amber-200:#EF9F27;--amber-400:#BA7517;--amber-600:#854F0B;--amber-800:#633806;--amber-900:#412402;--red-50:#FCEBEB;--red-100:#F7C1C1;--red-200:#F09595;--red-400:#E24B4A;--red-600:#A32D2D;--red-800:#791F1F;--red-900:#501313;--color-background-primary: #FFFFFF;--color-background-secondary: #FAFAF6;--color-background-tertiary: var(--gray-50);--color-background-info: var(--blue-50);--color-background-danger: var(--red-50);--color-background-success: var(--green-50);--color-background-warning: var(--amber-50);--color-text-primary: var(--gray-900);--color-text-secondary: var(--gray-600);--color-text-tertiary: var(--gray-400);--color-text-info: var(--blue-800);--color-text-danger: var(--red-800);--color-text-success: var(--green-800);--color-text-warning: var(--amber-800);--color-border-tertiary: rgba(0, 0, 0, .15);--color-border-secondary: rgba(0, 0, 0, .3);--color-border-primary: rgba(0, 0, 0, .4);--color-border-info: var(--blue-600);--color-border-danger: var(--red-600);--color-border-success: var(--green-600);--color-border-warning: var(--amber-600);--focus-ring: 0 0 0 3px rgba(23, 99, 197, .25)}@media (prefers-color-scheme: dark){:root{--color-background-primary: #1C1B19;--color-background-secondary: #232220;--color-background-tertiary: #161513;--color-background-info: var(--blue-800);--color-background-danger: var(--red-800);--color-background-success: var(--green-800);--color-background-warning: var(--amber-800);--color-text-primary: var(--gray-50);--color-text-secondary: var(--gray-200);--color-text-tertiary: var(--gray-400);--color-text-info: var(--blue-100);--color-text-danger: var(--red-100);--color-text-success: var(--green-100);--color-text-warning: var(--amber-100);--color-border-tertiary: rgba(255, 255, 255, .1);--color-border-secondary: rgba(255, 255, 255, .2);--color-border-primary: rgba(255, 255, 255, .3);--color-border-info: var(--blue-200);--color-border-danger: var(--red-200);--color-border-success: var(--green-200);--color-border-warning: var(--amber-200);--focus-ring: 0 0 0 3px rgba(133, 183, 235, .3)}}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font-sans);font-size:16px;font-weight:400;line-height:1.7;color:var(--color-text-primary);background:var(--color-background-tertiary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6{margin:0;font-weight:500;line-height:1.4;color:var(--color-text-primary)}h1{font-size:22px}h2{font-size:18px}h3{font-size:16px}p{margin:0}a{color:var(--color-text-info);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit}input,select,textarea{font-family:inherit;color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-tertiary{color:var(--color-text-tertiary)}.text-danger{color:var(--color-text-danger)}.text-success{color:var(--color-text-success)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.page-center{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.card{background:var(--color-background-primary);border-radius:var(--border-radius-lg);border:.5px solid var(--color-border-tertiary);padding:1rem 1.25rem}.metric-card{background:var(--color-background-secondary);border-radius:var(--border-radius-md);padding:1rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:transparent;color:var(--color-text-primary);border:.5px solid var(--color-border-secondary);border-radius:var(--border-radius-md);padding:8px 16px;font-size:14px;font-weight:400;cursor:pointer;transition:background-color .12s ease,transform 80ms ease}.btn:hover{background:var(--color-background-secondary)}.btn:active{transform:scale(.98)}.btn:focus-visible{outline:none;box-shadow:var(--focus-ring)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-text-primary);color:var(--color-background-primary);border-color:transparent}.btn-primary:hover{background:var(--color-text-primary);opacity:.9}.btn-block{width:100%}.field{display:block}.field+.field{margin-top:12px}.label{display:block;font-size:14px;color:var(--color-text-secondary);margin-bottom:6px}.input{width:100%;height:36px;background:var(--color-background-primary);border:.5px solid var(--color-border-tertiary);border-radius:var(--border-radius-md);padding:0 12px;font-size:14px;color:var(--color-text-primary);transition:box-shadow .12s ease,border-color .12s ease}.input::placeholder{color:var(--color-text-tertiary)}.input:hover{border-color:var(--color-border-secondary)}.input:focus{outline:none;box-shadow:var(--focus-ring)}.alert{padding:10px 12px;border-radius:var(--border-radius-md);font-size:14px;border:.5px solid transparent}.alert-danger{background:var(--color-background-danger);color:var(--color-text-danger);border-color:var(--color-border-danger)}.badge{display:inline-flex;align-items:center;background:var(--color-background-info);color:var(--color-text-info);font-size:12px;padding:4px 12px;border-radius:var(--border-radius-md)}.app{min-height:100vh;background:var(--color-background-tertiary)}.app-header{position:sticky;top:0;z-index:10;background:var(--color-background-primary);border-bottom:.5px solid var(--color-border-tertiary);-webkit-backdrop-filter:saturate(180%) blur(8px);backdrop-filter:saturate(180%) blur(8px)}.app-header-inner{max-width:960px;margin:0 auto;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:12px 16px}.app-title{font-size:15px;font-weight:500;text-align:center;margin:0;color:var(--color-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.brand{display:inline-flex;align-items:center;gap:10px;font-weight:500;font-size:15px;color:var(--color-text-primary);text-decoration:none}.brand:hover{text-decoration:none}.brand-mark{width:28px;height:28px;border-radius:7px;overflow:hidden;display:inline-flex;flex-shrink:0;background:var(--color-background-secondary)}.brand-mark img{width:100%;height:100%;display:block;object-fit:cover}.brand-mark-lg{width:44px;height:44px;border-radius:11px}.brand-lg{font-size:16px;gap:12px}.app-main{max-width:960px;margin:0 auto;padding:20px 16px;padding-bottom:calc(80px + env(safe-area-inset-bottom,0px))}@media (min-width: 768px){.app-header-inner{padding:14px 24px}.app-main{padding:28px 24px;padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}}.bottom-nav{position:fixed;left:0;right:0;bottom:0;z-index:20;display:grid;grid-template-columns:repeat(3,1fr);background:var(--color-background-primary);border-top:.5px solid var(--color-border-tertiary);padding-bottom:env(safe-area-inset-bottom,0px);-webkit-backdrop-filter:saturate(180%) blur(8px);backdrop-filter:saturate(180%) blur(8px)}.nav-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:8px 4px 10px;text-decoration:none;color:var(--color-text-tertiary);font-size:11px;line-height:1;min-height:56px;transition:color .12s ease}.nav-tab:hover{color:var(--color-text-secondary);text-decoration:none}.nav-tab i{font-size:20px;line-height:1}.nav-tab.active{color:var(--color-text-primary)}.nav-tab:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--color-border-info);border-radius:var(--border-radius-md)}.section-title{font-size:16px;font-weight:500;margin:0 0 12px;color:var(--color-text-primary)}.stack-md>*+*{margin-top:12px}.stack-lg>*+*{margin-top:24px}.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px}.card-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:12px}.chart-sub{font-size:12px}.metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}@media (min-width: 640px){.metric-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}}.metric-label{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--color-text-secondary);margin-bottom:8px}.metric-label i{font-size:14px}.metric-value{font-size:22px;font-weight:500;color:var(--color-text-primary);line-height:1.2;word-break:break-word}.metric-hint{margin-top:4px;font-size:12px;color:var(--color-text-tertiary)}.btn-ghost{background:transparent;border-color:transparent;padding:6px 10px;color:var(--color-text-secondary)}.btn-ghost:hover{background:var(--color-background-secondary);color:var(--color-text-primary)}.show-mobile{display:block}.hide-mobile{display:none}@media (min-width: 768px){.show-mobile{display:none}.hide-mobile{display:block}.btn-ghost.hide-mobile{display:inline-flex}}.btn .hide-mobile{display:none}@media (min-width: 768px){.btn .hide-mobile{display:inline}}.chart-wrap{width:100%}.chart-svg{width:100%;height:auto;display:block;touch-action:pan-y}.chart-readout{display:flex;align-items:baseline;gap:8px;margin-top:8px;font-size:13px;min-height:1.2em}.chart-readout-value{font-weight:500;color:var(--color-text-primary)}.chart-readout-date{color:var(--color-text-secondary)}.chart-empty{display:flex;align-items:center;justify-content:center;gap:8px;height:160px;color:var(--color-text-tertiary);font-size:14px;border:.5px dashed var(--color-border-tertiary);border-radius:var(--border-radius-md)}.chart-empty i{font-size:18px}.update-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}.update-title{font-size:16px;font-weight:500;margin:0;color:var(--color-text-primary)}.update-body{font-size:14px;color:var(--color-text-secondary);line-height:1.7;margin:0;white-space:pre-wrap}.update-meta{margin-top:10px;display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--color-text-tertiary)}.update-meta i{font-size:13px}.cta-row{display:grid;grid-template-columns:1fr;gap:8px}@media (min-width: 640px){.cta-row{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}}.table-card{padding:0;overflow:hidden}.data-table{width:100%;border-collapse:collapse;font-size:14px}.data-table th,.data-table td{padding:10px 14px;text-align:left;border-bottom:.5px solid var(--color-border-tertiary);vertical-align:top}.data-table thead th{font-weight:500;color:var(--color-text-secondary);background:var(--color-background-secondary);font-size:13px}.data-table tbody tr:last-child td{border-bottom:none}.data-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.mono{font-family:var(--font-mono);font-size:13px}.kv-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.kv-label{font-size:12px;color:var(--color-text-secondary);margin-bottom:2px}.kv-value{font-size:14px;font-weight:500;font-variant-numeric:tabular-nums;color:var(--color-text-primary)}.login-card{width:100%;max-width:380px}.login-title{margin-bottom:4px}.login-sub{font-size:14px;color:var(--color-text-secondary);margin-bottom:20px}@media (prefers-reduced-motion: no-preference){.fade-in{animation:fadeIn .22s ease-out}}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
