@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-vietnamese-wght-normal-CnvboYUG.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(data:font/woff2;base64,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)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-vietnamese-wght-normal-CHiFlh_0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-latin-ext-wght-normal-Dg-wlmqe.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-latin-wght-normal-CaVRRdDk.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--cream:#f6efe3;--paper:#fffbf3;--espresso:#2b211a;--espresso-soft:#5b4c40;--honey:#d8944a;--honey-deep:#b9772f;--clay:#b4552f;--sage:#7e9a86;--sage-soft:#e5ece5;--mist:#e7decf;--mist-deep:#d8cbb4;--bg:var(--cream);--surface:var(--paper);--text:var(--espresso);--text-muted:var(--espresso-soft);--border:var(--mist);--accent:var(--honey);--font-display:"Fraunces Variable", "Fraunces", Georgia, serif;--font-body:"Hanken Grotesk Variable", "Hanken Grotesk", system-ui, sans-serif;--font-mono:ui-monospace, "SF Mono", "SFMono-Regular", "Menlo", monospace;--step--1:.8rem;--step-0:1rem;--step-1:1.25rem;--step-2:1.563rem;--step-3:1.953rem;--step-4:2.441rem;--step-5:3.052rem;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2rem;--space-7:3rem;--space-8:4rem;--radius-sm:.5rem;--radius-md:.875rem;--radius-lg:1.25rem;--radius-pill:999px;--shadow-sm:0 1px 2px #2b211a0f;--shadow-md:0 6px 20px -8px #2b211a2e;--shadow-lg:0 18px 40px -16px #2b211a3d;--content-width:68rem}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:var(--step-0);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-weight:400;line-height:1.55}body:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(circle at 15% 12%,#d8944a0f,#0000 42%),radial-gradient(circle at 85% 8%,#7e9a8612,#0000 40%);position:fixed;inset:0}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.01em;font-variation-settings:"opsz" 120, "SOFT" 40, "WONK" 1;margin:0;font-weight:560;line-height:1.08}p{margin:0}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}img{max-width:100%;display:block}input,select,textarea,button{font-family:inherit}:focus-visible{outline:2.5px solid var(--clay);outline-offset:2px;border-radius:var(--radius-sm)}.numeric{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.02em}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}.container{width:100%;max-width:var(--content-width);padding-inline:var(--space-5);margin-inline:auto}.app-header{z-index:10;background:color-mix(in srgb, var(--cream) 88%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border);position:sticky;top:0}.app-header__inner{justify-content:space-between;align-items:center;gap:var(--space-5);padding-block:var(--space-4);display:flex}.brandmark{align-items:center;gap:var(--space-3);font-family:var(--font-display);font-size:var(--step-2);letter-spacing:-.02em;font-variation-settings:"opsz" 120, "SOFT" 60, "WONK" 1;font-weight:600;display:inline-flex}.brandmark__mark{color:var(--honey-deep);flex:none}.nav{gap:var(--space-2);display:flex}.nav-link{padding:var(--space-2) var(--space-4);border-radius:var(--radius-pill);font-size:var(--step--1);letter-spacing:.01em;color:var(--text-muted);font-weight:600;transition:background .18s,color .18s}.nav-link:hover{background:var(--sage-soft);color:var(--text)}.nav-link.is-active{background:var(--espresso);color:var(--cream)}.page{padding-block:var(--space-7) var(--space-8)}.page-head{justify-content:space-between;align-items:flex-end;gap:var(--space-5);margin-bottom:var(--space-6);flex-wrap:wrap;display:flex}.page-head__eyebrow{font-family:var(--font-mono);font-size:var(--step--1);text-transform:uppercase;letter-spacing:.16em;color:var(--honey-deep);margin-bottom:var(--space-2)}.page-head__title{font-size:var(--step-4)}.page-head__sub{color:var(--text-muted);margin-top:var(--space-2);max-width:42ch}.btn{--btn-bg:var(--espresso);--btn-fg:var(--cream);justify-content:center;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-radius:var(--radius-pill);background:var(--btn-bg);color:var(--btn-fg);font-weight:600;font-size:var(--step-0);border:1px solid #0000;line-height:1;transition:transform .12s,background .18s,box-shadow .18s;display:inline-flex}.btn:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn--primary{--btn-bg:var(--honey);--btn-fg:var(--espresso)}.btn--primary:hover{--btn-bg:var(--honey-deep);--btn-fg:var(--cream)}.btn--ghost{--btn-bg:transparent;--btn-fg:var(--text);border-color:var(--mist-deep)}.btn--ghost:hover{--btn-bg:var(--paper)}.btn--danger{--btn-bg:transparent;--btn-fg:var(--clay);border-color:color-mix(in srgb, var(--clay) 40%, transparent)}.btn--danger:hover{--btn-bg:var(--clay);--btn-fg:var(--cream)}.btn--sm{padding:var(--space-2) var(--space-4);font-size:var(--step--1)}.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;transform:none}.card-grid{gap:var(--space-5);grid-template-columns:repeat(auto-fill,minmax(19rem,1fr));display:grid}.recipe-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);cursor:pointer;flex-direction:column;transition:transform .16s,box-shadow .16s;display:flex;overflow:clip}.recipe-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-3px)}.recipe-card:focus-visible{outline:2px solid var(--honey);outline-offset:2px}.recipe-card__top{align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-5);border-bottom:1px dashed var(--mist-deep);display:flex}.recipe-card__bean-thumb{border-radius:var(--radius-md);object-fit:cover;background:var(--sage-soft);flex:none;width:2.75rem;height:2.75rem}.recipe-card__bean-thumb--placeholder{color:color-mix(in srgb, var(--text-muted) 60%, transparent);justify-content:center;align-items:center;display:flex}.recipe-card__bean-name{font-family:var(--font-display);font-size:var(--step-1);font-weight:560;line-height:1.1}.recipe-card__brewer{font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em}.recipe-card__brewer-icon{color:var(--honey-deep);flex:none;margin-left:auto}.brew-rating{align-items:center;gap:var(--space-3);padding:var(--space-5) var(--space-4) var(--space-5);background:radial-gradient(120% 90% at 50% 0%, color-mix(in srgb, var(--honey) 12%, transparent), transparent 70%);flex-direction:column;display:flex}.brew-rating__score{align-items:baseline;gap:var(--space-1);line-height:1;display:flex}.brew-rating__num{font-family:var(--font-display);font-size:var(--step-5);letter-spacing:-.03em;color:var(--clay);font-weight:620}.brew-rating__max{font-family:var(--font-mono);font-size:var(--step-1);color:var(--text-muted)}.brew-rating__caption{font-family:var(--font-mono);font-size:var(--step--1);text-transform:uppercase;letter-spacing:.14em;color:var(--text-muted)}.spec-grid{gap:var(--space-4) var(--space-2);padding:0 var(--space-5) var(--space-5);grid-template-columns:repeat(3,1fr);display:grid}.spec{text-align:center;min-width:0}.spec__value{font-family:var(--font-mono);font-size:var(--step-0);overflow-wrap:anywhere;font-weight:500}.spec__label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-muted);margin-top:var(--space-1);font-size:.7rem;display:block}.recipe-card__foot{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-5);border-top:1px solid var(--border);background:color-mix(in srgb, var(--sage-soft) 40%, transparent);margin-top:auto;display:flex}.recipe-card__date{font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-muted)}.card-actions{gap:var(--space-2);display:flex}.bean-rating{align-items:center;gap:3px;display:inline-flex}.bean-rating__bean{width:.85rem;height:.85rem;color:var(--mist-deep)}.bean-rating__bean.is-filled{color:var(--clay)}.bean-rating__score{margin-left:var(--space-2);font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-muted)}.field{margin-bottom:var(--space-5)}.field__label{font-weight:600;font-size:var(--step--1);margin-bottom:var(--space-2);display:block}.field__hint{font-size:var(--step--1);color:var(--text-muted);margin-top:var(--space-2)}.input,.select,.textarea{width:100%;padding:var(--space-3) var(--space-4);background:var(--surface);border:1px solid var(--mist-deep);border-radius:var(--radius-md);font-size:var(--step-0);color:var(--text);transition:border-color .16s,box-shadow .16s}.input:focus,.select:focus,.textarea:focus{border-color:var(--honey);box-shadow:0 0 0 3px color-mix(in srgb, var(--honey) 28%, transparent);outline:none}.field-row{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));display:grid}.segmented{gap:var(--space-2);flex-wrap:wrap;display:flex}.segmented__option{padding:var(--space-3) var(--space-4);border:1px solid var(--mist-deep);border-radius:var(--radius-md);background:var(--surface);font-size:var(--step--1);color:var(--text-muted);align-items:center;gap:var(--space-2);font-weight:600;transition:all .16s;display:inline-flex}.segmented__option:hover{border-color:var(--honey);color:var(--text)}.segmented__option.is-selected{background:var(--espresso);border-color:var(--espresso);color:var(--cream)}.empty{text-align:center;padding:var(--space-8) var(--space-5);border:1.5px dashed var(--mist-deep);border-radius:var(--radius-lg);background:color-mix(in srgb, var(--surface) 60%, transparent)}.empty__mark{color:var(--honey-deep);margin-bottom:var(--space-4)}.empty__title{font-family:var(--font-display);font-size:var(--step-2);margin-bottom:var(--space-2)}.empty__body{color:var(--text-muted);max-width:34ch;margin-inline:auto;margin-bottom:var(--space-5)}.badge{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3);border-radius:var(--radius-pill);background:var(--sage-soft);color:var(--espresso);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;font-size:.72rem;display:inline-flex}.toast-region{bottom:var(--space-5);z-index:50;gap:var(--space-2);flex-direction:column;width:min(26rem,100vw - 2rem);display:flex;position:fixed;left:50%;transform:translate(-50%)}.toast{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--espresso);color:var(--cream);box-shadow:var(--shadow-lg);font-size:var(--step--1);animation:.24s toast-in}.toast--error{background:var(--clay)}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}@media (width<=40rem){.app-header__inner{align-items:stretch;gap:var(--space-3);flex-direction:column}}.recipe-detail__top{align-items:center;gap:var(--space-4);padding-right:var(--space-6);display:flex}.recipe-detail__bean-thumb{border-radius:var(--radius-md);object-fit:cover;background:var(--sage-soft);flex:none;width:3.5rem;height:3.5rem}.recipe-detail__bean-thumb--placeholder{color:color-mix(in srgb, var(--text-muted) 60%, transparent);justify-content:center;align-items:center;display:flex}.recipe-detail__bean-name{font-family:var(--font-display);font-size:var(--step-2);font-weight:560;line-height:1.15}.recipe-detail__date{font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-muted);margin-top:var(--space-1)}.recipe-detail__rating{margin-top:var(--space-5)}.recipe-detail__review{margin-top:var(--space-4);color:var(--text-muted);font-style:italic}.recipe-detail__divider{border:none;border-top:1px dashed var(--mist-deep);margin:var(--space-5) 0}.recipe-detail__brewer{align-items:center;gap:var(--space-2);color:var(--honey-deep);margin-bottom:var(--space-4);font-weight:600;display:flex}.recipe-detail__section-title{font-family:var(--font-display);font-size:var(--step-1);margin:var(--space-5) 0 var(--space-3)}.recipe-detail__params{gap:var(--space-2);flex-direction:column;display:flex}.param-row{justify-content:space-between;align-items:baseline;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:1px solid var(--border);font-size:var(--step--1);display:flex}.param-row:last-child{border-bottom:none}.param-row__label{color:var(--text-muted)}.param-row__value{font-family:var(--font-mono);font-weight:500}.recipe-detail__params-empty{color:var(--text-muted);font-size:var(--step--1)}.modal-open{overflow:hidden}.modal-backdrop{z-index:100;padding:var(--space-6) var(--space-4);background:color-mix(in srgb, var(--espresso) 55%, transparent);justify-content:center;align-items:flex-start;animation:.16s modal-backdrop-in;display:flex;position:fixed;inset:0;overflow-y:auto}.modal__panel{width:min(32rem,100%);max-height:calc(100vh - var(--space-6) * 2);background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:var(--space-6);animation:.18s modal-panel-in;position:relative;overflow-y:auto}.modal__close{top:var(--space-4);right:var(--space-4);border-radius:var(--radius-pill);width:2rem;height:2rem;color:var(--text-muted);background:var(--paper);border:1px solid var(--border);justify-content:center;align-items:center;transition:background .16s,color .16s;display:inline-flex;position:absolute}.modal__close:hover{background:var(--sage-soft);color:var(--text)}@keyframes modal-backdrop-in{0%{opacity:0}}@keyframes modal-panel-in{0%{opacity:0;transform:translateY(8px)scale(.98)}}@media (width<=40rem){.modal-backdrop{padding:var(--space-4) var(--space-3);align-items:stretch}.modal__panel{width:100%;max-height:none;margin:auto}}.bean-form{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:var(--space-5);margin-bottom:var(--space-6)}.bean-form__preview{object-fit:cover;border-radius:var(--radius-md);border:1px solid var(--border);width:100%;max-width:14rem;max-height:14rem;margin-bottom:var(--space-5);display:block}.bean-form__preview[hidden]{display:none}.bean-list{min-height:4rem}.bean-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);cursor:pointer;flex-direction:column;transition:transform .16s,box-shadow .16s;display:flex;overflow:clip}.bean-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-3px)}.bean-card:focus-visible{outline:2px solid var(--honey);outline-offset:2px}.bean-card__photo-wrap{aspect-ratio:4/3;background:var(--sage-soft);position:relative}.bean-card__photo{object-fit:cover;width:100%;height:100%;display:block}.bean-card__photo.is-broken{opacity:0}.bean-card__photo--placeholder{color:color-mix(in srgb, var(--text-muted) 60%, transparent);background:var(--sage-soft);justify-content:center;align-items:center;display:flex}.bean-card__delete{top:var(--space-3);right:var(--space-3);background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);position:absolute}.bean-card__body{padding:var(--space-4) var(--space-5)}.bean-card__label{font-family:var(--font-display);font-size:var(--step-1);font-weight:560;line-height:1.15}.bean-card__date{font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-muted);margin-top:var(--space-1)}.bean-recipes__title{font-family:var(--font-display);font-size:var(--step-2);padding-right:var(--space-6);font-weight:560}.bean-recipes__sub{color:var(--text-muted);margin-top:var(--space-1)}.bean-recipes__sort{gap:var(--space-2);margin:var(--space-5) 0;display:flex}.chip{padding:var(--space-2) var(--space-4);border:1px solid var(--mist-deep);border-radius:var(--radius-pill);background:var(--surface);font-size:var(--step--1);color:var(--text-muted);font-weight:600;transition:all .16s}.chip:hover{border-color:var(--honey);color:var(--text)}.chip.is-selected{background:var(--espresso);border-color:var(--espresso);color:var(--cream)}.bean-recipes__list{gap:var(--space-3);flex-direction:column;display:flex}.bean-recipe-card{padding:var(--space-4);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--paper);cursor:pointer;transition:transform .14s,box-shadow .14s}.bean-recipe-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.bean-recipe-card:focus-visible{outline:2px solid var(--honey);outline-offset:2px}.bean-recipe-card__head{align-items:center;gap:var(--space-2);color:var(--honey-deep);margin-bottom:var(--space-3);display:flex}.bean-recipe-card__brewer{color:var(--text);font-weight:600}.bean-recipe-card__rating{font-family:var(--font-mono);font-size:var(--step--1);color:var(--clay);margin-left:auto}.bean-recipe-card__specs{gap:var(--space-2);grid-template-columns:repeat(3,1fr);display:grid}.recipe-form{gap:var(--space-2);flex-direction:column;max-width:42rem;display:flex}.create-recipe-page{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.create-recipe-page input,.create-recipe-page textarea{-webkit-user-select:auto;user-select:auto}.recipe-form__section-title{font-family:var(--font-display);font-size:var(--step-1);margin:var(--space-6) 0 var(--space-1)}.recipe-form__hint-block{background:var(--sage-soft);border-radius:var(--radius-md);padding:var(--space-4);color:var(--text-muted);margin-top:0}.brewer-fields__stack{gap:var(--space-2);flex-direction:column;display:flex}.pours-list{gap:var(--space-3);margin-bottom:var(--space-3);flex-direction:column;display:flex}.pour-row{gap:var(--space-3);grid-template-columns:1fr 1fr auto;align-items:end;display:grid}.pour-row .field{margin-bottom:0}.pour-card{gap:var(--space-2);padding:var(--space-3) var(--space-4) var(--space-2);border:1px solid var(--mist);border-radius:var(--radius-md);background:color-mix(in srgb, var(--cream) 45%, var(--paper));flex-direction:column;display:flex}.pour-card__head{align-items:center;gap:var(--space-3);display:flex}.pour-card__title{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--honey-deep);font-size:.68rem;font-weight:600}.pour-card__spacer{flex:1}.pour-card__head .switch--compact{margin-left:auto}.pour-card__remove{flex:none}.pour-card__dials{gap:var(--space-4);grid-template-columns:1fr 1fr;display:grid}.pour-card__dial{gap:var(--space-1);flex-direction:column;display:flex}.pour-card__dial-label{font-size:var(--step--1);color:var(--text-muted);font-weight:600}.rating-field{gap:var(--space-3);flex-direction:column;display:flex}.rating-field__slider{width:100%;accent-color:var(--honey-deep)}.rating-preview{display:flex}.switch{align-items:center;gap:var(--space-3);cursor:pointer;display:inline-flex}.switch__input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.switch__track{border-radius:var(--radius-pill);background:var(--mist-deep);flex:none;width:2.75rem;height:1.5rem;transition:background .16s;position:relative}.switch__track:after{content:"";background:var(--paper);width:1.25rem;height:1.25rem;box-shadow:var(--shadow-sm);border-radius:50%;transition:transform .16s;position:absolute;top:2px;left:2px}.switch__input:checked+.switch__track{background:var(--sage)}.switch__input:checked+.switch__track:after{transform:translate(1.25rem)}.switch__input:focus-visible+.switch__track{box-shadow:0 0 0 3px color-mix(in srgb, var(--honey) 28%, transparent)}.switch__label{font-size:var(--step--1);font-weight:600}.switch--compact{gap:var(--space-2)}.switch--compact .switch__track{width:2.1rem;height:1.15rem}.switch--compact .switch__track:after{width:.9rem;height:.9rem}.switch--compact .switch__input:checked+.switch__track:after{transform:translate(.95rem)}.switch--compact .switch__label{font-size:.7rem}.brew-card{gap:var(--space-5);padding:var(--space-5);margin:var(--space-4) 0 var(--space-5);background:var(--surface);border:1px solid var(--mist-deep);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);flex-direction:column;display:flex}.brew-card__head{flex-direction:column;gap:2px;display:flex}.brew-card__eyebrow{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--honey-deep);font-size:.68rem}.brew-card__title{font-family:var(--font-display);font-size:var(--step-2);margin:0;font-weight:600}.brew-card__group{gap:var(--space-3);flex-direction:column;display:flex}.brew-card__group-head{justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.brew-card__group-label{font-weight:600;font-size:var(--step--1)}.preset-chips{gap:var(--space-2);flex-wrap:wrap;display:flex}.preset-chip{border:1px solid var(--mist-deep);border-radius:var(--radius-pill);background:var(--surface);font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-muted);cursor:pointer;padding:4px 12px;font-weight:600;transition:all .14s}.preset-chip:hover{border-color:var(--honey);color:var(--text)}.preset-chips--clay .preset-chip:hover{border-color:var(--clay)}.preset-chips--honey .preset-chip.is-selected{background:var(--honey);border-color:var(--honey);color:var(--espresso)}.preset-chips--clay .preset-chip.is-selected{background:var(--clay);border-color:var(--clay);color:var(--paper)}.water-stat{padding:var(--space-4) var(--space-4) var(--space-5);border-radius:var(--radius-md);background:color-mix(in srgb, var(--sage) 15%, var(--paper));border:1px solid color-mix(in srgb, var(--sage) 42%, transparent);flex-direction:column;align-items:center;gap:2px;display:flex}.water-stat__label{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:color-mix(in srgb, var(--sage) 45%, var(--espresso));font-size:.68rem}.water-stat__value{font-family:var(--font-display);font-size:var(--step-5);letter-spacing:-.02em;color:var(--espresso);font-weight:600;line-height:1.05}.water-stat__note{font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-muted);margin-top:2px}.is-invalid{animation:.32s field-nudge}.field.is-invalid .input,.field.is-invalid .grinder-select__control{border-color:var(--clay);box-shadow:0 0 0 3px color-mix(in srgb, var(--clay) 20%, transparent)}.brew-card.is-invalid,.pour-card.is-invalid{border-color:color-mix(in srgb, var(--clay) 55%, var(--mist-deep));box-shadow:var(--shadow-md), 0 0 0 3px color-mix(in srgb, var(--clay) 16%, transparent)}.field-error{margin:var(--space-2) 0 0;font-size:var(--step--1);color:var(--clay);font-weight:600}.pour-card.is-invalid .field-error{margin-top:var(--space-1)}@keyframes field-nudge{0%,to{transform:translate(0)}25%{transform:translate(-3px)}75%{transform:translate(3px)}}@media (prefers-reduced-motion:reduce){.is-invalid{animation:none}}.form-actions{margin-top:var(--space-5);justify-content:flex-end;display:flex}@media (width<=40rem){.pour-row{grid-template-columns:1fr 1fr}.pour-row .btn{grid-column:span 2}.pour-card__dials{grid-template-columns:1fr}}.mslider{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;padding-bottom:var(--space-4);outline:none}.mslider--honey{--mslider-accent:var(--honey-deep)}.mslider--clay{--mslider-accent:var(--clay)}.mslider--grind{--mslider-accent:var(--espresso)}.mslider--heat{--mslider-accent:color-mix(in srgb, var(--clay) 82%, var(--honey-deep))}.mslider__value{text-align:center;font-family:var(--font-mono);font-size:var(--step-2);color:var(--mslider-accent);margin-bottom:var(--space-2);pointer-events:none;-webkit-user-select:none;user-select:none;font-weight:600}.mslider--sm .mslider__value{font-size:var(--step-0);margin-bottom:var(--space-1)}.mslider__viewport{border-radius:var(--radius-md);background:color-mix(in srgb, var(--sage-soft) 40%, transparent);border:1px solid var(--border);cursor:grab;touch-action:pan-y;height:64px;position:relative;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 12% 88%,#0000);mask-image:linear-gradient(90deg,#0000,#000 12% 88%,#0000)}.mslider--sm .mslider__viewport{border-radius:var(--radius-sm);height:46px}.mslider__viewport:active{cursor:grabbing}.mslider:focus-visible .mslider__viewport{box-shadow:0 0 0 3px color-mix(in srgb, var(--mslider-accent) 34%, transparent)}.mslider--heat .mslider__viewport{background:linear-gradient(to right, color-mix(in srgb, var(--sage) 30%, var(--paper)), color-mix(in srgb, var(--honey) 45%, var(--paper)) 62%, color-mix(in srgb, var(--clay) 60%, var(--paper)))}.mslider--grind .mslider__viewport{background:color-mix(in srgb, var(--mist) 55%, var(--paper))}.mslider__track{will-change:transform;height:100%;position:absolute;top:0;left:0}.mslider__tick{background:var(--mist-deep);width:2px;height:14px;position:absolute;top:12px;transform:translate(-1px)}.mslider__tick--major{background:var(--espresso-soft);height:22px;top:8px}.mslider--sm .mslider__tick{height:10px;top:9px}.mslider--sm .mslider__tick--major{height:16px;top:6px}.mslider__dot{background:color-mix(in srgb, var(--espresso) 62%, var(--mist-deep));border-radius:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.mslider__dot--major{background:var(--espresso)}.mslider__label{font-family:var(--font-mono);color:var(--text-muted);font-size:.68rem;position:absolute;top:36px;transform:translate(-50%)}.mslider--sm .mslider__label{font-size:.6rem;top:26px}.mslider__marker{background:var(--mslider-accent);border-radius:var(--radius-pill);pointer-events:none;width:3px;position:absolute;top:6px;bottom:6px;left:50%;transform:translate(-1.5px)}.grinder-select{-webkit-user-select:none;user-select:none;position:relative}.grinder-select__control{justify-content:space-between;align-items:center;gap:var(--space-2);text-align:left;cursor:pointer;min-height:44px;font-family:inherit;display:flex}.grinder-select__control svg{color:var(--text-muted);flex-shrink:0;transition:transform .16s}.grinder-select.is-open .grinder-select__control svg{transform:rotate(180deg)}.grinder-select__value{text-overflow:ellipsis;white-space:nowrap;color:var(--text);overflow:hidden}.grinder-select__value--placeholder{color:var(--text-muted)}.grinder-select__panel{top:calc(100% + var(--space-2));z-index:20;background:var(--surface);border:1px solid var(--mist-deep);border-radius:var(--radius-md);box-shadow:var(--shadow-md);flex-direction:column;display:none;position:absolute;left:0;right:0;overflow:hidden}.grinder-select.is-open .grinder-select__panel{display:flex}.grinder-select__search-row{align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);color:var(--text-muted);display:flex}.grinder-select__search-row svg{flex-shrink:0}.grinder-select__search{font-family:var(--font-body);font-size:var(--step-0);color:var(--text);background:0 0;border:none;outline:none;flex:1}.grinder-select__search::placeholder{color:var(--text-muted)}.grinder-select__list{padding:var(--space-1);max-height:14rem;margin:0;list-style:none;overflow-y:auto}.grinder-select__option{min-height:44px;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);color:var(--text);cursor:pointer;align-items:center;transition:background-color .12s;display:flex}.grinder-select__option:hover,.grinder-select__option.is-highlighted{background:var(--sage-soft)}.grinder-select__option[aria-selected=true]{color:var(--honey-deep);font-weight:600}.grinder-select__empty{min-height:44px;padding:var(--space-2) var(--space-3);color:var(--text-muted);align-items:center;font-style:italic;display:flex}.bean-carousel{--bcw:5.5rem;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;outline:none}.bean-carousel:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--honey-deep) 34%, transparent);border-radius:var(--radius-md)}.bean-carousel__viewport{cursor:grab;touch-action:pan-y;padding:var(--space-2) 0;overflow:hidden}.bean-carousel__viewport:active{cursor:grabbing}.bean-carousel__track{gap:var(--space-3);will-change:transform;display:flex}.bean-carousel__card{width:var(--bcw);align-items:center;gap:var(--space-2);padding:var(--space-1);border-radius:var(--radius-md);cursor:pointer;flex-direction:column;flex:none;transition:transform .16s,box-shadow .16s;display:flex}.bean-carousel__thumb{aspect-ratio:1;border-radius:var(--radius-md);background:var(--sage-soft);border:1px solid var(--border);width:100%;overflow:clip}.bean-carousel__thumb--placeholder{color:color-mix(in srgb, var(--text-muted) 60%, transparent);justify-content:center;align-items:center;display:flex}.bean-carousel__photo{object-fit:cover;pointer-events:none;width:100%;height:100%;display:block}.bean-carousel__photo.is-broken{opacity:0}.bean-carousel__label{text-align:center;width:100%;font-family:var(--font-body);font-size:var(--step--1);color:var(--text-muted);-webkit-line-clamp:2;text-overflow:ellipsis;pointer-events:none;-webkit-box-orient:vertical;line-height:1.25;display:-webkit-box;overflow:hidden}.bean-carousel__card.is-selected{transform:translateY(-2px)scale(1.04)}.bean-carousel__card.is-selected .bean-carousel__thumb{border-color:var(--honey-deep);box-shadow:0 0 0 3px color-mix(in srgb, var(--honey-deep) 30%, transparent), var(--shadow-md)}.bean-carousel__card.is-selected .bean-carousel__label{color:var(--text);font-weight:600}
