:root{--ink:#1b1b1f;--muted:#6d6d75;--faint:#9a9aa2;--line:#c6c6cd;--line-soft:#e3e3e8;--bg:#f2f2f5;--cell:#fff;--band:#ececed;--today:#fff8e1;--holiday:#fbe9e9;--eve:#fdf4f2;--holiday-ink:#a8342c;--sabbat-ink:#6b5b95;--mark:#ffd75e;--band-soft:#f4f4f7;--fs:clamp(6.5px, min(.75vw + 4.2px, 1.5vh + 1.2px), 15px);--fs-hd:calc(var(--fs) * .95);--gut:clamp(6px, .4vw + 4px, 9px);--bar:clamp(2px, .2vw, 3px);--head:calc(var(--bar) * 2.8);--hw:calc(var(--bar) * 1.7)}*{box-sizing:border-box}html,body{overscroll-behavior:none;height:100%;margin:0;overflow:hidden}body{color:var(--ink);background:var(--bg);-webkit-text-size-adjust:100%;font:15px/1.35 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}button{font:inherit;color:inherit}.app{height:100dvh;padding:0 0 env(safe-area-inset-bottom);flex-direction:column;display:flex}.topbar{padding:8px 10px;padding-top:calc(8px + env(safe-area-inset-top));border-bottom:1px solid var(--line-soft);background:#fff;flex:none;align-items:center;gap:8px;display:flex}.btn.today{margin-left:auto}.nav{gap:5px;display:flex}.btn{border:1px solid var(--line);cursor:pointer;min-width:36px;min-height:36px;color:inherit;background:#fff;border-radius:8px;justify-content:center;align-items:center;padding:6px 10px;font-size:14px;text-decoration:none;display:inline-flex}.btn:active{background:#f0f0f3}.btn:disabled{cursor:default}.btn.primary{background:var(--ink);color:#fff;border-color:var(--ink)}.btn.me{border-radius:999px;font-weight:600}@media (max-width:520px){.btn{padding:6px 8px;font-size:13px}}@media (max-width:640px){.topbar{display:none}.app{padding-top:env(safe-area-inset-top)}}.deck{scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;touch-action:pan-x;flex:1;min-height:0;position:relative;overflow:auto hidden}.deck::-webkit-scrollbar{display:none}.track{grid-auto-rows:100%;grid-auto-columns:100%;grid-auto-flow:column;height:100%;display:grid}.pane{scroll-snap-align:start;min-width:0;height:100%;position:relative}.pane:before{content:"";background:var(--line);width:1px;position:absolute;top:0;bottom:0;left:-1px}.weekgrid{grid-template-columns:clamp(46px, 6.5vw, 104px) repeat(var(--cols,5), minmax(0, 1fr));background:var(--line);border-top:1px solid var(--line);border-bottom:1px solid var(--line);grid-template-rows:auto repeat(7,minmax(0,1fr));gap:1px;height:100%;min-height:0;display:grid}.weekgrid.oneday{grid-template-rows:minmax(38px,auto) auto minmax(0,1fr) auto;grid-template-columns:repeat(var(--cols,5), minmax(0, 1fr));transition:transform .24s cubic-bezier(.2,.8,.2,1);animation:.24s cubic-bezier(.2,.8,.2,1) dayzoom}@keyframes dayzoom{0%{opacity:0;transform:scale(.965)translateY(10px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.weekgrid.oneday{animation:none}}.dayhead{touch-action:pan-x;-webkit-user-select:none;user-select:none;cursor:grab;background:#dedee2;justify-content:space-between;align-items:center;gap:10px;padding:3px 4px 3px 8px;display:flex;overflow:hidden}.dayhead .zoomout{appearance:none;border:1px solid var(--line);width:34px;height:32px;font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#fff;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0;font-size:17px;line-height:1;display:inline-flex}.dayhead:active{cursor:grabbing}.dayhead .zoomout{cursor:pointer}.dayhead .zoomout:active{background:#f0f0f3}.dayhead .date{font-size:calc(var(--fs-hd) * 1.35);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:.35em;min-width:0;font-weight:700;display:inline-flex;overflow:hidden}.dayinfo{background:var(--band-soft);padding:8px 10px calc(8px + env(safe-area-inset-bottom));flex-wrap:wrap;align-items:flex-start;gap:6px 18px;max-height:32vh;font-size:13px;line-height:1.4;display:flex;overflow-y:auto}.dayinfo .part{flex:240px;min-width:0}.dayinfo b{font-size:14px}.dayinfo .when{color:var(--muted);margin-left:.5em;font-size:12px}.dayinfo p{max-width:62ch;margin:3px 0 0}.dayinfo p.fine{color:var(--muted);font-size:12px}.weekgrid.current{touch-action:pan-x;-webkit-user-select:none;user-select:none}.weekgrid:not(.current){pointer-events:none}.hd{text-align:center;font-size:var(--fs-hd);letter-spacing:.06em;text-transform:uppercase;background:#dedee2;justify-content:center;align-items:center;padding:4px 3px;font-weight:700;display:flex;overflow:hidden}button.hd.wknum{cursor:pointer;-webkit-touch-callout:none;border:0;gap:.3em;position:relative}@media (max-width:640px){button.hd.wknum{overflow:visible}button.hd.wknum:after{content:"";height:28px;position:absolute;top:100%;left:0;right:0}}button.hd.wknum:active{background:#d2d2d8}.hd.wknum .ago{color:var(--muted);font-weight:400}.hd.wknum.zoomout{letter-spacing:.03em;gap:.4em}.hd.wknum.zoomout .x{font-size:1.25em;font-weight:400;line-height:1}.daycell{appearance:none;-webkit-tap-highlight-color:transparent;cursor:pointer;color:inherit;white-space:normal;background:var(--band);font-size:var(--fs-hd);letter-spacing:.02em;text-transform:uppercase;border:0;border-radius:0;flex-direction:column;justify-content:center;align-items:center;padding:3px 4px;font-weight:700;display:flex;overflow:hidden}.weekgrid.oneday .daycell{justify-content:flex-start;gap:1px;padding-top:7px}.daycell:focus,.daycell:focus-visible{outline:none}.daycell:disabled{cursor:default;color:inherit;opacity:1}.daycell small{letter-spacing:0;color:var(--muted);text-transform:none;font-weight:500;font-size:var(--fs)}.daycell .moon{vertical-align:baseline;margin-left:.3em;font-size:.85em}.daycell .moon.disc{vertical-align:middle;border:1px solid var(--muted);border-radius:50%;width:.72em;height:.72em;font-size:1em;display:inline-block}.daycell .moon.disc.is-full{background:#fff}.daycell .moon.disc.is-new{background:var(--muted)}.daycell .moon.disc.is-first{background:linear-gradient(to right, var(--muted) 50%, #fff 50%)}.daycell .moon.disc.is-last{background:linear-gradient(to right, #fff 50%, var(--muted) 50%)}.daycell .sab,.daycell .trad{font-weight:500;font-size:calc(var(--fs) * .82);margin-top:calc(var(--fs) * .35);letter-spacing:0;text-transform:none;text-align:center;-webkit-hyphens:auto;hyphens:auto;overflow-wrap:anywhere;max-width:100%;line-height:1.05}.daycell .sab{color:var(--sabbat-ink)}.daycell .trad{color:var(--muted)}.daycell .hol{font-weight:500;font-size:calc(var(--fs) * .82);margin-top:calc(var(--fs) * .5);letter-spacing:0;text-transform:none;text-align:center;color:var(--holiday-ink);-webkit-hyphens:auto;hyphens:auto;overflow-wrap:anywhere;max-width:100%;line-height:1.05}.daycell.dense .hol,.daycell.dense .sab,.daycell.dense .trad{font-size:calc(var(--fs) * .72);margin-top:calc(var(--fs) * .14);line-height:1}.cell{background:var(--cell);cursor:pointer;padding:3px var(--gut);position:relative;overflow:hidden}.cell.row-alt{background:var(--band-soft)}.daycell.row-alt{background:#e5e5e8}.cell.is-holiday,.daycell.is-holiday{background:var(--holiday)}.daycell.is-eve{background:var(--eve)}.cell.selecting{background:color-mix(in srgb, var(--pc) 14%, #fff);box-shadow:inset 3px 0 0 var(--pc)}.cell.is-today,.daycell.is-today{background:var(--today)}.stack{flex-direction:column;gap:2px;height:100%;display:flex}.cell.more:after{content:"⋯";color:var(--faint);font-size:var(--fs);pointer-events:none;line-height:1;position:absolute;bottom:-2px;right:2px}.cell .add{cursor:pointer;color:var(--faint);opacity:0;line-height:1;font-size:var(--fs);background:0 0;border:0;padding:2px 4px;position:absolute;top:0;right:2px}.cell .add:focus,.cell .add:focus-visible{opacity:1;outline:none}@media (hover:hover) and (pointer:fine){.cell:hover .add{opacity:1}}@media (hover:none){.cell .add{display:none}}.free{color:var(--faint);font-size:var(--fs)}.item{text-align:left;cursor:pointer;border:0;border-left:var(--bar) solid var(--pc,var(--muted));width:100%;font-size:var(--fs);background:0 0;border-radius:3px;flex-wrap:wrap;flex:none;align-items:baseline;gap:0 4px;padding:1px 3px 1px 4px;line-height:1.22;display:flex}.item .t{overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;font-weight:600}.item .tm{color:var(--muted);white-space:nowrap;font-size:.92em}.item .rec{color:var(--faint);font-size:.8em}.item .nt{color:var(--muted);overflow-wrap:break-word;flex-basis:100%;font-size:.9em;font-weight:400}.weekgrid.no-bars .item{border-left-width:0;padding-left:1px}.item.k-note{border-left-style:dotted}.item.k-note .t{font-weight:500}.item.hl{background:var(--mark);box-shadow:0 0 0 1px var(--mark);-webkit-print-color-adjust:exact;print-color-adjust:exact;padding-right:4px}.item.hl .t{font-weight:700}.item.hl .tm,.item.hl .nt,.item.hl .rec{color:var(--ink)}.weekgrid.no-bars .item.hl{padding-left:3px}.item.k-span{box-shadow:inset 0 0 0 1px var(--line-soft);position:relative}.item:active{filter:brightness(.95)}.item.k-span:before,.item.k-span:after{content:"";background:var(--pc);left:calc(var(--gut) * -.58 - var(--bar));position:absolute}.item.k-span:before{top:calc(50% - var(--bar) / 2);height:var(--bar);width:calc(var(--gut) * .58 + var(--bar))}.item.k-span:after{width:var(--bar);height:100vh;top:50%}.weekgrid.no-bars .item.k-span:before,.weekgrid.no-bars .item.k-span:after{left:calc(var(--gut) * -.58)}.weekgrid.no-bars .item.k-span:before{width:calc(var(--gut) * .58)}.railthru,.railend{width:var(--bar);background:var(--pc);font-size:var(--fs);margin-left:calc(var(--gut) * .42);pointer-events:none;z-index:4;justify-self:start;position:relative}.railthru{margin-top:-1px;margin-bottom:-1px}.railend{align-self:start;height:calc(.25em + 3px);margin-top:-1px}.railend:after{content:"";left:50%;bottom:calc(var(--head) * -1);border-left:var(--hw) solid transparent;border-right:var(--hw) solid transparent;border-top:var(--head) solid var(--pc);position:absolute;transform:translate(-50%)}.backdrop{opacity:0;pointer-events:none;z-index:40;background:#00000059;transition:opacity .2s;position:fixed;inset:0}.backdrop.on{opacity:1;pointer-events:auto}.sheet{z-index:50;padding:16px 18px calc(20px + env(safe-area-inset-bottom));overscroll-behavior:contain;background:#fff;border-radius:16px 16px 0 0;max-width:560px;max-height:82dvh;margin:0 auto;font-size:15px;transition:transform .24s cubic-bezier(.2,.8,.2,1);position:fixed;bottom:0;left:0;right:0;overflow:hidden auto;transform:translateY(110%);box-shadow:0 -8px 30px #0000002e}@media (max-width:640px){.sheet{max-height:none;padding-top:calc(14px + env(safe-area-inset-top));border-radius:0;top:0}}.sheet.on{transform:none}.griparea{-webkit-user-select:none;user-select:none;touch-action:none;cursor:grab;justify-content:center;margin:-8px -18px 4px;padding:4px 0 12px;display:flex}.griparea:active{cursor:grabbing}.sheet .grip{background:var(--line);border-radius:2px;width:38px;height:4px}.sheet h3{margin:0 0 2px;font-size:19px}.sheet>h3,.sheet>.sub{touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab}.sheet>h3:active,.sheet>.sub:active{cursor:grabbing}.sheet .sub{color:var(--muted);margin-bottom:12px;font-size:14px}.sheet h3.day:first-letter{text-transform:uppercase}.lorepart{margin-bottom:14px}.lorepart h4{margin:0 0 2px;font-size:16px}.lorepart .sub{margin-bottom:6px}.sheet p.lore{color:var(--ink);max-width:62ch;margin:0 0 10px;line-height:1.45}.sheet p.lore.fine{color:var(--muted);font-size:13px;line-height:1.4}.meta{flex-wrap:wrap;gap:6px;margin-bottom:14px;display:flex}.tag{border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:3px 9px;font-size:12px}.tag.solid{background:var(--pc);border-color:var(--pc);color:#fff}.note{background:#f6f6f9;border-radius:8px;margin-bottom:14px;padding:9px 11px;font-size:14px}.rows{border-top:1px solid var(--line-soft);margin:0 0 14px}.row{text-align:left;cursor:pointer;border:0;border-bottom:1px solid var(--line-soft);background:0 0;align-items:baseline;gap:8px;width:100%;padding:10px 2px;font-size:15px;display:flex}.row .t{font-weight:600}.row .tm{color:var(--muted);white-space:nowrap;margin-left:auto;font-size:14px}.form{flex-direction:column;gap:11px;margin-bottom:16px;display:flex}.form label{color:var(--muted);flex-direction:column;gap:5px;font-size:13px;display:flex}.form .lbl{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.form label.check{flex-direction:row;align-items:center;gap:8px}.form .optional{min-width:0;position:relative}.form .clear{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:12.5px;line-height:1.4;text-decoration:underline;position:absolute;top:0;right:0}.form .repeat{flex-direction:column;gap:5px;min-width:0;display:flex}.form .times{color:var(--muted);margin:0;font-size:13px}.form .hintlabel{color:var(--faint);font-size:12px}.form .req{color:#a3372c;font-weight:700}.form input,.form select,.form textarea{font:inherit;border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:10px;width:100%;min-width:0;padding:10px 11px;font-size:16px}.form textarea{resize:vertical;min-height:56px;line-height:1.35}.form input:focus-visible,.form select:focus-visible,.form textarea:focus-visible{outline:2px solid var(--ink);outline-offset:-1px}.two{grid-template-columns:1fr 1fr;gap:10px;display:grid}.two>*{min-width:0}.form .control{border:1px solid var(--line);background:#fff;border-radius:10px;padding:10px 11px;display:block;overflow:hidden}.form .control:focus-within{outline:2px solid var(--ink);outline-offset:-1px}.form .control input{appearance:none;background:0 0;border:0;border-radius:0;width:100%;min-width:0;min-height:22px;padding:0;line-height:1.25}.form .control input:focus-visible{outline:none}.seg{gap:6px;display:flex}.seg button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:9px;flex:1;min-height:40px;padding:9px 4px;font-size:13px}.seg button:focus,.seg button:focus-visible{outline:none}.seg button.on{background:var(--ink);color:#fff;border-color:var(--ink)}.switch{cursor:pointer;border:1px solid var(--line-soft);border-radius:10px;align-items:flex-start;gap:10px;margin-bottom:14px;padding:11px 12px;font-size:14px;display:flex}.switch input{width:20px;height:20px;accent-color:var(--ink);flex:none;margin:1px 0 0}.switch small{color:var(--muted);margin-top:2px;font-size:12.5px;display:block}.acts{gap:8px;display:flex}.acts.stacked{flex-direction:column}.acts .btn{flex:1}.sheet .acts .btn{min-height:44px;padding:10px 12px}.dim{opacity:.45}.btn.danger{color:#fff;background:#8b2018;border-color:#8b2018}.auth{justify-content:center;align-items:center;height:100dvh;padding:24px;display:flex}.card{border:1px solid var(--line-soft);padding:26px 24px calc(24px + env(safe-area-inset-bottom));background:#fff;border-radius:16px;width:100%;max-width:380px;box-shadow:0 10px 40px #0000000f}.card h1{margin:0 0 4px;font-size:22px}.card p{color:var(--muted);margin:0 0 18px;font-size:14px;line-height:1.45}.card .btn{width:100%;min-height:46px;margin-bottom:10px}.field{flex-direction:column;gap:6px;margin-bottom:12px;display:flex}.field label{color:var(--muted);font-size:13px}.field input{font:inherit;border:1px solid var(--line);letter-spacing:.12em;text-transform:uppercase;border-radius:10px;padding:11px 12px}.form label.check input{flex:none;width:auto;margin:0}.launch{background:var(--bg);flex-direction:column;justify-content:center;align-items:center;gap:14px;height:100%;display:flex}.launch img{width:132px;height:132px}.launch p{letter-spacing:.02em;color:var(--muted);margin:0;font-size:15px}.err{color:#8b2018;background:#fdeceb;border-radius:8px;margin-bottom:12px;padding:9px 11px;font-size:14px}.ok{color:#1d5b2c;background:#eaf5ec;border-radius:8px;margin-bottom:12px;padding:9px 11px;font-size:14px}.link{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:6px 0;font-size:13px;text-decoration:underline}@page{size:A4 landscape;margin:9mm}@media print{:root{--fs:9pt;--fs-hd:8.4pt;--gut:3mm;--bar:2pt}html,body{background:#fff;height:auto;overflow:visible}.app{height:auto;display:block}.topbar,.sheet,.backdrop{display:none!important}.deck{scroll-snap-type:none;height:192mm;overflow:visible}.track{width:auto;display:block}.pane:not(.current),.pane:before{display:none}.weekgrid{border:1px solid var(--line);-webkit-print-color-adjust:exact;print-color-adjust:exact;grid-template-rows:auto repeat(7,minmax(23mm,auto));height:100%}.cell.more:after,.cell .add,.item .rec{display:none}.cell.is-today:not(.is-holiday),.daycell.is-today:not(.is-holiday):not(.is-eve){background:var(--band)}}.admin{overscroll-behavior:contain;height:100dvh;padding:0 16px calc(32px + env(safe-area-inset-bottom));background:var(--bg);overflow:auto}.adminbar{padding:12px 0;padding-top:calc(12px + env(safe-area-inset-top));align-items:center;gap:12px;display:flex}.adminbar h1{margin:0;font-size:19px}.panel{border:1px solid var(--line-soft);background:#fff;border-radius:14px;max-width:560px;margin:0 auto 18px;padding:16px 16px 8px}.panel h2{margin:0 0 4px;font-size:16px}.panel .lead{color:var(--muted);margin:0 0 14px;font-size:13.5px;line-height:1.45}.people{margin:0;padding:0;list-style:none}.people li{border-top:1px solid var(--line-soft);align-items:center;gap:10px;padding:10px 0;display:flex}.people li:first-child{border-top:0}.dot{background:var(--pc);border-radius:50%;flex:none;width:10px;height:10px}.who{flex-direction:column;min-width:0;margin-right:auto;display:flex}.who small{color:var(--muted);font-size:12.5px}.codebox{align-items:center;gap:8px;display:flex}.code{letter-spacing:.06em;border:1px dashed var(--line);cursor:pointer;background:#fbfbfc;border-radius:8px;padding:7px 9px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px}.btn.small{min-width:0;min-height:34px;padding:6px 10px;font-size:13px}.people li{flex-wrap:wrap}.keys{border-left:2px solid var(--line-soft);flex-basis:100%;margin:6px 0 2px;padding:0;list-style:none}.keys li{border-top:0;align-items:center;gap:8px;padding:5px 0 5px 10px;font-size:13.5px;display:flex}.keyname{margin-right:auto}.keyname small{color:var(--muted)}.warn{color:#8b2018;font-size:12.5px}
