*,:after,:before{box-sizing:border-box;padding:0;margin:0}html{-webkit-text-size-adjust:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background-color:#ffffff;color:var(--color-ink);line-height:1.5;overflow-x:hidden;max-width:100vw}:root{--color-primary:#19a752;--color-primary-dark:#0f7a3d;--color-primary-soft:#e3f6ea;--color-primary-light:#6fcb8e;--color-danger:#dc3d34;--color-warning:#e08e1d;--color-success:#19a752;--color-neutral:#5b6b63;--color-background:#f6f9f7;--color-ink:#16211c;--radius:12px;--radius-sm:8px;--radius-lg:16px;--radius-pill:999px;--shadow:0 2px 8px rgba(15,40,25,0.08);--color-surface-muted:#f3f4f6;--color-primary-text:var(--color-primary-dark);--color-danger-bg:#fef2f2;--color-danger-border:#fee2e2;--color-danger-text:#b91c1c;--color-warning-bg:#fffbeb;--color-warning-border:#fef3c7;--color-warning-text:#92400e;--color-success-bg:#f0fdf4;--color-success-border:#bbf7d0;--color-success-text:#14532d;--color-info-bg:#eff6ff;--color-info-border:#dbeafe;--color-info-text:#1e40af}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.page{min-height:100dvh;background:var(--color-background);padding:1rem;max-width:480px;margin:0 auto}.back-link{display:inline-flex;align-items:center;gap:.375rem;color:var(--color-neutral);text-decoration:none;font-size:.875rem;margin-bottom:1.25rem}.back-link:hover{color:var(--color-primary-text)}.card{background:#fff;box-shadow:var(--shadow);padding:1rem}.alert,.card{border-radius:var(--radius);margin-bottom:.75rem}.alert{padding:.875rem 1rem;font-size:.9375rem;line-height:1.5;display:flex;gap:.625rem;align-items:flex-start}.alert--danger{background:var(--color-danger-bg);border:1.5px solid var(--color-danger-border);color:var(--color-danger-text)}.alert--warning{background:var(--color-warning-bg);border:1.5px solid var(--color-warning-border);color:var(--color-warning-text)}.alert--safe{background:var(--color-success-bg);border:1.5px solid var(--color-success-border);color:var(--color-success-text)}.alert--info{background:var(--color-info-bg);border:1.5px solid var(--color-info-border);color:var(--color-info-text)}.alert__icon{font-size:1.125rem;flex-shrink:0;line-height:1.5}.alert__body{flex:1 1}.alert__title{font-weight:600;margin-bottom:.25rem}.alert__link{color:inherit;text-decoration:underline;font-size:.8125rem;display:inline-block;margin-top:.25rem}.recall-sources{margin-top:.375rem;font-size:.75rem}.recall-sources summary{cursor:pointer;text-decoration:underline}.recall-sources ul{padding-left:1.125rem;margin-top:.25rem}.alert__icon--emphasis{background:var(--color-danger);color:#fff;border-radius:50%;width:1.75rem;height:1.75rem;display:inline-flex;align-items:center;justify-content:center;font-size:1rem;line-height:1}.score-ring{--score-pct:0;--score-color:var(--color-neutral);width:4.5rem;height:4.5rem;border-radius:50%;background:conic-gradient(var(--score-color) calc(var(--score-pct) * 1%),var(--color-surface-muted) 0);display:inline-grid;place-items:center;flex-shrink:0}.score-ring__inner{width:calc(100% - 12px);height:calc(100% - 12px);border-radius:50%;background:var(--color-surface,#fff);display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}.score-ring__value{font-size:1.5rem;font-weight:700;color:var(--color-ink);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.score-ring__max{font-size:.625rem;color:var(--color-neutral);margin-top:2px}.score-badge{display:inline-flex;align-items:center;justify-content:center;gap:.2rem;flex-shrink:0;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;border-radius:var(--radius-pill,999px);border:2px solid;background:#fff}.score-badge--sm{min-width:3rem;height:1.75rem;padding:0 .5rem;font-size:.875rem}.score-badge__symbol{font-size:.75em}.score-badge--bon{color:var(--color-success-text)}.score-badge--moyen{color:var(--color-warning-text)}.score-badge--pas-bon{color:var(--color-danger-text)}.score-badge--unknown{color:var(--color-neutral);border-style:dashed}.score-verdict{font-size:1rem;font-weight:700}.score-verdict--bon{color:var(--color-success-text)}.score-verdict--moyen{color:var(--color-warning-text)}.score-verdict--pas-bon{color:var(--color-danger-text)}.nutriscore{display:inline-flex;flex-direction:column;gap:.25rem;padding:.375rem .5rem .5rem;border:1.5px solid #d1d5db;border-radius:var(--radius-sm,8px);background:#fff}.nutriscore__title{font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#4b5563}.nutriscore__letter,.nutriscore__letters{display:inline-flex;align-items:center}.nutriscore__letter{width:1.5rem;height:1.75rem;justify-content:center;font-size:.875rem;font-weight:700;color:rgba(255,255,255,.85);opacity:.4}.nutriscore__letter:first-child{border-radius:6px 0 0 6px}.nutriscore__letter:last-child{border-radius:0 6px 6px 0}.nutriscore__letter--a{background:#038141}.nutriscore__letter--b{background:#85bb2f}.nutriscore__letter--c{background:#fecb02}.nutriscore__letter--d{background:#ee8100}.nutriscore__letter--e{background:#e63e11}.nutriscore__letter--active{opacity:1;color:#fff;width:2.125rem;height:2.375rem;font-size:1.25rem;border-radius:50%!important;margin:0 -.25rem;border:2.5px solid #fff;box-shadow:0 0 0 1.5px #374151;position:relative;z-index:1}.nutriscore__letter--c.nutriscore__letter--active{color:#16211c}.nutriscore--unknown .nutriscore__letters{filter:grayscale(1)}.nutriscore__missing{font-size:.6875rem;color:var(--color-neutral)}.nutriscore-letter{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border-radius:6px;font-size:.9375rem;font-weight:800;color:#fff;flex-shrink:0}.nutriscore-letter.nutriscore__letter--c{color:#16211c}.history-scores{display:inline-flex;align-items:center;gap:.3rem;flex-shrink:0}.history-scores__sep{color:var(--color-neutral);font-weight:600}.recall-icon{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:50%;background:var(--color-danger);color:#fff;font-size:.875rem;font-weight:800;flex-shrink:0}.official-indicators{flex-wrap:wrap}.official-indicators,.score-summary{display:flex;gap:1rem;align-items:center}.score-summary{padding:1rem;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:.75rem}.score-summary__info{flex:1 1;min-width:0}.score-summary__number{font-size:2rem;font-weight:700;color:var(--color-primary);line-height:1}.score-summary__label{font-size:.75rem;color:var(--color-neutral)}.sub-score{margin-bottom:.875rem}.sub-score__header{display:flex;justify-content:space-between;font-size:.875rem;margin-bottom:.375rem;gap:.5rem}.sub-score__label{color:var(--color-neutral);font-weight:500}.sub-score__value{color:var(--color-neutral);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.sub-score__track{height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden}.sub-score__fill{height:100%;border-radius:3px}.sub-score__explanation{font-size:.75rem;color:var(--color-neutral);margin-top:.25rem}.product-header{display:flex;gap:.875rem;align-items:flex-start;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem;margin-bottom:.75rem}.product-header__img{object-fit:contain}.product-header__img,.product-header__img-placeholder{width:5rem;height:5rem;border-radius:8px;background:var(--color-surface-muted);flex-shrink:0}.product-header__img-placeholder{display:flex;align-items:center;justify-content:center;font-size:2rem}.product-header__info{flex:1 1;min-width:0}.product-header__name{font-size:1.0625rem;font-weight:600;color:var(--color-ink);margin-bottom:.25rem;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.product-header__brand{font-size:.875rem;color:var(--color-neutral)}.product-header__meta{font-size:.75rem;color:var(--color-neutral);margin-top:.25rem}.recall-card{border:1px solid #fee2e2;border-radius:var(--radius);padding:.875rem;margin-bottom:.625rem;background:#fff}.recall-card--closed{border-color:#e5e7eb}.recall-card__status{display:inline-block;font-size:.75rem;font-weight:600;margin-bottom:.25rem}.recall-card__lots{border:1px solid var(--color-warning-border);background:var(--color-warning-bg);color:var(--color-warning-text);border-radius:8px;padding:.625rem .75rem;margin-top:.5rem;font-size:.8125rem}.recall-card__lots ul{padding-left:1.125rem;margin:.25rem 0}.recall-card__facts{font-size:.8125rem;color:var(--color-neutral);margin-top:.375rem}.recall-card__facts dt{font-weight:600;display:inline}.recall-card__facts dd{display:inline;margin:0}.recall-card__facts div{margin-bottom:.125rem}.recall-card__body{display:flex;gap:.75rem}.recall-card__img,.recall-card__img-placeholder{width:3.5rem;height:3.5rem;border-radius:8px;object-fit:contain;background:var(--color-surface-muted);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:1.375rem}.recall-card__content{flex:1 1;min-width:0}.recall-card__header{display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem;margin-bottom:.25rem}.recall-card__brand{font-weight:600;font-size:.9375rem;color:var(--color-ink)}.recall-card__date{white-space:nowrap;flex-shrink:0}.recall-card__date,.recall-card__supplier{font-size:.75rem;color:var(--color-neutral)}.recall-card__supplier{margin-bottom:.25rem}.recall-card__motif{font-size:.875rem;color:var(--color-neutral);margin-bottom:.375rem}.recall-card__risks{display:flex;flex-wrap:wrap;gap:.375rem}.recall-card__link{display:inline-block;font-size:.75rem;color:var(--color-primary-text);text-decoration:underline;margin-top:.5rem}.recall-card__conduct{background:var(--color-danger-bg);border-radius:8px;padding:.625rem .75rem;margin-top:.5rem}.recall-card__conduct-title{font-size:.75rem;font-weight:700;color:var(--color-danger-text);margin-bottom:.25rem}.recall-card__conduct-list{font-size:.8125rem;color:var(--color-danger-text);padding-left:1.125rem}.recall-card__conduct-list li{margin-bottom:.125rem}.tag{font-size:.6875rem;padding:.125rem .5rem;border-radius:999px;background:var(--color-danger-bg);color:var(--color-danger-text);font-weight:500}.tag--neutral{background:var(--color-surface-muted);color:var(--color-neutral)}.tag--success{background:var(--color-success-bg);color:var(--color-success-text);border:1px solid var(--color-success-border)}.section-title{font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-neutral);margin-bottom:.75rem}.scanner-page{min-height:100dvh;display:flex;flex-direction:column;padding:1.5rem;background:var(--color-background)}.scanner-header{display:flex;justify-content:flex-end;gap:.75rem;font-size:.875rem;flex-shrink:0}.scanner-header__link{color:var(--color-neutral);text-decoration:none}.scanner-header__link--primary{color:var(--color-primary-text);font-weight:500}.scanner-body{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%}.scanner-center{width:100%;max-width:360px;text-align:center}.scanner-logo{width:7rem;height:7rem;border-radius:var(--radius-lg);overflow:hidden;margin:0 auto 1.5rem;display:block}.scanner-title{font-size:2rem;font-weight:700;color:var(--color-primary);margin-bottom:.5rem}.scanner-subtitle{font-size:.9375rem;color:var(--color-neutral);line-height:1.6;margin-bottom:2rem}.scanner-form{display:flex;flex-direction:column;gap:.75rem}.gtin-input{width:100%;padding:.875rem 1rem;font-size:1.25rem;border:2px solid #e5e7eb;border-radius:var(--radius);text-align:center;letter-spacing:.1em;outline:none;transition:border-color .15s;background:#fff;color:var(--color-ink);font-family:ui-monospace,SF Mono,Consolas,monospace}.gtin-input:focus{border-color:var(--color-primary)}.gtin-input--error{border-color:var(--color-danger)}.gtin-input::placeholder{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;font-size:.9375rem;font-weight:400;letter-spacing:normal;color:var(--color-neutral)}.input-error{font-size:.875rem;color:var(--color-danger);text-align:left}.btn-primary{width:100%;padding:.875rem 1.5rem;font-size:1rem;font-weight:600;background:var(--color-primary);color:#fff;border:none;border-radius:var(--radius);cursor:pointer;transition:background .15s,opacity .15s}.btn-primary:hover:not(:disabled){background:var(--color-primary-dark)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-secondary{width:100%;padding:.875rem 1.5rem;font-size:1rem;font-weight:500;background:transparent;color:var(--color-primary-text);border:2px solid var(--color-primary);border-radius:var(--radius);cursor:pointer;text-decoration:none;display:block;text-align:center}.btn-secondary:hover{background:var(--color-primary-soft)}.btn-secondary--inline{display:inline-block;width:auto;padding:.75rem 2rem}.btn-primary--compact,.btn-secondary--compact{width:auto;padding:.5rem 1rem;font-size:.875rem}.nutriments-table{width:100%;font-size:.875rem;border-collapse:collapse}.nutriments-table tr+tr td{border-top:1px solid var(--color-surface-muted)}.nutriments-table td{padding:.375rem .25rem;color:var(--color-neutral)}.nutriments-table td:last-child{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-weight:500}.empty-state{text-align:center;padding:2rem;color:var(--color-neutral);font-size:.9375rem}.not-found-page{text-align:center;padding:3rem 1.5rem}.not-found-icon{font-size:3rem;margin-bottom:1rem}.not-found-title{font-size:1.25rem;font-weight:600;color:var(--color-ink);margin-bottom:.5rem}.not-found-text{font-size:.9375rem;color:var(--color-neutral);margin-bottom:1.5rem}.nova-badge{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border-radius:50%;font-size:.8125rem;font-weight:700;color:#fff;flex-shrink:0}.nova-1{background:#19a752}.nova-2{background:#8bc34a}.nova-3{background:#ffc107}.nova-4{background:#e5483d}.btn-scan-camera{width:100%;padding:1rem 1.5rem;font-size:1rem;font-weight:600;background:var(--color-primary);color:#fff;border:none;border-radius:var(--radius);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;transition:background .15s;margin-bottom:1rem}.btn-scan-camera:active,.btn-scan-camera:hover{background:var(--color-primary-dark)}.camera-error{font-size:.875rem;color:var(--color-danger);text-align:center;margin-bottom:.75rem}.scan-divider{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem;color:var(--color-neutral);font-size:.875rem}.scan-divider:after,.scan-divider:before{content:"";flex:1 1;height:1px;background:#e5e7eb}.camera-section{width:100%;display:flex;flex-direction:column;gap:.75rem}.recall-banner{width:100%;display:flex;align-items:center;gap:.625rem;margin-top:1rem;padding:.875rem 1rem;border-radius:var(--radius);background:var(--color-warning-bg);border:1.5px solid var(--color-warning-border);color:var(--color-warning-text);text-decoration:none;font-size:.875rem;font-weight:500;transition:background .15s}.recall-banner:focus-visible,.recall-banner:hover{background:var(--color-warning-border)}.recall-banner__text{flex:1 1;text-align:left}.recall-banner__arrow{flex-shrink:0;font-weight:700}.scanner-viewport{position:relative;width:100%;border-radius:var(--radius);overflow:hidden;background:#000;aspect-ratio:4/3}.scanner-video{width:100%;height:100%;object-fit:cover;display:block}.scanner-frame{position:absolute;inset:0;pointer-events:none}.scanner-frame:before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:72%;height:32%;border:2.5px solid #fff;border-radius:8px;box-shadow:0 0 0 9999px rgba(0,0,0,.45)}.scanner-hint{font-size:.8125rem;color:var(--color-neutral);text-align:center;margin:0}.auth-page{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;background:var(--color-background)}.auth-card{width:100%;max-width:400px;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:2rem 1.5rem}.auth-title{font-size:1.5rem;font-weight:700;color:var(--color-ink);margin-bottom:.25rem}.auth-subtitle{font-size:.9375rem;color:var(--color-neutral);margin-bottom:1.5rem}.form-group{margin-bottom:1rem}.form-label{display:block;font-size:.875rem;font-weight:500;color:var(--color-neutral);margin-bottom:.375rem}.form-input{width:100%;padding:.75rem 1rem;font-size:1rem;border:1.5px solid #e5e7eb;border-radius:8px;outline:none;background:#fff;color:var(--color-ink);transition:border-color .15s}.form-input:focus{border-color:var(--color-primary)}.form-input--error{border-color:var(--color-danger)}.form-error{font-size:.8125rem;color:var(--color-danger);margin-top:.375rem}.auth-footer{text-align:center;font-size:.875rem;color:var(--color-neutral);margin-top:.75rem}.auth-footer a{color:var(--color-primary-text);font-weight:500;text-decoration:none}.auth-footer a:hover{text-decoration:underline}.settings-page{max-width:480px}.settings-card{background:#fff;border:1px solid #eef2ef;border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem;margin-bottom:.75rem}.settings-card__head{display:flex;align-items:center;gap:.55rem;margin-bottom:.85rem}.settings-card__icon{width:2rem;height:2rem;border-radius:9px;background:var(--color-primary-soft);display:flex;align-items:center;justify-content:center;font-size:1.05rem;flex-shrink:0}.settings-card__title{font-weight:700;font-size:.95rem;color:var(--color-ink)}.settings-card--danger{background:var(--color-danger-bg);border-color:var(--color-danger-border)}.settings-card--danger .settings-card__icon{background:var(--color-danger-border)}.settings-card--danger .settings-card__title{color:var(--color-danger-text)}.settings-card--muted{background:var(--color-background);box-shadow:none}.profile-header{display:flex;align-items:center;gap:.875rem;margin-bottom:1.5rem}.profile-avatar{width:3.5rem;height:3.5rem;border-radius:var(--radius-pill);background:var(--color-primary-soft);color:var(--color-primary-dark);display:flex;align-items:center;justify-content:center;font-size:1.25rem;font-weight:700;flex-shrink:0}.profile-header__info{flex:1 1;min-width:0}.profile-header__name{font-size:1.25rem;font-weight:700;color:var(--color-ink)}.profile-header__email,.profile-header__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-header__email{font-size:.8125rem;color:var(--color-neutral)}.profile-header__badges{display:flex;gap:.375rem;margin-top:.375rem;flex-wrap:wrap}.tag--info{background:var(--color-info-bg);color:var(--color-info-text);border:1px solid var(--color-info-border)}.settings-card__head--button{width:100%;background:transparent;border:none;padding:0;cursor:pointer;text-align:left;font:inherit;color:inherit}.settings-card__value{font-size:.8125rem;color:var(--color-neutral);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:9rem}.settings-card__chevron{flex-shrink:0;color:var(--color-neutral);transition:transform .2s ease-out}.settings-card__head--button[aria-expanded=true] .settings-card__chevron{transform:rotate(180deg)}.disclosure-panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s ease-out}.disclosure-panel--open{grid-template-rows:1fr}.disclosure-panel__inner{overflow:hidden;min-height:0}.disclosure-panel__content{padding-top:.85rem}@media (prefers-reduced-motion:reduce){.disclosure-panel,.settings-card__chevron{transition:none}}.allergen-grid{display:flex;flex-wrap:wrap;gap:.5rem}.allergen-chip{display:inline-flex;align-items:center;gap:.375rem;min-height:2.75rem;padding:.5rem .9375rem;border-radius:999px;border:1.5px solid #e5e7eb;background:#fff;color:var(--color-ink);font-size:.8125rem;font-weight:500;line-height:1.3;cursor:pointer;transition:background .15s ease-out,border-color .15s ease-out,color .15s ease-out}.allergen-chip:hover{border-color:var(--color-primary-light)}.allergen-chip:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.allergen-chip__check{font-size:.75rem;line-height:1}.allergen-chip--selected{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.allergen-chip--selected:hover{background:var(--color-primary-dark);border-color:var(--color-primary-dark)}.allergen-count{font-size:.75rem;font-weight:600;color:var(--color-primary-text);background:var(--color-primary-soft);border-radius:999px;padding:.125rem .5rem}.dietary-note{display:flex;gap:.625rem;align-items:flex-start;padding:.875rem 1rem;border-radius:var(--radius);background:var(--color-surface-muted);color:var(--color-neutral);font-size:.8125rem;line-height:1.5}.admin-page{max-width:720px}.admin-toolbar{flex-direction:column;margin:.75rem 0 1rem}.admin-toolbar,.admin-toolbar__filters{display:flex;gap:.5rem}.admin-toolbar__filters select{flex:1 1;padding:.625rem;border-radius:var(--radius);border:1px solid var(--color-surface-muted)}.admin-columns{display:grid;grid-template-columns:1fr;grid-gap:1rem;gap:1rem;align-items:start}@media (min-width:1024px){.admin-page{max-width:1120px;padding:2rem 2.5rem}.admin-columns{grid-template-columns:1fr 1fr}.admin-table{font-size:.9375rem}.admin-table td,.admin-table th{padding:.625rem 1rem .625rem 0}.admin-toolbar{flex-direction:row;align-items:center}.admin-toolbar .gtin-input{flex:1 1;max-width:360px}.admin-toolbar__filters{flex:0 0 auto}.admin-toolbar__filters select{flex:0 0 180px}}.moderation-page{max-width:720px}.moderation-suggestion{padding:.75rem 0;border-top:1px solid var(--color-surface-muted)}.moderation-suggestion:first-of-type{border-top:none;padding-top:0}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));grid-gap:.625rem;gap:.625rem;margin-bottom:.75rem}.stat-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:.875rem 1rem;display:flex;flex-direction:column;gap:.125rem}.stat-card--clickable{text-decoration:none;color:inherit;transition:box-shadow .15s ease,transform .15s ease}.stat-card--clickable:focus-visible,.stat-card--clickable:hover{box-shadow:var(--shadow-hover,0 4px 12px rgba(0,0,0,.1));transform:translateY(-1px)}.stat-card__value{font-size:1.5rem;font-weight:700;color:var(--color-primary);line-height:1.2}.stat-card__label{font-size:.75rem;color:var(--color-neutral)}.stat-card__hint{font-size:.6875rem;color:var(--color-neutral)}.sync-row{display:flex;justify-content:space-between;align-items:center;gap:.75rem;padding:.5rem 0;font-size:.875rem}.sync-row+.sync-row{border-top:1px solid var(--color-surface-muted)}.sync-row__source{color:var(--color-neutral);font-weight:500}.sync-row__meta{color:var(--color-neutral);font-size:.75rem;text-align:right}.sync-status-dot{display:inline-block;width:.5rem;height:.5rem;border-radius:50%;margin-right:.375rem}.sync-status-dot--success{background:var(--color-success)}.sync-status-dot--error{background:var(--color-danger)}.sync-status-dot--running{background:var(--color-warning)}.admin-table{width:100%;font-size:.8125rem;border-collapse:collapse}.admin-table th{text-align:left;font-size:.6875rem;text-transform:uppercase;letter-spacing:.03em;color:var(--color-neutral);padding-bottom:.5rem}.admin-table td{padding:.375rem 0;color:var(--color-neutral)}.admin-table tr+tr td{border-top:1px solid var(--color-surface-muted)}.traffic-bars{display:flex;align-items:flex-end;gap:3px;height:80px}.traffic-bar{flex:1 1;background:var(--color-primary-light);border-radius:2px 2px 0 0;min-height:2px}.mini-card{display:flex;align-items:center;gap:.625rem;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:.625rem .75rem;margin-bottom:.5rem;text-decoration:none;color:inherit}.mini-card__img,.mini-card__img-placeholder{width:2.75rem;height:2.75rem;border-radius:8px;object-fit:contain;background:var(--color-surface-muted);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:1.25rem}.mini-card__info{flex:1 1;min-width:0}.mini-card__name{font-size:.875rem;font-weight:500;color:var(--color-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mini-card__brand{font-size:.75rem;color:var(--color-neutral)}.mini-card__score{gap:.375rem;flex-shrink:0}.history-row,.mini-card__score{display:flex;align-items:center}.history-row{gap:.625rem;padding:.5rem 0}.history-row+.history-row{border-top:1px solid var(--color-surface-muted)}.history-row__info{flex:1 1;min-width:0}.history-row__name{font-size:.875rem;font-weight:500;color:var(--color-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.history-row__meta{font-size:.75rem;color:var(--color-neutral)}body.has-floating-nav .page{padding-bottom:5.5rem}.floating-island-wrap{position:fixed;bottom:calc(.75rem + env(safe-area-inset-bottom, 0px));left:0;right:0;z-index:40;display:flex;justify-content:center;padding:0 1rem;pointer-events:none}.floating-island{pointer-events:auto;position:relative;display:flex;align-items:center;justify-content:space-around;gap:.125rem;width:100%;max-width:400px;background:var(--color-primary);border-radius:var(--radius-pill);padding:.5rem;box-shadow:0 6px 20px rgba(15,40,25,.28)}.floating-island__btn{flex:1 1;background:none;border:none;color:#fff;text-decoration:none;display:flex;flex-direction:column;align-items:center;gap:.2rem;font-size:.625rem;padding:.375rem .25rem;cursor:pointer;border-radius:10px;transition:background .15s}.floating-island__btn--active,.floating-island__btn:active{background:rgba(255,255,255,.18)}.floating-island__fab-slot{flex:1 1;display:flex;justify-content:center}.floating-island__fab{position:relative;width:2.75rem;height:2.75rem;border-radius:50%;background:#fff;color:var(--color-primary-dark);border:none;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(15,40,25,.2);cursor:pointer;transition:transform .15s ease-out}.floating-island__fab:active{transform:scale(.94)}@media (prefers-reduced-motion:reduce){.floating-island__fab{transition:none}}.floating-profile-btn{position:fixed;top:calc(.875rem + env(safe-area-inset-top, 0px));right:.875rem;z-index:40;width:2.75rem;height:2.75rem;border-radius:50%;background:var(--color-primary);color:#fff;border:2px solid #fff;display:flex;align-items:center;justify-content:center;font-size:.875rem;font-weight:700;cursor:pointer;box-shadow:0 3px 10px rgba(15,40,25,.25)}.floating-profile-btn:active{background:var(--color-primary-dark)}.floating-panel__backdrop{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:45}.floating-panel{position:fixed;bottom:0;left:0;right:0;z-index:50;display:flex;justify-content:center}.floating-panel__inner{width:100%;max-width:480px;background:#fff;border-radius:16px 16px 0 0;padding:1.25rem 1.25rem calc(1.25rem + env(safe-area-inset-bottom, 0px));max-height:70vh;overflow-y:auto}.floating-panel__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.floating-panel__title{font-size:1rem;font-weight:700;color:var(--color-ink)}.floating-panel__close{background:none;border:none;color:var(--color-neutral);font-size:1.5rem;line-height:1;cursor:pointer;padding:.25rem}.grade-distribution{display:flex;align-items:flex-end;gap:.5rem;height:70px;margin-bottom:.25rem}.grade-distribution__bar{flex:1 1;border-radius:3px 3px 0 0;min-height:3px;display:flex;align-items:flex-start;justify-content:center;color:#fff;font-size:.6875rem;font-weight:600;padding-top:.125rem}.grade-distribution__labels{display:flex;gap:.5rem}.grade-distribution__labels span{flex:1 1;text-align:center;font-size:.6875rem;color:var(--color-neutral)}.allergen-line{display:flex;flex-wrap:wrap;gap:.375rem;margin-bottom:.5rem}.allergen-line__title{font-size:.8125rem;font-weight:600;margin-bottom:.25rem}.allergen-line__empty{font-size:.8125rem;color:var(--color-neutral);margin-bottom:.25rem}