:root{--paper: #f4f3ee;--card: #fbfaf6;--ink: #211f1b;--muted: #6b675e;--faint: #9a968c;--line: #e4e1d8;--line-soft: #edebe3;--liturgy: #3d5a80;--liturgy-rgb: 61, 90, 128;--regular: #b5b0a6;--regular-rgb: 181, 176, 166;--oneoff: #6e4c3a;--oneoff-rgb: 110, 76, 58;--feast: #8a6a1e;--feast-rgb: 138, 106, 30;--fast: #5e5487;--fast-rgb: 94, 84, 135;--warn: #9b3d39;--warn-rgb: 155, 61, 57;--ok: #35705e;--ok-rgb: 53, 112, 94;--radius: 10px;--font-ui: "Inter", system-ui, -apple-system, sans-serif;--font-display: "Fraunces", Georgia, serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased}.serif{font-family:var(--font-display)}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}input,select,textarea{font-family:inherit;font-size:14px;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:8px;padding:9px 11px;width:100%}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--ink)}input::placeholder,textarea::placeholder{color:#bebab0;opacity:1}.wrap{max-width:1000px;margin:0 auto;padding:22px}.calendar-page{max-width:1280px;min-height:100dvh;display:flex;flex-direction:column;padding:14px 20px 16px;gap:10px}html.is-embed,html.is-embed body{height:auto;min-height:0;overflow:visible;background:var(--paper)}html.is-embed .calendar-page{min-height:0;height:auto}html.is-embed .cal-chrome{position:sticky;top:0}html.is-embed .cal-body{flex:0 0 auto}html.is-embed .month-board{flex:0 0 auto;height:auto;min-height:min(560px,70vh)}html.is-embed .weeks{flex:0 0 auto;min-height:480px}html.is-embed .week,html.is-embed .cell{height:auto;min-height:88px}.cal-chrome{flex-shrink:0;position:sticky;top:0;z-index:30;background:var(--paper);margin:-14px -20px 0;padding:14px 20px 10px;border-bottom:1px solid var(--line-soft)}.cal-header{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin-bottom:10px}.cal-title{font-weight:500;font-size:clamp(26px,3.2vw,34px);line-height:1;margin:0;letter-spacing:-.01em}.cal-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.cal-tools{display:flex;flex-direction:column;gap:8px}.cal-search{margin:0}.cal-presets{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.cal-filters{margin-top:8px;padding:12px 14px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius)}.cal-body{flex:1;min-height:0;display:flex;flex-direction:column}.eyebrow{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin:0 0 4px}.hint{font-size:12px;color:var(--faint);margin-top:5px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.btn{font-size:13px;font-weight:450;padding:7px 14px;border-radius:20px;border:1px solid var(--line);background:var(--card);transition:.15s}.btn:hover{border-color:var(--ink)}.btn.primary{background:var(--ink);color:var(--paper);border-color:var(--ink)}.btn.primary:hover{opacity:.9}.btn.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border-radius:10px;color:var(--muted)}.btn.icon-btn:hover{color:var(--ink)}.chip{font-size:12.5px;padding:4px 11px;border-radius:20px;border:1px solid var(--line);color:var(--muted);background:transparent;white-space:nowrap;transition:.15s}.chip:hover{border-color:var(--ink)}.chip.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}.view-toggle{display:inline-flex;align-items:center;gap:0;border:1px solid var(--line);border-radius:20px;overflow:hidden;background:var(--card)}.view-toggle .chip{border:none;border-radius:0;padding:6px 12px}.view-toggle .chip+.chip{border-left:1px solid var(--line)}.view-toggle .chip.on{background:var(--ink);color:var(--paper)}.month-board{flex:1;min-height:0;display:flex;flex-direction:column;gap:4px}.dow{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;flex-shrink:0}.dow span{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);padding:0 2px 2px}.weeks{flex:1;min-height:0;display:grid;grid-template-rows:repeat(var(--week-count, 5),minmax(0,1fr));gap:4px}.week{position:relative;display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin:0;min-height:0;height:100%}.cell{min-height:0;height:100%;border:1px solid var(--line-soft);border-radius:8px;padding:4px 5px 5px;background:var(--card);position:relative;overflow:hidden;display:flex;flex-direction:column}.cell.out{background:transparent;border-color:transparent}.cell.out .daynum{opacity:.35}.cell.fast{background:rgba(var(--fast-rgb),.05)}.daynum{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;min-width:22px;max-width:22px;margin-bottom:2px;flex-shrink:0;line-height:1;border-radius:50%;box-sizing:border-box}.daynum.today{color:var(--ink);background:transparent;border:1.5px solid var(--ink)}.feast-mark{position:absolute;top:8px;right:8px;width:8px;height:8px;border-radius:50%;background:var(--feast)}.cell-events{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:1px}.pill{--ev: var(--regular);--ev-rgb: var(--regular-rgb);width:100%;text-align:left;display:flex;align-items:baseline;gap:5px;padding:2px 5px 2px 7px;border-radius:3px;border-left:2.5px solid var(--ev);background:transparent;color:var(--ink);font-size:11px;line-height:1.25;transition:background .12s ease;position:relative}.pill:hover{background:rgba(var(--ev-rgb),.08)}.pill.oneoff{font-weight:500}.pill.quiet{border-left-width:2px;border-left-color:rgba(var(--ev-rgb),.45);color:var(--muted)}.pill.quiet .t{opacity:.5;color:var(--faint)}.pill.quiet .ttl{color:var(--muted)}.pill.quiet .age-marks{opacity:.4}.pill .t{flex-shrink:0;color:var(--ev);opacity:1;font-variant-numeric:tabular-nums;font-size:10px;font-weight:700;letter-spacing:.01em;min-width:2.6em}.pill .ttl{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pill .age-marks{flex-shrink:0;display:inline-flex;gap:1px;opacity:.72;color:var(--ev);margin-left:auto}.pill.cancelled{text-decoration:line-through;opacity:.5}.more{font-size:10.5px;color:var(--muted);padding:1px 4px;text-align:left;margin-top:1px}.more:hover{color:var(--ink)}.event-expand{--ev: var(--regular);--ev-rgb: var(--regular-rgb);position:fixed;z-index:60;pointer-events:none;display:flex;align-items:baseline;gap:5px;padding:2px 8px 2px 7px;border-radius:3px;border-left:2.5px solid var(--ev);background:var(--card);color:var(--ink);font-size:11px;line-height:1.25;box-shadow:2px 1px 0 var(--card),4px 2px 10px #1e180e1f;white-space:nowrap;max-width:calc(100vw - 16px);box-sizing:border-box}.event-expand.oneoff{font-weight:500}.event-expand.quiet{border-left-color:rgba(var(--ev-rgb),.45);color:var(--muted)}.event-expand.quiet .t{opacity:.5;color:var(--faint)}.event-expand.cancelled{text-decoration:line-through;opacity:.7}.event-expand .t{flex-shrink:0;color:var(--ev);opacity:1;font-variant-numeric:tabular-nums;font-size:10px;font-weight:700;letter-spacing:.01em;min-width:2.6em}.event-expand .ttl{white-space:nowrap}.event-expand.span{border-left:none;align-items:center;padding:0 9px;background:rgba(var(--ev-rgb),.14);color:var(--ev);font-size:10px;font-weight:500;border-radius:4px}.fastbar,.feastbar,.spanbar{position:absolute;height:16px;border-radius:4px;font-size:9.5px;font-weight:500;display:flex;align-items:center;padding:0 8px;white-space:nowrap;overflow:hidden;z-index:2;cursor:pointer;gap:4px;border:none;text-align:left}.fastbar{background:rgba(var(--fast-rgb),.28);color:var(--fast);letter-spacing:.03em}.feastbar{background:rgba(var(--feast-rgb),.28);color:var(--feast);letter-spacing:.02em}.spanbar{font-size:10px}.fastbar:hover,.feastbar:hover,.spanbar:hover{filter:brightness(.96)}.fastbar .cont,.feastbar .cont,.spanbar .cont{opacity:.6;font-size:11px}.fastbar .age-marks,.feastbar .age-marks,.spanbar .age-marks{display:inline-flex;gap:1px;opacity:.85;flex-shrink:0}.age-marks{display:inline-flex;align-items:center;gap:2px;vertical-align:middle}.age-mark{display:inline-flex;align-items:center;justify-content:center;width:12px;height:12px;line-height:0}.age-mark svg{display:block}.cal-legend{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line-soft);font-size:11.5px;color:var(--muted);line-height:1.3}.cal-legend-swatches{display:flex;flex-wrap:wrap;gap:8px 14px}.cal-legend-item{display:inline-flex;align-items:center;gap:6px}.cal-legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.cal-legend-ages{display:inline-flex;flex-wrap:wrap;gap:8px 12px}.cal-legend-age{display:inline-flex;align-items:center;gap:4px;color:var(--muted)}.cal-legend-age .age-mark{color:var(--ink);opacity:.55}.day-head{display:flex;align-items:baseline;gap:8px;padding:14px 2px 6px;border-bottom:1px solid var(--line);margin-bottom:8px}.day-head .dnum{font-family:var(--font-display);font-size:22px;font-weight:500}.day-head .dwd{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}.day-head .fast-tag{margin-left:auto;font-size:11px;color:var(--fast);background:rgba(var(--fast-rgb),.1);padding:2px 9px;border-radius:12px}.abar{display:flex;align-items:center;height:20px;padding:0 10px;border-radius:4px;margin-bottom:5px;width:100%;border:none;text-align:left;cursor:pointer;font-size:11px;font-weight:500;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.abar.fast{background:rgba(var(--fast-rgb),.28);color:var(--fast);letter-spacing:.03em}.abar.feast{background:rgba(var(--feast-rgb),.28);color:var(--feast)}.abar .ttl{overflow:hidden;text-overflow:ellipsis}.abar.cancelled .ttl{text-decoration:line-through;opacity:.55}.abar:hover{filter:brightness(.96)}.arow{display:flex;align-items:stretch;gap:12px;padding:9px 10px;border-left:3px solid var(--line);border-radius:0 var(--radius) var(--radius) 0;margin-bottom:5px;background:var(--card);width:100%;text-align:left}.arow.quiet{border-left-color:rgba(var(--ev-rgb, 181, 176, 166),.45)}.arow.quiet .time{color:var(--faint)}.arow.quiet .ttl{color:var(--muted)}.arow .time{font-size:13px;font-weight:700;width:96px;flex-shrink:0;font-variant-numeric:tabular-nums;color:var(--ev, var(--muted))}.arow .ttl{font-size:14px}.arow.cancelled .ttl{text-decoration:line-through;opacity:.55}.arow .meta{font-size:12px;color:var(--muted);margin-top:2px}.tag{display:inline-block;font-size:10.5px;padding:1px 8px;border-radius:12px;margin-left:6px;background:var(--paper);color:var(--muted)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#14120e66;display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.modal{background:var(--card);border-radius:18px;max-width:424px;width:100%;max-height:88vh;overflow-y:auto;position:relative;box-shadow:0 30px 70px #1e180e47}.modal .accent{height:4px;border-radius:18px 18px 0 0}.modal .inner{padding:26px}.mtitle{font-family:var(--font-display);font-weight:500;font-size:25px;line-height:1.14;margin:0 0 18px}.mrow{display:flex;gap:12px;align-items:flex-start;font-size:14px;margin-bottom:13px;line-height:1.4}.mrow svg{flex-shrink:0;color:var(--faint);margin-top:1px}.mrow a{color:var(--liturgy)}.arow .age-marks{margin-left:6px;opacity:.55;color:var(--muted);vertical-align:-1px}.close{position:absolute;top:16px;right:18px;width:30px;height:30px;border-radius:50%;font-size:20px;color:var(--muted);display:flex;align-items:center;justify-content:center}.close:hover{background:var(--paper);color:var(--ink)}.empty{text-align:center;padding:56px 20px;color:var(--muted)}.empty .big{font-family:var(--font-display);font-size:20px;color:var(--ink);margin-bottom:6px}.skeleton{height:46px;border-radius:var(--radius);background:linear-gradient(90deg,var(--line-soft),var(--card),var(--line-soft));background-size:200% 100%;animation:sh 1.3s infinite;margin-bottom:6px}@keyframes sh{to{background-position:-200% 0}}.fab{position:fixed;bottom:22px;right:22px;width:50px;height:50px;border-radius:50%;background:var(--ink);color:var(--paper);display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px #1e180e47;z-index:40}.fbpanel{position:fixed;bottom:82px;right:22px;width:300px;max-width:calc(100vw - 44px);background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px;z-index:41;box-shadow:0 20px 50px #1e180e3d}.install-btn{display:inline-flex;align-items:center;gap:6px}.install-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#211f1b59;z-index:50;display:flex;align-items:flex-end;justify-content:center;padding:16px}.install-panel{position:relative;width:min(400px,100%);background:var(--card);border:1px solid var(--line);border-radius:18px;padding:22px 20px 20px;box-shadow:0 24px 60px #1e180e47;margin-bottom:max(8px,env(safe-area-inset-bottom))}.install-title{font-weight:500;font-size:22px;margin:0 0 6px;letter-spacing:-.01em}.install-lead{font-size:14px;color:var(--muted);line-height:1.45;margin:0 0 14px}.install-step{font-size:14px;line-height:1.5;margin:0;color:var(--ink)}.install-steps{margin:0;padding-left:1.2em;font-size:14px;line-height:1.55;color:var(--ink)}.install-steps li{margin-bottom:8px}.install-steps li:last-child{margin-bottom:0}@media (min-width: 640px){.install-backdrop{align-items:center}}.rte{border:1px solid var(--line);border-radius:10px;background:var(--paper);overflow:hidden}.rte-toolbar{display:flex;flex-wrap:wrap;gap:4px;padding:6px 8px;border-bottom:1px solid var(--line-soft);background:var(--card)}.rte-btn{font-size:12px;padding:5px 9px;border-radius:7px;border:1px solid transparent;color:var(--ink);background:transparent}.rte-btn:hover{border-color:var(--line);background:var(--paper)}.rte-editor{min-height:110px;padding:12px 14px;font-size:14px;line-height:1.5;outline:none;color:var(--ink)}.rte-editor:empty:before{content:attr(data-placeholder);color:var(--faint);pointer-events:none}.rte-editor ul,.prose ul{margin:.4em 0 .4em 1.2em;padding:0;list-style:disc}.rte-editor ol,.prose ol{margin:.4em 0 .4em 1.2em;padding:0;list-style:decimal}.rte-editor li,.prose li{margin:.15em 0}.rte-editor p,.prose p{margin:0 0 .55em}.rte-editor p:last-child,.prose p:last-child{margin-bottom:0}.prose u{text-decoration:underline}@media (max-width: 720px){.wrap{padding:16px}.calendar-page{min-height:auto;padding:16px}.cal-chrome{margin:-16px -16px 0;padding:16px 16px 10px}.view-toggle{display:none}.overlay{align-items:flex-end;padding:0}.modal{max-width:none;border-radius:18px 18px 0 0;max-height:92vh}}
