/* #653-#657/#654 stabilization layer. Shared visual rules only: no routing/business logic. */
:root{
  --surface-raised:var(--card);
  --surface-soft:#f1f5ef;
  --surface-soft-strong:#eaf0e8;
  --surface-overlay:rgba(20,25,19,.38);
  --shadow-soft:0 12px 34px rgba(31,45,29,.10);
  --shadow-sheet:0 22px 70px rgba(20,28,18,.22);
}
html.jroon-night{
  --surface-raised:#202920;
  --surface-soft:#293329;
  --surface-soft-strong:#303c30;
  --surface-overlay:rgba(5,9,5,.64);
  --shadow-soft:0 12px 34px rgba(0,0,0,.28);
  --shadow-sheet:0 24px 76px rgba(0,0,0,.42);
}

/* Settings toolbar: same 2D line language as the notification bell. */
.native-app-menu-trigger{display:grid!important;place-items:center!important;padding:0!important}
.native-app-settings-icon{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.native-app-menu-item{transition:background-color .12s ease,border-color .12s ease,transform .08s ease,opacity .12s ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.native-app-menu-item:active,.native-app-menu-item.is-pressed{transform:scale(.985);background:color-mix(in srgb,var(--accent) 12%,var(--surface-soft))!important}
.native-app-menu-danger:active,.native-app-menu-danger.is-pressed{background:color-mix(in srgb,var(--danger) 13%,var(--surface-soft))!important}
.native-app-theme-toggle{width:100%}
.native-app-menu-popover{box-shadow:var(--shadow-soft)}
html.jroon-night .native-app-menu-divider{border-color:var(--line)!important}

/* A real scroll lock for the native settings menu. JS preserves/restores scrollY. */
body.jroon-native-menu-locked{position:fixed!important;left:0;right:0;width:100%;overflow:hidden!important;overscroll-behavior:none;touch-action:none}
body.jroon-native-menu-locked .native-app-menu-popover{touch-action:pan-y;overscroll-behavior:contain}

/* Top-level sections have no hierarchical back action; nested shelf source mode keeps it. */
body.jroon-top-level-section .section-header-leading{pointer-events:none}
body.jroon-top-level-section .section-header-back{display:none!important}

/* Recipe CTA uses the canonical primary action shape. */
.favorites-recipe-action{min-height:44px!important;padding:0 15px!important;border-radius:15px!important;display:inline-flex!important;align-items:center!important;justify-content:center!important;gap:7px!important;box-shadow:0 5px 16px rgba(79,159,55,.18)}
.favorites-recipe-action[hidden]{display:none!important}
.favorites-recipe-action:active{transform:scale(.985)}

/* Universal Product Add Flow: softer sheet, consistent 2D icon tiles, same order/logic. */
.foods-choice-surface{background:var(--surface-overlay)!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important}
.foods-choice-sheet{border-radius:30px 30px 22px 22px!important;padding:12px 15px calc(16px + env(safe-area-inset-bottom))!important;background:var(--surface-raised)!important;box-shadow:var(--shadow-sheet)!important}
.foods-choice-handle{background:color-mix(in srgb,var(--muted) 42%,transparent)!important}
.foods-choice-search,.foods-choice-tile,.foods-choice-products,.foods-choice-link{border-color:var(--line)!important;background:var(--surface-soft)!important;border-radius:19px!important;box-shadow:none!important}
.foods-choice-search{padding:13px 14px!important}
.foods-choice-tile{min-height:96px!important}
.foods-choice-search>span:first-child,.foods-choice-tile .icon,.foods-choice-products>.icon,.foods-choice-link>.icon{background:var(--surface-raised)!important;border:1px solid var(--line)!important;color:var(--accent-dark)!important;box-shadow:none!important;font-family:system-ui,-apple-system,sans-serif;font-weight:650}
.foods-choice-search>span:first-child,.foods-choice-tile .icon{border-radius:14px!important}
.foods-choice-products>.icon,.foods-choice-link>.icon{border-radius:11px!important}
.foods-choice-close,.foods-manual-close,.foods-scanner-modal .scanner-topbar button{background:var(--surface-soft)!important;color:var(--text)!important;border:1px solid var(--line)!important}
.foods-manual-dialog,.foods-label-scan-dialog,.foods-missing-dialog{background:var(--surface-raised)!important;color:var(--text)!important;border:1px solid var(--line)!important;box-shadow:var(--shadow-sheet)!important}
.foods-manual-body,.foods-scanner-modal .scanner-topbar,.foods-scanner-modal .scanner-footer{background:var(--surface-raised)!important;color:var(--text)!important}
.foods-photo-picker,.foods-photo-primary,.foods-ai-notice,.foods-lookup-notice{background:var(--surface-soft)!important;border-color:var(--line)!important;color:var(--text)!important}
.foods-photo-primary>span:first-child,.foods-ai-notice>span:first-child{background:var(--surface-raised)!important;border:1px solid var(--line)!important}

/* Individual notification dismissal: no bulk-clear affordance. */
.ntf-message-controls{display:flex;align-items:center;gap:8px;flex:none}
.ntf-dismiss-form{margin:0;display:inline-flex}
.ntf-dismiss{width:36px;height:36px;display:grid;place-items:center;padding:0;border:1px solid var(--line);border-radius:12px;background:var(--surface-soft);color:var(--muted);cursor:pointer;transition:transform .08s ease,background-color .12s ease,opacity .17s ease}
.ntf-dismiss svg{width:17px!important;height:17px!important}
.ntf-dismiss:active{transform:scale(.94);background:color-mix(in srgb,var(--danger) 10%,var(--surface-soft))}
.ntf-message.is-dismissing{opacity:.58;pointer-events:none}
.ntf-message.is-dismissed{opacity:0;transform:translateX(-18px);max-height:0;margin:0;padding-top:0!important;padding-bottom:0!important;border-width:0;overflow:hidden;transition:opacity .17s ease,transform .17s ease,max-height .17s ease,padding .17s ease}

/* BigBoss notification copy controls keep the same compact compose system. */
.ntf-push-compose{grid-column:1/-1;margin:0;padding:16px;border:1px solid var(--line);border-radius:16px;background:color-mix(in srgb,var(--accent) 4%,var(--card))}
.ntf-push-compose legend{padding:0 6px;font-size:14px;font-weight:800}
.ntf-push-compose-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:8px}
.ntf-push-toggle{display:flex!important;grid-column:1/-1;align-items:center;justify-content:space-between;gap:14px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.ntf-push-toggle input{width:22px!important;min-height:22px!important;accent-color:var(--accent);flex:none}

/* Night mode is systemic: common user surfaces and controls inherit semantic tokens. */
html.jroon-night body,html.jroon-night .favorites-page,html.jroon-night .shelf-page,html.jroon-night .settings-shell,html.jroon-night .energy-shell,html.jroon-night .onboarding-shell,html.jroon-night .ntf-shell{background:var(--bg)!important;color:var(--text)!important}
html.jroon-night .card,html.jroon-night .panel,html.jroon-night .settings-card,html.jroon-night .energy-card,html.jroon-night .onb-card,html.jroon-night .favorite-card,html.jroon-night .favorites-state,html.jroon-night .shelf-alpha-section,html.jroon-night .shelf-available,html.jroon-night .ntf-message,html.jroon-night .ntf-empty,html.jroon-night .ntf-push{background:var(--card)!important;color:var(--text)!important;border-color:var(--line)!important;box-shadow:var(--shadow-soft)!important}
html.jroon-night input,html.jroon-night select,html.jroon-night textarea,html.jroon-night .favorites-search,html.jroon-night .favorites-region,html.jroon-night .tone-card,html.jroon-night .settings-back,html.jroon-night .energy-back,html.jroon-night .ntf-back{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night input::placeholder,html.jroon-night textarea::placeholder{color:var(--muted)!important}
html.jroon-night .favorites-tabs,html.jroon-night .favorites-tab[aria-selected="true"],html.jroon-night .favorite-star,html.jroon-night .favorite-card-link,html.jroon-night .shelf-dialog,html.jroon-night .shelf-meal-dialog,html.jroon-night .shelf-share-dialog{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .favorites-tab[aria-selected="true"]{background:var(--surface-raised)!important}
html.jroon-night .settings-saved{background:color-mix(in srgb,var(--accent) 15%,var(--card))!important;color:var(--accent-dark)!important}
html.jroon-night .switch i{background:#455345!important}
html.jroon-night .switch i::after{background:#eef5eb!important}
html.jroon-night .modal,html.jroon-night .foods-choice-surface,html.jroon-night dialog::backdrop{background:var(--surface-overlay)!important}
html.jroon-night .sheet,html.jroon-night .food-drawer{background:var(--card)!important;color:var(--text)!important}
html.jroon-night .food-drawer .section-title{background:var(--card)!important}
html.jroon-night .prep-card,html.jroon-night .prep-empty,html.jroon-night .portion-preview,html.jroon-night .prep-summary,html.jroon-night .prep-builder{background:var(--surface-soft)!important;border-color:var(--line)!important;color:var(--text)!important}
html.jroon-night .ntf-category,html.jroon-night .ntf-push-icon{background:color-mix(in srgb,var(--accent) 14%,var(--card))!important}
html.jroon-night .ntf-push-button.is-enabled,html.jroon-night .ntf-push.is-enabled .ntf-push-button{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .foods-manual-status,html.jroon-night .foods-photo-privacy,html.jroon-night .ntf-push-note{color:var(--muted)!important}

/* Audit leftovers: auxiliary pages and nested dialogs must follow the same tokens too. */
html.jroon-night .energy-intro,html.jroon-night .energy-step,html.jroon-night .energy-segment,html.jroon-night .energy-choice>span,html.jroon-night .energy-current-weight,html.jroon-night .energy-current-macros>div{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .energy-choice input:checked+span{background:color-mix(in srgb,var(--accent) 13%,var(--surface-soft))!important;border-color:color-mix(in srgb,var(--accent) 55%,var(--line))!important}
html.jroon-night .energy-current{background:var(--card)!important;color:var(--text)!important;border-color:var(--line)!important;box-shadow:var(--shadow-soft)!important}
html.jroon-night .energy-error{background:color-mix(in srgb,var(--danger) 15%,var(--card))!important;color:#ffb0aa!important}
html.jroon-night .energy-success{background:color-mix(in srgb,var(--accent) 14%,var(--card))!important;color:var(--accent-dark)!important}

html.jroon-night .builder-back,html.jroon-night .ingredient-card,html.jroon-night .manual-sheet,html.jroon-night .dish-back,html.jroon-night .dish-card,html.jroon-night .prepare-dialog{background:var(--card)!important;color:var(--text)!important;border-color:var(--line)!important;box-shadow:var(--shadow-soft)!important}
html.jroon-night .step-pill,html.jroon-night .ingredient-number,html.jroon-night .dish-summary,html.jroon-night .dish-chip,html.jroon-night .dish-per-100,html.jroon-night .prepare-surface,html.jroon-night .expiry-pills button{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .step-pill.active,html.jroon-night .expiry-pills button.active{background:color-mix(in srgb,var(--accent) 14%,var(--surface-soft))!important;color:var(--accent-dark)!important}
html.jroon-night .ingredient-remove{background:color-mix(in srgb,var(--danger) 12%,var(--surface-soft))!important;border-color:color-mix(in srgb,var(--danger) 28%,var(--line))!important;color:#ff9d95!important}

html.jroon-night .foods-search{background:var(--bg)!important}
html.jroon-night .foods-search input,html.jroon-night .foods-region,html.jroon-night .food-card,html.jroon-night .foods-favorite-chip,html.jroon-night .foods-search-mode.active,html.jroon-night .foods-restaurant-back,html.jroon-night .restaurant-card{background:var(--card)!important;color:var(--text)!important;border-color:var(--line)!important;box-shadow:none!important}
html.jroon-night .foods-state,html.jroon-night .foods-favorites,html.jroon-night .foods-search-modes,html.jroon-night .foods-restaurant-trail,html.jroon-night .food-favorite-star{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .food-tag,html.jroon-night .restaurant-card-mark{background:var(--surface-soft-strong)!important;color:var(--muted)!important}
html.jroon-night .food-tag.restaurant{background:color-mix(in srgb,#c8832f 18%,var(--card))!important;color:#efbd7c!important}
html.jroon-night .food-tag.external{background:color-mix(in srgb,#7189d8 18%,var(--card))!important;color:#b9c7ff!important}
html.jroon-night .food-tag-icon{background:var(--surface-raised)!important}

html.jroon-night .foods-additional-toggle,html.jroon-night .foods-extra-photo,html.jroon-night .foods-photo-picker-icon{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .foods-extra-photo.is-recommended{background:color-mix(in srgb,#d6a83c 11%,var(--surface-soft))!important;border-color:color-mix(in srgb,#d6a83c 35%,var(--line))!important}
html.jroon-night .foods-lookup-notice.is-error{background:color-mix(in srgb,var(--danger) 14%,var(--card))!important;color:#ffaaa2!important;border-color:color-mix(in srgb,var(--danger) 30%,var(--line))!important}
html.jroon-night .foods-lookup-notice.is-success{background:color-mix(in srgb,var(--accent) 13%,var(--card))!important;color:var(--accent-dark)!important}

html.jroon-night .shelf-rename-form select,html.jroon-night .shelf-share-dialog select,html.jroon-night .shelf-portion-choice,html.jroon-night .shelf-share-trigger,html.jroon-night .shelf-switcher a,html.jroon-night .shelf-package-stepper,html.jroon-night .shelf-package-stepper input,html.jroon-night .shelf-stack-stepper{background:var(--card)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .shelf-portion-block,html.jroon-night .shelf-notice,html.jroon-night .shelf-readonly-note,html.jroon-night .shelf-dialog-take,html.jroon-night .shelf-share-member,html.jroon-night .shelf-share-note,html.jroon-night .shelf-dialog-nutrition,html.jroon-night .shelf-package-restock,html.jroon-night .shelf-stack-popover-head [data-stack-close]{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .shelf-meal-option{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}

html.jroon-night .liquid-import-total,html.jroon-night .liquid-import-no{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .invite-card{background:var(--card)!important;color:var(--text)!important;border-color:var(--line)!important;box-shadow:var(--shadow-soft)!important}
html.jroon-night .invite-mark,html.jroon-night .invite-permission{background:var(--surface-soft)!important;color:var(--text)!important;border-color:var(--line)!important}
html.jroon-night .invite-error{background:color-mix(in srgb,var(--danger) 14%,var(--card))!important;color:#ffaaa2!important}

@media(max-width:560px){.ntf-push-compose-grid{grid-template-columns:1fr}.ntf-push-toggle{grid-column:auto}.native-app-menu-popover{max-height:min(72dvh,560px);overflow:auto;overscroll-behavior:contain}}
@media(prefers-reduced-motion:reduce){.native-app-menu-item,.favorites-recipe-action,.ntf-dismiss,.ntf-message{transition:none!important}}
