:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--font-display:"Libre Franklin", system-ui, -apple-system, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;--font-body:system-ui, -apple-system, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;--bg:#e7e2d9;--surface:#d9d3c8;--surface-2:#cec7ba;--surface-3:#c1b9aa;--field:#f0ece3;--field-hover:#f6f2ea;--ink:#1c1915;--ink-soft:#57504a;--ink-muted:#7d766b;--line:#b6aea0;--line-strong:#9d9588;--accent:#1e6b78;--accent-strong:#15525e;--accent-mid:#5f97a2;--accent-soft:#d3e2e4;--accent-ink:#f6faf9;--today:#ad5f2a;--today-soft:#ecdcc6;--danger:#a1432f;--danger-strong:#833426;--danger-soft:#f0dcd5;--warn-ink:#6f4c12;--warn-bg:#efe1bf;--info-ink:#17525e;--info-bg:#d6e3e4;--success-ink:#2f6a4a;--success-bg:#d5e5da;--cat-birthday:#b34a5c;--cat-birthday-soft:#efd9dd;--cat-anniversary:#9c6b2f;--cat-anniversary-soft:#e9ddc6;--cat-exam:#41689b;--cat-exam-soft:#d9e1ec;--cat-travel:#35745f;--cat-travel-soft:#d4e4dd;--cat-other:#6e6a60;--cat-other-soft:#e4e1da;--radius:6px;--shadow-float:0 10px 30px #1c140838;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--text-xs:12px;--text-sm:13px;--text-body:15px;--text-md:16px;--text-lg:18px;--text-xl:22px;--ease-out:cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);font-size:var(--text-body);margin:0;line-height:1.55}::selection{background:var(--accent-soft);color:var(--ink)}.app{max-width:1024px;padding:var(--s6) var(--s4) 72px;margin:0 auto}.app-header{justify-content:space-between;align-items:flex-end;gap:var(--s4);margin-bottom:var(--s5);animation:rise-in .5s var(--ease-out) backwards;flex-wrap:wrap;display:flex}.app-header h1{font-family:var(--font-display);letter-spacing:-.03em;margin:0;font-size:clamp(28px,4vw,40px);font-weight:700;line-height:1}.app-title-sub{font-family:var(--font-body);letter-spacing:.02em;color:var(--ink-soft);margin-left:.45em;font-size:.62em;font-weight:600}.app-subtitle{font-size:var(--text-sm);color:var(--ink-muted);font-variant-numeric:tabular-nums;margin:8px 0 0}.header-actions{gap:var(--s2);flex-wrap:wrap;display:flex}.banner{align-items:center;gap:var(--s2) var(--s3);border-radius:var(--radius);margin-bottom:var(--s4);font-size:var(--text-sm);animation:drop-in .35s var(--ease-out) backwards;flex-wrap:wrap;padding:12px 14px;font-weight:500;display:flex}.banner-text{flex:220px}.banner-info{background:var(--info-bg);color:var(--info-ink)}.banner-warn{background:var(--warn-bg);color:var(--warn-ink)}.banner-error{background:var(--danger-soft);color:var(--danger-strong)}.banner .btn.small{color:currentColor;background:#00000014}.banner .btn.small:hover{background:#00000024}.event-form,.data-panel{background:var(--surface);border-radius:var(--radius);padding:var(--s5);margin-bottom:var(--s5)}.event-form{gap:var(--s4);animation:rise-in .4s var(--ease-out) backwards;display:grid}.event-form h2{font-size:var(--text-lg);letter-spacing:-.01em;margin:0;font-weight:700}.field-grid{gap:var(--s4);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.field{font-size:var(--text-sm);color:var(--ink-soft);gap:6px;min-width:0;display:grid}.field-wide{grid-column:1/-1}.field-label{color:var(--ink);align-items:baseline;gap:6px;font-weight:600;display:flex}.field-hint{font-size:var(--text-xs);color:var(--ink-muted);font-variant-numeric:tabular-nums;margin-left:auto;font-weight:400}.required{color:var(--danger)}.field input,.field select{font:inherit;border:1px solid var(--line);border-radius:var(--radius);background:var(--field);width:100%;color:var(--ink);min-width:0;transition:background-color .15s var(--ease-out), border-color .15s var(--ease-out);padding:9px 10px}.field input:hover,.field select:hover{background:var(--field-hover)}.field input:focus-visible,.field select:focus-visible,.toolbar-item select:focus-visible,.toolbar-item input:focus-visible,.btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.field.invalid input{border-color:var(--danger);background:var(--danger-soft)}.field-error{font-size:var(--text-sm);color:var(--danger);font-weight:600}.issues{color:var(--danger);font-size:var(--text-sm);margin:0;font-weight:600}.form-actions,.panel-actions{gap:var(--s2);flex-wrap:wrap;align-items:center;display:flex}.btn{font:inherit;border-radius:var(--radius);background:var(--surface-2);color:var(--ink);cursor:pointer;transition:background-color .15s var(--ease-out), color .15s var(--ease-out), transform .1s var(--ease-out);border:0;padding:9px 16px;font-weight:600}.btn:hover{background:var(--surface-3)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn.primary{background:var(--accent);color:var(--accent-ink)}.btn.primary:hover{background:var(--accent-strong)}.btn.danger{background:var(--danger-soft);color:var(--danger)}.btn.danger:hover{color:var(--danger-strong);background:#e9cbc2}.btn.small{font-size:var(--text-sm);padding:5px 10px;font-weight:600}.panel-head{justify-content:space-between;align-items:center;gap:var(--s3);display:flex}.panel-head h2{font-size:var(--text-lg);letter-spacing:-.01em;margin:0;font-weight:700}.panel-hint{font-size:var(--text-sm);color:var(--ink-muted);margin:6px 0 0}.panel-block{margin-top:var(--s5);gap:var(--s2);display:grid}.panel-block h3{font-size:var(--text-md);margin:0 0 4px;font-weight:700}.danger-block h3{color:var(--danger)}.panel-empty{font-size:var(--text-sm);color:var(--ink-muted);margin:0}.panel-busy{align-items:center;gap:var(--s2);font-size:var(--text-sm);color:var(--ink-soft);margin:0;display:inline-flex}.panel-busy:before{content:"";background:var(--accent);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite busy-pulse}@keyframes busy-pulse{0%,to{opacity:.4;transform:scale(.9)}50%{opacity:1;transform:scale(1)}}.panel-meta{font-size:var(--text-sm);color:var(--ink-muted);font-variant-numeric:tabular-nums}.import-preview{background:var(--field);border-radius:var(--radius);padding:var(--s3) 14px;gap:var(--s2);font-size:var(--text-sm);display:grid}.import-preview p{margin:0}code{background:var(--surface-2);border-radius:4px;padding:1px 5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em}.cards{gap:var(--s4);grid-template-columns:repeat(auto-fill,minmax(240px,1fr));display:grid}.card{background:var(--surface);border-radius:var(--radius);padding:var(--s4);gap:var(--s2);min-width:0;transition:background-color .18s var(--ease-out), transform .18s var(--ease-out);animation:card-in .45s var(--ease-out) backwards;flex-direction:column;display:flex;position:relative;overflow:hidden}.card:first-child{animation-delay:0s}.card:nth-child(2){animation-delay:40ms}.card:nth-child(3){animation-delay:80ms}.card:nth-child(4){animation-delay:.12s}.card:nth-child(5){animation-delay:.16s}.card:nth-child(6){animation-delay:.2s}.card:nth-child(7){animation-delay:.24s}.card:nth-child(8){animation-delay:.28s}.card:nth-child(n+9){animation-delay:.32s}.card:hover{background:var(--surface-2);transform:translateY(-2px)}.card.pinned:before{content:"";background:var(--accent);width:3px;position:absolute;top:0;bottom:0;left:0}.card.pending-delete{background:var(--danger-soft)}.card-top{justify-content:space-between;align-items:flex-start;gap:var(--s2);display:flex}.card-title{font-size:var(--text-md);letter-spacing:-.01em;overflow-wrap:anywhere;margin:0;font-weight:700;line-height:1.35}.badges{gap:var(--s1);flex-wrap:wrap;justify-content:flex-end;display:flex}.badge{font-size:var(--text-xs);background:var(--surface-2);color:var(--ink-soft);white-space:nowrap;border-radius:999px;padding:2px 8px;font-weight:600}.badge.yearly{background:var(--accent-soft);color:var(--accent-strong)}.badge.pin{background:var(--accent);color:var(--accent-ink)}.badge.cat-birthday{background:var(--cat-birthday-soft);color:var(--cat-birthday)}.badge.cat-anniversary{background:var(--cat-anniversary-soft);color:var(--cat-anniversary)}.badge.cat-exam{background:var(--cat-exam-soft);color:var(--cat-exam)}.badge.cat-travel{background:var(--cat-travel-soft);color:var(--cat-travel)}.badge.cat-other{background:var(--cat-other-soft);color:var(--cat-other)}.card-date{font-size:var(--text-sm);color:var(--ink-muted);font-variant-numeric:tabular-nums;margin:0}mark.hl{color:inherit;background:#e7d9a8;border-radius:2px;padding:0 2px}.countdown{padding:var(--s2) 0 2px;gap:2px;display:grid}.countdown-label{font-size:var(--text-sm);color:var(--ink-muted);font-weight:600}.countdown-figure{align-items:baseline;gap:6px;display:flex}.countdown .number{font-family:var(--font-display);letter-spacing:-.03em;font-variant-numeric:tabular-nums;animation:number-pop .4s var(--ease-out) backwards;font-size:clamp(2.5rem,6vw,3.5rem);font-weight:700;line-height:.95}.countdown .unit{font-size:var(--text-md);color:var(--ink-soft);font-weight:600}.countdown.future .number{color:var(--accent)}.countdown.today .number{color:var(--today);letter-spacing:-.02em;font-size:clamp(1.8rem,4vw,2.4rem)}.countdown.past .number{color:var(--ink-muted)}.countdown .badge.yearly{justify-self:start}.cycle{gap:var(--s1);display:grid}.cycle-track{background:var(--surface-2);border-radius:999px;height:8px;overflow:hidden}.cycle-fill{background:var(--accent);transform-origin:0;height:100%;animation:bar-grow .8s var(--ease-out) backwards;border-radius:999px;display:block}.cycle-label{font-size:var(--text-xs);color:var(--ink-muted);flex-wrap:wrap;gap:4px 8px;display:flex}.cycle-sub{color:var(--ink-muted);opacity:.8}.card-note{font-size:var(--text-sm);color:var(--ink-soft);overflow-wrap:anywhere;margin:0}.card-actions{gap:var(--s1);flex-wrap:wrap;align-items:center;margin-top:auto;display:flex}.confirm-delete{font-size:var(--text-sm);color:var(--danger);align-items:center;gap:6px;font-weight:600;display:inline-flex}.empty{text-align:center;padding:48px var(--s4);background:var(--surface);border-radius:var(--radius);animation:card-in .45s var(--ease-out) backwards;grid-column:1/-1}.empty-mark{font-family:var(--font-display);letter-spacing:-.04em;color:var(--line);margin-bottom:var(--s3);font-size:clamp(64px,12vw,96px);font-weight:700;line-height:1;display:block}.empty-title{font-size:var(--text-lg);margin:0 0 6px;font-weight:700}.empty-hint{margin:0 auto var(--s4);max-width:380px;color:var(--ink-muted);font-size:var(--text-sm)}.empty-actions{gap:var(--s2);flex-wrap:wrap;justify-content:center;display:flex}.stats{background:var(--surface);border-radius:var(--radius);padding:var(--s4) var(--s5);margin-bottom:var(--s4);gap:var(--s3);animation:rise-in .5s var(--ease-out) backwards;display:grid}.stats-head{align-items:baseline;gap:var(--s3) var(--s5);flex-wrap:wrap;display:flex}.stats-headline{align-items:baseline;gap:var(--s2);display:flex}.stats-number{font-family:var(--font-display);letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--ink);font-size:clamp(32px,5vw,48px);font-weight:700;line-height:1}.stats-claim{font-size:var(--text-md);color:var(--ink-soft);font-weight:600}.stats-totals{gap:var(--s2) var(--s5);font-size:var(--text-sm);color:var(--ink-muted);flex-wrap:wrap;display:flex}.stats-totals strong{font-family:var(--font-display);font-size:var(--text-lg);color:var(--ink);font-variant-numeric:tabular-nums;margin-right:2px;font-weight:700}.stats-bars{gap:var(--s1);display:grid}.stat-row{align-items:center;gap:var(--s2);font-size:var(--text-sm);color:var(--ink-soft);grid-template-columns:64px 1fr 32px;display:grid}.stat-track{background:var(--surface-2);border-radius:999px;height:10px;overflow:hidden}.stat-fill{background:var(--cat-other);transform-origin:0;min-width:0;height:100%;animation:bar-grow .7s var(--ease-out) backwards;border-radius:999px;display:block}.stat-fill.cat-birthday{background:var(--cat-birthday)}.stat-fill.cat-anniversary{background:var(--cat-anniversary)}.stat-fill.cat-exam{background:var(--cat-exam)}.stat-fill.cat-travel{background:var(--cat-travel)}.stat-fill.cat-other{background:var(--cat-other)}.stat-count{text-align:right;font-variant-numeric:tabular-nums;color:var(--ink);font-weight:600}.stat-label{color:var(--ink-soft);font-weight:600}.toolbar{align-items:center;gap:var(--s2) var(--s3);background:var(--surface);border-radius:var(--radius);padding:var(--s3) var(--s4);margin-bottom:var(--s3);animation:rise-in .5s var(--ease-out) backwards;flex-wrap:wrap;display:flex}.toolbar-item{font-size:var(--text-sm);color:var(--ink-soft);align-items:center;gap:6px;font-weight:600;display:inline-flex}.toolbar-item.grow{flex:180px}.toolbar-item input[type=search]{flex:1;min-width:120px}.toolbar-item select,.toolbar-item input[type=search],.toolbar-item.soon-window input[type=number]{font:inherit;border:1px solid var(--line);border-radius:var(--radius);background:var(--field);color:var(--ink);min-width:0;transition:background-color .15s var(--ease-out), border-color .15s var(--ease-out);padding:6px 8px;font-weight:400}.toolbar-item select:hover,.toolbar-item input:hover{background:var(--field-hover)}.toolbar-item.checkbox input{accent-color:var(--accent)}.toolbar-item.soon-window input[type=number]{font-variant-numeric:tabular-nums;width:72px}.result-count{margin:0 2px var(--s3);font-size:var(--text-sm);color:var(--ink-muted)}.grouped{gap:var(--s6);display:grid}.group-head{align-items:center;gap:var(--s2);margin:0 0 var(--s3);font-size:var(--text-md);color:var(--ink);font-weight:700;display:flex}.group-count{font-size:var(--text-xs);color:var(--ink-muted);background:var(--surface);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 10px;font-weight:600}.group-dot{background:var(--ink-muted);border-radius:50%;width:10px;height:10px}.dot-today{background:var(--today)}.dot-week{background:var(--accent)}.dot-month{background:var(--accent-mid)}.dot-later{background:#a49c8d}.dot-past{background:var(--surface-2)}.toasts{left:50%;bottom:max(16px, env(safe-area-inset-bottom));gap:var(--s2);z-index:40;width:min(520px,100vw - 32px);display:grid;position:fixed;transform:translate(-50%)}.toast{align-items:center;gap:var(--s2);border-radius:var(--radius);color:#f2ecdf;font-size:var(--text-sm);box-shadow:var(--shadow-float);animation:toast-in .3s var(--ease-out) backwards;background:#26221b;padding:11px 14px;display:flex}.toast-text{overflow-wrap:anywhere;flex:1}.toast-success{color:#e2f0e6;background:#24543a}.toast-error{color:#f9ded7;background:#6e2f22}.toast-action.btn{color:inherit;background:#ffffff24}.toast-action.btn:hover{background:#ffffff3d}.toast-close{color:inherit;cursor:pointer;opacity:.8;background:0 0;border:0;padding:0 2px;font-size:18px;line-height:1}.toast-close:hover{opacity:1}.crash{max-width:560px}.crash h1{font-size:var(--text-xl)}.crash-message{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--text-sm);background:var(--surface);border-radius:var(--radius);padding:var(--s3);overflow-wrap:anywhere}.crash-hint{font-size:var(--text-sm);color:var(--ink-soft)}.crash-actions{gap:var(--s2);flex-wrap:wrap;display:flex}@keyframes rise-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes drop-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes card-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes number-pop{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes bar-grow{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@media (width<=560px){.app{padding:var(--s4) 12px 56px}.app-header{align-items:flex-start}.app-header h1{font-size:26px}.header-actions{width:100%}.header-actions .btn{flex:1}.cards{grid-template-columns:1fr}.toolbar{padding:var(--s3)}.toolbar-item,.toolbar-item.grow{flex:100%}.toolbar-item select,.toolbar-item input[type=search]{flex:1;width:100%}.toolbar-item.checkbox{flex:none}.toolbar-item.soon-window input[type=number]{width:84px}.countdown .number{font-size:3rem}.countdown.today .number{font-size:1.9rem}.stat-row{grid-template-columns:56px 1fr 28px}.event-form,.data-panel{padding:var(--s4) 14px}.stats{padding:var(--s4)}.card-actions{gap:var(--s2)}.card-actions .btn{flex:auto}.confirm-delete{flex:100%}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-delay:0s!important}.panel-busy:before{animation:none}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#15130f;--surface:#211e19;--surface-2:#2b2721;--surface-3:#37322b;--field:#2e2a23;--field-hover:#37332b;--ink:#ece5d8;--ink-soft:#b7ad9d;--ink-muted:#8b8374;--line:#4a4236;--line-strong:#5c5345;--accent:#5fb0c0;--accent-strong:#7ac3d1;--accent-mid:#4a7e8b;--accent-soft:#1e3338;--accent-ink:#0f1a1c;--today:#dfa057;--today-soft:#3a2d1b;--danger:#e08a72;--danger-strong:#f0a693;--danger-soft:#3a241e;--warn-ink:#eccf8a;--warn-bg:#3a2e16;--info-ink:#a7d3da;--info-bg:#1a2b30;--success-ink:#a5d4b5;--success-bg:#1c2e23;--cat-birthday:#e28aa0;--cat-birthday-soft:#3c2129;--cat-anniversary:#d0a468;--cat-anniversary-soft:#3a2d1a;--cat-exam:#8fa9d4;--cat-exam-soft:#222c3e;--cat-travel:#7fb8a2;--cat-travel-soft:#1c2e27;--cat-other:#a49c8d;--cat-other-soft:#2c2821;--shadow-float:0 12px 32px #0000008c}:root[data-theme=dark] .btn:hover{background:var(--surface-3)}:root[data-theme=dark] .btn.danger:hover{background:#4a2b22}:root[data-theme=dark] .field.invalid input{background:var(--danger-soft)}:root[data-theme=dark] mark.hl{color:#fff3c4;background:#5c4c22}:root[data-theme=dark] .toast{background:#2b2822}:root[data-theme=dark] .banner .btn.small{background:#ffffff1f}:root[data-theme=dark] .banner .btn.small:hover{background:#fff3}
