.vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:flex}.vue-recycle-scroller__slot{flex:auto 0 0}.vue-recycle-scroller__item-wrapper{flex:1;box-sizing:border-box;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}.actions button .label[data-v-725c838c]{display:inline}.actions button.icon-only[data-v-725c838c]{width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center}.view-switch[data-v-725c838c]{display:inline-flex;align-items:center;flex-shrink:0;padding:2px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}.view-switch button[data-v-725c838c]{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 9px;border:none;border-radius:var(--r-sm);background:transparent;color:var(--text-muted);font-size:var(--text-sm)}.view-switch button[data-v-725c838c]:hover{color:var(--text)}.view-switch button.active[data-v-725c838c]{background:var(--accent);color:#fff}@media (max-width: 640px){.actions button .label[data-v-725c838c]{display:none}.actions button[data-v-725c838c]:not(.icon-only){padding:6px 8px!important}.view-switch button[data-v-725c838c]{width:30px;padding:0;justify-content:center}.view-switch button span[data-v-725c838c]{display:none}}.date-trigger[data-v-0eaa7b82]{position:relative;display:inline-flex;align-items:center;gap:0;height:26px;border:1px solid var(--border);background:var(--surface);border-radius:var(--r-md);padding:0 26px 0 10px;color:var(--text);font-size:var(--text-xs);font-variant-numeric:tabular-nums;font-family:inherit;min-width:116px;cursor:pointer;transition:border-color var(--t-fast),box-shadow var(--t-fast),background var(--t-fast),color var(--t-fast)}.date-trigger[data-v-0eaa7b82]:hover{border-color:var(--text-muted)}.date-trigger[data-v-0eaa7b82]:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.date-trigger.open[data-v-0eaa7b82]{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.date-trigger.empty .trigger-label[data-v-0eaa7b82]{color:var(--text-muted)}.trigger-label[data-v-0eaa7b82]{flex:1;text-align:left;line-height:1}.picker-icon[data-v-0eaa7b82]{position:absolute;right:8px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none;transition:color var(--t-fast)}.date-trigger:hover .picker-icon[data-v-0eaa7b82],.date-trigger.open .picker-icon[data-v-0eaa7b82]{color:var(--accent)}.dp-pop[data-v-0eaa7b82]{position:fixed;z-index:200;width:272px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);padding:var(--space-3);display:flex;flex-direction:column;gap:var(--space-2);transform-origin:top left}.dp-pop.flipped[data-v-0eaa7b82]{transform-origin:bottom left}.dp-pop-enter-active[data-v-0eaa7b82],.dp-pop-leave-active[data-v-0eaa7b82]{transition:opacity var(--t-fast),transform var(--t-fast)}.dp-pop-enter-from[data-v-0eaa7b82],.dp-pop-leave-to[data-v-0eaa7b82]{opacity:0;transform:translateY(-4px) scale(.98)}.dp-pop.flipped.dp-pop-enter-from[data-v-0eaa7b82],.dp-pop.flipped.dp-pop-leave-to[data-v-0eaa7b82]{transform:translateY(4px) scale(.98)}.dp-head[data-v-0eaa7b82]{display:flex;align-items:center;gap:4px}.dp-title-btn[data-v-0eaa7b82]{flex:1;height:26px;border:1px solid transparent;background:transparent;color:var(--text);font-size:var(--text-sm);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums;border-radius:var(--r-md);padding:0 8px;cursor:pointer;transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast)}.dp-title-btn[data-v-0eaa7b82]:hover{background:var(--accent-soft);color:var(--accent)}.dp-title-btn span[data-v-0eaa7b82]{letter-spacing:.3px}.dp-nav[data-v-0eaa7b82]{width:26px;height:26px;border:1px solid var(--border);background:var(--surface);color:var(--text-muted);border-radius:var(--r-md);display:inline-flex;align-items:center;justify-content:center;padding:0;transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast)}.dp-nav[data-v-0eaa7b82]:hover:not(:disabled){color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.dp-nav[data-v-0eaa7b82]:disabled{opacity:.35;cursor:not-allowed}.dp-weekdays[data-v-0eaa7b82],.dp-grid[data-v-0eaa7b82]{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.dp-weekdays[data-v-0eaa7b82]{font-size:11px;color:var(--text-muted);font-weight:var(--fw-medium)}.dp-weekdays>div[data-v-0eaa7b82]{text-align:center;padding:4px 0}.dp-weekdays .weekend[data-v-0eaa7b82]{color:var(--accent);opacity:.75}.dp-day[data-v-0eaa7b82]{height:32px;border:1px solid transparent;background:transparent;border-radius:var(--r-md);color:var(--text);font-size:var(--text-xs);font-variant-numeric:tabular-nums;padding:0;cursor:pointer;transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast)}.dp-day[data-v-0eaa7b82]:hover:not(:disabled):not(.selected){background:var(--accent-soft);color:var(--accent)}.dp-day.out[data-v-0eaa7b82]{color:var(--text-muted);opacity:.4}.dp-day.today[data-v-0eaa7b82]:not(.selected){border-color:var(--accent);color:var(--accent);font-weight:var(--fw-semibold)}.dp-day.selected[data-v-0eaa7b82]{background:var(--accent);color:#fff;font-weight:var(--fw-semibold);box-shadow:var(--shadow-sm)}.dp-day.selected[data-v-0eaa7b82]:hover{background:var(--accent)}.dp-day.disabled[data-v-0eaa7b82],.dp-day[data-v-0eaa7b82]:disabled{opacity:.2;cursor:not-allowed;background:transparent;color:var(--text-muted)}.dp-months[data-v-0eaa7b82]{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;padding:4px 0;min-height:236px;align-content:center}.dp-month[data-v-0eaa7b82]{height:48px;border:1px solid transparent;background:transparent;border-radius:var(--r-md);color:var(--text);font-size:var(--text-sm);font-variant-numeric:tabular-nums;padding:0;cursor:pointer;transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast)}.dp-month[data-v-0eaa7b82]:hover:not(:disabled):not(.selected){background:var(--accent-soft);color:var(--accent)}.dp-month.current[data-v-0eaa7b82]:not(.selected){border-color:var(--accent);color:var(--accent);font-weight:var(--fw-semibold)}.dp-month.selected[data-v-0eaa7b82]{background:var(--accent);color:#fff;font-weight:var(--fw-semibold);box-shadow:var(--shadow-sm)}.dp-month[data-v-0eaa7b82]:disabled{opacity:.2;cursor:not-allowed;background:transparent;color:var(--text-muted)}.dp-foot[data-v-0eaa7b82]{display:flex;gap:6px;border-top:1px solid var(--border);padding-top:var(--space-2);margin-top:2px}.dp-quick[data-v-0eaa7b82]{flex:1;height:26px;border:1px solid var(--border);background:var(--surface);color:var(--text-muted);border-radius:var(--r-md);font-size:var(--text-xs);padding:0 8px;transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast)}.dp-quick[data-v-0eaa7b82]:hover:not(:disabled){color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.dp-quick[data-v-0eaa7b82]:disabled{opacity:.35;cursor:not-allowed}.dp-quick.primary[data-v-0eaa7b82]{color:#fff;background:var(--accent);border-color:var(--accent)}.dp-quick.primary[data-v-0eaa7b82]:hover{background:var(--accent-hover, var(--accent));border-color:var(--accent-hover, var(--accent));filter:brightness(.96)}.time-filter[data-v-c9ae9ba8]{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:6px var(--space-4);background:var(--panel);border-bottom:1px solid var(--border);flex-shrink:0;font-size:var(--text-sm)}.label[data-v-c9ae9ba8]{display:inline-flex;align-items:center;gap:6px;color:var(--text-muted);font-weight:var(--fw-medium)}.presets[data-v-c9ae9ba8]{display:inline-flex;gap:4px;flex-wrap:wrap}.presets button[data-v-c9ae9ba8]{border:1px solid var(--border);background:var(--surface);color:var(--text-muted);padding:2px 10px;border-radius:var(--r-full);font-size:var(--text-xs);transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast)}.presets button[data-v-c9ae9ba8]:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.presets button.year[data-v-c9ae9ba8]{font-variant-numeric:tabular-nums}.dates[data-v-c9ae9ba8]{display:inline-flex;align-items:center;gap:6px}.dates .sep[data-v-c9ae9ba8]{color:var(--text-muted);user-select:none}.status[data-v-c9ae9ba8]{margin-left:auto;display:inline-flex;align-items:center;gap:var(--space-2);color:var(--text-muted);font-size:var(--text-xs);font-variant-numeric:tabular-nums}.status .count[data-v-c9ae9ba8]{color:var(--text-muted);white-space:nowrap}.status .hint[data-v-c9ae9ba8]{color:var(--text-muted);opacity:.7}.status .reset-all[data-v-c9ae9ba8]{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border);background:var(--surface);color:var(--text-muted);padding:2px 10px;height:24px;border-radius:var(--r-full);font-size:var(--text-xs);transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast);white-space:nowrap}.status .reset-all[data-v-c9ae9ba8]:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.time-filter.active .label[data-v-c9ae9ba8]{color:var(--accent)}@media (max-width: 640px){.time-filter[data-v-c9ae9ba8]{gap:var(--space-2)}.dates[data-v-c9ae9ba8]{flex:1 1 250px;min-width:0}.presets[data-v-c9ae9ba8]{order:3;width:100%}.status[data-v-c9ae9ba8]{order:2;width:auto;flex:1 1 auto;margin-left:0;justify-content:flex-end}.status .count[data-v-c9ae9ba8]{margin-left:auto}}@media (max-width: 360px){.dates[data-v-c9ae9ba8]{order:1;width:100%;flex-basis:100%}}.jump-loading[data-v-ba6f62ff]{position:absolute;left:50%;top:50%;z-index:5;transform:translate(-50%,-50%);display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border:1px solid var(--border);border-radius:var(--r-full);background:color-mix(in srgb,var(--surface) 92%,transparent);color:var(--text-muted);font-size:var(--text-sm);box-shadow:var(--shadow-md);pointer-events:none;backdrop-filter:blur(10px)}.jump-spinner[data-v-ba6f62ff]{width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:var(--r-full);animation:jump-spin-ba6f62ff .72s linear infinite}.jump-loading-fade-leave-active[data-v-ba6f62ff]{transition:opacity var(--t-fast),transform var(--t-fast)}.jump-loading-fade-leave-to[data-v-ba6f62ff]{opacity:0;transform:translate(-50%,calc(-50% + 4px))}@keyframes jump-spin-ba6f62ff{to{transform:rotate(360deg)}}.empty-state[data-v-ba6f62ff]{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:var(--space-6);text-align:center;animation:empty-in-ba6f62ff .24s var(--ease-out) backwards}.empty-badge[data-v-ba6f62ff]{width:72px;height:72px;border-radius:var(--r-full);background:var(--accent-soft);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;margin-bottom:var(--space-1);box-shadow:inset 0 0 0 1px #07c16014}.empty-title[data-v-ba6f62ff]{font-size:var(--text-lg);color:var(--text);font-weight:var(--fw-semibold)}.empty-sub[data-v-ba6f62ff]{font-size:var(--text-base);color:var(--text-muted);max-width:280px;line-height:1.6}.empty-sub kbd[data-v-ba6f62ff]{font-family:inherit;font-size:11px;padding:1px 6px;border:1px solid var(--border);border-bottom-width:2px;border-radius:var(--r-xs);background:var(--surface);color:var(--text-muted);margin:0 2px}.empty-action[data-v-ba6f62ff]{margin-top:var(--space-2);background:transparent;border:1px solid var(--border);color:var(--text);padding:6px 14px;border-radius:var(--r-md);font-size:var(--text-base)}.empty-action[data-v-ba6f62ff]:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}@keyframes empty-in-ba6f62ff{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.chart-tooltip[data-v-c9713e2d]{position:fixed;left:0;top:0;z-index:200;pointer-events:none;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--shadow-lg);padding:8px 12px;min-width:160px;font-size:var(--text-sm);line-height:1.5;color:var(--text);opacity:0;-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:auto;text-rendering:auto;font-feature-settings:normal;transform:none}.chart-tooltip.visible[data-v-c9713e2d]{opacity:1}.tip-title[data-v-c9713e2d]{font-size:var(--text-sm);font-weight:var(--fw-semibold);color:var(--text);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid var(--border);white-space:nowrap}.tip-row[data-v-c9713e2d]{display:grid;grid-template-columns:10px 1fr auto;align-items:center;gap:6px;color:var(--text-muted)}.tip-row[data-v-c9713e2d]:only-child{color:var(--text)}.tip-dot[data-v-c9713e2d]{width:8px;height:8px;border-radius:var(--r-xs);grid-column:1}.tip-label[data-v-c9713e2d]{grid-column:2;color:var(--text-muted);white-space:nowrap}.tip-value[data-v-c9713e2d]{grid-column:3;color:var(--text);font-variant-numeric:tabular-nums;font-weight:var(--fw-medium);white-space:nowrap}.stats-skeleton[data-v-bee92faf]{padding:4px 0 12px}.skeleton-grid[data-v-bee92faf]{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--space-3)}.skel-card[data-v-bee92faf]{background:var(--panel);border-radius:var(--r-md);padding:var(--space-3) 14px}.skel-num[data-v-bee92faf]{width:55%;height:22px;border-radius:var(--r-sm)}.skel-label[data-v-bee92faf]{width:75%;height:10px;border-radius:var(--r-sm);margin-top:10px}.skel-heading[data-v-bee92faf]{width:30%;height:14px;border-radius:var(--r-sm);margin-top:24px}.skel-bar[data-v-bee92faf]{height:18px;margin-top:12px}.skel-list[data-v-bee92faf]{margin-top:12px;display:flex;flex-direction:column;gap:10px}.skel-list .skeleton-line[data-v-bee92faf]{height:10px}.chart-with-grid[data-v-bee92faf]{background-image:linear-gradient(to top,var(--border) 1px,transparent 1px);background-size:100% 25%;background-position:0 bottom}.month-col[data-v-bee92faf],.hour-col[data-v-bee92faf]{cursor:default;transition:opacity var(--t-fast)}.weekday-row[data-v-bee92faf]{padding:3px 6px;border-radius:var(--r-sm);cursor:default;transition:background var(--t-fast),opacity var(--t-fast)}.weekday-row[data-v-bee92faf]:hover{background:var(--accent-soft)}.stats-table tr[data-v-bee92faf]{cursor:default;transition:background var(--t-fast),opacity var(--t-fast)}.stats-table tr[data-v-bee92faf]:hover{background:var(--accent-soft)}.ratio-seg[data-v-bee92faf]{cursor:default;transition:filter var(--t-fast)}.ratio-seg[data-v-bee92faf]:hover{filter:brightness(1.08)}.inline-legend[data-v-bee92faf]{margin-top:calc(var(--space-2) * -1);margin-bottom:var(--space-2)}.spin[data-v-08772411]{animation:spin-08772411 .8s linear infinite}@keyframes spin-08772411{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.init-skeleton[data-v-b75278cd]{display:flex;flex-direction:column;align-items:center;gap:14px;padding:40px 32px}.init-skeleton .init-logo[data-v-b75278cd]{width:56px;height:56px}.init-skeleton .init-title[data-v-b75278cd]{width:60%;height:20px;margin-top:4px}.init-skeleton .init-sub[data-v-b75278cd]{width:80%;height:12px}.init-skeleton .init-bar[data-v-b75278cd]{width:100%;height:8px;margin-top:12px}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans SC;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/noto-sans-sc-chinese-simplified-400-normal-Ba7eOkfT.woff2) format("woff2"),url(/assets/noto-sans-sc-chinese-simplified-400-normal-DUWMQbbw.woff) format("woff")}@font-face{font-family:Noto Sans SC;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/noto-sans-sc-chinese-simplified-500-normal-z_irmif2.woff2) format("woff2"),url(/assets/noto-sans-sc-chinese-simplified-500-normal-Du6iXQtI.woff) format("woff")}@font-face{font-family:Noto Sans SC;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/noto-sans-sc-chinese-simplified-600-normal-CI4uXaOp.woff2) format("woff2"),url(/assets/noto-sans-sc-chinese-simplified-600-normal-COCWX0Xz.woff) format("woff")}:root{--gray-50: #fafafa;--gray-100: #f5f5f5;--gray-200: #ededed;--gray-300: #e0e0e0;--gray-400: #c2c2c2;--gray-500: #9a9a9a;--gray-600: #757575;--gray-700: #4f4f4f;--gray-800: #2b2b2b;--gray-900: #171717;--accent-50: #e6f7ee;--accent-100: #c8edd8;--accent-500: #07c160;--accent-600: #06ad56;--accent-900: #045c2d;--bg: var(--gray-200);--panel: var(--gray-100);--header: var(--gray-200);--surface: #ffffff;--bubble-self: #95ec69;--bubble-other: #ffffff;--text: var(--gray-900);--text-muted: var(--gray-600);--text-subtle: var(--gray-500);--divider: var(--gray-400);--border: var(--gray-300);--accent: var(--accent-500);--accent-hover: var(--accent-600);--accent-soft: var(--accent-50);--system: var(--gray-500);--danger: #fa5151;--danger-hover: #e14545;--recv: #8fb8ff;--highlight: #ffe58f;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--r-xs: 2px;--r-sm: 4px;--r-md: 8px;--r-lg: 12px;--r-xl: 16px;--r-full: 999px;--bubble-radius: 8px;--shadow-xs: 0 1px 2px rgba(17, 24, 39, .04);--shadow-sm: 0 1px 3px rgba(17, 24, 39, .06), 0 1px 2px rgba(17, 24, 39, .04);--shadow-md: 0 4px 12px rgba(17, 24, 39, .08), 0 2px 4px rgba(17, 24, 39, .04);--shadow-lg: 0 12px 28px rgba(17, 24, 39, .12), 0 4px 10px rgba(17, 24, 39, .06);--shadow: var(--shadow-sm);--ease-out: cubic-bezier(.22, 1, .36, 1);--t-fast: .12s var(--ease-out);--t-normal: .18s var(--ease-out);--t-slow: .24s var(--ease-out);--text-xs: 11px;--text-sm: 12px;--text-base: 13px;--text-md: 14px;--text-lg: 16px;--text-xl: 18px;--text-2xl: 22px;--fw-normal: 400;--fw-medium: 500;--fw-semibold: 600;--skeleton-bg: var(--gray-200);--skeleton-highlight: rgba(255, 255, 255, .7);color-scheme:light}[data-theme=dark]{--bg: #17171a;--panel: #1f1f23;--header: #1f1f23;--surface: #26262c;--bubble-other: #2c2c33;--bubble-self: #0d6b3a;--text: #e6e6ea;--text-muted: #a3a3ab;--text-subtle: #6f6f78;--divider: rgba(255, 255, 255, .08);--border: rgba(255, 255, 255, .09);--accent: #4ad883;--accent-hover: #5de09a;--accent-soft: rgba(74, 216, 131, .12);--accent-500: #4ad883;--accent-600: #5de09a;--system: #8b8b94;--danger: #ff6b6b;--danger-hover: #ff8585;--recv: #6d8bd1;--highlight: #7a5a1a;--gray-300: #3a3a42;--gray-400: #4a4a52;--shadow-xs: 0 1px 2px rgba(0, 0, 0, .35);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .4), 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .45), 0 2px 4px rgba(0, 0, 0, .3);--shadow-lg: 0 12px 28px rgba(0, 0, 0, .55), 0 4px 10px rgba(0, 0, 0, .35);--skeleton-bg: #2a2a31;--skeleton-highlight: rgba(255, 255, 255, .06);color-scheme:dark}*{box-sizing:border-box}html,body,#app{height:100%;margin:0;padding:0}body{font-family:Inter Variable,Inter,Noto Sans SC,-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:var(--text-md);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv11","ss01";text-rendering:optimizeLegibility}button{font-family:inherit;cursor:pointer;transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast),opacity var(--t-fast),box-shadow var(--t-fast)}input,button{font-size:var(--text-md)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.usage-admin{min-height:100%;display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-5);overflow:auto}.usage-admin-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3)}.usage-admin-head h1{margin:0;font-size:var(--text-2xl);font-weight:var(--fw-semibold)}.usage-admin-head p{margin:6px 0 0;color:var(--text-muted);font-size:var(--text-sm)}.usage-panel{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow-sm)}.usage-login,.usage-empty{width:min(380px,100%);margin:auto;display:flex;flex-direction:column;align-items:center;gap:var(--space-3);padding:var(--space-6);text-align:center}.usage-login h2,.usage-empty h2{margin:0;font-size:var(--text-lg)}.usage-empty p{margin:0;color:var(--text-muted);line-height:1.7}.usage-login input{width:100%;height:38px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--r-md);outline:none;background:var(--surface);color:var(--text)}.usage-login input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.usage-primary,.usage-ghost,.usage-icon-btn,.usage-pager button,.usage-tabs button{display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:var(--r-md);font-size:var(--text-sm)}.usage-primary{width:100%;height:36px;border:1px solid var(--accent);background:var(--accent);color:#fff}.usage-primary:disabled,.usage-pager button:disabled{cursor:not-allowed;opacity:.55}.usage-ghost,.usage-pager button{height:32px;padding:0 12px;border:1px solid var(--border);background:var(--surface);color:var(--text-muted)}.usage-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-3)}.usage-metric{min-width:0;padding:var(--space-4);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}.usage-metric span{display:block;color:var(--text-muted);font-size:var(--text-sm)}.usage-metric b{display:block;margin-top:8px;font-size:var(--text-2xl)}.usage-mini-grids{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-3)}.usage-mini{padding:var(--space-4)}.usage-mini h2{margin:0 0 var(--space-3);font-size:var(--text-md)}.usage-mini p{margin:0;color:var(--text-muted);font-size:var(--text-sm)}.usage-mini-list{display:flex;flex-direction:column;gap:6px}.usage-mini-list div{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);min-height:28px;padding:0 10px;border-radius:var(--r-sm);background:var(--panel);font-size:var(--text-sm)}.usage-mini-list span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.usage-mini-list small{display:block;margin-top:2px;color:var(--text-subtle);font-size:var(--text-xs)}.usage-mini-list b{color:var(--text)}.usage-toolbar{display:flex;justify-content:space-between;gap:var(--space-3);padding:var(--space-3);border-bottom:1px solid var(--border)}.usage-tabs{display:inline-flex;gap:4px;padding:3px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--panel)}.usage-tabs button{min-width:52px;height:28px;border:0;background:transparent;color:var(--text-muted)}.usage-tabs button.active{background:var(--surface);color:var(--text);box-shadow:var(--shadow-xs)}.usage-icon-btn{width:34px;height:34px;border:1px solid var(--border);background:var(--surface);color:var(--text-muted)}.usage-loading{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3);color:var(--text-muted);font-size:var(--text-sm)}.usage-error{width:100%;color:var(--danger);font-size:var(--text-sm);line-height:1.6}.usage-table-wrap{overflow:auto}.usage-table{width:100%;min-width:780px;border-collapse:collapse;font-size:var(--text-sm)}.usage-table th,.usage-table td{padding:10px var(--space-3);border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.usage-table th{color:var(--text-muted);font-weight:var(--fw-medium);background:var(--panel)}.usage-table small{color:var(--text-subtle)}.usage-status{display:inline-flex;align-items:center;min-width:38px;height:22px;justify-content:center;border-radius:var(--r-full);font-size:var(--text-xs);font-weight:var(--fw-semibold)}.usage-status.ok{color:var(--accent);background:var(--accent-soft)}.usage-status.fail{color:var(--danger);background:#fa51511f}.usage-empty-row{color:var(--text-muted);text-align:center!important}.usage-pager{display:flex;justify-content:flex-end;align-items:center;gap:var(--space-3);padding:var(--space-3)}.usage-pager span{color:var(--text-muted);font-size:var(--text-sm)}.app-shell{height:100%;display:flex;flex-direction:column;max-width:960px;margin:0 auto;background:var(--bg);box-shadow:var(--shadow-md)}.chat-header{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-4);background:var(--header);border-bottom:1px solid var(--border);flex-shrink:0}.chat-header .avatar{width:var(--space-10);height:var(--space-10);border-radius:var(--r-md);object-fit:cover;background:var(--gray-300);flex-shrink:0}.chat-header .meta{flex:1;min-width:0}.chat-header .title{font-size:var(--text-lg);font-weight:var(--fw-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-header .sub{font-size:var(--text-sm);color:var(--text-muted);margin-top:2px}.chat-header .actions{display:flex;gap:var(--space-1)}.chat-header .actions button{display:inline-flex;align-items:center;gap:6px;background:transparent;border:1px solid transparent;border-radius:var(--r-md);padding:6px 10px;color:var(--text-muted);font-size:var(--text-sm)}.chat-header .actions button:hover{background:var(--surface);color:var(--text);border-color:var(--border)}.chat-header .actions button:active{transform:translateY(1px)}.search-bar{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);background:var(--panel);border-bottom:1px solid var(--border);flex-shrink:0}.search-bar .search-field{flex:1;position:relative;min-width:0}.search-bar input{width:100%;height:32px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--r-md);outline:none;background:var(--surface);transition:border-color var(--t-fast),box-shadow var(--t-fast)}.search-bar input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.search-bar .search-field:has(.search-clear) input{padding-right:34px}.search-bar .search-clear{position:absolute;right:5px;top:50%;transform:translateY(-50%);width:22px;height:22px;border:1px solid var(--border);border-radius:var(--r-full);background:var(--surface);color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;padding:0;transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast)}.search-bar .search-clear:hover{color:var(--danger, #e25c4b);border-color:var(--danger, #e25c4b);background:var(--surface)}.search-bar .mode-toggle{display:flex;border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;background:var(--surface)}.search-bar .mode-toggle button{border:none;background:transparent;padding:4px var(--space-3);color:var(--text-muted);font-size:var(--text-sm)}.search-bar .mode-toggle button:hover{color:var(--text)}.search-bar .mode-toggle button.active{background:var(--accent);color:#fff}.search-bar .count{font-size:var(--text-sm);color:var(--text-muted);min-width:90px;text-align:right;font-variant-numeric:tabular-nums}.search-bar .nav-btn{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;padding:0;color:var(--text-muted)}.search-bar .nav-btn:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.search-bar .nav-btn:disabled{opacity:.4;cursor:not-allowed}.chat-wrapper{flex:1;min-height:0;position:relative;background:var(--bg)}.chat-scroller{height:100%;width:100%;padding:var(--space-2) 0}.scroll-to-bottom{position:absolute;right:var(--space-4);bottom:var(--space-4);width:var(--space-10);height:var(--space-10);border-radius:var(--r-full);border:1px solid var(--border);background:var(--surface);box-shadow:var(--shadow-md);display:inline-flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:var(--text-xl);z-index:10}.scroll-to-bottom:hover{color:var(--accent);box-shadow:var(--shadow-lg)}.time-divider{text-align:center;font-size:var(--text-sm);color:var(--system);padding:var(--space-2) 0;user-select:none}.msg-row{display:flex;align-items:flex-end;gap:var(--space-2);padding:2px var(--space-4) 2px var(--space-4)}.msg-row.self{flex-direction:row-reverse}.msg-row .avatar{width:36px;height:36px;border-radius:var(--r-sm);object-fit:cover;background:var(--gray-300);flex-shrink:0;align-self:flex-start;margin-top:2px;transition:transform var(--t-normal),box-shadow var(--t-normal)}.msg-body{max-width:calc(100% - 140px);min-width:0;display:flex;flex-direction:column;align-items:flex-start}.msg-row.self .msg-body{align-items:flex-end}.msg-bubble{position:relative;padding:var(--space-2) var(--space-3);background:var(--bubble-other);border-radius:var(--bubble-radius);line-height:1.55;word-break:break-word;white-space:pre-wrap;max-width:100%;box-shadow:var(--shadow-xs);transition:box-shadow var(--t-normal)}.msg-row.self .msg-bubble{background:var(--bubble-self)}.msg-row:hover .msg-bubble{box-shadow:var(--shadow-sm)}.msg-bubble.is-current{box-shadow:0 0 0 2px var(--accent),var(--shadow-sm);animation:bubble-pulse 1.2s var(--ease-out) 1}@keyframes bubble-pulse{0%{box-shadow:0 0 #07c16066,var(--shadow-xs)}50%{box-shadow:0 0 0 6px #07c16000,var(--shadow-sm)}to{box-shadow:0 0 0 2px var(--accent),var(--shadow-sm)}}.msg-bubble mark{background:var(--highlight);color:inherit;padding:0 2px;border-radius:var(--r-xs);box-decoration-break:clone;-webkit-box-decoration-break:clone}.msg-bubble.placeholder{color:var(--text-muted);font-style:italic}.msg-bubble.is-image{padding:0;background:transparent;box-shadow:none;border-radius:var(--r-md);overflow:hidden}.msg-bubble .quote-card{font-size:var(--text-base);padding:4px var(--space-2);background:transparent;border-left:3px solid var(--gray-400);border-radius:0;margin-top:6px;color:var(--text-muted);line-height:1.5}.msg-row.self .msg-bubble .quote-card{border-left-color:var(--accent-600)}.msg-bubble .link-card{display:flex;gap:var(--space-2);align-items:flex-start;min-width:160px;max-width:320px}.msg-bubble .link-card .link-title{font-weight:var(--fw-medium);margin-bottom:var(--space-1);color:var(--text)}.msg-bubble .link-card .link-desc{font-size:var(--text-sm);color:var(--text-muted);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.msg-bubble .link-card img.thumb{width:60px;height:60px;border-radius:var(--r-sm);object-fit:cover;flex-shrink:0}.msg-bubble img.image-asset{max-width:240px;max-height:320px;border-radius:var(--r-md);display:block;transition:transform var(--t-normal)}.msg-bubble img.image-asset:hover{transform:scale(1.01)}.msg-meta{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;padding-bottom:2px;white-space:nowrap}.msg-time{font-size:var(--text-xs);color:var(--text-subtle);white-space:nowrap;user-select:none;opacity:.45;transition:opacity var(--t-normal)}.msg-row:hover .msg-time{opacity:.9}.msg-row:has(.msg-bubble.is-current) .msg-time{opacity:.9}.msg-row.with-locate .msg-time{opacity:.9}.msg-locate{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;min-height:24px;border:1px solid var(--border);border-radius:var(--r-full);background:var(--surface);color:var(--text-muted);font-size:var(--text-xs);line-height:1;white-space:nowrap;box-shadow:var(--shadow-xs);transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast)}.msg-locate:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.msg-system{display:flex;justify-content:center;align-items:center;gap:var(--space-2);flex-wrap:wrap;padding:6px var(--space-4)}.msg-system>span{font-size:var(--text-sm);color:var(--system);background:var(--panel);padding:var(--space-1) var(--space-3);border-radius:var(--r-full);max-width:80%;text-align:center}.loader-screen{height:100%;display:flex;align-items:center;justify-content:center;padding:var(--space-6)}.loader-card{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);padding:var(--space-8);width:100%;max-width:480px;text-align:center}.loader-card h1{margin:0 0 var(--space-2);font-size:var(--text-xl);font-weight:var(--fw-semibold)}.loader-card p.desc{color:var(--text-muted);margin:0 0 var(--space-5);font-size:var(--text-base);line-height:1.6}.cache-card{display:flex;align-items:center;gap:var(--space-3);background:var(--panel);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--space-3) 14px;margin-bottom:14px;text-align:left}.cache-card .cache-info{flex:1;min-width:0}.cache-card .cache-title{font-size:var(--text-base);font-weight:var(--fw-semibold);color:var(--text)}.cache-card .cache-sub{font-size:var(--text-sm);color:var(--text-muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cache-card .cache-sub.subtle{font-size:var(--text-xs);opacity:.75}.cache-card .cache-actions{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0}.cache-card .cache-actions button.primary{display:inline-flex;align-items:center;gap:6px;background:var(--accent);color:#fff;border:none;padding:6px 14px;border-radius:var(--r-md);font-size:var(--text-base)}.cache-card .cache-actions button.primary:hover{background:var(--accent-hover)}.cache-card .cache-actions button.link{display:inline-flex;align-items:center;gap:4px;background:transparent;border:none;color:var(--text-muted);font-size:var(--text-sm);padding:var(--space-1) 6px;border-radius:var(--r-sm)}.cache-card .cache-actions button.link:hover{color:var(--danger);background:#fa515114}.drop-zone{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);border:2px dashed var(--border);border-radius:var(--r-md);padding:var(--space-8) var(--space-4);color:var(--text-muted);transition:border-color var(--t-fast),color var(--t-fast),background var(--t-fast);cursor:pointer}.drop-zone:hover{border-color:var(--gray-400);color:var(--text)}.drop-zone.hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.drop-zone .drop-icon{color:var(--gray-500);transition:color var(--t-fast),transform var(--t-normal)}.drop-zone.hover .drop-icon{color:var(--accent);transform:translateY(-2px)}.drop-zone .hint{font-size:var(--text-sm);margin-top:6px}.loader-card .default-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;margin-top:var(--space-4);background:var(--accent);color:#fff;border:none;padding:var(--space-2) var(--space-5);border-radius:var(--r-md);font-size:var(--text-md);font-weight:var(--fw-medium)}.loader-card .default-btn:hover{background:var(--accent-hover)}.progress{margin-top:var(--space-5);text-align:left}.progress .bar{height:6px;background:var(--border);border-radius:var(--r-xs);overflow:hidden}.progress .bar>i{display:block;height:100%;background:var(--accent);transition:width .1s linear}.progress .info{font-size:var(--text-sm);color:var(--text-muted);margin-top:6px;display:flex;justify-content:space-between}.error{margin-top:var(--space-3);color:var(--danger);font-size:var(--text-base)}.auth-screen{background:linear-gradient(180deg,color-mix(in srgb,var(--surface) 72%,transparent),transparent 46%),var(--bg)}.auth-card{max-width:360px;padding:34px 30px 30px;border:1px solid color-mix(in srgb,var(--border) 82%,transparent);box-shadow:var(--shadow-md);text-align:center}.auth-mark{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;margin-bottom:var(--space-4);border:1px solid var(--border);border-radius:var(--r-md);background:var(--panel);color:var(--text)}.auth-card h1{margin-bottom:6px;font-size:var(--text-2xl);line-height:1.2}.auth-meta{min-height:16px;margin:0;color:var(--text-subtle);font-size:var(--text-sm)}.auth-form{display:grid;grid-template-columns:1fr;gap:var(--space-3);margin-top:var(--space-5)}.auth-form input[type=password]{width:100%;height:46px;padding:0 var(--space-4);border:1px solid var(--border);border-radius:var(--r-md);outline:none;color:var(--text);font-size:var(--text-lg);background:var(--surface);text-align:center;transition:border-color var(--t-fast),box-shadow var(--t-fast),background var(--t-fast)}.auth-form input[type=password]:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.auth-form .default-btn{height:46px;margin-top:0;width:100%;border-radius:var(--r-md);font-size:var(--text-md);font-weight:var(--fw-semibold)}.auth-form .default-btn:disabled{opacity:.6;cursor:not-allowed}.auth-progress{margin-top:var(--space-4)}.auth-progress .info{font-size:var(--text-xs)}.auth-error{min-height:18px;margin-top:var(--space-4);text-align:center;font-size:var(--text-sm)}.auth-footer{margin-top:var(--space-5);padding-top:14px;border-top:1px solid var(--border);text-align:center}.auth-footer .link-btn{background:transparent;border:none;color:var(--text-muted);font-size:var(--text-sm);cursor:pointer;padding:var(--space-1) var(--space-2);border-radius:var(--r-sm)}.auth-footer .link-btn:hover{color:var(--accent)}.reset-warn{font-size:var(--text-base);color:var(--danger);margin-bottom:var(--space-3);line-height:1.6}.reset-actions{display:flex;gap:var(--space-2);justify-content:center}.danger-btn{background:var(--danger);color:#fff;border:none;padding:6px 14px;border-radius:var(--r-md);font-size:var(--text-base);cursor:pointer}.danger-btn:hover{background:var(--danger-hover)}.stats-mask{position:fixed;inset:0;background:#0006;z-index:100;display:flex;align-items:center;justify-content:center;padding:var(--space-6)}.stats-modal{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);width:100%;max-width:880px;height:70vh;max-height:70vh;display:flex;flex-direction:column;overflow:hidden}.stats-header{position:relative;padding:var(--space-4) var(--space-5) var(--space-3);border-bottom:1px solid var(--border)}.stats-header h2{margin:0;font-size:var(--text-xl);font-weight:var(--fw-semibold)}.stats-sub{font-size:var(--text-sm);color:var(--text-muted);margin-top:var(--space-1)}.stats-header .close-btn{position:absolute;right:var(--space-3);top:var(--space-2);width:32px;height:32px;border:none;background:transparent;font-size:var(--text-2xl);line-height:1;color:var(--text-muted);border-radius:var(--r-md)}.stats-header .close-btn:hover{background:var(--bg);color:var(--text)}.stats-tabs{display:flex;padding:0 var(--space-3);border-bottom:1px solid var(--border);background:var(--panel);flex-shrink:0}.stats-tabs button{border:none;background:transparent;padding:var(--space-2) 14px;font-size:var(--text-base);color:var(--text-muted);border-bottom:2px solid transparent;margin-bottom:-1px}.stats-tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}.stats-tabs button:hover{color:var(--text)}.stats-body{padding:var(--space-4) var(--space-5) var(--space-5);overflow-y:auto;flex:1;min-height:0}.stats-loading{padding:var(--space-10) 0;text-align:center;color:var(--text-muted)}.stats-section h3{font-size:var(--text-md);margin:18px 0 var(--space-3);color:var(--text);font-weight:var(--fw-semibold)}.stats-section h3:first-child{margin-top:0}.album-view{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;background:var(--bg)}.album-toolbar{position:relative;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:10px var(--space-4);border-bottom:1px solid var(--border);background:var(--panel);flex-shrink:0}.album-toolbar h2{margin:0;font-size:var(--text-lg);font-weight:var(--fw-semibold);line-height:1.25}.album-toolbar p{margin:4px 0 0;color:var(--text-muted);font-size:var(--text-sm);line-height:1.25}.album-actions{display:inline-flex;align-items:center;gap:var(--space-2);flex-shrink:0}.album-tool-button,.album-export,.album-jump-group{display:inline-flex;align-items:center}.album-tool-button{gap:6px;min-height:34px;padding:0 10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-muted);font-size:var(--text-sm);font-weight:var(--fw-medium);box-shadow:var(--shadow-xs);transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast)}.album-tool-button:hover,.album-tool-button.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.album-export{gap:6px;min-height:34px;padding:0 10px;border:1px solid var(--accent);border-radius:var(--r-md);background:var(--accent);color:#fff;font-size:var(--text-sm);font-weight:var(--fw-medium)}.album-export:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.album-export:disabled{opacity:.7;cursor:not-allowed}.album-jump-group{position:relative}.album-jump{position:relative;width:184px}.album-jump-trigger{position:relative;display:flex;align-items:center;gap:6px;width:100%;height:34px;padding:0 30px 0 10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text);font:inherit;font-size:var(--text-sm);box-shadow:var(--shadow-xs);transition:border-color var(--t-fast),box-shadow var(--t-fast),background var(--t-fast),color var(--t-fast)}.album-jump-trigger:hover,.album-jump.open .album-jump-trigger{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.album-jump-trigger:focus-visible{outline:0;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.album-jump-label{min-width:0;flex:1;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;line-height:1.2}.album-jump:not(.active) .album-jump-label{color:var(--text-muted)}.album-jump-chevron{position:absolute;right:9px;color:var(--text-subtle);pointer-events:none;transition:transform var(--t-fast),color var(--t-fast)}.album-jump.open .album-jump-chevron{color:var(--accent);transform:rotate(180deg)}.album-month-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:40;width:max(240px,100%);min-width:240px;max-height:300px;overflow-y:auto;display:flex;flex-direction:column;gap:3px;padding:var(--space-2);border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-lg);transform-origin:top right}.album-month-pop-enter-active,.album-month-pop-leave-active{transition:opacity var(--t-fast),transform var(--t-fast)}.album-month-pop-enter-from,.album-month-pop-leave-to{opacity:0;transform:translateY(-4px) scale(.98)}.album-month-option{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);width:100%;min-height:34px;padding:0 10px;border:1px solid transparent;border-radius:var(--r-md);background:transparent;color:var(--text);font-size:var(--text-sm);font-variant-numeric:tabular-nums;text-align:left;transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast)}.album-month-option span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.album-month-option span:last-child{flex-shrink:0;color:var(--text-muted);font-size:var(--text-xs);white-space:nowrap}.album-month-option:hover:not(.selected){background:var(--accent-soft);color:var(--accent)}.album-month-option.selected{border-color:var(--accent);background:var(--accent);color:#fff;font-weight:var(--fw-semibold);box-shadow:var(--shadow-sm)}.album-month-option.selected span:last-child{color:#ffffffd1}.album-back-top{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--surface);color:var(--text-muted);box-shadow:var(--shadow-xs);transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast),transform var(--t-fast),box-shadow var(--t-fast)}.album-back-top:hover{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.album-retry{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-muted)}.album-retry:hover{color:var(--accent);border-color:var(--accent)}.album-category-bar{position:relative;z-index:20;display:flex;gap:var(--space-2);overflow-x:auto;padding:8px var(--space-4);border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}.album-category-chip{display:inline-flex;align-items:center;gap:6px;height:30px;flex:0 0 auto;padding:0 10px;border:1px solid var(--border);border-radius:var(--r-full);background:var(--panel);color:var(--text-muted);font-size:var(--text-sm);white-space:nowrap}.album-category-chip span:last-child{color:var(--text-subtle);font-size:var(--text-xs);font-variant-numeric:tabular-nums}.album-category-chip:hover:not(.active){border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.album-category-chip.active{border-color:var(--accent);background:var(--accent);color:#fff}.album-category-chip.active span:last-child{color:#ffffffd1}.album-category-more{position:relative;display:none;flex:0 0 auto}.album-category-more-trigger svg{flex:0 0 auto;color:currentColor;transition:transform var(--t-fast)}.album-category-more.open .album-category-more-trigger svg{transform:rotate(180deg)}.album-category-more-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:50;width:min(280px,calc(100vw - 24px));max-height:320px;overflow-y:auto;display:flex;flex-direction:column;gap:3px;padding:var(--space-2);border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-lg);transform-origin:top right}.album-selection-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:8px var(--space-4);border-bottom:1px solid var(--border);background:var(--panel);flex-shrink:0}.album-selection-status{display:inline-flex;align-items:center;gap:8px;min-width:0;color:var(--text);font-size:var(--text-sm);font-weight:var(--fw-medium)}.album-selection-status span:last-child:not(:first-child){color:var(--text-muted);font-weight:var(--fw-normal)}.album-selection-actions{display:inline-flex;align-items:center;gap:var(--space-2);flex-shrink:0}.album-selection-actions button{height:30px;padding:0 10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-muted);font-size:var(--text-sm);white-space:nowrap}.album-selection-actions button:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.album-selection-actions button:disabled{opacity:.55;cursor:not-allowed}.album-export-note{display:flex;align-items:center;justify-content:center;gap:var(--space-2);padding:6px var(--space-4);border-bottom:1px solid var(--border);background:var(--accent-soft);color:var(--accent);font-size:var(--text-sm);text-align:center}.album-export-note span{min-width:0;overflow:hidden;text-overflow:ellipsis}.album-export-note button{flex:0 0 auto;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border:1px solid color-mix(in srgb,var(--accent),transparent 64%);border-radius:var(--r-full);background:transparent;color:var(--accent)}.album-export-note button:hover{background:#ffffff80}.album-scroll{flex:1;min-height:0;overflow-y:auto;padding:var(--space-4)}.album-back-top{position:absolute;right:var(--space-4);bottom:var(--space-4);z-index:10;width:42px;height:42px;border-radius:var(--r-full);backdrop-filter:blur(10px)}.album-back-top:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.album-month+.album-month{margin-top:var(--space-6)}.album-month-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-3)}.album-month-head h3{margin:0;font-size:var(--text-md);font-weight:var(--fw-semibold)}.album-month-head span{color:var(--text-muted);font-size:var(--text-sm)}.album-grid{display:flex;align-items:flex-start;gap:var(--space-3)}.album-column{display:flex;flex:1 1 0;min-width:0;flex-direction:column;gap:var(--space-3)}.photo-tile{position:relative;display:flex;flex-direction:column;flex:0 0 auto;width:100%;margin:0;padding:0;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text);overflow:hidden;text-align:left;box-shadow:var(--shadow-xs);transition:transform var(--t-normal),box-shadow var(--t-normal),border-color var(--t-fast)}.photo-tile:hover{transform:translateY(-2px);border-color:var(--accent);box-shadow:var(--shadow-md)}.photo-tile.selecting{cursor:cell}.photo-tile.selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft),var(--shadow-md)}.photo-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.photo-select-badge{position:absolute;top:8px;right:8px;z-index:2;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.78);border-radius:var(--r-full);background:#1212148c;color:#fff;box-shadow:var(--shadow-sm)}.photo-tile.selected .photo-select-badge{border-color:var(--accent);background:var(--accent)}.photo-tile img{display:block;width:100%;height:auto;object-fit:cover;background:var(--gray-300)}.video-cover,.video-tile-placeholder{display:flex;width:100%;align-items:center;justify-content:center;min-height:120px}.video-cover{background:var(--gray-300);overflow:hidden}.video-cover>img{display:block;width:100%;height:100%;object-fit:cover}.video-tile-placeholder{flex-direction:column;gap:var(--space-1);background:linear-gradient(135deg,var(--gray-800),var(--gray-700));color:#ffffffc2}[data-theme=dark] .video-tile-placeholder{background:linear-gradient(135deg,#111114,#2a2a31)}.video-cover-fallback{font-size:var(--text-xs);color:#ffffff94}.video-play-badge{position:absolute;left:var(--space-2);top:var(--space-2);display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--r-full);background:#0000008f;color:#fff;box-shadow:var(--shadow-sm)}.album-center{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-8);text-align:center;color:var(--text-muted)}.album-center-title{color:var(--text);font-size:var(--text-lg);font-weight:var(--fw-semibold)}.album-center-sub{max-width:520px;font-size:var(--text-base);line-height:1.7}.album-center code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--text-sm);color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:var(--r-sm);padding:1px 4px}.album-progress{width:min(360px,100%);margin-top:var(--space-3)}.album-view .spin{animation:spin .8s linear infinite}.photo-lightbox{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;padding:var(--space-8);background:#000000d1;overscroll-behavior:contain;touch-action:pan-y}.lightbox-figure{position:relative;width:100%;height:100%;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3)}.lightbox-image,.lightbox-video{max-width:100%;max-height:calc(100vh - 128px);border-radius:var(--r-md);object-fit:contain;box-shadow:var(--shadow-lg);user-select:none}.lightbox-video{width:min(100%,960px);background:#000}.lightbox-media-fade-enter-active,.lightbox-media-fade-leave-active{transition:opacity .18s ease,transform .18s ease}.lightbox-media-fade-enter-from,.lightbox-media-fade-leave-to{opacity:0;transform:scale(.992)}.lightbox-loading{min-width:220px;min-height:120px;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6);border:1px solid rgba(255,255,255,.16);border-radius:var(--r-md);background:#121214b8;color:#ffffffc7;box-shadow:var(--shadow-lg)}.lightbox-loading-overlay{position:absolute;top:var(--space-5);left:50%;min-width:auto;min-height:auto;flex-direction:row;padding:var(--space-2) var(--space-3);border-radius:var(--r-full);transform:translate(-50%);pointer-events:none}.lightbox-loading .spin{animation:spin .8s linear infinite}.lightbox-pending{width:1px;height:1px;opacity:0;pointer-events:none}.lightbox-caption{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:min(760px,100%);color:#fff;font-size:var(--text-sm)}.lightbox-title{max-width:100%;overflow:hidden;color:#ffffffeb;font-weight:var(--fw-medium);text-overflow:ellipsis;white-space:nowrap}.lightbox-meta{color:#ffffffb3}.lightbox-close,.lightbox-edit,.lightbox-nav{position:fixed;z-index:121;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.16);background:#121214b8;color:#fff;backdrop-filter:blur(12px)}.lightbox-close:hover,.lightbox-edit:hover,.lightbox-nav:hover:not(:disabled){background:#ffffff29}.lightbox-close{top:var(--space-5);right:var(--space-5);width:40px;height:40px;border-radius:var(--r-full)}.lightbox-edit{top:var(--space-5);right:calc(var(--space-5) + 48px);height:40px;gap:6px;padding:0 var(--space-3);border-radius:var(--r-full);font-size:var(--text-sm)}.lightbox-nav{top:50%;width:44px;height:56px;border-radius:var(--r-md);transform:translateY(-50%)}.lightbox-nav.prev{left:var(--space-5)}.lightbox-nav.next{right:var(--space-5)}.lightbox-nav:disabled{opacity:.25;cursor:not-allowed}.album-edit-mask{position:fixed;inset:0;z-index:130;display:flex;align-items:center;justify-content:center;padding:var(--space-5);background:#0000007a}.album-edit-modal{width:min(420px,100%);display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-5);border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);color:var(--text);box-shadow:var(--shadow-lg)}.album-edit-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3)}.album-edit-header h3{margin:0;font-size:var(--text-lg);font-weight:var(--fw-semibold)}.album-edit-header p{margin:4px 0 0;color:var(--text-muted);font-size:var(--text-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:300px}.album-edit-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--panel);color:var(--text-muted)}.album-edit-close:hover{color:var(--text);background:var(--surface)}.album-edit-field{display:flex;flex-direction:column;gap:6px;color:var(--text-muted);font-size:var(--text-sm)}.album-edit-field input,.album-edit-field textarea{height:38px;width:100%;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--r-md);outline:none;background:var(--surface);color:var(--text);font:inherit}.album-edit-field textarea{min-height:78px;padding-top:9px;padding-bottom:9px;line-height:1.5;resize:vertical}.album-edit-field input:focus,.album-edit-field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.album-edit-category,.album-edit-category-control{position:relative}.album-edit-category-control input{padding-right:40px}.album-edit-category-toggle{position:absolute;top:4px;right:4px;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--text-muted);transition:background var(--transition-fast),color var(--transition-fast),transform var(--transition-fast)}.album-edit-category-toggle:hover,.album-edit-category.open .album-edit-category-toggle{background:var(--panel);color:var(--text)}.album-edit-category.open .album-edit-category-toggle svg{transform:rotate(180deg)}.album-edit-category-menu{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:3;max-height:188px;overflow:auto;padding:6px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow-md)}.album-edit-category-option{display:flex;align-items:center;width:100%;min-height:32px;padding:0 10px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--text);font-size:var(--text-sm);text-align:left}.album-edit-category-option span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.album-edit-category-option:hover{background:var(--panel)}.album-edit-category-option.selected{background:var(--accent-soft);color:var(--accent);font-weight:var(--fw-semibold)}.album-edit-category-empty{padding:8px 10px;color:var(--text-subtle);font-size:var(--text-sm);line-height:1.4}.album-edit-error{color:var(--danger);font-size:var(--text-sm)}.album-edit-error.neutral{color:var(--accent)}.album-edit-actions{display:flex;justify-content:flex-end;gap:var(--space-2)}.album-edit-secondary,.album-edit-primary{height:34px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:0 14px;border-radius:var(--r-md);font-size:var(--text-sm)}.album-edit-secondary{border:1px solid var(--border);background:var(--surface);color:var(--text-muted)}.album-edit-primary{border:1px solid var(--accent);background:var(--accent);color:#fff}.album-edit-secondary:hover{color:var(--text);border-color:var(--gray-400)}.album-edit-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.album-edit-secondary:disabled,.album-edit-primary:disabled{cursor:not-allowed;opacity:.62}.album-category-manager,.album-batch-modal,.album-sync-auth-modal{width:min(560px,100%);max-height:min(680px,calc(100vh - 40px));overflow-y:auto}.album-sync-auth-modal{width:min(420px,100%)}.album-manager-empty{display:flex;align-items:center;justify-content:center;min-height:96px;border:1px dashed var(--border);border-radius:var(--r-md);color:var(--text-muted);font-size:var(--text-sm)}.album-manager-list{display:flex;flex-direction:column;gap:var(--space-2)}.album-manager-reorder-move,.album-manager-reorder-enter-active,.album-manager-reorder-leave-active{transition:transform .2s cubic-bezier(.2,0,0,1),opacity .16s ease,border-color var(--t-fast),background var(--t-fast),box-shadow var(--t-fast)}.album-manager-reorder-enter-from,.album-manager-reorder-leave-to{opacity:0;transform:translateY(6px) scale(.99)}.album-manager-reorder-leave-active{position:absolute;width:calc(100% - var(--space-4))}.album-manager-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--space-2);align-items:center;padding:var(--space-2);border:1px solid var(--border);border-radius:var(--r-md);background:var(--panel);box-shadow:var(--shadow-xs);will-change:transform;transition:border-color var(--t-fast),background var(--t-fast),box-shadow var(--t-fast),transform .16s ease}.album-manager-row.dragging{border-color:var(--accent);background:var(--accent-soft);box-shadow:var(--shadow-md);transform:scale(1.01)}.album-manager-drag{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-subtle);cursor:grab;touch-action:none}.album-manager-drag:active{cursor:grabbing}.album-manager-drag:hover{border-color:var(--accent);color:var(--accent)}.album-manager-main{min-width:0}.album-manager-name{overflow:hidden;color:var(--text);font-size:var(--text-sm);font-weight:var(--fw-semibold);text-overflow:ellipsis;white-space:nowrap}.album-manager-count{margin-top:2px;color:var(--text-muted);font-size:var(--text-xs)}.album-manager-actions{display:inline-flex;gap:4px}.album-manager-actions button{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-muted)}.album-manager-actions button:hover{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.album-manager-inline{grid-column:1 / -1;display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--space-2)}.album-manager-inline input,.album-manager-inline select{min-width:0;height:34px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--r-md);outline:none;background:var(--surface);color:var(--text);font:inherit;font-size:var(--text-sm)}.album-manager-inline input:focus,.album-manager-inline select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.album-manager-inline button{height:34px;padding:0 10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-muted);font-size:var(--text-sm)}.album-manager-inline button:hover{border-color:var(--accent);color:var(--accent)}.album-batch-fieldset{display:flex;flex-direction:column;gap:var(--space-3);min-width:0;margin:0;padding:var(--space-3);border:1px solid var(--border);border-radius:var(--r-md);background:var(--panel)}.album-batch-fieldset legend{padding:0 4px;color:var(--text-muted);font-size:var(--text-sm);font-weight:var(--fw-medium)}.album-segmented{display:grid;grid-template-columns:repeat(auto-fit,minmax(72px,1fr));gap:4px;padding:4px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}.album-segmented button{height:30px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--text-muted);font-size:var(--text-sm)}.album-segmented button:hover,.album-segmented button.active{background:var(--accent-soft);color:var(--accent)}.album-segmented button.active{font-weight:var(--fw-semibold)}.album-batch-rule-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2)}.album-batch-rule-grid label{min-width:0;min-height:34px;display:flex;align-items:center;gap:8px;padding:0 10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-muted);font-size:var(--text-sm)}.album-batch-rule-grid label:has(input:checked){border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:var(--fw-semibold)}.album-batch-rule-grid input{accent-color:var(--accent)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.metric-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--space-3)}.metric{background:var(--panel);border-radius:var(--r-md);padding:var(--space-3) 14px}.metric-num{font-size:var(--text-2xl);font-weight:var(--fw-semibold);color:var(--text);font-variant-numeric:tabular-nums}.metric-label{font-size:var(--text-sm);color:var(--text-muted);margin-top:2px}.ratio-bar{display:flex;height:18px;border-radius:var(--r-sm);overflow:hidden;background:var(--border)}.ratio-seg.sent{background:var(--accent)}.ratio-seg.recv{background:var(--recv)}.ratio-legend{display:flex;gap:var(--space-4);margin-top:var(--space-2);font-size:var(--text-sm);color:var(--text-muted)}.ratio-legend.compact{margin-top:var(--space-1)}.ratio-legend .dot{display:inline-block;width:10px;height:10px;border-radius:var(--r-xs);margin-right:var(--space-1);vertical-align:middle}.ratio-legend .dot.sent{background:var(--accent)}.ratio-legend .dot.recv{background:var(--recv)}.highlight-list{padding-left:var(--space-5);margin:0;color:var(--text-muted);font-size:var(--text-base);line-height:1.9}.highlight-list b{color:var(--text)}.monthly-chart{display:flex;flex-direction:column;gap:6px;height:auto;padding:0;overflow:visible;border-bottom:none}.monthly-chart.chart-with-grid{background-image:none}.month-col{display:grid;grid-template-columns:48px 1fr 64px;align-items:center;gap:var(--space-3);font-size:var(--text-sm);padding:3px 6px;border-radius:var(--r-sm);min-width:0}.month-col:hover{background:var(--accent-soft)}.month-col .bar-num{color:var(--text-muted);font-size:var(--text-sm);font-variant-numeric:tabular-nums;line-height:16px;padding-bottom:0;text-align:right;white-space:nowrap}.month-col .bar-wrap{width:100%;min-width:0;height:16px;display:flex;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:0;background:var(--panel);border-radius:var(--r-xs);overflow:hidden}.month-col .bar{transition:height var(--t-slow),width var(--t-slow);height:100%;min-width:0;width:var(--p, 0%)}.month-col .bar.sent{background:var(--accent);border-radius:var(--r-xs) 0 0 var(--r-xs)}.month-col .bar.recv{background:var(--recv);border-radius:0 var(--r-xs) var(--r-xs) 0}.month-label-block{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;min-width:0}.month-label{font-size:var(--text-sm);color:var(--text-muted);margin-top:0;font-variant-numeric:tabular-nums;line-height:16px}.month-year{font-size:10px;color:var(--text);font-weight:var(--fw-medium);line-height:1.2;height:1.2em;min-height:1.2em}.hour-label-block{display:flex;flex-direction:column;align-items:center}.hour-label{font-size:var(--text-sm);color:var(--text-muted);margin-top:var(--space-1)}.weekday-chart{display:flex;flex-direction:column;gap:6px}.weekday-row{display:grid;grid-template-columns:48px 1fr 60px;align-items:center;gap:var(--space-3);font-size:var(--text-sm)}.weekday-name{color:var(--text-muted)}.weekday-track{height:16px;background:var(--panel);border-radius:var(--r-xs);overflow:hidden;display:flex;align-items:stretch}.weekday-bar{height:100%;background:var(--accent);border-radius:var(--r-xs);transition:width var(--t-slow)}.weekday-bar.sent{background:var(--accent);border-radius:var(--r-xs) 0 0 var(--r-xs)}.weekday-bar.recv{background:var(--recv);border-radius:0 var(--r-xs) var(--r-xs) 0}.weekday-count{text-align:right;color:var(--text-muted);font-variant-numeric:tabular-nums}@media (min-width: 641px){.hourly-24h-inner.weekday-chart{display:contents}.hourly-chart{display:flex;gap:var(--space-1);align-items:flex-end;height:160px;padding:var(--space-2) 0 var(--space-1);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;border-bottom:1px solid var(--border)}.hourly-chart .hour-col{box-sizing:border-box;flex:1 0 48px;min-width:48px;display:flex;flex-direction:column;align-items:center;height:100%}.hourly-chart .hour-col .bar-wrap{order:2}.hourly-chart .hour-col .hour-label-block{order:3}.hourly-chart .hour-col .bar-wrap{flex:1;width:100%;min-height:0;display:flex;flex-direction:column;justify-content:flex-end}.hourly-chart .hour-col .bar-num{order:1;font-size:var(--text-sm);padding-bottom:1px;color:var(--text);font-variant-numeric:tabular-nums;text-align:center;line-height:1.1;white-space:nowrap}.hourly-chart .hour-col .bar.accent{background:var(--accent);border-radius:var(--r-xs) var(--r-xs) 0 0;transition:height var(--t-slow),width var(--t-slow);min-height:1px;min-width:0;height:var(--p, 0%);width:100%}}.stats-table{width:100%;border-collapse:collapse;font-size:var(--text-base)}.stats-table tr{border-bottom:1px solid var(--border)}.stats-table tr:last-child{border-bottom:none}.stats-table td{padding:var(--space-2) var(--space-1);vertical-align:middle}.stats-table td.label{width:25%;color:var(--text)}.stats-table td.track{padding-right:var(--space-3)}.stats-table td.track .split-track{display:flex;height:10px;background:var(--panel);border-radius:var(--r-xs);overflow:hidden}.stats-table td.track .track-bar{height:10px;background:var(--accent);border-radius:var(--r-xs);min-width:0}.stats-table td.track .track-bar.sent{background:var(--accent);border-radius:var(--r-xs) 0 0 var(--r-xs)}.stats-table td.track .track-bar.recv{background:var(--recv);border-radius:0 var(--r-xs) var(--r-xs) 0}.stats-table td.num{width:80px;text-align:right;color:var(--text-muted);font-variant-numeric:tabular-nums}.stats-table td.ratio{width:60px;text-align:right;color:var(--text-muted);font-variant-numeric:tabular-nums}.skeleton{position:relative;overflow:hidden;background:var(--skeleton-bg);border-radius:var(--r-sm)}.skeleton:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,var(--skeleton-highlight),transparent);transform:translate(-100%);animation:shimmer 1.4s ease-in-out infinite}@keyframes shimmer{to{transform:translate(100%)}}.skeleton-line{height:12px;border-radius:var(--r-sm)}.skeleton-block{border-radius:var(--r-md)}.skeleton-circle{border-radius:var(--r-full)}.progress .bar{position:relative;background:var(--border)}.progress .bar>i{position:relative;background:linear-gradient(90deg,var(--accent) 0%,var(--accent-hover) 100%);background-size:200% 100%;overflow:hidden}.progress .bar>i:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.45),transparent);transform:translate(-100%);animation:progress-shimmer 1.6s ease-in-out infinite}@keyframes progress-shimmer{to{transform:translate(100%)}}.app-shell>.loader-screen,.app-shell>.chat-header,.app-shell>.search-bar,.app-shell>.time-filter,.app-shell>.chat-wrapper{animation:layout-fade-in .24s var(--ease-out) backwards}.app-shell>.chat-header{animation-delay:20ms}.app-shell>.search-bar{animation-delay:60ms}.app-shell>.time-filter{animation-delay:90ms}.app-shell>.chat-wrapper{animation-delay:.12s}@keyframes layout-fade-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.modal-fade-enter-active,.modal-fade-leave-active{transition:opacity var(--t-normal)}.modal-fade-enter-from,.modal-fade-leave-to{opacity:0}.modal-fade-enter-active .stats-modal,.modal-fade-leave-active .stats-modal{transition:transform var(--t-normal),opacity var(--t-normal)}.modal-fade-enter-from .stats-modal,.modal-fade-leave-to .stats-modal{opacity:0;transform:scale(.96) translateY(8px)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media (max-width: 640px){.app-shell{max-width:100%;box-shadow:none}.msg-body{max-width:calc(100% - 100px)}.chat-header .actions{display:flex;gap:var(--space-1)}.chat-header .actions button{padding:4px var(--space-2);font-size:var(--text-sm)}.search-bar{flex-wrap:wrap;row-gap:var(--space-2)}.search-bar .search-field{flex:1 0 100%;min-width:0}.search-bar .mode-toggle{flex-shrink:0}.search-bar .mode-toggle button{padding:6px var(--space-3);min-width:48px;white-space:nowrap}.search-bar .count{min-width:0;margin-left:auto}.stats-mask{padding:var(--space-4);align-items:center;justify-content:center}.stats-modal{width:100%;max-width:880px;height:70vh;max-height:70vh;border-radius:var(--r-lg)}.metric-grid{grid-template-columns:repeat(2,1fr)}.metric-num{font-size:var(--text-xl)}.album-toolbar{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding:10px var(--space-3);align-items:center;gap:8px}.album-toolbar>div:first-child{grid-column:1 / 3;grid-row:1;min-width:0}.album-actions{display:contents}.album-tool-button{min-width:0;justify-content:center;width:100%;white-space:nowrap}.album-action-manage{grid-column:1;grid-row:2}.album-action-batch{grid-column:2;grid-row:2}.album-export{grid-column:3;grid-row:1;min-width:0;justify-content:center;width:100%;white-space:nowrap}.album-jump-group{grid-column:3;grid-row:2;width:100%;min-width:0}.album-jump{flex:1 1 auto;width:100%;min-width:0}.album-month-menu{width:min(260px,calc(100vw - 24px));min-width:min(220px,calc(100vw - 24px))}.album-category-bar{overflow:visible;padding:8px var(--space-3)}.album-category-chip.mobile-hidden{display:none}.album-category-more{display:inline-flex;position:static}.album-category-more-menu{left:var(--space-3);right:var(--space-3);width:auto;min-width:0;max-width:none;transform-origin:top center}.album-back-top{right:var(--space-3);bottom:var(--space-3);width:38px;height:38px}.album-scroll{padding:var(--space-3)}.album-grid{gap:var(--space-2)}.album-selection-bar{align-items:stretch;flex-direction:column;padding:8px var(--space-3)}.album-selection-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.album-selection-actions button{min-width:0;padding:0 6px}.album-column{gap:var(--space-2)}.photo-lightbox{padding:var(--space-3)}.lightbox-image,.lightbox-video{max-height:calc(100vh - 112px)}.lightbox-caption{flex-direction:column;gap:2px}.lightbox-close{top:var(--space-3);right:var(--space-3)}.lightbox-edit{top:var(--space-3);right:calc(var(--space-3) + 46px);height:38px;padding:0 10px}.lightbox-nav{width:38px;height:48px}.lightbox-nav.prev{left:var(--space-2)}.lightbox-nav.next{right:var(--space-2)}.album-edit-mask{padding:var(--space-3)}.album-edit-modal{padding:var(--space-4)}.album-category-manager,.album-batch-modal{max-height:calc(100vh - 24px)}.album-edit-header p{max-width:240px}.album-manager-inline,.album-batch-rule-grid{grid-template-columns:1fr}.album-manager-row{grid-template-columns:auto minmax(0,1fr)}.album-manager-actions{grid-column:2}.album-manager-actions{justify-content:flex-start}.monthly-chart{gap:4px}.hourly-chart{display:block;padding:0;height:auto;overflow:visible}.hourly-chart.chart-with-grid{background-image:none}.hourly-chart .hour-col{border-radius:var(--r-sm);padding:4px 6px;box-sizing:border-box;transition:background var(--t-fast)}.hourly-chart .hour-col:hover{background:var(--accent-soft)}.hourly-chart .hour-24h-inner .hour-col{display:flex;flex:0 0 auto;flex-direction:row;align-items:center;gap:var(--space-3);font-size:var(--text-sm);width:100%;min-width:0;max-width:100%;height:auto;min-height:0;box-sizing:border-box}.hour-col .hour-label-block{order:1;flex:0 0 48px;width:48px;min-width:48px;max-width:48px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;min-height:16px}.hour-label-block .hour-label{margin:0;line-height:16px}.hour-col .bar-num{order:3;flex:0 0 60px;width:60px;min-width:60px;display:flex;align-items:center;justify-content:flex-end;min-height:16px;text-align:right;color:var(--text-muted);font-variant-numeric:tabular-nums;line-height:16px}.hour-col .bar-wrap{order:2;flex:1 1 0;min-width:0;width:auto;height:16px;max-height:16px;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:0;background:var(--panel);border-radius:var(--r-xs);overflow:hidden;align-self:center}.hour-col .bar.accent{height:100%;width:var(--p, 0%);border-radius:var(--r-xs);transition:width var(--t-slow)}}@media (max-width: 640px){.usage-admin{padding:var(--space-3)}.usage-admin-head{align-items:center}.usage-summary,.usage-mini-grids{grid-template-columns:1fr}.usage-toolbar{align-items:center}}
