:root{--color-purple-500: #4c5dc4;--color-purple-600: #764ba2;--color-purple-400: #667eea;--color-gray-50: #f9fafb;--color-gray-100: #f5f5f5;--color-gray-200: #eee;--color-gray-300: #ddd;--color-gray-400: #ccc;--color-gray-500: #999;--color-gray-600: #666;--color-gray-700: #555;--color-gray-800: #444;--color-gray-900: #333;--color-slate-600: #34495e;--color-slate-700: #2c3e50;--color-green-50: #e8f5e9;--color-green-success: #4caf50;--color-green-success-dark: #45a049;--color-green-success-match: #5cb85c;--color-orange-50: #fff3e0;--color-orange-warning: #ff9800;--color-orange-warning-light: #ffa726;--color-orange-warning-dark: #a95000;--color-red-50: #ffebee;--color-red-error-light: #ff6b6b;--color-red-error: #e74c3c;--color-red-error-dark: #c0392b;--color-red-error-border: #ebccd1;--color-red-error-bg: #f2dede;--color-blue-info: #3498db;--color-blue-info-light: #a3d5f1;--color-blue-info-match: #2196f3;--color-highlight: #fff3cd;--color-nutrition-bg: #fff9e6;--color-success-50: var(--color-green-50);--color-success-dark: #2e7d32;--color-warning-50: var(--color-orange-50);--color-warning-dark: var(--color-orange-warning-dark);--color-error-50: var(--color-red-50);--color-error-dark: #c62828;--color-primary: var(--color-purple-500);--color-primary-dark: var(--color-purple-600);--color-primary-light: var(--color-purple-400);--color-primary-hover: #3d4caa;--color-surface-primary: #fff;--color-bg-base: #fff;--color-bg-subtle: var(--color-gray-100);--color-bg-hover: var(--color-gray-50);--color-text-primary: var(--color-gray-900);--color-text-secondary: var(--color-gray-600);--color-text-muted: var(--color-gray-500);--color-text-placeholder: var(--color-gray-400);--color-text-disabled: var(--color-gray-400);--color-text-inverse: #fff;--color-border-base: var(--color-gray-300);--color-border-light: var(--color-gray-200);--color-border-focus: var(--color-primary);--color-overlay-dark: rgba(0, 0, 0, .7);--color-overlay-subtle: rgba(0, 0, 0, .1);--color-navbar-bg: var(--color-slate-700);--color-navbar-hover: var(--color-slate-600);--color-success: var(--color-green-success);--color-warning: var(--color-orange-warning);--color-error: var(--color-red-error);--color-info: var(--color-blue-info);--color-allergen-active: #ff5722;--color-allergen-active-border: #d84315;--gradient-primary: linear-gradient(135deg, var(--color-purple-500) 0%, var(--color-purple-600) 100%);--gradient-primary-hover: linear-gradient(135deg, #5568d3 0%, #6842a0 100%);--gradient-source-cucchiaio: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);--gradient-source-giallozafferano: linear-gradient(135deg, #ffd89b 0%, #ff9a9e 100%);--gradient-source-misya: linear-gradient(135deg, #fa709a 0%, #fee140 100%);--gradient-source-cookist: linear-gradient(135deg, #30cfd0 0%, #330867 100%);--gradient-source-ricettedellanonna: linear-gradient(135deg, #ff9a56 0%, #ff6a00 100%);--gradient-source-benedetta: linear-gradient(135deg, #ff6b95 0%, #b06ab3 100%);--gradient-source-themealdb: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);--gradient-stats-card: linear-gradient(135deg, var(--color-purple-400) 0%, #764ba2 100%);--gradient-stats-categorized: linear-gradient(135deg, #ec4899 0%, #8b5cf6 100%);--gradient-footer: linear-gradient(to right, var(--color-purple-400), var(--color-purple-600));--gradient-slider-track: linear-gradient(to right, var(--color-primary), var(--color-primary));--gradient-slider-inactive: linear-gradient(to right, var(--color-gray-300), var(--color-gray-300));--space-xs: 4px;--space-sm: 8px;--space-md: 12px;--space-base: 16px;--space-lg: 24px;--space-xl: 32px;--space-2xl: 48px;--space-3xl: 64px;--font-size-xs: 12px;--font-size-sm: 14px;--font-size-base: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 30px;--font-size-4xl: 36px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--shadow-primary: 0 4px 14px 0 rgba(102, 126, 234, .39);--shadow-primary-hover: 0 6px 20px rgba(102, 126, 234, .5);--shadow-badge: 0 2px 4px rgba(0, 0, 0, .1);--shadow-card-hover: 0 8px 16px rgba(0, 0, 0, .1);--z-badge: 10;--z-dropdown: 100;--z-modal: 1000;--transition-fast: .2s ease;--transition-base: .3s ease;--container-max-width: 1200px;--sidebar-width: 350px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:focus,.sr-only-focusable:active{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.error-banner[data-v-93b95d16]{display:flex;align-items:flex-start;gap:var(--space-md);padding:var(--space-md) var(--space-lg);background:var(--color-surface-primary);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);border-left:4px solid;min-width:320px;max-width:420px;transition:all var(--transition-base)}.error-banner--error[data-v-93b95d16]{border-left-color:var(--color-error);background:var(--color-red-error-bg)}.error-banner--warning[data-v-93b95d16]{border-left-color:var(--color-warning);background:var(--color-orange-50)}.error-banner--info[data-v-93b95d16]{border-left-color:var(--color-info);background:var(--color-highlight)}.error-banner--dismissing[data-v-93b95d16]{opacity:0;transform:translate(20px)}.error-banner__icon[data-v-93b95d16]{flex-shrink:0;font-size:var(--font-size-xl);line-height:1}.error-banner__content[data-v-93b95d16]{flex:1;display:flex;flex-direction:column;gap:var(--space-sm)}.error-banner__message[data-v-93b95d16]{margin:0;font-size:var(--font-size-sm);color:var(--color-text-primary);line-height:var(--line-height-normal);word-wrap:break-word}.error-banner__actions[data-v-93b95d16]{display:flex;gap:var(--space-sm)}.error-banner__retry[data-v-93b95d16]{padding:var(--space-xs) var(--space-md);background:var(--color-primary);color:var(--color-text-inverse);border:none;border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);cursor:pointer;transition:var(--transition-base);display:inline-flex;align-items:center;gap:var(--space-xs)}.error-banner__retry[data-v-93b95d16]:hover:not(:disabled){background:var(--color-primary-hover);transform:translateY(-1px)}.error-banner__retry[data-v-93b95d16]:active:not(:disabled){transform:translateY(0)}.error-banner__retry[data-v-93b95d16]:disabled{opacity:.6;cursor:not-allowed}.error-banner__retry[data-v-93b95d16]:focus-visible{outline:2px solid var(--color-border-focus);outline-offset:2px}.error-banner__retry-spinner[data-v-93b95d16]{display:flex;align-items:center;gap:var(--space-xs)}.spinner[data-v-93b95d16]{display:inline-block;width:12px;height:12px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-93b95d16 .6s linear infinite}@keyframes spin-93b95d16{to{transform:rotate(360deg)}}.error-banner__dismiss[data-v-93b95d16]{flex-shrink:0;background:none;border:none;color:var(--color-text-secondary);font-size:var(--font-size-2xl);line-height:1;cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;transition:var(--transition-fast);border-radius:var(--radius-sm)}.error-banner__dismiss[data-v-93b95d16]:hover{background:var(--color-overlay-subtle);color:var(--color-text-primary)}.error-banner__dismiss[data-v-93b95d16]:focus-visible{outline:2px solid var(--color-border-focus);outline-offset:2px}@media(max-width:768px){.error-banner[data-v-93b95d16]{min-width:unset;max-width:unset;width:100%}.error-banner__dismiss[data-v-93b95d16]{min-width:44px;min-height:44px}.error-banner__retry[data-v-93b95d16]{min-height:44px}}@media(prefers-reduced-motion:reduce){.error-banner[data-v-93b95d16]{transition-duration:.01ms}.spinner[data-v-93b95d16]{animation:none}}.error-banner-container[data-v-940fa035]{position:fixed;top:var(--space-lg);right:var(--space-lg);z-index:calc(var(--z-modal) + 10);display:flex;flex-direction:column;gap:var(--space-md);max-width:420px;pointer-events:none}.error-banner-container[data-v-940fa035]>*{pointer-events:auto}.error-slide-enter-active[data-v-940fa035],.error-slide-leave-active[data-v-940fa035]{transition:all .3s cubic-bezier(.4,0,.2,1)}.error-slide-enter-from[data-v-940fa035]{opacity:0;transform:translate(100%)}.error-slide-leave-to[data-v-940fa035]{opacity:0;transform:translate(100%) scale(.9)}@media(prefers-reduced-motion:reduce){.error-slide-enter-active[data-v-940fa035],.error-slide-leave-active[data-v-940fa035]{transition-duration:.01ms}}@media(max-width:768px){.error-banner-container[data-v-940fa035]{top:var(--space-base);right:var(--space-base);left:var(--space-base);max-width:none}}.bottom-tab-bar[data-v-a6d966bb]{position:fixed;bottom:0;left:0;right:0;background:var(--color-surface-primary);border-top:1px solid var(--color-border-light);box-shadow:0 -2px 10px #00000014;z-index:2147483647;padding-bottom:env(safe-area-inset-bottom)}.tab-bar-container[data-v-a6d966bb]{display:flex;justify-content:space-around;align-items:stretch;height:56px;max-width:var(--container-max-width);margin:0 auto}.tab-item[data-v-a6d966bb]{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;min-width:48px;min-height:48px;padding:var(--space-xs) var(--space-sm);background:transparent;border:none;cursor:pointer;text-decoration:none;color:var(--color-text-muted);transition:color var(--transition-fast);-webkit-tap-highlight-color:transparent;touch-action:manipulation;position:relative}.tab-item[data-v-a6d966bb]:hover{color:var(--color-text-secondary)}.tab-item[data-v-a6d966bb]:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px;border-radius:var(--radius-sm)}.tab-item.is-active[data-v-a6d966bb]{color:var(--color-primary)}.tab-icon[data-v-a6d966bb]{position:relative;display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin-bottom:2px}.tab-icon svg[data-v-a6d966bb]{width:24px;height:24px}.icon-outline[data-v-a6d966bb]{stroke-linecap:round;stroke-linejoin:round}.icon-filled.icon-favorites[data-v-a6d966bb],.tab-item.is-active .icon-filled.icon-favorites[data-v-a6d966bb]{color:var(--color-red-error-light)}.tab-badge[data-v-a6d966bb]{position:absolute;top:-4px;right:-8px;min-width:18px;height:18px;padding:0 5px;background:var(--color-red-error-light);color:var(--color-text-inverse);font-size:10px;font-weight:var(--font-weight-bold);line-height:18px;text-align:center;border-radius:var(--radius-full);box-shadow:0 1px 3px #0003}.tab-label[data-v-a6d966bb]{font-size:11px;font-weight:var(--font-weight-medium);line-height:1.2;white-space:nowrap}.tab-item.is-active .tab-label[data-v-a6d966bb]{font-weight:var(--font-weight-bold)}.action-sheet-overlay[data-v-a6d966bb]{position:fixed;inset:0;background:#0006;z-index:2147483646;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.action-sheet[data-v-a6d966bb]{position:fixed;bottom:0;left:0;right:0;background:var(--color-surface-primary);border-radius:var(--radius-xl) var(--radius-xl) 0 0;box-shadow:0 -4px 20px #00000026;z-index:2147483647;padding-bottom:calc(56px + var(--space-lg) + env(safe-area-inset-bottom));max-height:70vh;overflow-y:auto}.action-sheet-header[data-v-a6d966bb]{display:flex;align-items:center;justify-content:space-between;padding:var(--space-base) var(--space-lg);border-bottom:1px solid var(--color-border-light)}.action-sheet-user[data-v-a6d966bb]{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.action-sheet-close[data-v-a6d966bb]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:var(--color-bg-subtle);border:none;border-radius:var(--radius-full);cursor:pointer;color:var(--color-text-secondary);transition:background var(--transition-fast)}.action-sheet-close[data-v-a6d966bb]:hover{background:var(--color-border-light)}.action-sheet-close[data-v-a6d966bb]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.action-sheet-close svg[data-v-a6d966bb]{width:20px;height:20px}.action-sheet-content[data-v-a6d966bb]{padding:var(--space-sm) 0}.action-sheet-item[data-v-a6d966bb]{display:flex;align-items:center;gap:var(--space-md);width:100%;padding:var(--space-base) var(--space-lg);background:transparent;border:none;cursor:pointer;text-decoration:none;color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);text-align:left;transition:background var(--transition-fast);min-height:52px}.action-sheet-item[data-v-a6d966bb]:hover{background:var(--color-bg-hover)}.action-sheet-item[data-v-a6d966bb]:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px}.action-sheet-item svg[data-v-a6d966bb]{width:22px;height:22px;flex-shrink:0;color:var(--color-text-secondary)}.action-sheet-item-danger[data-v-a6d966bb]{color:var(--color-red-error)}.action-sheet-item-danger svg[data-v-a6d966bb]{color:var(--color-red-error)}.action-sheet-divider[data-v-a6d966bb]{height:1px;background:var(--color-border-light);margin:var(--space-sm) var(--space-lg)}.action-sheet-enter-active[data-v-a6d966bb],.action-sheet-leave-active[data-v-a6d966bb]{transition:opacity .25s ease}.action-sheet-enter-from[data-v-a6d966bb],.action-sheet-leave-to[data-v-a6d966bb]{opacity:0}.action-sheet-content-enter-active[data-v-a6d966bb],.action-sheet-content-leave-active[data-v-a6d966bb]{transition:transform .3s cubic-bezier(.4,0,.2,1)}.action-sheet-content-enter-from[data-v-a6d966bb],.action-sheet-content-leave-to[data-v-a6d966bb]{transform:translateY(100%)}@media(prefers-reduced-motion:reduce){.action-sheet-enter-active[data-v-a6d966bb],.action-sheet-leave-active[data-v-a6d966bb],.action-sheet-content-enter-active[data-v-a6d966bb],.action-sheet-content-leave-active[data-v-a6d966bb]{transition:none}}@media(min-width:768px){.bottom-tab-bar[data-v-a6d966bb]{display:none}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background:var(--color-bg-subtle);color:var(--color-text-primary)}.skip-link{position:absolute;top:-40px;left:0;background:var(--color-primary);color:var(--color-text-inverse);padding:var(--space-sm) var(--space-base);text-decoration:none;border-radius:0 0 var(--radius-sm) 0;font-weight:var(--font-weight-bold);z-index:calc(var(--z-modal) + 1);transition:top var(--transition-fast)}.skip-link:focus{top:0;outline:2px solid var(--color-text-inverse);outline-offset:2px}.navbar{background:var(--color-navbar-bg);color:var(--color-text-inverse);padding:var(--space-base) 0;box-shadow:var(--shadow-sm);position:sticky;top:0;z-index:var(--z-dropdown)}.navbar .container{display:flex;justify-content:space-between;align-items:center;max-width:var(--container-max-width);margin:0 auto;padding:0 var(--space-base)}.logo{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);display:flex;align-items:center;gap:var(--space-xs)}.logo-icon{font-size:inherit}.logo-short{display:none}.logo-full{display:inline}.nav-primary{display:flex;gap:var(--space-sm);align-items:center}.nav-primary a{font-weight:500}.nav-links{display:flex;gap:var(--space-lg);align-items:center}.nav-links a{color:var(--color-text-inverse);text-decoration:none;padding:var(--space-sm) var(--space-base);border-radius:var(--radius-sm);transition:background var(--transition-base)}.nav-links a:hover,.nav-links a.router-link-active{background:var(--color-navbar-hover)}.nav-links a,.auth-section button,.favorites-link,.shopping-lists-link,.meal-plans-link{touch-action:manipulation}.auth-section{display:flex;align-items:center;gap:var(--space-sm);margin-left:var(--space-lg);padding-left:var(--space-lg);border-left:1px solid rgba(255,255,255,.2)}.user-greeting{color:var(--color-text-inverse);font-size:var(--font-size-sm);opacity:.9;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.auth-btn{padding:var(--space-sm) var(--space-base);border:none;border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--transition-fast);min-height:36px}.auth-btn-primary{background:var(--color-primary);color:var(--color-text-inverse)}.auth-btn-primary:hover{background:var(--color-primary-hover);transform:translateY(-1px)}.auth-btn-secondary{background:transparent;color:var(--color-text-inverse);border:1px solid rgba(255,255,255,.4)}.auth-btn-secondary:hover{background:#ffffff1a;border-color:#fff9}.auth-btn-logout{background:transparent;color:var(--color-text-inverse);opacity:.8}.auth-btn-logout:hover{background:#ffffff1a;opacity:1}.auth-loading{color:var(--color-text-inverse);opacity:.7;font-size:var(--font-size-sm)}.auth-error{color:#ff6b6b;font-weight:700;cursor:help}.favorites-link{display:flex;align-items:center;gap:var(--space-xs);color:var(--color-text-inverse);text-decoration:none;padding:var(--space-sm) var(--space-base);border-radius:var(--radius-sm);transition:background var(--transition-base);font-size:1.25rem}.favorites-link:hover{background:var(--color-navbar-hover)}.favorites-count{font-size:var(--font-size-xs);background:#ff6b6b;color:#fff;padding:2px 6px;border-radius:10px;min-width:18px;text-align:center;font-weight:var(--font-weight-bold)}.shopping-lists-link{display:flex;align-items:center;gap:var(--space-xs);color:var(--color-text-inverse);text-decoration:none;padding:var(--space-sm) var(--space-base);border-radius:var(--radius-sm);transition:background var(--transition-base);font-size:1.25rem}.shopping-lists-link:hover{background:var(--color-navbar-hover)}.shopping-lists-link .nav-link-text{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.meal-plans-link{display:flex;align-items:center;gap:var(--space-xs);color:var(--color-text-inverse);text-decoration:none;padding:var(--space-sm) var(--space-base);border-radius:var(--radius-sm);transition:background var(--transition-base);font-size:1.25rem}.meal-plans-link:hover{background:var(--color-navbar-hover)}.meal-plans-link .nav-link-text{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.container{max-width:var(--container-max-width);margin:var(--space-xl) auto;padding:0 var(--space-base)}footer{background:var(--color-navbar-bg);color:var(--color-text-inverse);padding:var(--space-xl);margin-top:var(--space-3xl)}.footer-content{max-width:var(--container-max-width);margin:0 auto;display:flex;flex-direction:column;align-items:center;gap:var(--space-lg)}.copyright{font-size:var(--font-size-sm);opacity:.9}.attribution-section{display:flex;flex-direction:column;align-items:center;gap:var(--space-md);padding:var(--space-lg);background:#ffffff0d;border-radius:var(--radius-md);width:100%;max-width:600px}.attribution-title{font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);margin-bottom:var(--space-sm)}.sources-list{display:flex;gap:var(--space-lg);flex-wrap:wrap;justify-content:center}.source-link{color:var(--color-blue-info-light);text-decoration:none;font-weight:var(--font-weight-semibold);padding:var(--space-sm) var(--space-base);background:#a3d5f11a;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.source-link:hover{background:#a3d5f133;transform:translateY(-2px);color:#b8e2f5}.attribution-note{font-size:var(--font-size-xs);opacity:.7;text-align:center;max-width:500px;line-height:var(--line-height-normal)}.nav-badge{font-size:10px;font-weight:600;padding:2px 5px;border-radius:8px;min-width:16px;text-align:center;line-height:1}.favorites-badge{background:#ff6b6be6;color:#fff}.nav-badge-default{background:#4c5dc44d;color:var(--color-text-inverse);font-size:9px}.auth-section .icon-btn{position:relative;padding:var(--space-sm);border-radius:var(--radius-sm);background:transparent;transition:background .2s ease}.auth-section .icon-btn:hover{background:var(--color-navbar-hover)}.auth-section .icon-btn.router-link-active:after{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);width:24px;height:3px;background:#667eea;border-radius:2px}.hamburger-btn{display:none;background:transparent;border:none;padding:var(--space-sm);cursor:pointer;min-width:44px;min-height:44px;align-items:center;justify-content:center;border-radius:var(--radius-sm);transition:background var(--transition-fast)}.hamburger-btn:hover{background:#ffffff1a}.hamburger-btn:focus-visible{outline:2px solid var(--color-text-inverse);outline-offset:2px}.hamburger-icon{width:24px;height:2px;background:var(--color-text-inverse);position:relative;transition:background .2s ease}.hamburger-icon:before,.hamburger-icon:after{content:"";position:absolute;width:24px;height:2px;background:var(--color-text-inverse);left:0;transition:transform .3s ease}.hamburger-icon:before{top:-8px}.hamburger-icon:after{bottom:-8px}.hamburger-icon.is-active{background:transparent}.hamburger-icon.is-active:before{transform:rotate(45deg) translate(6px,6px)}.hamburger-icon.is-active:after{transform:rotate(-45deg) translate(6px,-6px)}.mobile-drawer{position:fixed;top:0;right:0;width:280px;max-width:85vw;height:100vh;height:100dvh;background:var(--color-navbar-bg);z-index:200;display:flex;flex-direction:column;box-shadow:-4px 0 20px #0000004d}.mobile-drawer-header{display:flex;justify-content:space-between;align-items:center;padding:var(--space-base);padding-top:calc(var(--space-base) + env(safe-area-inset-top));border-bottom:1px solid rgba(255,255,255,.1)}.mobile-drawer-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-inverse)}.mobile-drawer-close{background:transparent;border:none;color:var(--color-text-inverse);font-size:var(--font-size-xl);cursor:pointer;min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);transition:background var(--transition-fast)}.mobile-drawer-close:hover{background:#ffffff1a}.mobile-drawer-close:focus-visible{outline:2px solid var(--color-text-inverse);outline-offset:2px}.mobile-drawer-content{flex:1;overflow-y:auto;padding:var(--space-base);padding-bottom:calc(var(--space-base) + env(safe-area-inset-bottom))}.mobile-nav-section{display:flex;flex-direction:column;gap:var(--space-xs)}.mobile-nav-link{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-base);min-height:52px;border-radius:var(--radius-sm);color:var(--color-text-inverse);text-decoration:none;font-size:var(--font-size-base);transition:background var(--transition-fast)}.mobile-nav-link:hover,.mobile-nav-link.router-link-active{background:#ffffff1a}.mobile-nav-link:focus-visible{outline:2px solid var(--color-text-inverse);outline-offset:-2px}.mobile-nav-divider{height:1px;background:#ffffff1a;margin:var(--space-base) 0}.mobile-user-section{gap:var(--space-sm)}.mobile-user-greeting{color:var(--color-text-inverse);font-size:var(--font-size-sm);opacity:.8;padding:var(--space-sm) var(--space-base)}.mobile-nav-btn{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-base);min-height:52px;border-radius:var(--radius-sm);color:var(--color-text-inverse);background:transparent;border:none;font-size:var(--font-size-base);cursor:pointer;width:100%;text-align:left;transition:background var(--transition-fast)}.mobile-nav-btn:hover{background:#ffffff1a}.mobile-nav-btn:focus-visible{outline:2px solid var(--color-text-inverse);outline-offset:-2px}.mobile-nav-btn-logout{color:#ff6b6b}.mobile-auth-section{gap:var(--space-sm)}.mobile-auth-btn{display:flex;align-items:center;justify-content:center;padding:var(--space-base);min-height:52px;border-radius:var(--radius-sm);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer;width:100%;transition:all var(--transition-fast)}.mobile-auth-btn-primary{background:var(--color-primary);color:var(--color-text-inverse);border:none}.mobile-auth-btn-primary:hover{background:var(--color-primary-hover)}.mobile-auth-btn-secondary{background:transparent;color:var(--color-text-inverse);border:1px solid rgba(255,255,255,.4)}.mobile-auth-btn-secondary:hover{background:#ffffff1a;border-color:#fff9}.mobile-overlay{position:fixed;inset:0;background:#00000080;z-index:199;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.drawer-enter-active,.drawer-leave-active{transition:transform .3s ease}.drawer-enter-from,.drawer-leave-to{transform:translate(100%)}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease}.fade-enter-from,.fade-leave-to{opacity:0}@media(prefers-reduced-motion:reduce){.hamburger-icon:before,.hamburger-icon:after,.drawer-enter-active,.drawer-leave-active,.fade-enter-active,.fade-leave-active{transition:none}}html,body,#app{overflow-x:hidden;max-width:100vw}@media(min-width:768px)and (max-width:1023px){.nav-links{gap:var(--space-sm)}.nav-primary{gap:var(--space-xs)}.nav-primary a{padding:var(--space-xs) var(--space-sm);font-size:var(--font-size-sm)}.auth-section{gap:var(--space-xs);margin-left:var(--space-base);padding-left:var(--space-base)}.auth-section .icon-btn{padding:var(--space-xs)}.shopping-lists-link .nav-link-text,.meal-plans-link .nav-link-text{display:none}.user-greeting{max-width:100px;font-size:var(--font-size-xs)}.auth-btn{padding:var(--space-xs) var(--space-sm);font-size:var(--font-size-xs)}}@media(min-width:1024px){.nav-links{gap:var(--space-lg)}.auth-section{gap:var(--space-sm);margin-left:var(--space-lg);padding-left:var(--space-lg)}}@media(max-width:767px){.hamburger-btn,.nav-links{display:none}.mobile-drawer,.mobile-overlay{display:none!important}.navbar{padding-top:calc(var(--space-base) + env(safe-area-inset-top))}.navbar .container{padding:0 var(--space-sm);justify-content:center}.logo{font-size:var(--font-size-xl)}.container{margin:var(--space-lg) auto;padding:0 var(--space-sm)}main.container{padding-bottom:calc(56px + env(safe-area-inset-bottom) + var(--space-lg))}footer{padding:var(--space-lg) var(--space-sm);padding-bottom:calc(56px + env(safe-area-inset-bottom) + var(--space-lg));margin-top:var(--space-2xl)}.footer-content{padding:0;gap:var(--space-md)}.attribution-section{padding:var(--space-base)}.sources-list{flex-direction:column;gap:var(--space-sm);width:100%}.source-link{min-height:44px;display:flex;align-items:center;justify-content:center;width:100%}.attribution-note{font-size:var(--font-size-xs)}}@media(max-width:374px){.logo{font-size:var(--font-size-lg)}.logo-full{display:none}.logo-short{display:inline}.container{padding:0 var(--space-xs)}}@media(max-width:640px){*{max-width:100%}img{max-width:100%;height:auto}}
