:root{--bg: #f1f5f9;--surface: #ffffff;--fg: #0f172a;--muted: #64748b;--line: #e2e8f0;--accent: #2563eb;--danger: #dc2626;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--fg);background:var(--bg);line-height:1.4}*{box-sizing:border-box}body{margin:0}h1,h2{margin:0;font-weight:650}button,input,textarea{font:inherit}button{cursor:pointer;border:1px solid var(--line);background:var(--surface);color:var(--fg);border-radius:8px;padding:.4rem .8rem}button:disabled{opacity:.6;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.danger{color:var(--danger)}button.link{border:0;background:none;padding:0;color:var(--muted)}button.icon{border:0;background:none;font-size:1.4rem;line-height:1;padding:0 .25rem;color:var(--muted)}input,textarea,select{width:100%;padding:.45rem .6rem;border:1px solid var(--line);border-radius:8px;background:var(--surface)}input[type=radio],input[type=checkbox]{width:auto}a{color:inherit}.page{max-width:1400px;margin:0 auto;padding:1.5rem}.page-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;margin-bottom:1.5rem}.page-header h1{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;min-width:0}.year-switch{border:0;background:none;padding:0 .1rem;font:inherit;color:var(--muted);text-decoration:underline;text-decoration-color:transparent}.year-switch:hover{color:var(--accent);text-decoration-color:currentColor}.year-switch.active{color:var(--fg);font-weight:700;text-decoration:none}.legend{display:flex;gap:.5rem;flex-wrap:wrap;font-size:.8rem}.chip{display:inline-flex;align-items:center;gap:.4rem;height:1.6rem;padding:0 .6rem;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:.8rem;white-space:nowrap}.chip:before{content:"";flex-shrink:0;width:.65rem;height:.65rem;border-radius:999px;background:var(--dot)}.chip.holiday{--dot: #dc2626}.chip.ferien{--dot: #16a34a}.chip.event{--dot: #ca8a04}.chip.tentative{--dot: transparent}.chip.tentative:before{border:1px dashed #ca8a04}.year{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.month{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:.9rem}.month h2{font-size:1rem;margin-bottom:.6rem}.weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center;font-size:.7rem;color:var(--muted);margin-bottom:.2rem}.grid{border-top:1px solid var(--line);border-left:1px solid var(--line)}.week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));position:relative}.day{grid-row:1 / -1;min-height:2rem;padding:.15rem .3rem;border-right:1px solid var(--line);border-bottom:1px solid var(--line);font-size:.75rem;overflow:hidden;min-width:0}.day.outside{color:#cbd5e1}.day.today{box-shadow:inset 0 0 0 2px var(--fg)}.day.today .num{font-weight:700}.day.weekend{background:#f1f5f9}.day.star-day{background:var(--tint);animation:star-day-glow 3s ease-in-out infinite}@keyframes star-day-glow{0%,to{background-color:var(--tint)}50%{background-color:var(--tint-strong)}}@media(prefers-reduced-motion:reduce){.day.star-day{animation:none}}.day .num{display:block}.period-name{display:block;font-size:.6rem;line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted)}.bar{align-self:center;height:1.2rem;margin:0 2px;padding:0 .4rem;border:0;border-radius:6px;background:var(--bar-color);color:#fff;font-size:.7rem;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.bar.tentative{background:color-mix(in srgb,var(--bar-color) 18%,white);color:var(--bar-color);border:1px dashed var(--bar-color);opacity:.85}.bar.cont-before{margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.bar.cont-after{margin-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.star-event{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;padding:.15rem .2rem;border:0;background:transparent;color:var(--fg);font-size:.72rem;line-height:1.15;text-align:center;cursor:pointer;overflow:hidden}.star{font-size:1.7rem;line-height:1;background:linear-gradient(180deg,#fffbe0,#ffd83a 40%,#d4a017 75%,#8a5a00);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 3px rgb(255 215 0 / .9)) drop-shadow(0 1px 0 #7a4f00);animation:sparkle 3s ease-in-out infinite}.star-title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word;font-weight:600}.star-event.tentative .star{opacity:.55;filter:drop-shadow(0 0 2px rgb(255 215 0 / .5));animation:none}.star-event.tentative .star-title{color:var(--muted);font-style:italic;font-weight:400}.chip.star-chip:before{display:none}.chip.star-chip .star{font-size:1rem}@keyframes sparkle{0%,to{filter:drop-shadow(0 0 2px rgb(255 215 0 / .7)) drop-shadow(0 1px 0 #7a4f00)}50%{filter:drop-shadow(0 0 7px rgb(255 240 120 / 1)) drop-shadow(0 1px 0 #7a4f00)}}@media(prefers-reduced-motion:reduce){.star{animation:none}}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:grid;place-items:center;padding:1rem;z-index:10}.dialog{background:var(--surface);border-radius:16px;padding:1.5rem;width:min(560px,100%);max-height:90vh;overflow:auto;box-shadow:0 20px 50px #0003}.dialog header{display:flex;justify-content:space-between;align-items:start;gap:1rem}.dialog dl{display:grid;grid-template-columns:max-content 1fr;gap:.4rem 1rem;margin:1rem 0}.dialog dt{color:var(--muted)}.dialog dd{margin:0}.description{white-space:pre-wrap;margin:0}.badge{display:inline-block;font-size:.7rem;padding:.1rem .5rem;border-radius:999px;border:1px dashed var(--accent);color:var(--accent)}.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:1.5rem}.login{min-height:100vh;display:grid;place-items:center;padding:1rem}.login .card{width:min(380px,100%)}.form{display:grid;gap:1rem;margin-bottom:1.5rem}.form label{display:grid;gap:.3rem;font-size:.9rem}.form label.inline{display:flex;align-items:center;gap:.5rem}.form fieldset{border:0;padding:0;margin:0;display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.form fieldset legend{font-size:.9rem;margin-right:.5rem}.form fieldset label{display:flex;align-items:center;gap:.3rem}.form textarea{resize:vertical}.row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.counter{float:right;color:var(--muted);font-size:.75rem}.hint{margin:0;font-size:.85rem;color:var(--muted)}.actions{display:flex;justify-content:flex-end;gap:.5rem}.error{color:var(--danger);margin:0}.muted{color:var(--muted)}.swatches{display:flex;gap:.5rem;flex-wrap:wrap}.swatch{width:2rem;height:2rem;padding:0;border-radius:999px;background:var(--swatch);border:3px solid transparent}.swatch.selected{border-color:var(--fg);box-shadow:inset 0 0 0 2px #fff}.admin-nav{display:flex;align-items:center;gap:1.25rem;padding:.75rem 1.5rem;background:var(--surface);border-bottom:1px solid var(--line);flex-wrap:wrap}.admin-nav .brand{font-weight:650;text-decoration:none}.admin-nav a{text-decoration:none;color:var(--muted)}.admin-nav a.active{color:var(--fg);font-weight:600}.admin-nav .spacer{flex:1}.list{list-style:none;padding:0;margin:0;background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}.list li{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-top:1px solid var(--line);flex-wrap:wrap}.list li:first-child{border-top:0}.list small{display:block;color:var(--muted)}.list .grow{flex:1;min-width:12rem}.dot{width:.8rem;height:.8rem;border-radius:999px;flex-shrink:0}@media(max-width:640px){.page{padding:1rem}.row{grid-template-columns:1fr}}
