:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#14151a;--surface:#1e2128;--surface-2:#262932;--border:#3a3f4c;--text:#e6e8ee;--text-muted:#9aa0ad;--accent:#6ea8fe;--weekend:#2a2d37;--today:#6ea8fe;--radius:8px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, Consolas, monospace;font:16px/1.5 var(--sans);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{min-height:100svh;margin:0}h1,h2{color:var(--text);margin:0 0 .5rem;font-weight:600}code{font-family:var(--mono);background:var(--surface-2);border-radius:4px;padding:2px 6px}@media print{:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}.toolbar,.panel,.search,.export,.login-screen{display:none!important}body{color:#000;background:#fff}.app{max-width:none;margin:0;padding:0}@page{size:landscape;margin:8mm}.year th,.year td,.month-grid .mcell,.month-head .mhd{border-color:#bbb!important}.year thead th,.year .num,.year .day-axis,.month-head .mhd{color:#000!important;background:#eee!important}.year .cell,.month-grid .mcell{color:#333!important;background:#fff!important}.year .cell .dn,.month-grid .mnum{color:#000!important}.year .cell.weekend,.month-grid .mcell.weekend{background:#f0f0f0!important}.year .cell.school,.month-grid .mcell.school{background:#d7f3ec!important}.year .cell.holiday,.month-grid .mcell.holiday{background:#fbdede!important}.year .cell.holiday .dn,.year .cell.holiday .wd,.month-grid .mcell.holiday .mnum,.month-grid .mholiday{color:#b00020!important}.marker-band{opacity:.6!important}.year .cell.highlight,.year .cell.selected,.month-grid .mcell.highlight,.month-grid .mcell.selected{outline:none!important}.year{font-size:7.5px}}.export{position:relative}.export-menu{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);z-index:20;min-width:200px;margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 8px 24px #0006}.export-menu a,.export-menu button{text-align:left;width:100%;color:var(--text);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:6px;padding:7px 9px;font-size:.85rem;text-decoration:none;display:block}.export-menu a:hover,.export-menu button:hover{background:var(--surface-2)}.toolbar{flex-wrap:wrap;align-items:center;gap:1.5rem;margin-bottom:1rem;display:flex}.toolbar h1{margin:0;font-size:1.4rem}.toolbar .nav{align-items:center;gap:.5rem;display:flex}.toolbar .year-label{text-align:center;font-variant-numeric:tabular-nums;min-width:3.5ch;font-size:1.2rem;font-weight:600}.toolbar .actions{gap:.5rem;margin-left:auto;display:flex}.toolbar button,.toolbar input[type=date]{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit;cursor:pointer;padding:.35rem .7rem}.toolbar button:hover:not(:disabled),.toolbar input[type=date]:hover{border-color:var(--accent)}.toolbar button:disabled{opacity:.4;cursor:not-allowed}.toolbar input[type=date]{cursor:text;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.toolbar .user-badge{color:#0b1220;text-transform:lowercase;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:.8rem;font-weight:700;display:inline-flex}.marker-layer{z-index:0;pointer-events:none;width:80%;display:flex;position:absolute;top:0;bottom:0;left:0}.marker-band{opacity:.45;flex:1}.year{border-collapse:collapse;table-layout:fixed;width:100%;font-size:12px}.year th,.year td{border:1px solid var(--border)}.year thead th{background:var(--surface-2);color:var(--text);text-align:center;z-index:1;padding:6px 0;font-weight:600;position:sticky;top:0}.year .cell{background:var(--surface);height:22px;color:var(--text-muted);text-align:left;white-space:nowrap;padding:0 4px;position:relative}.year .cell .dn{font-variant-numeric:tabular-nums;color:var(--text);margin-right:5px}.year .cell .wd{font-size:11px}.year .cell.weekend{background:var(--weekend)}.year .cell.weekend .wd{color:var(--text)}.year .cell.school{background:#2dd4bf2e}.year .cell.holiday{background:#f8717126}.year .cell.holiday .dn,.year .cell.holiday .wd{color:#fca5a5;font-weight:600}.year .cell.empty{background:0 0;border-color:#0000}.year .cell.clickable{cursor:pointer}.year .cell.clickable:hover{background:var(--surface-2)}.year .cell.highlight{outline:2px solid var(--today);outline-offset:-2px}.year .cell.highlight .wd{color:var(--text);font-weight:700}.year .cell.selected{outline:2px solid var(--accent);outline-offset:-2px;background:var(--surface-2)}.year .cell .dn,.year .cell .wd,.year .cell .icons,.year .cell .kw{z-index:1;position:relative}.year .cell .icons{letter-spacing:1px;margin-left:5px;font-size:10px}.year .cell .icons .more{color:var(--text-muted);letter-spacing:0}.year .cell .kw{color:var(--accent);opacity:.85;font-size:8px;line-height:1;position:absolute;top:1px;right:2px}.month{width:100%}.month-head,.month-grid{grid-template-columns:repeat(7,1fr);display:grid}.month-head .mhd{background:var(--surface-2);border:1px solid var(--border);padding:6px 8px;font-size:.85rem;font-weight:600}.month-grid .mcell{border:1px solid var(--border);background:var(--surface);cursor:pointer;min-height:96px;padding:4px 5px;position:relative;overflow:hidden}.month-grid .mcell:hover{background:var(--surface-2)}.month-grid .mcell.weekend{background:var(--weekend)}.month-grid .mcell.school{background:#2dd4bf2e}.month-grid .mcell.holiday{background:#f8717126}.month-grid .mcell.holiday .mnum{color:#fca5a5}.month-grid .mholiday{z-index:1;color:#fca5a5;white-space:nowrap;text-overflow:ellipsis;margin-bottom:2px;font-size:.68rem;position:relative;overflow:hidden}.month-grid .mcell.empty{cursor:default;background:0 0}.month-grid .mcell.highlight{outline:2px solid var(--today);outline-offset:-2px}.month-grid .mcell.selected{outline:2px solid var(--accent);outline-offset:-2px}.month-grid .mnum,.month-grid .mevents{z-index:1;position:relative}.month-grid .mnum{font-variant-numeric:tabular-nums;color:var(--text);margin-bottom:2px;font-size:.85rem}.month-grid .mevents{flex-direction:column;gap:2px;display:flex}.month-grid .mev{background:var(--surface-2);white-space:nowrap;text-overflow:ellipsis;border-radius:4px;align-items:center;gap:4px;padding:1px 4px;font-size:.72rem;display:flex;overflow:hidden}.month-grid .mev-time{color:var(--text-muted);font-variant-numeric:tabular-nums}.month-grid .mev-title{text-overflow:ellipsis;flex:1;overflow:hidden}.month-grid .mev-who{text-transform:lowercase;font-weight:700}.month-grid .mev-more{color:var(--text-muted);padding-left:4px;font-size:.7rem}.panel{background:var(--surface);border-left:1px solid var(--border);z-index:10;width:340px;max-width:90vw;height:100vh;padding:1rem 1.2rem;position:fixed;top:0;right:0;overflow-y:auto;box-shadow:-8px 0 24px #0006}.panel-head{justify-content:space-between;align-items:center;display:flex}.panel-head h2{margin:0;font-size:1rem}.panel .close{color:var(--text-muted);cursor:pointer;background:0 0;border:none;font-size:1.5rem;line-height:1}.panel .close:hover{color:var(--text)}.panel form{border-top:1px solid var(--border);flex-direction:column;gap:.7rem;margin-top:1rem;padding-top:1rem;display:flex}.panel form h3{margin:0;font-size:.95rem}.panel label{color:var(--text-muted);flex-direction:column;gap:3px;font-size:.8rem;display:flex}.panel .row{gap:.6rem;display:flex}.panel .row label{flex:1}.panel input,.panel select,.panel textarea{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;padding:.4rem .5rem}.panel input:focus,.panel select:focus,.panel textarea:focus{border-color:var(--accent);outline:none}.form-actions{border:none;justify-content:flex-end;gap:.5rem;margin-top:.3rem;padding:0;display:flex}.form-actions button{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit;cursor:pointer;padding:.45rem 1rem}.form-actions .primary{background:var(--accent);border-color:var(--accent);color:#0b1220;font-weight:600}.form-actions button:disabled{opacity:.5;cursor:not-allowed}.panel .del{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;padding:0 8px}.panel .del:hover{border-color:#f87171}.event-list{flex-direction:column;gap:4px;margin:1rem 0;padding:0;list-style:none;display:flex}.event-list li{align-items:stretch;gap:4px;display:flex}.event-list li.active .ev{border-color:var(--accent)}.event-list .ev{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);text-align:left;cursor:pointer;flex:1;align-items:center;gap:8px;padding:6px 8px;display:flex}.event-list .ev:hover{border-color:var(--accent)}.event-list .ev-time{color:var(--text-muted);font-variant-numeric:tabular-nums;margin-right:6px}.event-list .ev-span{color:var(--text-muted);font-size:.85em}.event-list .ev-who{text-transform:lowercase;font-weight:700}.marker-list{flex-direction:column;gap:4px;margin:1rem 0;padding:0;list-style:none;display:flex}.marker-list li{align-items:stretch;gap:4px;display:flex}.marker-list li.active .mk{border-color:var(--accent)}.marker-list .mk{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);text-align:left;cursor:pointer;flex:1;align-items:center;gap:8px;padding:6px 8px;display:flex}.marker-list .mk:hover{border-color:var(--accent)}.marker-list .mk-swatch{border-radius:3px;flex-shrink:0;width:14px;height:14px}.marker-list .mk-text{flex-direction:column;display:flex}.marker-list .mk-range{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:.78em}.marker-panel .field{flex-direction:column;gap:3px;display:flex}.marker-panel .field-label{color:var(--text-muted);font-size:.8rem}.color-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.color-row .swatch{cursor:pointer;border:2px solid #0000;border-radius:4px;width:22px;height:22px;padding:0}.color-row .swatch.sel{border-color:var(--text)}.color-row input[type=color]{border-radius:4px;width:30px;height:26px;padding:0}.search{position:relative}.search input[type=search]{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit;width:180px;padding:.35rem .7rem}.search input[type=search]:focus{border-color:var(--accent);outline:none}.search-results{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);z-index:20;min-width:260px;max-height:320px;margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 8px 24px #0006}.search-results .empty{color:var(--text-muted);padding:8px;font-size:.85rem}.search-results button{width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:8px;padding:6px 8px;display:flex}.search-results button:hover{background:var(--surface-2)}.search-results .r-title{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.search-results .r-date{color:var(--text-muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.8rem}.login-screen{justify-content:center;align-items:center;min-height:100svh;padding:1.5rem;display:flex}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;flex-direction:column;gap:.8rem;width:320px;max-width:100%;padding:1.8rem 1.6rem;display:flex;box-shadow:0 12px 32px #0006}.login-card h1{text-align:center;margin:0}.login-card .sub{text-align:center;color:var(--text-muted);margin:0 0 .5rem}.login-card label{color:var(--text-muted);flex-direction:column;gap:4px;font-size:.85rem;display:flex}.login-card input{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit;padding:.5rem .6rem}.login-card input:focus{border-color:var(--accent);outline:none}.login-card .error{color:#f87171;margin:0;font-size:.85rem}.login-card .primary{background:var(--accent);border:1px solid var(--accent);color:#0b1220;border-radius:var(--radius);font-weight:600;font:inherit;cursor:pointer;margin-top:.4rem;padding:.55rem}.login-card .primary:disabled{opacity:.6;cursor:not-allowed}.cat{z-index:5;pointer-events:none;will-change:transform;position:absolute;top:-65px;left:0}.cat-sprite{width:77px;height:77px;image-rendering:pixelated;pointer-events:none;background-repeat:no-repeat;background-size:auto 77px}.cat-sprite.anim-walk{background-image:url(/cat/OrangeTabby-Run.png);animation:.7s steps(6,end) infinite spr-walk}@keyframes spr-walk{0%{background-position-x:0}to{background-position-x:-462px}}.cat-sprite.anim-sit{background-image:url(/cat/OrangeTabby-Sit.png);animation:1.4s steps(7,end) infinite spr-sit}@keyframes spr-sit{0%{background-position-x:0}to{background-position-x:-539px}}.cat-sprite.anim-idle{background-image:url(/cat/OrangeTabby-Idle.png);animation:1.6s steps(12,end) infinite spr-idle}@keyframes spr-idle{0%{background-position-x:0}to{background-position-x:-924px}}.cat-sprite.anim-sleep{background-image:url(/cat/OrangeTabby-Sleep.png);animation:1.8s steps(4,end) infinite spr-sleep}@keyframes spr-sleep{0%{background-position-x:0}to{background-position-x:-308px}}.cat-sprite.anim-meow{background-image:url(/cat/OrangeTabby-Meow.png);animation:.9s steps(7,end) infinite spr-meow}@keyframes spr-meow{0%{background-position-x:0}to{background-position-x:-539px}}.cat.reduced .cat-sprite{animation:none!important}.cat-hit{pointer-events:auto;cursor:pointer;width:46px;height:42px;position:absolute;top:32px;left:16px}.miau{background:var(--surface-2);color:var(--text);border:1px solid var(--border);white-space:nowrap;opacity:0;pointer-events:none;border-radius:10px;padding:2px 8px;font-size:12px;font-weight:600;position:absolute;top:6px;left:64px}.miau.show{animation:1.1s forwards miau-pop}@keyframes miau-pop{0%{opacity:0;transform:translateY(4px)scale(.8)}20%{opacity:1;transform:translateY(0)scale(1)}80%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-4px)scale(.95)}}.app{max-width:1400px;margin:0 auto;padding:1.5rem}.view-area{position:relative}.muted{color:var(--text-muted)}
