:root{--bg:#f5f5f1;--ink:#14130f;--ink-2:#4a4944;--ink-3:#80807a;--line:#e6e4dc;--paper:#ffffff;--d-mo:#ef4f48;--d-di:#f59332;--d-mi:#efc23c;--d-do:#54bd6c;--d-fr:#3f93d8;--t-mo:#fde9e6;--t-di:#fdedda;--t-mi:#fbf2cd;--t-do:#def0e1;--t-fr:#def0fa;--r:16px;--r-sm:12px;--font-display:"Space Grotesk",system-ui,sans-serif;--font-body:"Inter",system-ui,sans-serif;--shadow-card:0 1px 0 #fff inset,0 1px 2px rgba(20,15,5,0.04),0 6px 18px -10px rgba(20,15,5,0.12)}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:var(--font-body)}body{min-height:100vh;-webkit-font-smoothing:antialiased}.app{max-width:1480px;margin:0 auto;padding:28px 32px 80px}.topbar{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:24px}.brand{display:flex;flex-direction:column;gap:6px}.brand-eyebrow{font-family:var(--font-body);font-weight:600;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}.brand h1{font-family:var(--font-display);font-weight:600;font-size:40px;letter-spacing:-.025em;line-height:1;margin:0}.brand h1 .accent{color:var(--d-mi)}.status{display:flex;align-items:center;gap:18px}.status .now{text-align:right}.status .now-time{font-family:var(--font-display);font-weight:500;font-size:38px;letter-spacing:-.03em;line-height:1;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.status .now-date{margin-top:4px;font-size:12px;color:var(--ink-2);font-weight:600;text-transform:capitalize;letter-spacing:-.005em}.fc-row{display:flex;gap:6px}.fc-pill{background:var(--paper);border:1px solid var(--line);border-radius:999px;padding:6px 12px 6px 6px;display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.fc-pill .fc-icon{width:26px;height:26px;border-radius:999px;background:#f6f4ec;display:grid;place-items:center;font-size:16px}.fc-pill .fc-day{font-size:10.5px;color:var(--ink-3);font-weight:700;text-transform:uppercase;letter-spacing:.08em}.fc-pill .fc-temp{color:var(--ink)}.week{display:grid;grid-template-columns:repeat(var(--day-count,5),minmax(0,1fr));grid-gap:14px;gap:14px}.day{background:var(--day-tint);border:1px solid transparent;border-radius:var(--r);display:flex;flex-direction:column;min-height:600px;position:relative;transition:transform .2s ease}.day-today{box-shadow:0 0 0 2px var(--day-color),0 14px 32px -16px rgba(20,15,5,.2)}.day-head{padding:16px 18px 12px;display:flex;align-items:baseline;justify-content:space-between;gap:8px}.day-name{font-family:var(--font-display);font-weight:600;font-size:20px;letter-spacing:-.02em;line-height:1;color:var(--day-color)}.day-meta{font-size:11px;font-weight:700;color:var(--ink-2);letter-spacing:.03em;text-transform:uppercase;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.day-meta .today-dot{display:inline-block;width:6px;height:6px;border-radius:999px;background:var(--day-color);margin-right:6px;transform:translateY(-1px)}.day-body{flex:1 1;padding:6px 12px 14px;display:flex;flex-direction:column;gap:10px}.event{background:var(--paper);border-radius:var(--r-sm);padding:12px;box-shadow:var(--shadow-card);display:grid;grid-template-columns:44px 1fr;grid-gap:10px;gap:10px;align-items:start;position:relative;transition:transform .2s ease,box-shadow .2s ease}.event-past{opacity:.45}.event-now{box-shadow:0 0 0 3px var(--highlight,var(--ink)),0 14px 32px -14px rgba(20,15,5,.3);transform:translateY(-1px);z-index:2}.event-next{outline:2px dashed var(--highlight,var(--ink));outline-offset:1px}.app-fit{height:100vh;box-sizing:border-box;display:flex;flex-direction:column;padding-bottom:28px}.app-fit .week{flex:1 1;min-height:0}.app-fit .day{min-height:0}.app-fit .day-body{min-height:0;overflow:hidden;padding-top:12px}.tile-grow{flex:1 1;display:flex;flex-direction:column}.tile-fade{animation:tile-fade .8s ease}@keyframes tile-fade{0%{opacity:0;transform:translateY(6px)}}.page-dots{display:flex;justify-content:center;align-items:center;gap:6px;height:7px;padding:0 0 10px;flex-shrink:0}.page-dots span{width:7px;height:7px;border-radius:999px;background:var(--day-color);opacity:.25;transition:opacity .6s ease}.page-dots span.on{opacity:.9}.participant-names{margin-top:4px;font-size:11.5px;line-height:1.3;color:var(--ink-2);font-weight:600}.event-icon{width:44px;height:44px;border-radius:12px;background:var(--ev-color,#f6f4ec);display:grid;place-items:center;font-size:26px;line-height:1;overflow:hidden}.event-icon img{width:76%;height:76%;object-fit:contain}.event-body{display:flex;flex-direction:column;gap:2px;min-width:0}.event-time{font-family:var(--font-display);font-weight:500;font-size:11px;color:var(--ink-3);letter-spacing:.04em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-transform:uppercase}.event-title{font-family:var(--font-display);font-weight:600;font-size:15px;line-height:1.2;letter-spacing:-.015em;color:var(--ink);word-break:normal;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;margin-top:1px}.event-sub{margin-top:4px;color:var(--ink-2);font-size:11px;font-weight:500;line-height:1.35}.event-tag{display:inline-block;margin-top:6px;padding:2px 8px;border-radius:999px;background:var(--tag-color,#888);color:#fff;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.participants{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:8px}.participants-stacked{display:flex;flex-wrap:nowrap;gap:0}.av-mini{width:24px;height:24px;border-radius:999px;display:grid;place-items:center;font-size:14px;line-height:1;background:var(--kid-color,#ccc);color:#fff;border:2px solid var(--paper);position:relative;overflow:hidden;transition:transform .15s ease}.av-mini img{width:72%;height:72%;object-fit:contain}.participants-stacked .av-mini{margin-left:-7px}.participants-stacked .av-mini:first-child{margin-left:0}.av-more{background:var(--ink);color:#fff;font-size:10px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.now-badge{position:absolute;top:-14px;right:-8px;z-index:3;pointer-events:none;font-size:28px;line-height:1;filter:drop-shadow(0 4px 6px rgba(0,0,0,.18))}.now-clock{display:inline-block;animation:clockShake .55s ease-in-out infinite;transform-origin:50% 90%}@keyframes clockShake{0%,to{transform:rotate(-14deg)}50%{transform:rotate(14deg)}}.next-badge{position:absolute;top:-10px;right:-4px;font-size:18px;opacity:.8;pointer-events:none;z-index:3;filter:drop-shadow(0 2px 4px rgba(0,0,0,.12))}.event-birthday{position:relative;z-index:5}.confetti{position:absolute;inset:-50px;pointer-events:none;overflow:visible;z-index:1}.cf-bit{position:absolute;left:50%;top:50%;width:8px;height:12px;border-radius:2px;transform:translate(-50%,-50%) scale(0);animation:cfBurst 2s ease-out infinite;opacity:0}.cf-bit:nth-child(3n){width:7px;height:7px;border-radius:999px}.cf-bit:nth-child(4n){width:10px;height:4px;border-radius:1px}.cf-bit:nth-child(2n){animation-delay:.15s}.cf-bit:nth-child(3n){animation-delay:.35s}.cf-bit:nth-child(5n){animation-delay:.55s}.cf-bit:nth-child(7n){animation-delay:.75s}@keyframes cfBurst{0%{transform:translate(-50%,-50%) scale(0) rotate(0deg);opacity:0}8%{transform:translate(-50%,-50%) scale(1) rotate(0deg);opacity:1}to{transform:translate(calc(-50% + var(--dx, 0px)),calc(-50% + var(--dy, 0px))) scale(.7) rotate(var(--rot,1turn));opacity:0}}.event-birthday>.event-body,.event-birthday>.event-icon,.event-birthday>.now-badge{position:relative;z-index:2}.freeday{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px 16px;text-align:center}.freeday-balloon{font-size:56px;display:inline-block;animation:balloonFloat 3.4s ease-in-out infinite;filter:drop-shadow(0 6px 10px rgba(20,15,5,.12))}@keyframes balloonFloat{0%,to{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-10px) rotate(3deg)}}.holiday{background:var(--paper);border-radius:var(--r-sm);padding:18px 14px;box-shadow:var(--shadow-card);display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center}.holiday-icon{font-size:36px;line-height:1}.holiday-name{font-family:var(--font-display);font-weight:600;font-size:15px;letter-spacing:-.015em;color:var(--ink)}.holiday-closed{font-size:11px;color:var(--ink-3);font-weight:600;letter-spacing:.04em;text-transform:uppercase}.freetime{background:linear-gradient(135deg,#fff8e7,var(--paper));border:1.5px dashed #e0c98a;border-radius:var(--r-sm);padding:12px;display:flex;flex-direction:column;gap:8px}.freetime-label{font-family:var(--font-display);font-weight:600;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#b8870b;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.freetime-icons{display:flex;gap:8px;justify-content:center;align-items:center}.freetime-icons img{width:32px;height:32px;object-fit:contain;opacity:.6}.freetime-icons img.freetime-pulse{opacity:1;animation:freetimePulse 2s ease-in-out infinite}@keyframes freetimePulse{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}.offline-icon{width:22px;height:22px;flex:none;color:var(--ink-3)}.offline-icon.warn{color:#b45309}.offline-banner{display:flex;align-items:center;gap:10px;margin:-8px 0 20px;padding:10px 16px;border-radius:var(--r-sm);background:#fef3c7;color:#78350f;font-weight:600;font-size:15px}.app-stale .week{opacity:.22;filter:grayscale(1)}.app-stale .week *,.app-stale .week :after,.app-stale .week :before{animation:none!important}.app-stale .confetti{display:none}.offline-card-wrap{position:fixed;inset:0;display:grid;place-items:center;padding:32px;pointer-events:none}.offline-card{max-width:560px;text-align:center;background:var(--paper);border-radius:var(--r);box-shadow:var(--shadow-card);padding:36px 40px}.offline-card svg{width:140px;height:140px}.offline-card .title{margin:16px 0 10px;font-family:var(--font-display);font-weight:600;font-size:28px;line-height:1.2;letter-spacing:-.02em;color:var(--ink)}.offline-card .hint{font-size:16px;font-weight:600;color:var(--ink-2)}.fps-badge{position:fixed;left:8px;bottom:8px;padding:2px 8px;border-radius:6px;background:rgba(0,0,0,.7);color:#fff;font:600 14px/1.4 monospace;z-index:7}.uc{--cap:10vw;position:fixed;inset:0;z-index:100;display:none;overflow:hidden;pointer-events:none;cursor:none}html[data-kiosk-update] .uc{display:block}.uc-stripes{position:absolute;inset:0;display:flex}.uc-s{flex-grow:0;flex-shrink:0;flex-basis:calc(20% + 1px);margin-right:-1px;height:calc(100% + 2 * var(--cap));margin-top:calc(-1 * var(--cap));border-radius:var(--cap);background:var(--c)}html[data-kiosk-update=closing] .uc-s{animation:uc-drop .7s cubic-bezier(.2,.8,.2,1) calc(var(--i) * 90ms) both}html[data-kiosk-update=opening] .uc-s{animation:uc-leave .65s cubic-bezier(.7,0,.84,0) calc(.38s + var(--i) * 80ms) both}@keyframes uc-drop{0%{transform:translateY(-100%)}}@keyframes uc-leave{to{transform:translateY(100%)}}.uc-badge{position:absolute;left:50%;top:50%;width:280px;height:280px;margin:-140px 0 0 -140px;border-radius:50%;background:var(--paper);display:grid;place-items:center;align-content:center;grid-gap:10px;gap:10px;box-shadow:0 30px 60px -28px rgba(20,15,5,.55)}html[data-kiosk-update=closing] .uc-badge{animation:uc-pop .6s cubic-bezier(.34,1.56,.64,1) .76s both}html[data-kiosk-update=opening] .uc-badge{animation:uc-shrink .38s cubic-bezier(.5,0,.75,0) .3s both}@keyframes uc-pop{0%{transform:scale(.35) rotate(-10deg);opacity:0}}@keyframes uc-shrink{to{transform:scale(.2) rotate(10deg);opacity:0}}.uc-badge:before{content:"";position:absolute;inset:-14px;border-radius:50%;border:6px solid var(--paper);opacity:0;animation:uc-ping 1.4s ease-out 1.36s infinite}html[data-kiosk-update=closed] .uc-badge:before{animation-delay:0s}html[data-kiosk-update=opening] .uc-badge:before{animation:none}@keyframes uc-ping{0%{transform:scale(.92);opacity:.9}to{transform:scale(1.45);opacity:0}}.uc-star{width:118px;height:118px;-webkit-clip-path:polygon(50% 0,61% 39%,100% 50%,61% 61%,50% 100%,39% 61%,0 50%,39% 39%);clip-path:polygon(50% 0,61% 39%,100% 50%,61% 61%,50% 100%,39% 61%,0 50%,39% 39%);background:conic-gradient(var(--d-mo),var(--d-di),var(--d-mi),var(--d-do),var(--d-fr),var(--d-mo));animation:uc-twinkle 1.6s ease-in-out infinite}@keyframes uc-twinkle{0%,to{transform:rotate(-8deg) scale(.94)}50%{transform:rotate(8deg) scale(1.04)}}.uc-word{font:600 64px/1 var(--font-display);letter-spacing:-.03em;color:var(--ink)}.uc-burst{--reach:5.2;display:none;position:absolute;left:50%;top:50%;width:0;height:0}.uc-burst-2{--reach:3.3;transform:rotate(10deg)}html[data-kiosk-update=opening] .uc-burst{display:block}.uc .confetti .cf-bit{animation:uc-cf 1.9s cubic-bezier(.15,.7,.3,1) .5s both}.uc .confetti .cf-bit:nth-child(2n){animation-delay:.56s}.uc .confetti .cf-bit:nth-child(3n){animation-delay:.62s}.uc .confetti .cf-bit:nth-child(5n){animation-delay:.68s}@keyframes uc-cf{0%{transform:translate(-50%,-50%) scale(0);opacity:0}8%{transform:translate(-50%,-50%) scale(2.2);opacity:1}75%{opacity:1}to{transform:translate(calc(-50% + var(--dx, 0px) * var(--reach)),calc(-50% + var(--dy, 0px) * var(--reach))) scale(1.6) rotate(var(--rot,1turn));opacity:0}}@media (prefers-reduced-motion:reduce){.uc *,.uc :before{animation:none!important}html[data-kiosk-update=closing] .uc{animation:uc-fade .3s ease both}html[data-kiosk-update=opening] .uc{animation:uc-fade .4s ease .3s reverse both}.uc .confetti{display:none}}@keyframes uc-fade{0%{opacity:0}}