*,*:before,*:after{box-sizing:border-box}*{margin:0}html{interpolate-size:allow-keywords}body{line-height:1.5;-webkit-font-smoothing:antialiased}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p{overflow-wrap:break-word;text-wrap:pretty}h1,h2,h3,h4,h5,h6{overflow-wrap:break-word;text-wrap:balance}#root,#app{isolation:isolate}:root{--ivory: #faf5ec;--ivory-raised: #fffcf6;--ivory-sunk: #f2ebdd;--sage: #8a9e8c;--sage-deep: #5f7463;--sage-wash: #e4e9e1;--terracotta: #b3593a;--terracotta-soft: #d9906b;--terracotta-wash: #f3e2d8;--charcoal: #33322d;--charcoal-soft: #6d6a60;--hairline: #e2d9c7;--bg: var(--ivory);--surface: var(--ivory-raised);--ink: var(--charcoal);--ink-soft: var(--charcoal-soft);--accent: var(--sage-deep);--highlight: var(--terracotta);--gap-xs: .375rem;--gap-sm: .75rem;--gap: 1.25rem;--gap-lg: 2rem;--gap-xl: 3rem;--radius: 18px;--radius-sm: 12px;--shadow: 0 1px 2px rgb(51 50 45 / 4%), 0 8px 24px -12px rgb(51 50 45 / 18%);--shadow-lift: 0 2px 6px rgb(51 50 45 / 8%), 0 18px 36px -16px rgb(51 50 45 / 28%);--serif: ui-serif, "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;--sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--nav-height: 4.5rem;font-family:var(--sans);color-scheme:light dark}@media(prefers-color-scheme:dark){:root{--bg: #23261f;--surface: #2b2f27;--ivory-sunk: #1d201a;--ink: #efe9dc;--ink-soft: #a9a496;--hairline: #3c4038;--sage-wash: #33392f;--terracotta-wash: #3d2f27;--accent: #a8bda9;--highlight: #dd9068;--shadow: 0 1px 2px rgb(0 0 0 / 20%), 0 10px 28px -14px rgb(0 0 0 / 55%);--shadow-lift: 0 2px 8px rgb(0 0 0 / 28%), 0 20px 40px -18px rgb(0 0 0 / 65%)}}body{min-height:100dvh;background-color:var(--bg);color:var(--ink);font-size:16px;letter-spacing:.01em}body:before{content:"";position:fixed;inset:0;z-index:0;pointer-events:none;opacity:.5;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23p)' opacity='0.16'/%3E%3C/svg%3E")}@media(prefers-color-scheme:dark){body:before{mix-blend-mode:screen;opacity:.28}}h1,h2,h3{font-family:var(--serif);font-weight:500;letter-spacing:-.015em;line-height:1.15}.app{position:relative;z-index:1;min-height:100dvh;padding-bottom:calc(var(--nav-height) + env(safe-area-inset-bottom,0px))}.screen{max-width:34rem;margin-inline:auto;padding:var(--gap-lg) var(--gap) var(--gap-xl);display:flex;flex-direction:column;gap:var(--gap-lg)}.screen--centered{min-height:70dvh;align-items:center;justify-content:center;text-align:center}.screen__head h1{font-size:clamp(2rem,8vw,2.6rem)}.screen__eyebrow,.hero__eyebrow{font-size:.75rem;text-transform:uppercase;letter-spacing:.18em;color:var(--accent);margin-bottom:var(--gap-xs)}.screen__summary{margin-top:var(--gap-sm);color:var(--ink-soft);font-size:.95rem}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--gap-sm);margin-bottom:var(--gap)}.section-head h2{font-size:1.5rem}.app__screen{animation:screen-in .38s cubic-bezier(.22,.72,.28,1) both}@keyframes screen-in{0%{opacity:0;transform:translateY(14px)}}.hero{text-align:center;padding:var(--gap-lg) var(--gap);background:linear-gradient(180deg,var(--surface),color-mix(in srgb,var(--surface) 88%,var(--sage-wash)));border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow)}.hero__names{font-size:clamp(1.6rem,6vw,2.1rem);margin-bottom:var(--gap)}.hero__count{display:flex;flex-direction:column;gap:var(--gap-xs);margin-bottom:var(--gap-sm)}.hero__number{font-family:var(--serif);font-size:clamp(4.5rem,22vw,6.5rem);line-height:.95;font-weight:400;letter-spacing:-.04em;color:var(--ink);font-variant-numeric:tabular-nums}.hero__unit{font-size:.95rem;letter-spacing:.06em;color:var(--ink-soft)}.hero__date{font-family:var(--serif);font-style:italic;color:var(--accent);margin-bottom:var(--gap)}.hero__progress{display:flex;flex-direction:column;align-items:center;gap:var(--gap-xs);margin-block:var(--gap) var(--gap)}.hero__progress-track{width:min(18rem,100%);height:3px;border-radius:3px;background-color:var(--ivory-sunk);overflow:hidden}.hero__progress-fill{height:100%;border-radius:3px;background-color:var(--sage);transition:width .5s cubic-bezier(.22,.72,.28,1)}.hero__progress-label{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.timeline__list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;row-gap:var(--gap-sm);position:relative}.timeline__list:before{content:"";position:absolute;top:1.6rem;bottom:1.6rem;left:1.5rem;width:1px;background-color:var(--hairline)}.task{position:relative;display:flex;align-items:center;gap:var(--gap-sm);padding:var(--gap-sm) var(--gap-sm) var(--gap-sm) var(--gap-xs);background-color:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius-sm);box-shadow:var(--shadow);transition:transform .22s cubic-bezier(.22,.72,.28,1),box-shadow .22s ease,opacity .22s ease;touch-action:pan-y}.task--dragging{z-index:3;box-shadow:var(--shadow-lift);cursor:grabbing}.task--done{opacity:.62}.task--milestone{border-color:color-mix(in srgb,var(--terracotta) 32%,var(--hairline))}.task__check{position:relative;flex:none;width:2.5rem;height:2.5rem;display:grid;place-items:center;border:none;background:none;cursor:pointer;padding:0;color:var(--accent)}.task__check:before{content:"";position:absolute;width:1.5rem;height:1.5rem;border-radius:50%;border:1.5px solid var(--sage);background-color:var(--surface);transition:background-color .26s ease,border-color .26s ease,transform .26s cubic-bezier(.3,1.5,.5,1)}.task--milestone .task__check:before{border-color:var(--terracotta-soft)}.task--done .task__check:before{background-color:var(--sage);border-color:var(--sage);transform:scale(1.06)}.task--milestone.task--done .task__check:before{background-color:var(--terracotta);border-color:var(--terracotta)}.task__tick{position:relative;width:1rem;height:1rem;fill:none;stroke:var(--ivory-raised);stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}.task__tick path{stroke-dasharray:24;stroke-dashoffset:24;transition:stroke-dashoffset .32s cubic-bezier(.6,0,.3,1) 60ms}.task--done .task__tick path{stroke-dashoffset:0}.task__body{flex:1;display:flex;flex-direction:column;gap:2px;align-items:flex-start;text-align:left;background:none;border:none;padding:var(--gap-xs) 0;cursor:pointer;color:inherit;font:inherit;min-width:0}.task__title{font-size:1rem;line-height:1.3}.task--done .task__title{text-decoration:line-through;text-decoration-color:color-mix(in srgb,var(--ink) 35%,transparent)}.task__meta{font-size:.78rem;color:var(--ink-soft);letter-spacing:.03em}.task__handle{flex:none;width:2.25rem;height:2.5rem;display:grid;place-items:center;border:none;background:none;cursor:grab;color:var(--ink-soft);touch-action:none}.task__handle span{width:14px;height:10px;background-image:linear-gradient(to bottom,currentColor 0 1.5px,transparent 1.5px 4.25px,currentColor 4.25px 5.75px,transparent 5.75px 8.5px,currentColor 8.5px 10px);opacity:.5}.bottom-nav{position:fixed;inset-inline:0;bottom:0;z-index:5;display:flex;justify-content:center;gap:var(--gap-sm);padding:var(--gap-xs) var(--gap-sm);padding-bottom:calc(var(--gap-xs) + env(safe-area-inset-bottom,0px));background-color:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--hairline)}.bottom-nav__link{flex:1;max-width:7rem;display:flex;flex-direction:column;align-items:center;gap:3px;padding:var(--gap-xs) 0;font-size:.7rem;letter-spacing:.06em;text-decoration:none;color:var(--ink-soft);transition:color .2s ease}.bottom-nav__link--active{color:var(--highlight)}.bottom-nav__glyph{width:22px;height:22px;background-color:currentColor;transition:transform .26s cubic-bezier(.3,1.4,.5,1)}.bottom-nav__link--active .bottom-nav__glyph{transform:translateY(-1px) scale(1.06)}.bottom-nav__glyph--countdown{mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Ccircle cx='12' cy='13.5' r='7.5'/%3E%3Cpath d='M12 10v3.5l2.5 1.8M9.5 2.5h5'/%3E%3C/svg%3E") center / contain no-repeat;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Ccircle cx='12' cy='13.5' r='7.5'/%3E%3Cpath d='M12 10v3.5l2.5 1.8M9.5 2.5h5'/%3E%3C/svg%3E") center / contain no-repeat}.bottom-nav__glyph--guests{mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Ccircle cx='9' cy='8' r='3.2'/%3E%3Cpath d='M3.5 19.5c0-3 2.5-5 5.5-5s5.5 2 5.5 5'/%3E%3Ccircle cx='17' cy='9' r='2.4'/%3E%3Cpath d='M15 14.8c3 0 5.5 1.8 5.5 4.7'/%3E%3C/svg%3E") center / contain no-repeat;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Ccircle cx='9' cy='8' r='3.2'/%3E%3Cpath d='M3.5 19.5c0-3 2.5-5 5.5-5s5.5 2 5.5 5'/%3E%3Ccircle cx='17' cy='9' r='2.4'/%3E%3Cpath d='M15 14.8c3 0 5.5 1.8 5.5 4.7'/%3E%3C/svg%3E") center / contain no-repeat}.bottom-nav__glyph--budget{mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Cpath d='M4 20V9M10 20V4M16 20v-8M4 20h16'/%3E%3C/svg%3E") center / contain no-repeat;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Cpath d='M4 20V9M10 20V4M16 20v-8M4 20h16'/%3E%3C/svg%3E") center / contain no-repeat}.bottom-nav__glyph--notes{mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Crect x='4.5' y='3.5' width='15' height='17' rx='2.5'/%3E%3Cpath d='M8.5 9h7M8.5 13h7M8.5 17h4'/%3E%3C/svg%3E") center / contain no-repeat;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round'%3E%3Crect x='4.5' y='3.5' width='15' height='17' rx='2.5'/%3E%3Cpath d='M8.5 9h7M8.5 13h7M8.5 17h4'/%3E%3C/svg%3E") center / contain no-repeat}.card{background-color:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--gap)}.card-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--gap-sm)}.card--form{display:flex;flex-direction:column;gap:var(--gap-sm)}.empty{color:var(--ink-soft);font-family:var(--serif);font-style:italic;text-align:center;padding:var(--gap) 0;text-wrap:balance}.empty--block{display:flex;flex-direction:column;gap:var(--gap);padding:var(--gap);border:1px dashed var(--hairline);border-radius:var(--radius)}.hint{font-size:.82rem;color:var(--ink-soft);line-height:1.5}.field,.mini-field{display:flex;flex-direction:column;gap:var(--gap-xs)}.field label,.mini-field span{font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;color:var(--ink-soft)}input[type=text],input[type=date],input[type=number],select,textarea{width:100%;padding:.7rem .85rem;border:1px solid var(--hairline);border-radius:var(--radius-sm);background-color:var(--bg);color:var(--ink);font-size:1rem;font-family:inherit}textarea{resize:vertical;line-height:1.55}input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.button{align-self:flex-start;padding:.65rem 1.25rem;border:1px solid transparent;border-radius:999px;background-color:var(--sage-deep);color:var(--ivory-raised);font-size:.9rem;letter-spacing:.04em;cursor:pointer;text-decoration:none;transition:transform .16s ease,background-color .2s ease}.button:active{transform:scale(.98)}.button--quiet{background-color:transparent;border-color:var(--hairline);color:var(--ink-soft)}.button--soft{background-color:var(--sage-wash);color:var(--sage-deep)}.button--danger{background-color:transparent;border-color:color-mix(in srgb,var(--terracotta) 40%,transparent);color:var(--terracotta)}.icon-button{flex:none;width:2rem;height:2rem;display:grid;place-items:center;border:none;border-radius:50%;background:none;color:var(--ink-soft);font-size:1.25rem;line-height:1;cursor:pointer}.icon-button:hover{background-color:var(--ivory-sunk)}.inline-form{display:flex;gap:var(--gap-xs);align-items:center}.inline-form--roomy{margin-bottom:var(--gap)}.inline-form .button{align-self:stretch;flex:none}.chips{display:flex;flex-wrap:wrap;gap:var(--gap-xs)}.chip{padding:.4rem .85rem;border:1px solid var(--hairline);border-radius:999px;background-color:var(--surface);color:var(--ink-soft);font-size:.85rem;cursor:pointer}.chip:hover{border-color:var(--sage);color:var(--accent)}.switch{display:flex;align-items:center;gap:var(--gap-sm);font-size:.9rem;color:var(--ink-soft)}.switch input,.checklist__label input{width:1.15rem;height:1.15rem;accent-color:var(--sage-deep);flex:none}.sheet{position:fixed;inset:0;z-index:20;display:flex;align-items:flex-end;justify-content:center}.sheet__scrim{position:absolute;inset:0;border:none;padding:0;background-color:#33322d52;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);cursor:pointer;animation:fade-in .2s ease both}.sheet__panel{position:relative;width:min(34rem,100%);max-height:88dvh;display:flex;flex-direction:column;padding:var(--gap-sm) var(--gap) calc(var(--gap) + env(safe-area-inset-bottom,0px));background-color:var(--surface);border:1px solid var(--hairline);border-bottom:none;border-radius:24px 24px 0 0;box-shadow:var(--shadow-lift);animation:sheet-in .32s cubic-bezier(.22,.72,.28,1) both}@keyframes sheet-in{0%{transform:translateY(100%)}}@keyframes fade-in{0%{opacity:0}}.sheet__grip{width:2.5rem;height:4px;margin:0 auto var(--gap-sm);border-radius:4px;background-color:var(--hairline)}.sheet__header{display:flex;align-items:baseline;justify-content:space-between;gap:var(--gap-sm);padding-bottom:var(--gap-sm);border-bottom:1px solid var(--hairline)}.sheet__header h2{font-size:1.4rem}.sheet__body{display:flex;flex-direction:column;gap:var(--gap);padding-block:var(--gap);overflow-y:auto}.sheet__footer{padding-top:var(--gap-sm);border-top:1px solid var(--hairline)}.detail-section{display:flex;flex-direction:column;gap:var(--gap-sm)}.detail-section__title{display:flex;align-items:baseline;justify-content:space-between;font-size:1.1rem}.detail-section__count{font-family:var(--sans);font-size:.78rem;letter-spacing:.1em;color:var(--ink-soft)}.checklist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--gap-xs)}.checklist__row{display:flex;align-items:center;gap:var(--gap-xs)}.checklist__label{flex:1;display:flex;align-items:center;gap:var(--gap-sm);cursor:pointer}.checklist__text{transition:color .2s ease,opacity .2s ease}.checklist__text.is-done{text-decoration:line-through;color:var(--ink-soft)}.guest__head{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-sm);margin-bottom:var(--gap-sm)}.guest__name{font-size:1.15rem}.guest__controls{display:grid;grid-template-columns:repeat(auto-fit,minmax(7.5rem,1fr));gap:var(--gap-sm)}.chart__heading{font-size:1.2rem;margin-bottom:var(--gap-xs)}.chart__key{display:flex;align-items:center;gap:var(--gap-xs);font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:var(--gap)}.chart__key .chart__swatch:not(:first-child){margin-left:var(--gap-sm)}.chart__swatch{width:.7rem;height:.7rem;border-radius:2px;display:inline-block}.chart__swatch--planned{background-color:var(--sage)}.chart__swatch--spent{background-color:var(--terracotta)}.chart__rows{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--gap)}.chart__label{display:flex;justify-content:space-between;gap:var(--gap-sm);font-size:.88rem;margin-bottom:var(--gap-xs)}.chart__values{color:var(--ink-soft);font-variant-numeric:tabular-nums;white-space:nowrap}.chart__bars{display:flex;flex-direction:column;gap:4px}.chart__bar{display:block;height:9px;min-width:2px;border-radius:999px;transition:width .48s cubic-bezier(.22,.72,.28,1)}.chart__bar--planned{background-color:var(--sage);opacity:.55}.chart__bar--spent{background-color:var(--terracotta)}.chart__bar--spent.is-over{background-image:repeating-linear-gradient(45deg,transparent 0 4px,rgb(255 255 255 / 35%) 4px 8px)}.is-over{color:var(--terracotta)}.budget-row__head{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-sm);margin-bottom:var(--gap-sm)}.budget-row__head h3{font-size:1.1rem}.budget-row__inputs{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-sm)}.note__head{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-sm);margin-bottom:var(--gap-sm)}.note__head h3{font-size:1.15rem}.note__body textarea{background-color:transparent;border-color:transparent;padding:0;color:var(--ink-soft)}.note__body textarea:focus-visible{outline-offset:4px}.celebration{position:fixed;inset:0;z-index:40;pointer-events:none;overflow:hidden}.celebration__piece{position:absolute;top:-6vh;left:var(--left);width:7px;height:11px;border-radius:1px;opacity:0;animation:confetti-fall var(--duration) cubic-bezier(.35,.15,.55,1) var(--delay) both}.celebration__piece--0{background-color:var(--sage)}.celebration__piece--1{background-color:var(--terracotta-soft)}.celebration__piece--2{background-color:var(--terracotta)}.celebration__piece--3{background-color:#d8c9a3}@keyframes confetti-fall{0%{opacity:0;transform:translateZ(0) rotate(var(--rotation))}12%{opacity:.9}to{opacity:0;transform:translate3d(var(--drift),92vh,0) rotate(calc(var(--rotation) + 220deg))}}.celebration__announce,.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
