:root{--ink:#26312e;--muted:#78807a;--surface:#f1ede5;--paper:#fffcf7;--line:#d9d5cb;--sage:#dce7dc;--mist:#b9c7bf;--teal:#4d776e;--terracotta:#c76548;--gold:#e7b75e;color:var(--ink);background:var(--surface);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Avenir Next,Segoe UI,sans-serif}html{scrollbar-gutter:stable both-edges}#root{min-height:100svh}body{min-width:320px;margin:0}*{box-sizing:border-box}::selection{color:var(--paper);background:var(--terracotta)}.app{width:min(100% - 32px,760px);margin:0 auto;padding-bottom:64px}.welcome{padding:40px 4px 14px}.welcome-hi{color:var(--muted);letter-spacing:.28em;text-transform:uppercase;font-size:13px;font-weight:600;display:block}.welcome-names{color:var(--ink);letter-spacing:-.01em;margin:8px 0 0;font-family:Fraunces,Georgia,serif;font-size:clamp(40px,10vw,68px);font-weight:400;line-height:1.02}.welcome-names span{color:var(--terracotta);font-style:italic;font-weight:500}.bar{z-index:2;background:var(--surface);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:14px 0;display:flex;position:sticky;top:0}.tabs{gap:4px;display:flex}.tabs button{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:999px;align-items:center;gap:7px;padding:8px 12px;font-size:15px;font-weight:600;display:inline-flex}.tabs button.is-active{color:var(--ink);background:var(--paper)}.tabs button span{min-width:20px;height:20px;color:var(--muted);background:var(--sage);border-radius:999px;place-items:center;padding:0 5px;font-size:11px;font-weight:700;display:grid}.tabs button.is-active span{color:var(--paper);background:var(--teal)}.bar-actions{align-items:center;gap:8px;display:flex}.new-button{color:var(--paper);background:var(--ink);font:inherit;cursor:pointer;border:0;border-radius:999px;align-items:center;gap:5px;padding:9px 14px;font-size:14px;font-weight:600;display:inline-flex}.new-button:hover{background:var(--teal)}.icon-button{border:1px solid var(--line);width:38px;height:38px;color:var(--ink);background:var(--paper);cursor:pointer;border-radius:50%;place-items:center;padding:0;display:grid}.icon-button:hover{background:var(--sage)}.icon-button.danger{color:var(--terracotta)}.icon-button.danger:hover{color:var(--paper);background:var(--terracotta);border-color:var(--terracotta)}.content{margin-top:8px}.empty{color:var(--muted);text-align:center;padding:72px 0}.list{margin:0;padding:0;list-style:none}.card{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:18px 4px;display:flex}.card-main{min-width:0}.recipe-card{align-items:flex-start}.tag{color:var(--muted);font-size:12px}.card h3,.memory-body h3{color:var(--ink);margin:6px 0 0;font-family:Fraunces,Georgia,serif;font-size:20px;font-weight:500}.card p,.memory-body p{color:var(--muted);margin:6px 0 0;font-size:14px;line-height:1.5}.place,.rating{color:var(--muted);align-items:center;gap:4px;margin-top:9px;font-size:13px;display:inline-flex}.place svg{color:var(--terracotta);font-size:17px}.rating{color:var(--gold);font-weight:600}.rating svg{font-size:17px}.recipe-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:12px;margin-top:9px;font-size:13px;display:flex}.recipe-meta .rating{margin-top:0}.recipe-source{color:var(--teal);align-items:center;gap:4px;margin-top:10px;font-size:13px;text-decoration:none;display:inline-flex}.recipe-source:hover{color:var(--terracotta)}.recipe-source svg{font-size:17px}.done-button{border:1px solid var(--line);color:var(--teal);background:var(--paper);font:inherit;cursor:pointer;border-radius:999px;flex:none;align-items:center;gap:5px;padding:8px 12px;font-size:13px;display:inline-flex}.done-button:hover{border-color:var(--teal)}.card-actions{flex:none;align-items:center;gap:8px;display:flex}.filters{flex-wrap:wrap;align-items:center;gap:8px;padding:14px 0 4px;display:flex}.search-field{border:1px solid var(--line);min-width:150px;color:var(--muted);background:var(--paper);border-radius:999px;flex:180px;align-items:center;gap:6px;padding:0 11px;display:flex}.search-field:focus-within{border-color:var(--teal)}.search-field input{width:100%;min-height:38px;color:var(--ink);font:inherit;background:0 0;border:0;outline:none;font-size:14px}.filters select{border:1px solid var(--line);min-height:40px;color:var(--ink);background:var(--paper);font:inherit;border-radius:999px;outline:none;padding:0 10px;font-size:14px}.filters select:focus{border-color:var(--teal)}.archive-toggle{border:1px solid var(--line);min-height:40px;color:var(--muted);background:var(--paper);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:0 13px;font-size:14px;display:inline-flex}.archive-toggle:hover{border-color:var(--teal)}.archive-toggle.is-active{color:var(--paper);background:var(--ink);border-color:var(--ink)}.archive-toggle span{min-width:20px;height:20px;color:var(--muted);background:var(--sage);border-radius:999px;place-items:center;padding:0 5px;font-size:11px;font-weight:700;display:grid}.archive-toggle.is-active span{color:var(--ink);background:var(--paper)}.wheel-button{border:1px solid var(--terracotta);min-height:40px;color:var(--terracotta);background:var(--paper);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:0 13px;font-size:14px;display:inline-flex}.wheel-button:hover:not(:disabled){color:var(--paper);background:var(--terracotta)}.wheel-button:disabled{opacity:.45;cursor:not-allowed}.calendar-head{justify-content:space-between;align-items:center;gap:12px;padding:18px 0 14px;display:flex}.calendar-head h2{color:var(--ink);text-transform:capitalize;margin:0;font-family:Fraunces,Georgia,serif;font-size:24px;font-weight:500}.calendar-grid{grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;display:grid}.calendar-weekday{color:var(--muted);text-align:center;text-transform:uppercase;letter-spacing:.08em;padding-bottom:4px;font-size:12px;font-weight:600}.calendar-day{aspect-ratio:1;color:var(--muted);font:inherit;background:0 0;border:0;border-radius:12px;place-items:center;padding:0;font-size:14px;display:grid;position:relative;overflow:hidden}.calendar-day.has-memory{color:var(--paper);background:var(--teal);cursor:pointer;font-weight:700}.calendar-day.has-memory img{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.calendar-day.has-memory .day-number{z-index:1;position:relative}.calendar-day.has-photo .day-number{background:#26312e8c;border-radius:999px;padding:1px 7px;font-size:12px}.calendar-day.has-multiple{box-shadow:3px 3px 0 var(--sage), 6px 6px 0 var(--line);overflow:visible}.calendar-day.has-multiple .memory-count{z-index:1;min-width:19px;height:19px;color:var(--paper);background:#26312eb8;border-radius:999px;place-items:center;padding:0 4px;font-size:11px;line-height:1;display:grid;position:absolute;bottom:4px;right:4px}.calendar-day.has-memory:hover{outline:2px solid var(--terracotta);outline-offset:1px}.calendar .empty{padding:40px 0}.detail{scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;outline:none;display:flex;overflow-x:auto}.detail::-webkit-scrollbar{display:none}.detail-entry{scroll-snap-align:start;flex:0 0 100%;min-width:0;padding:20px 20px 12px}.detail-nav{color:var(--muted);justify-content:center;align-items:center;gap:16px;padding:0 20px 22px;font-size:13px;display:flex}.detail-nav button:disabled{opacity:.35;cursor:default}.detail-entry img{object-fit:cover;border-radius:10px;width:100%;max-height:380px;margin-bottom:12px;display:block}.detail-entry h3{color:var(--ink);margin:0;font-family:Fraunces,Georgia,serif;font-size:22px;font-weight:500}.detail-entry p{color:var(--muted);margin:8px 0 0;font-size:14px;line-height:1.5}.memory-foot{justify-content:space-between;align-items:center;gap:8px;display:flex}.memory-foot .place,.memory-foot .rating{margin-top:12px}.lock{background:var(--ink);place-items:center;min-height:100svh;display:grid}.lock form{gap:10px;display:flex}.lock input{width:180px;height:52px;color:var(--paper);font:inherit;letter-spacing:.3em;text-align:center;background:#1c2521;border:1px solid #3a453f;border-radius:8px;outline:none;padding:0 16px;font-size:22px}.lock input:focus{border-color:var(--teal)}.lock input.has-error{border-color:var(--terracotta);animation:.3s shake}.lock button{height:52px;color:var(--paper);background:var(--teal);font:inherit;cursor:pointer;border:0;border-radius:8px;padding:0 20px;font-size:15px;font-weight:600}@keyframes shake{25%{transform:translate(-6px)}75%{transform:translate(6px)}}.sheet-backdrop{z-index:10;background:#26312e80;align-items:end;display:grid;position:fixed;inset:0}.sheet{background:var(--paper);border-radius:14px 14px 0 0;width:min(100%,560px);max-height:92svh;margin:0 auto;overflow:auto}.sheet>header{border-bottom:1px solid var(--line);background:var(--paper);justify-content:space-between;align-items:center;padding:18px 20px;display:flex;position:sticky;top:0}.sheet h2{margin:0;font-family:Fraunces,Georgia,serif;font-size:25px;font-weight:500}.sheet form{gap:16px;padding:20px 20px 32px;display:grid}.sheet label{color:var(--muted);gap:7px;font-size:13px;display:grid}.sheet input,.sheet textarea,.sheet select{border:1px solid var(--line);width:100%;min-height:44px;color:var(--ink);font:inherit;background:#fffefa;border-radius:8px;outline:none;padding:10px 11px;font-size:15px}.sheet input:focus,.sheet textarea:focus,.sheet select:focus{border-color:var(--teal)}.wheel-backdrop{align-items:center;padding:16px;overflow-y:auto}.wheel-dialog{border-radius:14px;width:min(100%,620px);max-height:calc(100svh - 32px)}.wheel-dialog>header{padding:16px 20px}.wheel-dialog .icon-button:disabled{opacity:.45;cursor:wait}.wheel-kicker{color:var(--terracotta);letter-spacing:.16em;text-transform:uppercase;margin-bottom:3px;font-size:11px;font-weight:700;display:block}.wheel-content{justify-items:center;gap:14px;padding:10px 20px 24px;display:grid}.wheel-description,.wheel-status{min-height:20px;color:var(--muted);text-align:center;margin:0;font-size:13px}.wheel-stage{aspect-ratio:1;width:min(100%,420px);margin:2px auto 0;position:relative}.wheel-pointer{z-index:1;border-right:14px solid #0000;border-top:28px solid var(--terracotta);filter:drop-shadow(0 2px 1px #26312e2e);border-left:14px solid #0000;width:0;height:0;position:absolute;top:0;left:50%;transform:translate(-50%)}.recipe-wheel{width:100%;height:100%;display:block;overflow:visible}.wheel-rotor{transform-box:view-box;transform-origin:50%;transition:transform 5.8s cubic-bezier(.12,.72,.16,1)}.wheel-edge{fill:none;stroke:var(--ink);stroke-width:4px}.wheel-center{fill:var(--paper);stroke:var(--ink);stroke-width:3px}.wheel-center-label{fill:var(--ink);font-family:Fraunces,Georgia,serif;font-size:28px;font-weight:600}.wheel-winner{border:1px solid var(--terracotta);background:var(--paper);border-radius:10px;width:100%;padding:15px 18px;animation:.45s both wheel-result-in}.wheel-winner-label{color:var(--terracotta);letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:5px;font-size:12px;font-weight:700;display:inline-flex}.wheel-winner-label svg{font-size:17px}.wheel-winner h3{color:var(--ink);overflow-wrap:anywhere;margin:7px 0 0;font-family:Fraunces,Georgia,serif;font-size:25px;font-weight:500}.wheel-winner .tag{margin-top:5px;display:block}.wheel-winner .recipe-meta{margin-top:8px}.wheel-spin{width:100%;min-height:46px;color:var(--paper);background:var(--ink);font:inherit;cursor:pointer;border:0;border-radius:8px;justify-content:center;align-items:center;gap:6px;font-size:15px;font-weight:600;display:inline-flex}.wheel-spin:hover:not(:disabled){background:var(--teal)}.wheel-spin:disabled{opacity:.6;cursor:progress}@keyframes wheel-result-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@media (prefers-reduced-motion:reduce){.wheel-rotor,.wheel-winner{transition-duration:.01ms;animation-duration:.01ms}}.sheet textarea{resize:vertical}.pair{grid-template-columns:1fr 1fr;gap:12px;display:grid}.photo-picker{border:1px dashed var(--line);cursor:pointer;background:#fffefa;border-radius:10px;place-items:center;min-height:150px;display:grid;position:relative;overflow:hidden}.photo-picker:hover{border-color:var(--teal)}.photo-picker img{object-fit:cover;width:100%;max-height:320px}.photo-hint{color:var(--muted);place-items:center;gap:6px;padding:24px 0;font-size:13px;display:grid}.photo-hint svg{color:var(--teal);font-size:28px}.photo-picker input{opacity:0;cursor:pointer;min-height:0;position:absolute;inset:0}.save{min-height:46px;color:var(--paper);background:var(--ink);font:inherit;cursor:pointer;border:0;border-radius:8px;font-size:15px;font-weight:600}.save:hover{background:var(--teal)}.save:disabled{opacity:.6;cursor:progress}.error{color:var(--terracotta);margin:0;font-size:13px}.welcome-together{border:1px solid var(--line);color:var(--ink);background:var(--paper);font:inherit;cursor:pointer;border-radius:999px;flex-wrap:wrap;align-items:center;gap:7px;margin-top:12px;padding:7px 13px 7px 11px;font-size:13px;font-weight:600;display:inline-flex}.welcome-together:hover{border-color:var(--terracotta)}.welcome-together svg{color:var(--terracotta);font-size:15px}.welcome-together span{color:var(--muted);font-weight:500}.welcome-together span:before{content:"·";margin-right:7px}.together-hero{border-bottom:1px solid var(--line);text-align:center;padding:28px 0 22px}.together-kicker{color:var(--muted);letter-spacing:.16em;text-transform:uppercase;font-size:12px;font-weight:700;display:block}.together-value{color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere;margin:12px 0 0;font-family:Fraunces,Georgia,serif;font-size:clamp(38px,11vw,66px);font-weight:500;line-height:1.04}.together-value.is-span{font-size:clamp(24px,6vw,36px)}.together-unit{color:var(--terracotta);margin:8px 0 0;font-size:15px;font-weight:600}.together-hint{max-width:44ch;color:var(--muted);margin:10px auto 0;font-size:13px;line-height:1.5}.together-picker{border-bottom:1px solid var(--line);color:var(--muted);align-items:center;gap:10px;padding:16px 0;font-size:13px;display:flex}.together-picker select{border:1px solid var(--line);min-height:42px;color:var(--ink);background:var(--paper);font:inherit;border-radius:999px;outline:none;flex:1;padding:0 10px;font-size:14px}.together-picker select:focus{border-color:var(--teal)}.milestone-next{border:1px solid var(--terracotta);background:var(--paper);border-radius:12px;margin-top:20px;padding:16px 18px}.milestone-next h3{color:var(--ink);margin:5px 0 0;font-family:Fraunces,Georgia,serif;font-size:24px;font-weight:500}.milestone-bar{background:var(--sage);border-radius:999px;height:7px;margin-top:12px;overflow:hidden}.milestone-bar span{background:var(--terracotta);border-radius:999px;height:100%;transition:width .6s;display:block}.milestone-countdown{color:var(--muted);align-items:center;gap:5px;margin:9px 0 0;font-size:13px;display:flex}.together-subhead{color:var(--muted);letter-spacing:.14em;text-transform:uppercase;margin:26px 0 0;font-size:12px;font-weight:700}.milestone-row{border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:14px 4px;display:flex}.milestone-row>svg{color:var(--terracotta);flex:none}.milestone-row.is-upcoming>svg{color:var(--mist)}.milestone-row>div{flex:1;min-width:0}.milestone-row strong{color:var(--ink);font-size:15px}.milestone-row p{color:var(--muted);margin:3px 0 0;font-size:13px}.milestone-row .tag{flex:none}.celebration{position:relative;overflow:hidden}.celebration>header,.celebration-content{z-index:2;position:relative}.celebration-content{text-align:center;gap:12px;padding:18px 20px 26px;display:grid}.celebration-note{color:var(--ink);margin:0;font-family:Fraunces,Georgia,serif;font-size:19px}.celebration-span{color:var(--muted);margin:0;font-size:14px}.confetti{z-index:1;pointer-events:none;position:absolute;inset:0;overflow:hidden}.confetti i{border-radius:2px;width:8px;height:14px;animation-name:confetti-fall;animation-timing-function:linear;animation-iteration-count:infinite;position:absolute;top:-16px}@keyframes confetti-fall{0%{opacity:0;transform:translateY(0)}12%{opacity:1}to{opacity:0;transform:translateY(420px)}}@media (prefers-reduced-motion:reduce){.confetti{display:none}.milestone-bar span{transition:none}}@media (width<=560px){.bar{gap:8px}.tabs{min-width:0;overflow-x:auto}.tabs button{flex:none}.calendar-grid{gap:4px}.calendar-day{border-radius:9px;font-size:13px}.card{flex-direction:column;align-items:stretch}.card-actions{justify-content:flex-end}.pair{grid-template-columns:1fr}.wheel-backdrop{padding:8px}.wheel-dialog{max-height:calc(100svh - 16px)}.wheel-content{padding-left:16px;padding-right:16px}.tabs button{padding:8px 10px;font-size:14px}}
