:root{--bg:#faf7f2;--card:#fffdf9;--ink:#1c1917;--ink-light:#78716c;--ink-faint:#c8c2ba;--accent:#c2410c;--accent-warm:#ea580c;--border:#e7e0d6;--heat-1:#e8ddd0;--heat-1-text:#6b5c4e;--heat-2:#f5c28a;--heat-2-text:#7c4a12;--heat-3:#f0b86a;--heat-3-text:#6c3006;--heat-4:#f09e5c;--heat-4-text:#6c3006;--heat-5:#eb8040;--heat-5-text:#fff;--heat-6:#e35d30;--heat-6-text:#fff;--heat-7:#d4401a;--heat-7-text:#fff;--heat-8:#b91c1c;--heat-8-text:#fff;--heat-9:#991b1b;--heat-9-text:#fff;--heat-10:#7f1d1d;--heat-10-text:#fff}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Outfit,sans-serif;background:var(--bg);color:var(--ink);min-height:100vh;position:relative}body:before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-size:200px}.page{max-width:1440px;margin:0 auto;padding:48px 40px 80px}header{text-align:center;margin-bottom:32px;position:relative}header:after{content:"";display:block;width:60px;height:3px;background:var(--accent);margin:20px auto 0;border-radius:2px}.header-year{font-family:Fraunces,serif;font-weight:900;font-size:5rem;line-height:1;letter-spacing:-3px;color:var(--ink);opacity:0;animation:fadeSlideUp .6s ease forwards}.header-title{font-family:Outfit,sans-serif;font-weight:300;font-size:1.1rem;letter-spacing:.35em;text-transform:uppercase;color:var(--ink-light);margin-top:4px;opacity:0;animation:fadeSlideUp .6s ease .15s forwards}.dept-nav{display:flex;justify-content:center;flex-wrap:wrap;gap:8px;margin-bottom:16px;opacity:0;animation:fadeSlideUp .5s ease .25s forwards}.dept-tab{padding:8px 20px;border-radius:100px;border:1px solid var(--border);background:transparent;font-family:Outfit,sans-serif;font-size:.8rem;font-weight:500;color:var(--ink-light);cursor:pointer;transition:all .2s}.dept-tab:hover{border-color:var(--ink-light);color:var(--ink)}.dept-tab.active{background:var(--ink);color:var(--bg);border-color:var(--ink)}.person-filters{display:flex;justify-content:center;flex-wrap:wrap;gap:6px;margin-bottom:32px;opacity:0;animation:fadeSlideUp .5s ease .3s forwards}.person-chip{display:flex;align-items:center;gap:5px;padding:5px 12px;border-radius:100px;border:1px solid var(--border);background:transparent;font-family:Outfit,sans-serif;font-size:.72rem;font-weight:500;color:var(--ink-light);cursor:pointer;transition:all .2s}.person-chip:hover{border-color:var(--ink-light)}.person-chip.active{background:var(--card);border-color:var(--ink);color:var(--ink);box-shadow:0 1px 4px rgba(0,0,0,.06)}.chip-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.person-chip:not(.active) .chip-dot{opacity:.4}.legend-section{justify-content:center;gap:10px 28px;margin-bottom:44px;opacity:0;animation:fadeSlideUp .5s ease .35s forwards}.legend-group,.legend-section{display:flex;align-items:center;flex-wrap:wrap}.legend-group{gap:12px}.legend-group-label{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-light)}.legend-member{display:flex;align-items:center;gap:5px;font-size:.78rem;color:var(--ink);font-weight:500}.legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.legend-divider{width:1px;height:24px;background:var(--border);margin:0 8px}.legend-heat{display:flex;align-items:center;gap:4px}.legend-heat-swatch{width:20px;height:12px;border-radius:2px}.legend-heat-labels{display:flex;justify-content:space-between;font-size:.6rem;color:var(--ink-light);gap:4px;margin-left:6px}.calendar-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:24px;gap:24px}@media (max-width:1200px){.calendar-grid{grid-template-columns:repeat(3,1fr)}}@media (max-width:860px){.calendar-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:520px){.calendar-grid{grid-template-columns:1fr}.page{padding:24px 16px 60px}.header-year{font-size:3.5rem}}.month-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px 18px 16px;opacity:0;animation:fadeSlideUp .5s ease forwards;transition:box-shadow .25s ease,transform .25s ease}.month-card:hover{box-shadow:0 8px 30px rgba(28,25,23,.07);transform:translateY(-2px)}.month-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px;border-bottom:1px solid var(--border);padding-bottom:10px}.month-name{font-family:Fraunces,serif;font-weight:700;font-size:1.2rem;color:var(--ink)}.month-vacation-count{font-size:.68rem;color:var(--ink-light);font-weight:500}.weekdays{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;margin-bottom:6px}.weekdays span{font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint)}.days{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:3px;gap:3px}.day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;font-size:.76rem;border-radius:8px;position:relative;cursor:default;transition:transform .15s ease,box-shadow .15s ease;font-weight:400;color:var(--ink)}.day.weekend{color:var(--ink-faint);background:#f0ece6}.day.holiday{border:1.5px solid #8c8279}.day .holiday-label{position:absolute;top:-1px;left:-1px;width:6px;height:6px;border-radius:50%;background:#8c8279}.day.birthday-only:hover,.day.vacation:hover{transform:scale(1.25);z-index:10;box-shadow:0 4px 16px rgba(0,0,0,.15)}.day.heat-1{background:var(--heat-1);color:var(--heat-1-text);font-weight:600}.day.heat-2{background:var(--heat-2);color:var(--heat-2-text);font-weight:600}.day.heat-3{background:var(--heat-3);color:var(--heat-3-text);font-weight:600}.day.heat-4{background:var(--heat-4);color:var(--heat-4-text);font-weight:700}.day.heat-5{background:var(--heat-5);color:var(--heat-5-text);font-weight:700}.day.heat-6{background:var(--heat-6);color:var(--heat-6-text);font-weight:700}.day.heat-7{background:var(--heat-7);color:var(--heat-7-text);font-weight:700}.day.heat-8{background:var(--heat-8);color:var(--heat-8-text);font-weight:700}.day.heat-9{background:var(--heat-9);color:var(--heat-9-text);font-weight:700}.day.heat-10{background:var(--heat-10);color:var(--heat-10-text);font-weight:700}.day.birthday-only{background:#fce7f3;color:#9d174d;font-weight:600}.day .overlap-badge{position:absolute;top:-3px;right:-3px;width:15px;height:15px;border-radius:50%;background:var(--accent);color:#fff;font-size:.55rem;font-weight:700;display:flex;align-items:center;justify-content:center;line-height:1;box-shadow:0 1px 4px rgba(0,0,0,.2)}.day.heat-10 .overlap-badge,.day.heat-4 .overlap-badge,.day.heat-5 .overlap-badge,.day.heat-6 .overlap-badge,.day.heat-7 .overlap-badge,.day.heat-8 .overlap-badge,.day.heat-9 .overlap-badge{background:#fff;color:var(--accent)}.day .member-dots{position:absolute;bottom:1px;left:50%;transform:translateX(-50%);display:flex;flex-wrap:wrap;justify-content:center;gap:1px;max-width:90%}.day .member-dots span{width:3px;height:3px;border-radius:50%}.day .member-dots.many span{width:2.5px;height:2.5px}.day .tip{display:none;bottom:calc(100% + 10px);background:var(--ink);color:#faf7f2;padding:10px 14px;border-radius:10px;font-size:.74rem;line-height:1.65;white-space:nowrap;z-index:200;pointer-events:none;box-shadow:0 8px 24px rgba(0,0,0,.22);font-weight:400}.day .tip,.day .tip:after{position:absolute;left:50%;transform:translateX(-50%)}.day .tip:after{content:"";top:100%;border:6px solid transparent;border-top:6px solid var(--ink)}.day:hover .tip{display:block}.tip-name{display:flex;align-items:center;gap:6px}.tip-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.tip-type{font-size:.62rem;opacity:.7;margin-left:4px}.loading-container{text-align:center;padding:120px 20px}.spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto 16px}@keyframes spin{to{transform:rotate(1turn)}}.loading-text{font-size:.9rem;color:var(--ink-light)}.error-container{text-align:center;padding:120px 20px}.error-container h3{font-family:Fraunces,serif;font-size:1.3rem;color:var(--accent);margin-bottom:8px}.error-container p{font-size:.85rem;color:var(--ink-light);max-width:500px;margin:0 auto;line-height:1.6}.day.today{outline:2px solid var(--accent);outline-offset:-1px}@keyframes fadeSlideUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}