:root{--primary: #6366f1;--primary-light: #818cf8;--primary-dark: #4f46e5;--bg-main: #f8fafc;--bg-card: #ffffff;--bg-input: #f1f5f9;--text-primary: #1e293b;--text-secondary: #64748b;--text-muted: #94a3b8;--success: #10b981;--success-light: #d1fae5;--warning: #f59e0b;--danger: #ef4444;--cat-boissons: #3b82f6;--cat-fruits-legumes: #22c55e;--cat-viandes: #ef4444;--cat-produits-laitiers: #f59e0b;--cat-surgeles: #06b6d4;--cat-epicerie: #8b5cf6;--cat-hygiene: #ec4899;--cat-menage: #14b8a6;--cat-gouter: #a855f7;--cat-conserves: #f97316;--cat-autres: #64748b;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--radius-sm: .5rem;--radius-md: .75rem;--radius-lg: 1rem;--radius-xl: 1.5rem;--radius-full: 9999px;--transition-fast: .15s ease;--transition-normal: .25s ease;--transition-slow: .35s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:Outfit,-apple-system,BlinkMacSystemFont,sans-serif;background:var(--bg-main);color:var(--text-primary);line-height:1.6;min-height:100vh;min-height:100dvh}.container{width:100%;max-width:600px;margin:0 auto;padding:0 var(--spacing-md)}.page{min-height:100vh;min-height:100dvh;padding-bottom:calc(80px + env(safe-area-inset-bottom))}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-lg);border:none;border-radius:var(--radius-md);font-family:inherit;font-size:.95rem;font-weight:500;cursor:pointer;transition:all var(--transition-fast)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--primary);color:#fff}.btn--primary:hover:not(:disabled){background:var(--primary-dark);transform:translateY(-1px);box-shadow:var(--shadow-md)}.btn--primary:active:not(:disabled){transform:translateY(0)}.btn--secondary{background:var(--bg-input);color:var(--text-primary)}.btn--secondary:hover:not(:disabled){background:#e2e8f0}.btn--ghost{background:transparent;color:var(--text-secondary)}.btn--ghost:hover:not(:disabled){background:var(--bg-input);color:var(--text-primary)}.btn--danger{background:var(--danger);color:#fff}.btn--danger:hover:not(:disabled){background:#dc2626}.btn--icon{width:44px;height:44px;padding:0;border-radius:var(--radius-full)}.btn--lg{padding:var(--spacing-md) var(--spacing-xl);font-size:1.05rem}.btn--full{width:100%}.input{width:100%;padding:var(--spacing-md);background:var(--bg-input);border:2px solid transparent;border-radius:var(--radius-md);font-family:inherit;font-size:1rem;color:var(--text-primary);transition:all var(--transition-fast)}.input::placeholder{color:var(--text-muted)}.input:focus{outline:none;border-color:var(--primary);background:#fff;box-shadow:0 0 0 3px #6366f11a}.input--search{padding-left:3rem;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2394a3b8'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:1rem center;background-size:1.25rem}.card{background:var(--bg-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden}.card--elevated{box-shadow:var(--shadow-md)}.badge{display:inline-flex;align-items:center;padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-full);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em}.badge--boissons{background:#3b82f626;color:var(--cat-boissons)}.badge--fruits-legumes{background:#22c55e26;color:var(--cat-fruits-legumes)}.badge--viandes{background:#ef444426;color:var(--cat-viandes)}.badge--produits-laitiers{background:#f59e0b26;color:var(--cat-produits-laitiers)}.badge--surgeles{background:#06b6d426;color:var(--cat-surgeles)}.badge--epicerie{background:#8b5cf626;color:var(--cat-epicerie)}.badge--hygiene{background:#ec489926;color:var(--cat-hygiene)}.badge--menage{background:#14b8a626;color:var(--cat-menage)}.badge--gouter{background:#a855f726;color:var(--cat-gouter)}.badge--conserves{background:#f9731626;color:var(--cat-conserves)}.badge--autres{background:#64748b26;color:var(--cat-autres)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes checkmark{0%{stroke-dashoffset:50}to{stroke-dashoffset:0}}.animate-fade-in{animation:fadeIn var(--transition-normal) ease-out}.animate-slide-up{animation:slideUp var(--transition-normal) ease-out}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--text-muted);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}@media (max-width: 480px){:root{font-size:15px}}@supports (padding: env(safe-area-inset-bottom)){.page{padding-bottom:calc(80px + env(safe-area-inset-bottom))}}.toast-container{position:fixed;top:var(--spacing-lg);left:50%;transform:translate(-50%);z-index:1000;display:flex;flex-direction:column;gap:var(--spacing-sm);width:calc(100% - 2rem);max-width:400px;pointer-events:none}.toast{padding:var(--spacing-md) var(--spacing-lg);background:var(--text-primary);color:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-lg);animation:slideUp var(--transition-normal) ease-out;pointer-events:auto}.toast--success{background:var(--success)}.toast--warning{background:var(--warning)}.toast--error{background:var(--danger)}.skeleton{background:linear-gradient(90deg,var(--bg-input) 25%,#e2e8f0 50%,var(--bg-input) 75%);background-size:200% 100%;animation:skeleton-loading 1.5s infinite;border-radius:var(--radius-sm)}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}.spinner{width:24px;height:24px;border:3px solid var(--bg-input);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
