:root{color-scheme:light;--font-display: "Avenir Next", -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", "PingFang SC", "Noto Sans SC", "Hiragino Sans GB", system-ui, sans-serif;--font-body: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", "PingFang SC", "Noto Sans SC", "Hiragino Sans GB", system-ui, sans-serif;--font-mono: "SF Mono", "JetBrains Mono", "IBM Plex Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;--text-xs: 12px;--text-sm: 13px;--text-base: 14px;--text-md: 15px;--text-lg: 16px;--text-xl: 18px;--text-2xl: 20px;--text-3xl: 24px;--text-4xl: 28px;--text-5xl: 32px;--tracking-display: -.015em;--tracking-tight: -.01em;--tracking-wide: .02em;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--radius-xs: 4px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 999px;--duration-fast: .12s;--duration-base: .2s;--duration-slow: .32s;--ease-standard: cubic-bezier(.2, 0, 0, 1);--ease-emphasized: cubic-bezier(.05, .7, .1, 1);--bg: oklch(98% .005 250);--surface: oklch(100% 0 0);--surface-2: oklch(96% .006 250);--surface-3: oklch(94% .008 250);--surface-hover: oklch(95% .006 250);--overlay: oklch(100% 0 0);--fg: oklch(22% .02 240);--fg-strong: oklch(17% .02 240);--muted: oklch(50% .018 240);--subtle: oklch(55% .016 240);--faint: oklch(74% .012 240);--border: oklch(90% .008 240);--border-strong: oklch(84% .01 240);--accent: oklch(53% .15 145);--accent-hover: oklch(47% .15 145);--accent-subtle: oklch(96% .035 150);--on-accent: #FFFFFF;--ring: var(--accent);--positive: oklch(51% .15 150);--positive-subtle:oklch(96% .04 150);--negative: oklch(52% .19 28);--negative-subtle:oklch(96% .04 28);--warning: oklch(46% .12 72);--warning-subtle: oklch(96% .045 85);--info: oklch(52% .13 245);--info-subtle: oklch(96% .03 245);--scrim: rgba(7,17,23,.42);--shadow-xs: 0 1px 2px rgba(7,17,23,.06);--shadow-sm: 0 1px 3px rgba(7,17,23,.08), 0 1px 2px rgba(7,17,23,.04);--shadow-md: 0 6px 16px rgba(7,17,23,.1), 0 1px 3px rgba(7,17,23,.05);--shadow-lg: 0 16px 40px rgba(7,17,23,.14), 0 2px 8px rgba(7,17,23,.06);--c1: oklch(53% .14 165);--c2: oklch(50% .15 255);--c3: oklch(52% .16 300);--c4: oklch(58% .13 205);--c5: oklch(52% .15 140);--c6: oklch(60% .16 115);--c7: oklch(60% .15 85);--c8: oklch(55% .16 55);--c9: oklch(53% .17 20);--c10: oklch(45% .04 250)}:root[data-theme=dark]{color-scheme:dark;--bg: oklch(17% .018 250);--surface: oklch(21% .02 250);--surface-2: oklch(25% .022 250);--surface-3: oklch(29% .024 250);--surface-hover: oklch(27% .023 250);--overlay: oklch(24% .023 250);--fg: oklch(94% .006 250);--fg-strong: oklch(98% .004 250);--muted: oklch(70% .02 250);--subtle: oklch(61% .02 250);--faint: oklch(45% .02 250);--border: oklch(30% .022 250);--border-strong: oklch(38% .024 250);--accent: oklch(74% .15 155);--accent-hover: oklch(79% .14 155);--accent-subtle: oklch(28% .05 155);--on-accent: oklch(17% .02 240);--positive: oklch(73% .15 150);--positive-subtle:oklch(28% .05 150);--negative: oklch(71% .18 28);--negative-subtle:oklch(28% .06 28);--warning: oklch(82% .14 85);--warning-subtle: oklch(30% .05 85);--info: oklch(73% .13 245);--info-subtle: oklch(28% .05 245);--scrim: rgba(0,0,0,.6);--shadow-xs: 0 1px 2px rgba(0,0,0,.3);--shadow-sm: 0 1px 3px rgba(0,0,0,.38), 0 1px 2px rgba(0,0,0,.24);--shadow-md: 0 6px 16px rgba(0,0,0,.44), 0 1px 3px rgba(0,0,0,.28);--shadow-lg: 0 16px 40px rgba(0,0,0,.54), 0 2px 8px rgba(0,0,0,.34);--c1: oklch(74% .14 165);--c2: oklch(74% .13 255);--c3: oklch(76% .14 300);--c4: oklch(78% .12 205);--c5: oklch(75% .15 140);--c6: oklch(80% .15 115);--c7: oklch(80% .14 85);--c8: oklch(78% .14 55);--c9: oklch(75% .15 20);--c10: oklch(70% .03 250)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-body);font-size:var(--text-base);line-height:1.55;color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased;transition:background var(--duration-base) var(--ease-standard),color var(--duration-base) var(--ease-standard)}h1,h2,h3,h4{font-family:var(--font-display);color:var(--fg-strong);margin:0;letter-spacing:var(--tracking-tight)}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover)}::selection{background:var(--accent-subtle)}:focus-visible{outline:2px solid var(--ring);outline-offset:2px;border-radius:var(--radius-xs)}button{font-family:inherit}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.subtle{color:var(--subtle)}.shell{display:flex;min-height:100vh}.main{flex:1;min-width:0;display:flex;flex-direction:column}.content{flex:1;padding:var(--space-8);max-width:1280px;width:100%;margin:0 auto}.page-head{margin-bottom:var(--space-6)}.page-title{font-size:var(--text-3xl);font-weight:700}.page-desc{color:var(--muted);margin-top:var(--space-1);font-size:var(--text-md)}.sidebar{width:232px;flex-shrink:0;position:sticky;top:0;height:100vh;background:var(--surface);border-inline-end:1px solid var(--border);display:flex;flex-direction:column;padding:var(--space-5) var(--space-3)}.brand{display:flex;align-items:center;gap:10px;padding:var(--space-2) var(--space-2) var(--space-5)}.brand-mark{width:28px;height:28px;border-radius:8px;background:var(--accent);display:grid;place-items:center;flex-shrink:0}.brand-name{font-family:var(--font-display);font-weight:700;font-size:var(--text-lg);color:var(--fg-strong);letter-spacing:var(--tracking-tight)}.nav{display:flex;flex-direction:column;gap:2px}.nav-item{display:flex;align-items:center;gap:10px;padding:9px var(--space-3);border-radius:var(--radius-md);color:var(--muted);font-size:var(--text-md);font-weight:500;transition:background var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard)}.nav-item:hover{background:var(--surface-hover);color:var(--fg)}.nav-item.active{background:var(--accent-subtle);color:var(--accent);font-weight:600}.nav-item svg{flex-shrink:0}.sidebar-foot{margin-top:auto;padding:var(--space-3) var(--space-2);font-size:var(--text-xs);color:var(--faint)}.topbar{height:60px;display:flex;align-items:center;gap:var(--space-4);padding:0 var(--space-8);border-bottom:1px solid var(--border);background:var(--surface);position:sticky;top:0;z-index:50}.searchbox{position:relative;flex:1;max-width:460px}.searchbox input{width:100%;height:36px;padding:0 var(--space-3) 0 36px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-2);color:var(--fg);font-size:var(--text-md);transition:border-color var(--duration-fast),box-shadow var(--duration-fast),background var(--duration-fast)}.searchbox input:focus{outline:none;border-color:var(--accent);background:var(--surface);box-shadow:0 0 0 3px color-mix(in oklch,var(--accent) 18%,transparent)}.searchbox>svg{position:absolute;inset-inline-start:11px;top:10px;color:var(--faint);pointer-events:none}.search-drop{position:absolute;top:42px;inset-inline-start:0;inset-inline-end:0;max-height:380px;overflow:auto;background:var(--overlay);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);z-index:60}.search-hit{display:flex;align-items:center;gap:10px;padding:10px var(--space-3);cursor:pointer}.search-hit:hover{background:var(--surface-hover)}.search-hit+.search-hit{border-top:1px solid var(--border)}.topbar-right{margin-inline-start:auto;display:flex;align-items:center;gap:var(--space-3)}.icon-btn{width:36px;height:36px;display:grid;place-items:center;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--muted);cursor:pointer;transition:all var(--duration-fast) var(--ease-standard)}.icon-btn:hover{color:var(--fg);background:var(--surface-hover)}.user-chip{display:flex;align-items:center;gap:8px;padding:5px 12px 5px 5px;border:1px solid var(--border);border-radius:var(--radius-full);background:var(--surface);cursor:pointer;font-size:var(--text-sm);color:var(--fg)}.user-chip:hover{background:var(--surface-hover)}.avatar{width:26px;height:26px;border-radius:var(--radius-full);background:var(--accent);color:var(--on-accent);display:grid;place-items:center;font-size:var(--text-xs);font-weight:700}.menu{position:absolute;inset-inline-end:0;top:46px;min-width:200px;background:var(--overlay);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);z-index:70;overflow:hidden}.menu-item{display:block;width:100%;text-align:start;padding:10px var(--space-4);font-size:var(--text-md);color:var(--fg);background:none;border:none;cursor:pointer}.menu-item:hover{background:var(--surface-hover)}.menu-sep{height:1px;background:var(--border)}.user-wrap{position:relative}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-xs)}.card-pad{padding:var(--space-6)}.card-title{font-size:var(--text-lg);font-weight:700}.card-head{display:flex;align-items:center;justify-content:space-between;padding:var(--space-5) var(--space-6) 0}.card-link{font-size:var(--text-sm);font-weight:600}.grid{display:grid;gap:var(--space-5)}.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}@media (max-width: 1100px){.grid-4{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:1fr}}@media (max-width: 700px){.grid-2,.grid-4{grid-template-columns:1fr}}.stat{padding:var(--space-5)}.stat-label{font-size:var(--text-sm);color:var(--muted);font-weight:500}.stat-value{font-family:var(--font-mono);font-size:var(--text-4xl);font-weight:700;color:var(--fg-strong);margin-top:var(--space-1);letter-spacing:var(--tracking-tight)}.stat-foot{font-size:var(--text-xs);color:var(--faint);margin-top:var(--space-1)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:38px;padding:0 var(--space-5);border-radius:var(--radius-md);font-size:var(--text-md);font-weight:600;cursor:pointer;border:1px solid transparent;transition:all var(--duration-fast) var(--ease-standard)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--on-accent)}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-secondary{background:var(--surface);color:var(--fg);border-color:var(--border-strong)}.btn-secondary:hover:not(:disabled){background:var(--surface-hover)}.btn-ghost{background:transparent;color:var(--muted)}.btn-ghost:hover:not(:disabled){background:var(--surface-hover);color:var(--fg)}.btn-danger{background:transparent;color:var(--negative);border-color:color-mix(in oklch,var(--negative) 35%,transparent)}.btn-danger:hover:not(:disabled){background:var(--negative-subtle)}.btn-sm{height:30px;padding:0 var(--space-3);font-size:var(--text-sm)}.btn-block{width:100%}.field{margin-bottom:var(--space-4)}.field label{display:block;font-size:var(--text-sm);font-weight:600;color:var(--fg);margin-bottom:6px}.input{width:100%;height:42px;padding:0 var(--space-3);border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--fg);font-size:var(--text-md);transition:border-color var(--duration-fast),box-shadow var(--duration-fast)}.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklch,var(--accent) 18%,transparent)}.input::placeholder{color:var(--faint)}.form-error{background:var(--negative-subtle);color:var(--negative);border-radius:var(--radius-md);padding:10px var(--space-3);font-size:var(--text-sm);margin-bottom:var(--space-4)}.form-ok{background:var(--positive-subtle);color:var(--positive);border-radius:var(--radius-md);padding:10px var(--space-3);font-size:var(--text-sm);margin-bottom:var(--space-4)}.otp-row{display:flex;gap:10px;justify-content:center;margin:var(--space-5) 0}.otp-box{width:48px;height:58px;text-align:center;font-family:var(--font-mono);font-size:var(--text-3xl);font-weight:700;color:var(--fg-strong);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-lg);transition:border-color var(--duration-fast),box-shadow var(--duration-fast)}.otp-box:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklch,var(--accent) 18%,transparent)}.badge{display:inline-flex;align-items:center;gap:5px;font-size:var(--text-xs);font-weight:600;padding:3px 9px;border-radius:var(--radius-full);background:var(--surface-2);color:var(--muted);white-space:nowrap}.badge-accent{background:var(--accent-subtle);color:var(--accent)}.badge-positive{background:var(--positive-subtle);color:var(--positive)}.badge-negative{background:var(--negative-subtle);color:var(--negative)}.badge-warning{background:var(--warning-subtle);color:var(--warning)}.badge-info{background:var(--info-subtle);color:var(--info)}.delta{display:inline-flex;align-items:center;gap:3px;font-family:var(--font-mono);font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}.delta.up{color:var(--positive)}.delta.down{color:var(--negative)}.delta.flat{color:var(--muted)}.chips{display:flex;flex-wrap:wrap;gap:var(--space-2)}.chip{padding:6px 14px;border-radius:var(--radius-full);font-size:var(--text-sm);font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--muted);cursor:pointer;transition:all var(--duration-fast) var(--ease-standard)}.chip:hover{color:var(--fg);border-color:var(--border-strong)}.chip.on{background:var(--accent-subtle);border-color:color-mix(in oklch,var(--accent) 40%,transparent);color:var(--accent);font-weight:600}.seg{display:inline-flex;background:var(--surface-2);border-radius:var(--radius-md);padding:3px;gap:2px}.seg-opt{padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--text-sm);font-weight:600;color:var(--muted);cursor:pointer;border:none;background:transparent;transition:all var(--duration-fast) var(--ease-standard)}.seg-opt:hover{color:var(--fg)}.seg-opt.on{background:var(--surface);color:var(--fg-strong);box-shadow:var(--shadow-xs)}.table-wrap{overflow-x:auto}table.tbl{width:100%;border-collapse:collapse;font-size:var(--text-md)}.tbl th{text-align:start;font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--subtle);padding:10px var(--space-4);border-bottom:1px solid var(--border-strong);white-space:nowrap}.tbl td{padding:12px var(--space-4);border-bottom:1px solid var(--border);vertical-align:middle}.tbl tbody tr{transition:background var(--duration-fast)}.tbl tbody tr:hover{background:var(--surface-hover)}.tbl tbody tr:last-child td{border-bottom:none}.tbl .num,.tbl th.num{text-align:end}.row-click{cursor:pointer}.app-cell{display:flex;align-items:center;gap:12px;min-width:0}.app-name{font-weight:600;color:var(--fg-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-seller{font-size:var(--text-xs);color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tile{width:38px;height:38px;border-radius:10px;flex-shrink:0;display:grid;place-items:center;color:#fff;font-family:var(--font-display);font-size:var(--text-lg);font-weight:700}.event{display:flex;gap:var(--space-4);padding:var(--space-4) var(--space-6);border-bottom:1px solid var(--border);transition:background var(--duration-fast)}.event:hover{background:var(--surface-hover)}.event:last-child{border-bottom:none}.event-body{flex:1;min-width:0}.event-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.event-detail{font-size:var(--text-sm);color:var(--muted);margin-top:4px;line-height:1.6}.event-date{font-size:var(--text-xs);color:var(--faint);white-space:nowrap;font-family:var(--font-mono)}.timeline{position:relative;padding-inline-start:28px}.timeline:before{content:"";position:absolute;inset-inline-start:7px;top:8px;bottom:8px;width:2px;background:var(--border);border-radius:2px}.tl-item{position:relative;padding:0 0 var(--space-6)}.tl-item:before{content:"";position:absolute;inset-inline-start:-25px;top:6px;width:10px;height:10px;border-radius:var(--radius-full);background:var(--surface);border:2px solid var(--accent)}.tl-item.warn:before{border-color:var(--warning)}.tl-title{font-weight:600;color:var(--fg-strong);font-size:var(--text-md)}.tl-excerpt{color:var(--muted);font-size:var(--text-sm);margin-top:4px;line-height:1.6}.tl-date{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--faint)}.chart-box{padding:var(--space-5) var(--space-6) var(--space-4)}.chart-title{font-size:var(--text-sm);font-weight:600;color:var(--muted);margin-bottom:var(--space-2)}.chart-svg{width:100%;height:auto;display:block}.chart-svg text{font-family:var(--font-mono);font-size:10px;fill:var(--faint)}.chart-svg .grid-line{stroke:var(--border);stroke-width:1}.chart-svg .line-main{fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.chart-svg .area-fill{fill:var(--accent);opacity:.1}.chart-svg .dot{fill:var(--surface);stroke:var(--accent);stroke-width:2}.empty{text-align:center;padding:var(--space-12) var(--space-6);color:var(--faint)}.empty-icon{width:44px;height:44px;margin:0 auto var(--space-3);border-radius:var(--radius-lg);background:var(--surface-2);display:grid;place-items:center;color:var(--faint)}.empty-title{font-weight:600;color:var(--muted);font-size:var(--text-md)}.empty-desc{font-size:var(--text-sm);margin-top:4px;max-width:380px;margin-inline-start:auto;margin-inline-end:auto;line-height:1.6}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid color-mix(in oklch,currentColor 25%,transparent);border-top-color:currentColor;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-wrap{display:flex;align-items:center;justify-content:center;gap:10px;padding:var(--space-12);color:var(--faint);font-size:var(--text-sm)}.skeleton{background:var(--surface-2);border-radius:var(--radius-md);min-height:16px;animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:var(--space-6)}.login-card{width:100%;max-width:400px;padding:var(--space-10) var(--space-8)}.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:var(--space-8)}.login-title{font-size:var(--text-2xl);font-weight:700;margin-bottom:var(--space-1)}.login-sub{color:var(--muted);font-size:var(--text-md);margin-bottom:var(--space-6)}.login-foot{text-align:center;margin-top:var(--space-6);font-size:var(--text-xs);color:var(--faint);line-height:1.8}.detail-head{display:flex;align-items:flex-start;gap:var(--space-4);flex-wrap:wrap}.detail-head .tile{width:56px;height:56px;border-radius:14px;font-size:var(--text-2xl)}.detail-actions{margin-inline-start:auto;display:flex;gap:var(--space-3)}.tag-row{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-3)}.star{background:none;border:none;cursor:pointer;color:var(--faint);padding:4px;transition:all var(--duration-fast);border-radius:var(--radius-sm);display:grid;place-items:center}.star:hover{color:var(--warning);background:var(--surface-hover)}.star.on{color:var(--warning)}.star.pop svg{animation:starpop .32s var(--ease-emphasized)}@keyframes starpop{0%{transform:scale(1)}40%{transform:scale(1.45)}to{transform:scale(1)}}.toolbar{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-5)}.toolbar .spacer{flex:1}.toast-wrap{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:100;display:flex;flex-direction:column;gap:8px;align-items:center}.toast{background:var(--fg-strong);color:var(--bg);padding:10px 20px;border-radius:var(--radius-full);font-size:var(--text-sm);font-weight:500;box-shadow:var(--shadow-lg);animation:toastin .24s var(--ease-emphasized)}@keyframes toastin{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.menu-toggle{display:none}@media (max-width: 900px){.shell{flex-direction:column}.sidebar{display:none}.menu-toggle{display:grid}.content{padding:var(--space-5)}.topbar{padding:0 var(--space-5)}.mobile-nav{display:flex;gap:2px;overflow-x:auto;padding:var(--space-2) var(--space-5);background:var(--surface);border-bottom:1px solid var(--border)}.mobile-nav .nav-item{white-space:nowrap}}.mobile-nav{display:none}@media (max-width: 900px){.mobile-nav{display:flex}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:999px;border:2px solid var(--bg)}::-webkit-scrollbar-track{background:transparent}[dir=rtl] .flip-rtl{transform:scaleX(-1)}.num,.chart-svg,.otp-row,.otp-box,.delta{direction:ltr}
