:root{--ink: #e8ece9;--ink-soft: #c5cdc8;--muted: #8a958e;--paper: #111312;--paper-deep: #0a0b0a;--surface: #181a19;--surface-raised: #1e2120;--jade: #3d9b78;--jade-deep: #2a7a5c;--jade-dim: #1a3d30;--amber: #c9a227;--coral: #d45a4a;--line: color-mix(in srgb, var(--ink) 10%, transparent);--shadow: 0 12px 32px color-mix(in srgb, black 45%, transparent);--radius: 12px;--font-sans: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", sans-serif;--font-display: "Noto Serif TC", "Noto Sans TC", serif;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;color:var(--ink);font-family:var(--font-sans);background:radial-gradient(1000px 500px at 8% -8%,color-mix(in srgb,var(--jade) 14%,transparent),transparent 55%),radial-gradient(800px 420px at 100% 0%,color-mix(in srgb,#3a5a62 10%,transparent),transparent 50%),linear-gradient(165deg,#0d0e0d 0%,var(--paper-deep) 45%,#0f1110 100%);background-attachment:fixed}button,input,select{font:inherit;color:inherit}.app-shell{width:min(1080px,calc(100% - 2rem));margin:0 auto;padding:2rem 0 3.5rem}.brand-bar{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1rem;margin-bottom:1.75rem;animation:rise .55s ease-out both}.brand-mark{font-family:var(--font-display);font-size:clamp(1.85rem,4vw,2.55rem);font-weight:700;letter-spacing:.02em;line-height:1.1;margin:0;color:var(--ink)}.brand-sub{margin:.45rem 0 0;color:var(--muted);font-size:.95rem;max-width:36rem}.status-pill{display:inline-flex;align-items:center;gap:.45rem;padding:.45rem .8rem;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink-soft);font-size:.85rem}.status-dot{width:.55rem;height:.55rem;border-radius:50%;background:var(--muted)}.status-dot.ok{background:var(--jade)}.status-dot.bad{background:var(--coral)}.toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;margin-bottom:1.5rem;animation:rise .55s ease-out .08s both}.period-filters{display:inline-flex;flex-wrap:wrap;gap:.5rem;align-items:center}.period-filters label{display:inline-flex;align-items:center;gap:.35rem;color:var(--muted);font-size:.85rem}.period-filters select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:.45rem 1.75rem .45rem .7rem;color:var(--ink);background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 14px) 55%,calc(100% - 9px) 55%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;cursor:pointer}.period-filters select:disabled{opacity:.5;cursor:not-allowed}.period-filters select:focus-visible{outline:2px solid color-mix(in srgb,var(--jade) 55%,transparent);outline-offset:2px}.btn{border:1px solid color-mix(in srgb,var(--jade) 45%,transparent);background:linear-gradient(180deg,var(--jade) 0%,var(--jade-deep) 100%);color:#f0f7f4;border-radius:999px;padding:.55rem 1.15rem;cursor:pointer;transition:transform .15s ease,filter .15s ease}.btn:hover:not(:disabled){filter:brightness(1.08);transform:translateY(-1px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-ghost{background:var(--surface);color:var(--ink-soft);border-color:var(--line)}.btn-ghost:hover:not(:disabled){filter:brightness(1.12)}.meta-chip{color:var(--muted);font-size:.82rem}.banner{border-radius:var(--radius);padding:.9rem 1.1rem;margin-bottom:1.25rem;border:1px solid var(--line);animation:rise .5s ease-out both}.banner.warn{background:color-mix(in srgb,var(--amber) 12%,var(--surface));border-color:color-mix(in srgb,var(--amber) 35%,transparent)}.banner.error{background:color-mix(in srgb,var(--coral) 12%,var(--surface));border-color:color-mix(in srgb,var(--coral) 30%,transparent)}.banner code{font-size:.88em}.grid{display:grid;gap:1rem;grid-template-columns:repeat(12,1fr)}.panel{grid-column:span 12;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1.15rem 1.25rem 1.3rem;box-shadow:var(--shadow);animation:rise .6s ease-out both}.panel:nth-child(1){animation-delay:.1s}.panel:nth-child(2){animation-delay:.16s}.panel:nth-child(3){animation-delay:.22s}@media(min-width:800px){.panel.span-5{grid-column:span 5}.panel.span-7{grid-column:span 7}}.panel h2{margin:0 0 .35rem;font-family:var(--font-display);font-size:1.15rem;font-weight:700}.panel .lede{margin:0 0 1rem;color:var(--muted);font-size:.9rem}.panel-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:.75rem 1rem;margin-bottom:.25rem}.panel-head .lede{margin-bottom:.75rem}.view-toggle{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;background:var(--paper-deep);flex-shrink:0}.view-toggle-btn{border:none;background:transparent;color:var(--muted);padding:.35rem .85rem;font-size:.8rem;cursor:pointer}.view-toggle-btn.active{background:color-mix(in srgb,var(--jade) 28%,var(--surface));color:var(--ink)}.view-toggle-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--jade) 55%,transparent);outline-offset:1px}.swatch{display:inline-block;width:.55rem;height:.55rem;border-radius:2px;margin-right:.4rem;vertical-align:middle}.pie-layout{display:flex;flex-wrap:wrap;align-items:center;gap:1.25rem 1.75rem}.pie-chart{flex-shrink:0;display:block}.pie-legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.55rem;min-width:min(100%,14rem);flex:1}.pie-legend li{display:grid;grid-template-columns:auto 1fr auto;gap:.35rem .5rem;align-items:baseline;font-size:.9rem}.pie-legend .swatch{margin-right:0;align-self:center}.pie-legend-name{font-weight:600}.stat-value{font-family:var(--font-display);font-size:clamp(1.6rem,3vw,2rem);font-weight:700;letter-spacing:.01em}.stat-label{margin-top:.2rem;color:var(--muted);font-size:.85rem}.period-range{margin:-.35rem 0 .85rem}.budget-hero{display:grid;gap:.4rem;margin-top:.35rem}.budget-hero .stat-value{line-height:1.15}.budget-bar{height:.45rem;border-radius:999px;background:var(--jade-dim);overflow:hidden;margin-top:.35rem}.budget-bar>span{display:block;height:100%;border-radius:inherit;background:var(--jade);transform-origin:left center;animation:grow .7s ease-out both}.budget-hero.watch .budget-bar>span{background:var(--amber)}.budget-hero.hot .budget-bar>span{background:var(--coral)}.budget-meta{margin:.15rem 0 0}.settings-panel{max-width:32rem}.settings-form{display:grid;gap:1.25rem}.settings-token-block{margin-bottom:1.75rem;padding-bottom:1.5rem;border-bottom:1px solid var(--line)}.settings-field{display:grid;gap:.35rem}.settings-label{font-weight:600;font-size:.95rem}.settings-field input{width:100%;max-width:12rem;background:var(--paper-deep);border:1px solid var(--line);border-radius:8px;padding:.55rem .75rem;color:var(--ink)}.settings-token-block .settings-field input{max-width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.02em}.token-gate{max-width:28rem;display:grid;gap:1rem}.token-gate h2{margin:0;font-size:1.25rem}.token-gate-error{border-color:color-mix(in srgb,var(--rose, #c45c5c) 45%,var(--line));background:color-mix(in srgb,var(--rose, #c45c5c) 8%,var(--paper))}.settings-field input:focus-visible{outline:2px solid color-mix(in srgb,var(--jade) 55%,transparent);outline-offset:2px}.settings-actions{display:flex;flex-wrap:wrap;gap:.65rem;align-items:center}.app-share-list{display:flex;flex-direction:column;gap:.85rem;margin:0;padding:0;list-style:none}.app-share-row{display:grid;gap:.35rem}.app-share-meta{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.35rem .75rem;align-items:baseline}.app-share-meta strong{font-size:.95rem;font-weight:600}.app-share-bar{height:.4rem;border-radius:999px;background:var(--jade-dim);overflow:hidden}.app-share-bar>span{display:block;height:100%;border-radius:inherit;transform-origin:left center;animation:grow .7s ease-out both}.empty{color:var(--muted);font-size:.92rem;padding:.5rem 0}.table-wrap{overflow-x:auto;margin:0 -.25rem}table.data{width:100%;border-collapse:collapse;font-size:.92rem}table.data th,table.data td{text-align:left;padding:.65rem .55rem;border-bottom:1px solid var(--line);vertical-align:top}table.data th{color:var(--muted);font-weight:600;font-size:.78rem;letter-spacing:.04em;text-transform:uppercase}table.data td.amount{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes grow{0%{transform:scaleX(.15)}to{transform:scaleX(1)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
