@font-face{font-family:"Baloo 2";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/baloo-2-latin-700-normal-CqTg7A15.woff2)format("woff2"),url(/assets/baloo-2-latin-700-normal-Ld3Zm3l2.woff)format("woff")}@font-face{font-family:"Baloo 2";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/baloo-2-vietnamese-700-normal-h4tlcePq.woff2)format("woff2"),url(/assets/baloo-2-vietnamese-700-normal-DoF59Mjc.woff)format("woff")}@font-face{font-family:"Baloo 2";font-style:normal;font-display:swap;font-weight:800;src:url(/assets/baloo-2-latin-800-normal-BbF3Etk1.woff2)format("woff2"),url(/assets/baloo-2-latin-800-normal-B8BXfZF7.woff)format("woff")}@font-face{font-family:"Baloo 2";font-style:normal;font-display:swap;font-weight:800;src:url(/assets/baloo-2-vietnamese-800-normal-ConLnEgt.woff2)format("woff2"),url(/assets/baloo-2-vietnamese-800-normal-GQACmpuv.woff)format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/be-vietnam-pro-latin-400-normal-PpnXBOrz.woff2)format("woff2"),url(/assets/be-vietnam-pro-latin-400-normal-bXgqVju9.woff)format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/be-vietnam-pro-vietnamese-400-normal-CRcqvyg1.woff2)format("woff2"),url(/assets/be-vietnam-pro-vietnamese-400-normal-BuGn0gnm.woff)format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/be-vietnam-pro-latin-500-normal-B6LVzGNe.woff2)format("woff2"),url(/assets/be-vietnam-pro-latin-500-normal-BJkVuMHw.woff)format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/be-vietnam-pro-vietnamese-500-normal-DREgrEoJ.woff2)format("woff2"),url(/assets/be-vietnam-pro-vietnamese-500-normal-CfdwVo8-.woff)format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/be-vietnam-pro-latin-600-normal-BZDkUTrt.woff2)format("woff2"),url(/assets/be-vietnam-pro-latin-600-normal-5IO4e7bK.woff)format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/be-vietnam-pro-vietnamese-600-normal-nyU-ZL2p.woff2)format("woff2"),url(/assets/be-vietnam-pro-vietnamese-600-normal-DkpCIyan.woff)format("woff")}:root{--color-surface-base:#fbf6ec;--color-surface-raised:#fff;--color-ink-primary:#3a2b22;--color-ink-secondary:#86735f;--color-ink-disabled:#c9bbae;--color-primary:#d9433b;--color-primary-pressed:#b8322b;--color-on-primary:#fff;--color-accent-tile:#2f8f83;--color-accent-warm:#f2a541;--color-accent-steel:#b9c0c7;--color-accent-clay:#c8693f;--color-border-soft:#efe3d0;--color-rarity-common:#9cc5a1;--color-rarity-rare:#4f97d6;--color-rarity-legend:#f2b531;--color-season-spring:#f7a6c1;--color-season-summer:#ffb547;--color-season-autumn:#d98a4e;--color-season-winter:#7fb3d5;--color-season-allyear:#b8a99a;--color-group-man:#c8693f;--color-group-rau:#6baa5c;--color-group-canh:#e0a33a;--color-tray:#e9d3ae;--color-danger:#e5534b;--font-display:"Baloo 2", system-ui, sans-serif;--font-body:"Be Vietnam Pro", system-ui, sans-serif;--text-display-family:var(--font-display);--text-display-size:2rem;--text-display-weight:800;--text-display-line:1.15;--text-title-family:var(--font-display);--text-title-size:1.375rem;--text-title-weight:700;--text-title-line:1.25;--text-body-family:var(--font-body);--text-body-size:1rem;--text-body-weight:400;--text-body-line:1.5;--text-label-family:var(--font-body);--text-label-size:.875rem;--text-label-weight:600;--text-label-line:1.3;--text-meta-family:var(--font-body);--text-meta-size:.75rem;--text-meta-weight:500;--text-meta-line:1.3;--radius-sm:10px;--radius-md:16px;--radius-lg:24px;--radius-full:9999px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-margin-mobile:16px;--shadow-soft:0 6px 20px #3a2b221a;--tab-bar-height:4rem;--content-max-width:480px}*,:before,:after{box-sizing:border-box}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--color-surface-base);min-height:100dvh;color:var(--color-ink-primary);font-family:var(--text-body-family);font-size:var(--text-body-size);font-weight:var(--text-body-weight);line-height:var(--text-body-line);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;margin:0}h1,h2,h3,p{margin:0}img{max-width:100%;display:block}button{font:inherit;color:inherit}.app-main{width:100%;max-width:var(--content-max-width);padding-inline:var(--space-margin-mobile);padding-top:calc(var(--space-4) + env(safe-area-inset-top,0px));padding-bottom:calc(var(--tab-bar-height) + var(--space-5) + env(safe-area-inset-bottom,0px));margin-inline:auto}.screen-title{font-family:var(--text-title-family);font-size:var(--text-title-size);font-weight:var(--text-title-weight);line-height:var(--text-title-line)}.field{gap:var(--space-2);flex-direction:column;display:flex}.field__label{font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);line-height:var(--text-label-line)}.input{min-height:48px;padding:var(--space-2) var(--space-4);border:1.5px solid var(--color-border-soft);border-radius:var(--radius-sm);background:var(--color-surface-raised);color:var(--color-ink-primary);font:inherit}.input:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:1px}.button-primary{min-height:48px;padding:var(--space-2) var(--space-5);border-radius:var(--radius-full);background:var(--color-primary);color:var(--color-on-primary);font-family:var(--text-title-family);font-size:var(--text-title-size);font-weight:var(--text-title-weight);line-height:var(--text-title-line);box-shadow:var(--shadow-soft);cursor:pointer;border:0}.button-primary:active{background:var(--color-primary-pressed)}.button-primary:disabled{background:var(--color-ink-disabled);box-shadow:none;cursor:default}.button-primary:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px}.button-secondary{min-height:48px;padding:var(--space-2) var(--space-5);border:1.5px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);color:var(--color-ink-primary);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);cursor:pointer}.button-secondary:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px}.form-error{color:var(--color-danger);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight)}.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}.button-danger{min-height:48px;padding:var(--space-2) var(--space-5);border-radius:var(--radius-full);background:var(--color-danger);color:#fff;font-family:var(--text-label-family);cursor:pointer;border:0;font-size:1rem;font-weight:700}.button-danger:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px}.food-editor{gap:var(--space-5);flex-direction:column;display:flex}.food-editor__list{border:0;min-width:0;margin:0;padding:0}.food-editor__heading{margin-bottom:var(--space-2);font-family:var(--text-title-family);font-size:1.125rem;font-weight:var(--text-title-weight);padding:0;display:block}.food-editor__lines{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.food-editor__line{align-items:center;gap:var(--space-2);display:flex}.food-editor__line .input{flex:1;min-width:0}.food-editor__number{min-width:1.6em;color:var(--color-ink-secondary);flex:none;font-weight:700}.food-editor__remove{border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);width:44px;height:44px;color:var(--color-ink-secondary);cursor:pointer;flex:none;place-items:center;display:grid}.food-editor__add{margin-top:var(--space-2)}.food-editor__note{min-height:88px;padding-top:var(--space-2);resize:vertical;font:inherit}.food-detail{gap:var(--space-5);overflow-wrap:anywhere;flex-direction:column;display:flex}.food-detail__heading{margin:0 0 var(--space-2);font-family:var(--text-title-family);font-size:var(--text-title-size);font-weight:var(--text-title-weight);line-height:var(--text-title-line)}.food-detail__ingredients,.food-detail__steps{gap:var(--space-2);flex-direction:column;margin:0;padding-left:1.4em;display:flex}.food-detail__empty{color:var(--color-ink-secondary)}.modal{z-index:20;padding:calc(var(--space-4) + env(safe-area-inset-top,0px)) var(--space-margin-mobile) calc(var(--space-4) + env(safe-area-inset-bottom,0px));justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal__dim{background:#2a211bb8;position:absolute;inset:0}.modal__dialog{width:100%;max-width:var(--content-max-width);flex-direction:column;max-height:100%;animation:.25s ease-out modal-in;display:flex;position:relative;overflow-y:auto}.modal__dialog:focus{outline:none}@keyframes modal-in{0%{opacity:0;transform:translateY(12px)}}@media (prefers-reduced-motion:reduce){.modal__dialog{animation:none}}.confirm-dialog{gap:var(--space-3);padding:var(--space-5) var(--space-4);border-radius:var(--radius-lg);background:var(--color-surface-raised);flex-direction:column;display:flex}.confirm-dialog__title{font-family:var(--text-title-family);font-size:var(--text-title-size);font-weight:var(--text-title-weight);margin:0}.confirm-dialog__title:focus{outline:none}.confirm-dialog__actions{gap:var(--space-3);margin-top:var(--space-2);display:flex}.confirm-dialog__actions>*{flex:1}.dish-image{aspect-ratio:4/3;border-radius:inherit;background:var(--color-border-soft);width:100%;position:relative;overflow:hidden}.dish-image img{object-fit:cover;width:100%;height:100%}.dish-image--empty{justify-content:center;align-items:center;gap:var(--space-1);background:var(--color-surface-base);color:var(--color-ink-secondary);flex-direction:column;display:flex}.dish-image__plate{width:56%;max-width:120px}.dish-image__label{font-family:var(--text-meta-family);font-size:var(--text-meta-size);font-weight:var(--text-meta-weight)}.group-tag{padding:2px var(--space-2);border-radius:var(--radius-full);color:#fff;font-family:var(--text-meta-family);font-size:var(--text-meta-size);font-weight:700;line-height:var(--text-meta-line);display:inline-block}.rarity-badge{font-family:var(--text-meta-family);font-size:var(--text-meta-size);font-weight:600;line-height:var(--text-meta-line);color:var(--color-ink-secondary);display:inline-block}.item-detail{gap:var(--space-3);padding:var(--space-4);border-radius:var(--radius-lg);background:var(--color-surface-raised);overflow-wrap:anywhere;flex-direction:column;display:flex}.item-detail__image{border-radius:var(--radius-md)}.item-detail__name{font-family:var(--text-title-family);font-size:var(--text-title-size);font-weight:var(--text-title-weight);line-height:var(--text-title-line);margin:0}.item-detail__name:focus{outline:none}.item-detail__meta{align-items:center;gap:var(--space-2);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.item-detail__facet{font-family:var(--text-meta-family);font-size:var(--text-meta-size);font-weight:var(--text-meta-weight);color:var(--color-ink-secondary);align-items:center;gap:6px;display:inline-flex}.item-detail__dot{border-radius:50%;width:10px;height:10px}.item-detail__actions{align-self:flex-start;gap:var(--space-2);margin-top:var(--space-2);display:flex}.item-detail__edit,.item-detail__delete{min-height:44px}.item-detail__delete{border-color:var(--color-danger);color:var(--color-danger)}.history{gap:var(--space-3);flex-direction:column;display:flex}.history__status{padding:var(--space-6) 0;text-align:center;color:var(--color-ink-secondary)}.history__list{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.history-row__wrap{position:relative}.history-row__swipe-hint{padding-right:var(--space-4);border-radius:var(--radius-md);color:#fff;background:#e5534b59;justify-content:flex-end;align-items:center;font-weight:700;display:flex;position:absolute;inset:0}.history-row__swipe-hint--armed{background:var(--color-danger)}.history-row{touch-action:pan-y;padding:var(--space-3);border:1px solid var(--color-border-soft);border-radius:var(--radius-md);background:var(--color-surface-raised);transition:transform .2s ease-out;position:relative}.history-row__when{margin-bottom:var(--space-2);color:var(--color-ink-secondary);font-family:var(--text-meta-family);font-size:var(--text-meta-size);font-weight:var(--text-meta-weight)}.history-row__dishes{gap:var(--space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.history-row__dish{align-items:center;gap:var(--space-1);width:88px;min-height:44px;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;flex-direction:column;padding:0;display:flex}.history-row__dish:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px;border-radius:var(--radius-sm)}.history-row__thumb{border-radius:var(--radius-sm);width:88px}.history-row__name{font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);text-align:center;overflow-wrap:anywhere;line-height:1.25}.history__more{align-items:center;gap:var(--space-2);padding:var(--space-3) 0;flex-direction:column;justify-content:center;display:flex}.history__close{min-height:44px;margin-bottom:var(--space-2);padding:0 var(--space-4);border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);color:var(--color-ink-primary);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);cursor:pointer;align-self:flex-end}.history-row[data-swiping]{transition:none}.history-row__head{justify-content:space-between;align-items:center;gap:var(--space-2);display:flex}.history-row__head .history-row__when{margin-bottom:0}.history-row__delete{border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);cursor:pointer;flex:none;place-items:center;width:44px;height:44px;display:grid}.history-row__delete:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px}@media (prefers-reduced-motion:reduce){.history-row{transition:none}}.chip-group{gap:var(--space-2);padding-block:var(--space-1);scrollbar-width:none;display:flex;overflow-x:auto}.chip-group:focus{outline:none}.chip{border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);height:36px;color:var(--color-ink-primary);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);white-space:nowrap;cursor:pointer;flex:none;align-items:center;gap:6px;margin-block:4px;padding:0 14px;display:inline-flex;position:relative}.chip:after{content:"";position:absolute;inset:-4px 0}.chip__dot{border-radius:50%;width:10px;height:10px}.chip--on{background:var(--color-accent-tile);border-color:var(--color-accent-tile);color:#fff}.chip--on .chip__dot{box-shadow:0 0 0 2px #fff}.chip:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px}.dish-card__wrap{width:100%;min-width:0;display:flex;position:relative}.dish-card__swipe-hint{padding-right:var(--space-4);border-radius:var(--radius-lg);color:#fff;background:#e5534b59;justify-content:flex-end;align-items:center;font-weight:700;display:flex;position:absolute;inset:0}.dish-card__swipe-hint--armed{background:var(--color-danger)}.dish-card{border:4px solid var(--color-rarity-common);border-radius:var(--radius-lg);background:var(--color-surface-raised);width:100%;min-width:0;box-shadow:var(--shadow-soft);color:inherit;font:inherit;text-align:left;cursor:pointer;touch-action:pan-y;flex-direction:column;padding:0;transition:transform .2s ease-out;display:flex;position:relative;overflow:hidden}.dish-card[data-swiping]{opacity:.85;transition:none}.dish-card:focus-visible{outline:3px solid var(--color-accent-tile);outline-offset:2px}.dish-card__image{border-radius:0}.dish-card__body{gap:var(--space-1);padding:var(--space-2) var(--space-3) var(--space-3);flex-direction:column;display:flex}.dish-card__name{font-family:var(--text-display-family);overflow-wrap:anywhere;font-size:1.125rem;font-weight:800;line-height:1.2}.dish-card__meta{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.dish-card__dot{border-radius:50%;width:10px;height:10px}@media (prefers-reduced-motion:reduce){.dish-card{transition:none}}.image-picker{gap:var(--space-2);flex-direction:column;display:flex}.image-picker__preview{border:2px dashed var(--color-border-soft);border-radius:var(--radius-md);cursor:pointer;background:0 0;width:100%;padding:0;display:block;position:relative;overflow:hidden}.image-picker__preview:focus-visible{outline:3px solid var(--color-accent-tile);outline-offset:2px}.image-picker__busy{background:#fbf6eccc;place-items:center;font-weight:700;display:grid;position:absolute;inset:0}.image-picker__options{gap:var(--space-2);flex-wrap:wrap;display:flex}.item-editor{padding:var(--space-4);border-radius:var(--radius-lg);background:var(--color-surface-base)}.item-editor__fields{gap:var(--space-4);border:0;flex-direction:column;min-width:0;margin:0;padding:0;display:flex}.item-editor__title{font-family:var(--text-title-family);font-size:var(--text-title-size);font-weight:var(--text-title-weight);margin:0}.item-editor__title:focus{outline:none}.item-editor__error{justify-content:space-between;align-items:center;gap:var(--space-2);margin-top:var(--space-4);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface-raised);color:var(--color-danger);font-weight:600;display:flex}.item-editor__actions{gap:var(--space-3);margin-top:var(--space-4);display:flex}.item-editor__actions>*{flex:1}.item-editor__actions--sticky{bottom:calc(-1 * var(--space-4));padding:var(--space-3) 0 var(--space-4);background:var(--color-surface-base);position:sticky}.item-editor__confirm,.library{gap:var(--space-3);flex-direction:column;display:flex}.library__search{margin-top:var(--space-2)}.library__status{padding:var(--space-6) 0;text-align:center;color:var(--color-ink-secondary)}.library__grid{gap:var(--space-3);margin:var(--space-2) 0 0;grid-template-columns:repeat(2,minmax(0,1fr));padding:0;list-style:none;display:grid}.library__grid>li{display:flex}.library__error{align-items:center;gap:var(--space-2);padding:var(--space-5) 0;text-align:center;flex-direction:column;display:flex}.library__close{min-height:44px;margin-bottom:var(--space-2);padding:0 var(--space-4);border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);color:var(--color-ink-primary);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);cursor:pointer;align-self:flex-end}.library__add{right:max(var(--space-margin-mobile), calc((100vw - var(--content-max-width)) / 2 + var(--space-margin-mobile)));bottom:calc(var(--tab-bar-height) + var(--space-4) + env(safe-area-inset-bottom,0px));z-index:11;border-radius:var(--radius-full);background:var(--color-primary);width:56px;height:56px;color:var(--color-on-primary);box-shadow:var(--shadow-soft);cursor:pointer;border:0;place-items:center;font-size:1.75rem;display:grid;position:fixed}.library__add:focus-visible{outline:3px solid var(--color-accent-tile);outline-offset:3px}.library__grid{padding-bottom:72px}.gacha-pot{transform-origin:50% 90%;width:220px;max-width:60vw;height:auto;animation:3s ease-in-out infinite pot-breathe}.gacha-pot__lid{transform-box:fill-box;transform-origin:50% 100%}.gacha-pot__steam path{stroke:var(--color-accent-steel);stroke-width:5px;fill:none;stroke-linecap:round;opacity:0;animation:2.4s ease-in-out infinite pot-steam}.gacha-pot__steam path:nth-child(2){animation-delay:.6s}.gacha-pot__steam path:nth-child(3){animation-delay:1.2s}.gacha-pot--boiling{animation:.18s linear infinite pot-boil}.gacha-pot--boiling .gacha-pot__lid{animation:.45s ease-in-out infinite pot-lid}.gacha-pot--boiling .gacha-pot__steam path{animation-duration:.9s}.gacha-pot__glow{opacity:0}.gacha-pot--teasing{animation:.12s linear infinite pot-boil-strong}.gacha-pot--teasing .gacha-pot__glow{animation:.8s ease-in forwards pot-glow}.gacha-pot--teasing .gacha-pot__lid{animation:.3s ease-in-out infinite pot-lid}.gacha-pot--teasing .gacha-pot__steam path{stroke-width:7px;animation-duration:.6s}@keyframes pot-boil-strong{25%{transform:translate(-4px)rotate(-2deg)}75%{transform:translate(4px)rotate(2deg)}}@keyframes pot-glow{to{opacity:1;filter:drop-shadow(0 0 8px var(--color-rarity-legend))}}.gacha-pot--opening.gacha-pot--flash-rare .gacha-pot__lid{animation:.6s cubic-bezier(.2,.9,.3,1.2) pot-lid-pop,.6s ease-out pot-flash-rare}@keyframes pot-flash-rare{30%{filter:drop-shadow(0 0 10px var(--color-rarity-rare)) brightness(1.3)}}.gacha-pot--opening.gacha-pot--flash-legend .gacha-pot__glow{animation:.5s ease-out forwards pot-glow-out}@keyframes pot-glow-out{0%{opacity:1}to{opacity:0}}.gacha-pot--opening .gacha-pot__lid{animation:.6s cubic-bezier(.2,.9,.3,1.2) pot-lid-pop}@keyframes pot-lid-pop{40%{transform:translateY(-46px)rotate(-14deg)}to{transform:none}}@keyframes pot-breathe{50%{transform:scale(1.03)}}@keyframes pot-boil{25%{transform:translate(-2px)rotate(-1deg)}75%{transform:translate(2px)rotate(1deg)}}@keyframes pot-lid{50%{transform:translateY(-10px)rotate(-4deg)}}@keyframes pot-steam{0%{opacity:0;transform:translateY(8px)}40%{opacity:.8}to{opacity:0;transform:translateY(-18px)}}@media (prefers-reduced-motion:reduce){.gacha-pot,.gacha-pot--boiling,.gacha-pot--teasing,.gacha-pot__glow,.gacha-pot__lid,.gacha-pot__steam path{animation:none!important}}.rarity-burst{z-index:-1;pointer-events:none;position:absolute;inset:-12px;overflow:visible}.rarity-burst__steam span{background:var(--color-accent-steel);opacity:0;border-radius:50%;width:10px;height:10px;animation:.7s ease-out forwards burst-steam;position:absolute;top:4px}.rarity-burst__steam span:first-child{left:30%}.rarity-burst__steam span:nth-child(2){animation-delay:.1s;left:45%}.rarity-burst__steam span:nth-child(3){animation-delay:.2s;left:60%}@keyframes burst-steam{20%{opacity:.7}to{opacity:0;transform:translateY(-12px)scale(1.6)}}.rarity-burst__sweep{border-radius:var(--radius-md);position:absolute;inset:8px;overflow:hidden}.rarity-burst__sweep:after{content:"";background:linear-gradient(100deg, transparent 30%, color-mix(in srgb, var(--color-rarity-rare) 55%, transparent) 50%, transparent 70%);animation:.8s ease-in-out forwards burst-sweep;position:absolute;inset:0;transform:translate(-100%)}@keyframes burst-sweep{to{transform:translate(100%)}}.rarity-burst__grain{background:var(--color-surface-raised);width:4px;height:7px;box-shadow:0 0 0 1px color-mix(in srgb, var(--color-ink-primary) 15%, transparent);opacity:0;border-radius:50%;animation:.8s ease-out forwards burst-grain;position:absolute;top:14px}.rarity-burst__grain--0{--dx:-8px;--dy:-12px;left:18%}.rarity-burst__grain--1{--dx:-3px;--dy:-16px;left:34%}.rarity-burst__grain--2{--dx:2px;--dy:-18px;left:50%}.rarity-burst__grain--3{--dx:5px;--dy:-14px;left:66%}.rarity-burst__grain--4{--dx:9px;--dy:-11px;left:82%}@keyframes burst-grain{10%{opacity:1}to{translate:var(--dx) var(--dy);opacity:0;rotate:200deg}}.rarity-burst__rays{border-radius:var(--radius-lg);opacity:0;animation:1.5s ease-in-out forwards burst-rays-fade;position:absolute;inset:0;overflow:hidden}.rarity-burst__rays:before{content:"";aspect-ratio:1;background:repeating-conic-gradient(var(--color-rarity-legend) 0 12deg, transparent 12deg 30deg);width:160%;animation:3s linear infinite burst-rays-spin;position:absolute;top:50%;left:50%;translate:-50% -50%}@keyframes burst-rays-fade{15%,75%{opacity:.4}to{opacity:0}}@keyframes burst-rays-spin{to{rotate:360deg}}.rarity-burst__sparkle{color:var(--color-rarity-legend);opacity:0;font-size:14px;line-height:1;animation:.75s ease-in-out 2 forwards burst-sparkle;position:absolute}.rarity-burst__sparkle--0{top:0;left:8%}.rarity-burst__sparkle--1{animation-delay:.2s;top:2px;right:6%}.rarity-burst__sparkle--2{animation-delay:.35s;bottom:0;right:18%}.rarity-burst__sparkle--3{animation-delay:.5s;bottom:2px;left:22%}@keyframes burst-sparkle{50%{opacity:1;scale:1.3}}.rarity-burst__label{z-index:2;border-radius:var(--radius-full);background:var(--color-rarity-legend);color:var(--color-ink-primary);font-family:var(--text-title-family);opacity:0;padding:0 8px;font-size:.8125rem;font-weight:700;animation:1.5s cubic-bezier(.2,.9,.3,1.4) forwards burst-label;position:absolute;top:-2px;right:16px}@keyframes burst-label{0%{opacity:0;translate:0 8px;scale:.6}20%,80%{opacity:1;translate:0;scale:1}to{opacity:0}}@media (prefers-reduced-motion:reduce){.rarity-burst{display:none}}.tray-overlay{z-index:20;padding:calc(var(--space-4) + env(safe-area-inset-top,0px)) var(--space-margin-mobile) calc(var(--space-4) + env(safe-area-inset-bottom,0px));justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.tray-overlay__dim{background:#2a211bb8;position:absolute;inset:0}.tray-dialog{width:100%;max-width:var(--content-max-width);flex-direction:column;align-items:stretch;max-height:100%;animation:.3s ease-out tray-in;display:flex;position:relative;overflow-y:auto}.tray-dialog:focus{outline:none}.tray-dialog__say{margin-bottom:var(--space-3);color:#fff;text-align:center;font-family:var(--text-title-family);font-size:var(--text-title-size);font-weight:var(--text-title-weight)}.meal-tray{padding:var(--space-3);border-radius:var(--radius-lg);background-color:var(--color-tray);box-shadow:inset 0 0 0 6px #d9bc8c, var(--shadow-soft);background-image:repeating-linear-gradient(45deg,#a078461f 0 6px,#0000 6px 12px);flex-direction:column;gap:10px;margin:0;list-style:none;display:flex}.meal-slot{isolation:isolate;min-height:96px;padding:var(--space-2);border:3px solid var(--color-rarity-common);border-radius:var(--radius-md);background:var(--color-surface-raised);align-items:center;gap:10px;display:flex;position:relative}.meal-slot__thumb{aspect-ratio:auto;border-radius:12px;flex:none;width:72px;height:72px}.meal-slot__info{flex:1;min-width:0}.meal-slot__name{font-family:var(--text-title-family);overflow-wrap:anywhere;margin:3px 0 1px;font-size:1.0625rem;font-weight:800;line-height:1.2}.meal-slot--empty{border-style:dashed;border-color:var(--color-border-soft);flex-wrap:wrap}.meal-slot__empty{margin-top:var(--space-1);color:var(--color-ink-secondary)}.tray-dialog__actions{margin-top:var(--space-4);gap:10px;display:flex}.tray-dialog__actions>*{flex:1}@keyframes tray-in{0%{opacity:0;transform:translateY(16px)}}@media (prefers-reduced-motion:reduce){.tray-dialog{animation:.3s ease-out tray-fade}@keyframes tray-fade{0%{opacity:0}}}.meal-slot--locked{background:var(--color-surface-base)}.meal-slot__controls{flex:none;gap:6px;display:flex}.slot-button{border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);cursor:pointer;flex:none;place-items:center;width:44px;height:44px;font-size:1.05rem;display:grid}.slot-button:disabled{opacity:.4;cursor:default}.slot-button--on{background:var(--color-accent-tile);border-color:var(--color-accent-tile)}.slot-button:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px}.tray-add{margin-top:var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface-raised)}.tray-add__label{margin-bottom:var(--space-2);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight)}.tray-add__options{gap:var(--space-2);flex-wrap:wrap;display:flex}.tray-add__link{min-height:44px;margin-top:var(--space-2);padding:0 var(--space-4);color:#fff;font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);cursor:pointer;background:0 0;border:0;align-self:center}.tray-add .tray-add__link{color:var(--color-ink-secondary);margin-top:0}.meal-slot__open{min-width:0;min-height:44px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:10px;padding:0;display:flex}.meal-slot__open:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px;border-radius:12px}.meal-slot__open .meal-slot__info,.meal-slot__open .meal-slot__name{display:block}.tray-dialog__back{min-height:44px;margin-bottom:var(--space-2);padding:0 var(--space-4);border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);color:var(--color-ink-primary);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);cursor:pointer;align-self:flex-start}.tray-dialog__commit{font-size:1.125rem}.tray-dialog__error{justify-content:space-between;align-items:center;gap:var(--space-2);margin-top:var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface-raised);color:var(--color-danger);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);display:flex}.tray-dialog__body{border:0;flex-direction:column;min-width:0;margin:0;padding:0;display:flex}.tray-reveal__skip{z-index:1;cursor:pointer;position:absolute;inset:0}.meal-slot--pending{visibility:hidden}.spin-screen{min-height:calc(100dvh - var(--tab-bar-height) - var(--space-4) - var(--space-5) - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));flex-direction:column;display:flex}.spin-screen:before{content:"";z-index:-1;pointer-events:none;opacity:.07;background-image:radial-gradient(circle at 50% 50%, transparent 9px, var(--color-accent-tile) 10px, var(--color-accent-tile) 12px, transparent 13px), conic-gradient(from 45deg, var(--color-accent-tile) 0 25%, transparent 0 50%, var(--color-accent-tile) 0 75%, transparent 0);background-size:56px 56px,28px 28px;position:fixed;inset:0}.spin-screen__top{justify-content:space-between;align-items:center;display:flex}.set-picker{border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);min-height:44px;color:var(--color-ink-secondary);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);padding:6px 14px}.set-picker[aria-disabled=true]{cursor:default}.spin-screen__greeting{margin:var(--space-3) 0 var(--space-2);font-family:var(--text-display-family);font-size:var(--text-display-size);font-weight:var(--text-display-weight);line-height:var(--text-display-line)}.spin-screen__stage{flex:1;place-items:center;min-height:240px;display:grid}.spin-screen__hint{text-align:center;color:var(--color-ink-secondary)}.spin-screen__error{align-items:center;gap:var(--space-2);text-align:center;flex-direction:column;display:flex}.spin-button{width:calc(100% - var(--space-6));height:64px;margin:var(--space-4) auto 0;border-radius:var(--radius-full);background:var(--color-primary);color:var(--color-on-primary);font-family:var(--text-title-family);font-size:var(--text-title-size);font-weight:var(--text-title-weight);box-shadow:0 6px 0 var(--color-primary-pressed), var(--shadow-soft);cursor:pointer;border:0;transition:transform 80ms ease-out,box-shadow 80ms ease-out;display:block}.spin-button:active:not(:disabled):not([data-spinning]){box-shadow:0 2px 0 var(--color-primary-pressed), var(--shadow-soft);transform:translateY(4px)}.spin-button[data-spinning]{background:var(--color-primary-pressed);box-shadow:0 2px 0 var(--color-primary-pressed);cursor:default;transform:translateY(4px)}.spin-button:disabled{background:var(--color-ink-disabled);box-shadow:none;cursor:default}.spin-button:focus-visible{outline:3px solid var(--color-accent-tile);outline-offset:3px}.spin-screen__gear{border:1px solid var(--color-border-soft);border-radius:var(--radius-full);background:var(--color-surface-raised);width:44px;height:44px;color:var(--color-ink-primary);place-items:center;font-size:1.25rem;text-decoration:none;display:grid}.spin-screen__gear:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:2px}@media (prefers-reduced-motion:reduce){.spin-button{transition:none}}.login{width:100%;max-width:var(--content-max-width);min-height:100dvh;padding:calc(var(--space-7) + env(safe-area-inset-top,0px)) var(--space-margin-mobile) var(--space-6);text-align:center;flex-direction:column;align-items:center;margin-inline:auto;display:flex}.login__logo{width:96px;height:96px}.login__title{margin-top:var(--space-4);font-family:var(--text-display-family);font-size:var(--text-display-size);font-weight:var(--text-display-weight);line-height:var(--text-display-line)}.login__subtitle{margin-top:var(--space-2);color:var(--color-ink-secondary)}.login__form{gap:var(--space-4);width:100%;margin-top:var(--space-6);text-align:left;flex-direction:column;display:flex}.login__form .button-primary{margin-top:var(--space-2)}.toaster{inset-inline:0;top:calc(var(--space-4) + env(safe-area-inset-top,0px));z-index:30;padding:0 var(--space-margin-mobile);pointer-events:none;justify-content:center;display:flex;position:fixed}.toast{max-width:var(--content-max-width);padding:var(--space-3) var(--space-5);border-radius:var(--radius-full);background:var(--color-accent-warm);color:var(--color-ink-primary);font-family:var(--text-label-family);box-shadow:var(--shadow-soft);font-size:1rem;font-weight:700;animation:.25s ease-out toast-in}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}@media (prefers-reduced-motion:reduce){.toast{animation:none}}.tab-bar{inset-inline:0;z-index:10;background:var(--color-surface-raised);border-top:1px solid var(--color-border-soft);padding-bottom:env(safe-area-inset-bottom,0px);position:fixed;bottom:0}.tab-bar__list{max-width:var(--content-max-width);padding:0 var(--space-margin-mobile);margin:0 auto;list-style:none;display:flex}.tab-bar__item{flex:1}.tab-bar__link{height:var(--tab-bar-height);min-width:48px;padding-block:var(--space-2);color:var(--color-ink-secondary);font-family:var(--text-label-family);font-size:var(--text-label-size);font-weight:var(--text-label-weight);line-height:var(--text-label-line);border-radius:var(--radius-md);flex-direction:column;justify-content:center;align-items:center;gap:2px;text-decoration:none;display:flex}.tab-bar__label{white-space:nowrap}.tab-bar__link[aria-current=page]{color:var(--color-primary)}.tab-bar__link:focus-visible{outline:2px solid var(--color-accent-tile);outline-offset:-4px}
