:root{--bg:#f4f5f7;--surface:#fff;--surface-2:#f8f9fb;--border:#e4e7ec;--text:#1a1d23;--text-muted:#6b7280;--text-faint:#98a2b3;--brand:#2f6df6;--brand-ink:#1b4fd0;--brand-soft:#e8f0ff;--card:#16a34a;--cash:#2f6df6;--gift:#a855f7;--luck:#f59e0b;--danger:#e5484d;--online:#16a34a;--offline:#cbd2dc;--radius:14px;--radius-sm:10px;--shadow:0 1px 2px #1018280f, 0 1px 3px #10182814;--shadow-lg:0 8px 24px #1018281f;--font:-apple-system, BlinkMacSystemFont, "Segoe UI", "Apple SD Gothic Neo", "Malgun Gothic", "Noto Sans KR", Roboto, sans-serif;--maxw:960px}@media (prefers-color-scheme:dark){:root{--bg:#0f1115;--surface:#171a21;--surface-2:#1e222b;--border:#2a2f3a;--text:#e7eaf0;--text-muted:#9aa4b2;--text-faint:#6b7482;--brand:#5b8dff;--brand-ink:#7ba4ff;--brand-soft:#1b2740;--offline:#3a414d;--shadow:0 1px 2px #0006;--shadow-lg:0 10px 30px #00000080}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.45}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}input{font-family:inherit}.appbar{z-index:30;background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:saturate(1.4)blur(10px);backdrop-filter:saturate(1.4)blur(10px);border-bottom:1px solid var(--border);position:sticky;top:0}.appbar-inner{max-width:var(--maxw);align-items:center;gap:12px;margin:0 auto;padding:12px 16px;display:flex}.appbar .brand{letter-spacing:-.02em;font-size:18px;font-weight:800}.appbar .brand span{color:var(--brand)}.appbar .spacer{flex:1}.appbar .who{color:var(--text-muted);font-size:13px}.nav{max-width:var(--maxw);gap:4px;margin:0 auto;padding:0 10px;display:flex;overflow-x:auto}.nav a{color:var(--text-muted);white-space:nowrap;border-bottom:2px solid #0000;padding:10px 14px;font-size:14px;font-weight:600}.nav a.active{color:var(--brand);border-bottom-color:var(--brand)}.page{max-width:var(--maxw);margin:0 auto;padding:18px 16px 96px}.row{align-items:center;gap:12px;display:flex}.wrap{flex-wrap:wrap}.spacer{flex:1}.muted{color:var(--text-muted)}.faint{color:var(--text-faint)}.small{font-size:13px}.right{text-align:right}.mono{font-variant-numeric:tabular-nums}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.card+.card{margin-top:12px}.card-pad{padding:16px}.card-head{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:14px 16px;display:flex}.card-head h3{margin:0;font-size:15px;font-weight:700}.tiles{grid-template-columns:repeat(2,1fr);gap:10px;display:grid}@media (min-width:620px){.tiles{grid-template-columns:repeat(4,1fr)}}.tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow);padding:14px}.tile .label{color:var(--text-muted);font-size:12px;font-weight:600}.tile .value{letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin-top:4px;font-size:20px;font-weight:800}.tile .sub{color:var(--text-faint);margin-top:2px;font-size:12px}.tile.card-c{border-top:3px solid var(--card)}.tile.cash-c{border-top:3px solid var(--cash)}.tile.gift-c{border-top:3px solid var(--gift)}.tile.luck-c{border-top:3px solid var(--luck)}.tile.total-c{border-top:3px solid var(--text)}.dot{border-radius:50%;width:8px;height:8px;display:inline-block}.dot.on{background:var(--online);box-shadow:0 0 0 3px color-mix(in srgb, var(--online) 22%, transparent)}.dot.off{background:var(--offline)}.list{flex-direction:column;gap:10px;display:flex}.item{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;box-shadow:var(--shadow);text-align:left;align-items:center;gap:12px;padding:14px 16px;transition:transform 50ms,border-color .15s;display:flex}.item:hover{border-color:color-mix(in srgb, var(--brand) 40%, var(--border))}.item:active{transform:scale(.995)}.item .title{font-weight:700}.item .meta{color:var(--text-muted);font-size:13px}.item .amt{font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-weight:800}.item .amt small{color:var(--text-muted);font-weight:600}.star{color:var(--luck);background:0 0;border:none;padding:4px;font-size:20px;line-height:1}.star.off{color:var(--offline)}.table-scroll{overflow-x:auto}table.data{border-collapse:collapse;width:100%;font-size:13.5px}table.data th,table.data td{text-align:right;white-space:nowrap;padding:10px 12px}table.data th{color:var(--text-muted);border-bottom:1px solid var(--border);font-size:12px;font-weight:600}table.data td{border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums}table.data td:first-child,table.data th:first-child{text-align:left}table.data tr:last-child td{border-bottom:none}.field{flex-direction:column;gap:6px;display:flex}.field label{color:var(--text-muted);font-size:13px;font-weight:600}.login-opts{flex-wrap:wrap;gap:8px 18px;display:flex}.login-opts .check{color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:13px;display:inline-flex}.login-opts .check input{width:16px;height:16px;accent-color:var(--primary,#2563eb);margin:0}.input,.btn,.seg button,input[type=date]{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);height:42px;color:var(--text);padding:0 14px;font-size:15px}.input:focus,input[type=date]:focus{outline:2px solid var(--brand-soft);border-color:var(--brand)}.btn{border:1px solid var(--border);background:var(--surface);justify-content:center;align-items:center;gap:8px;font-weight:700;display:inline-flex}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-ink)}.btn.block{width:100%}.btn:disabled{opacity:.55;cursor:default}.seg{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);gap:3px;padding:3px;display:inline-flex}.seg button{height:34px;color:var(--text-muted);background:0 0;border:none;border-radius:8px;padding:0 12px;font-size:13px;font-weight:600}.seg button.active{background:var(--surface);color:var(--brand);box-shadow:var(--shadow)}.login-wrap{place-items:center;min-height:100dvh;padding:20px;display:grid}.login-card{width:100%;max-width:380px}.login-logo{text-align:center;margin-bottom:22px}.login-logo .title{letter-spacing:-.03em;font-size:26px;font-weight:900}.login-logo .title span{color:var(--brand)}.login-logo .sub{color:var(--text-muted);margin-top:4px;font-size:13px}.center-note{text-align:center;color:var(--text-muted);padding:40px 16px}.error-note{background:color-mix(in srgb, var(--danger) 10%, var(--surface));border:1px solid color-mix(in srgb, var(--danger) 35%, var(--border));color:var(--danger);border-radius:var(--radius-sm);padding:10px 14px;font-size:14px}.skeleton{background:linear-gradient(90deg, var(--surface-2), var(--border), var(--surface-2));background-size:200% 100%;border-radius:8px;animation:1.2s infinite sk}@keyframes sk{0%{background-position:200% 0}to{background-position:-200% 0}}.badge{background:var(--surface-2);color:var(--text-muted);border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.badge.unread{background:var(--brand-soft);color:var(--brand-ink);border-color:#0000}.chip-type{border-radius:6px;padding:2px 7px;font-size:11px;font-weight:700}:root{--s1:#2a78d6;--s2:#eb6834;--s3:#1baf7a;--grid:#e9ecf1;--axis:#c9d0da}@media (prefers-color-scheme:dark){:root{--s1:#3987e5;--s2:#d95926;--s3:#199e70;--grid:#262b35;--axis:#3a414d}}.chart{position:relative}.chart-top{flex-wrap:wrap;align-items:center;gap:12px;min-height:34px;padding:10px 12px 0;display:flex}.chart-legend{color:var(--text-muted);flex-wrap:wrap;gap:14px;font-size:12.5px;display:flex}.chart-legend-item{align-items:center;gap:6px;display:inline-flex}.chart-key{flex:none;display:inline-block}.chart-key.rect{border-radius:2px;width:10px;height:10px}.chart-key.line{border-radius:1px;width:14px;height:2px}.chart-table-btn{border:1px solid var(--border);background:var(--surface);height:26px;color:var(--text-muted);border-radius:8px;padding:0 10px;font-size:12px;font-weight:600}.chart-table-btn[aria-pressed=true]{color:var(--brand);border-color:var(--brand)}.chart-plot{width:100%;position:relative;overflow:hidden}.chart-plot svg{touch-action:pan-y;display:block}.chart-grid{stroke:var(--grid);stroke-width:1px}.chart-baseline{stroke:var(--axis);stroke-width:1px}.chart-axis-text{fill:var(--text-faint);font-variant-numeric:tabular-nums;font-size:11px}.chart-empty{fill:var(--text-faint);font-size:13px}.chart-crosshair{stroke:var(--axis);stroke-width:1px}.chart-avg{stroke:var(--text-faint);stroke-width:1px;stroke-dasharray:3 3}.chart-dot{stroke:var(--surface);stroke-width:2px}.chart-group{outline:none}.chart-group .chart-bar{transition:opacity .1s}.chart-group.hover .chart-bar,.chart-group:focus-visible .chart-bar{opacity:.8}.chart-tip{z-index:5;pointer-events:none;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lg);border-radius:10px;min-width:130px;padding:8px 10px;font-size:12.5px;position:absolute}.chart-tip-title{margin-bottom:4px;font-weight:700}.chart-tip-row{align-items:center;gap:6px;padding:1px 0;display:flex}.chart-tip-value{font-variant-numeric:tabular-nums;font-weight:700}.chart-tip-label{color:var(--text-muted)}.chart-card-head{align-items:center;gap:10px;padding:14px 16px 0;display:flex}.chart-card-head h3{margin:0;font-size:15px;font-weight:700}.chart-card-head .sub{color:var(--text-muted);font-size:12.5px}.month-nav{align-items:center;gap:4px;display:inline-flex}.month-nav button{border:1px solid var(--border);background:var(--surface);width:34px;height:34px;color:var(--text);border-radius:8px;padding:0;font-size:16px}.month-nav .label{text-align:center;min-width:110px;font-weight:700}table.data tfoot td{border-top:2px solid var(--border);background:var(--surface-2);border-bottom:none;font-weight:700}select.input{padding-right:32px}.btn.sm{border-radius:8px;height:30px;padding:0 10px;font-size:12px}.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.danger:hover{filter:brightness(.95)}.dev-actions{border-bottom:1px solid var(--border);background:var(--surface-2);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 16px;display:flex}.dev-actions .name{font-weight:700}.dev-actions .code{color:var(--text-faint);font-variant-numeric:tabular-nums;font-size:12px}.modal-backdrop{z-index:50;background:#00000073;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius) var(--radius) 0 0;width:100%;max-width:460px;box-shadow:var(--shadow-lg);max-height:90dvh;overflow:auto}@media (min-width:620px){.modal-backdrop{align-items:center;padding:20px}.modal{border-radius:var(--radius)}}.modal-head{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:14px 16px;display:flex}.modal-head h3{margin:0;font-size:16px;font-weight:800}.modal-x{color:var(--text-muted);background:0 0;border:none;padding:2px 6px;font-size:22px;line-height:1}.modal-body{padding:16px}.modal-foot{gap:10px;padding:0 16px 16px;display:flex}.modal-foot .btn{flex:1}.kv{grid-template-columns:84px 1fr;gap:7px 12px;margin:0;font-size:14px;display:grid}.kv dt{color:var(--text-muted)}.kv dd{font-variant-numeric:tabular-nums;word-break:break-all;margin:0;font-weight:600}.confirm-q{border-top:1px dashed var(--border);margin:14px 0 0;padding-top:12px;font-weight:700}.svc-list{flex-direction:column;gap:8px;display:flex}.svc-item{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);align-items:center;gap:12px;padding:10px 12px;display:flex}.svc-item .amt{font-variant-numeric:tabular-nums;font-size:16px;font-weight:800}.svc-item .meta{color:var(--text-muted);font-size:12.5px}.toast{z-index:60;background:var(--text);color:var(--bg);box-shadow:var(--shadow-lg);white-space:nowrap;border-radius:999px;padding:10px 18px;font-size:14px;font-weight:600;position:fixed;bottom:28px;left:50%;transform:translate(-50%)}table.txns tr.clickable{cursor:pointer}table.txns tr.clickable:hover td{background:var(--surface-2)}.row-link{color:var(--text);align-items:center;gap:6px;font-weight:600;display:inline-flex}.row-link .chev{color:var(--text-faint);font-size:16px;line-height:1}table.heatmap{border-collapse:separate;border-spacing:2px;width:100%;font-size:12px}@media (max-width:480px){table.heatmap{font-size:11px}table.heatmap td.hm-cell{padding:6px 1px}}table.heatmap th{color:var(--text-muted);text-align:center;padding:4px 2px;font-size:12px;font-weight:600}table.heatmap th.sat{color:var(--cash)}table.heatmap th.sun{color:var(--danger)}table.heatmap th.hm-hour{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;padding-right:6px}table.heatmap td.hm-cell{text-align:center;font-variant-numeric:tabular-nums;cursor:default;border-radius:5px;outline:2px solid #0000;padding:7px 2px;transition:outline-color .1s}table.heatmap td.hm-cell.focus{outline-color:var(--text)}table.heatmap td.hm-total,table.heatmap th.hm-total{text-align:right;color:var(--text-muted);white-space:nowrap;padding-right:6px;font-weight:600}table.heatmap tfoot td{border-top:1px solid var(--border);padding-top:6px}.hm-top{padding:12px 12px 0}.hm-top-list{margin:0;padding-left:20px;font-size:13.5px;line-height:1.7}.delta{font-variant-numeric:tabular-nums;font-weight:700}.delta.up{color:var(--card)}.delta.down{color:var(--danger)}.delta.flat{color:var(--text-muted)}.rank-no{text-align:center;min-width:22px;color:var(--text-muted);font-weight:800;display:inline-block}.rank-no.top{color:var(--brand)}.badge.warn{background:color-mix(in srgb, var(--luck) 18%, var(--surface));color:#9a5b00;border-color:#0000}.badge.danger{background:color-mix(in srgb, var(--danger) 14%, var(--surface));color:var(--danger);border-color:#0000}.badge.good{background:color-mix(in srgb, var(--card) 14%, var(--surface));color:var(--card);border-color:#0000}@media (prefers-color-scheme:dark){.badge.warn{color:#f4c06b}}table.data td.name-cell{text-align:left;white-space:normal;min-width:140px}table.data td.name-cell .sub{color:var(--text-muted);font-size:12px}.bar-mini{background:var(--s3);vertical-align:middle;border-radius:3px;height:6px;display:inline-block}.export-grid{grid-template-columns:repeat(2,1fr);gap:10px;display:grid}@media (min-width:620px){.export-grid{grid-template-columns:repeat(4,1fr)}}.export-btn{text-align:left;flex-direction:column;align-items:flex-start;gap:4px;height:auto;padding:12px 14px;display:flex}.export-btn small{color:var(--text-muted);font-weight:500}.btn.primary.export-btn small{color:#ffffffd9}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{border:1px solid var(--border);background:var(--surface-2);border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:12.5px;display:inline-flex}.chip button{color:var(--text-faint);background:0 0;border:none;padding:0;font-size:14px;line-height:1}
