/* screens.css — mise en page par écran. Écran 01 : Weekly Menu (design/screens.jsx). */

/* ---------- Hero ---------- */
.menu-hero {
    padding: 36px 36px 18px;
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: end;
    gap: 32px;
}
.menu-hero__title {
    font-family: var(--display);
    font-size: 64px;
    font-weight: 400;
    letter-spacing: -0.04em;
    line-height: 0.98;
    margin: 12px 0 0;
    color: var(--ink);
}
.menu-hero__title .muted { color: var(--ink-40); }

.deadline {
    background: var(--navy);
    color: #fff;
    padding: 22px;
    border-radius: var(--r-card);
    min-width: 300px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    position: relative;
    overflow: hidden;
}
.deadline__circle {
    position: absolute;
    top: -30px;
    right: -30px;
    width: 120px;
    height: 120px;
    border-radius: 50%;
    background: var(--red);
    opacity: 0.95;
}
.deadline__label {
    font-size: 12px;
    opacity: 0.7;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    position: relative;
}
.deadline__time {
    display: flex;
    align-items: baseline;
    gap: 6px;
    position: relative;
}
.deadline__time .num {
    font-family: var(--display);
    font-size: 44px;
    font-weight: 400;
    letter-spacing: -0.03em;
}
.deadline__time .u { opacity: 0.6; }
.deadline__rule {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12px;
    opacity: 0.75;
    margin-top: 2px;
    position: relative;
}

/* ---------- Day picker ---------- */
.daypicker {
    padding: 20px 36px 16px; /* + de padding bas : aère la bande de scroll horizontale du day-picker */
}
/* Indice « faites glisser » — aligne a DROITE, au-dessus de la bande : c'est le cote vers lequel
   le contenu est cache, donc celui que l'oeil doit regarder. La fleche est tournee vers la droite
   et animee tres legerement ; `prefers-reduced-motion` la fige (une animation permanente dans le
   champ de vision d'un ecran de commande fatigue plus qu'elle n'aide). */
.daypicker__hint {
    display: flex; align-items: center; justify-content: flex-end; gap: 6px;
    margin: 0 0 8px; font-size: 12.5px; color: var(--ink-60);
}
.daypicker__hint-ico { display: inline-flex; animation: daypicker-nudge 1.6s ease-in-out infinite; }
@keyframes daypicker-nudge {
    0%, 60%, 100% { transform: translateX(0); }
    30%           { transform: translateX(4px); }
}
@media (prefers-reduced-motion: reduce) {
    .daypicker__hint-ico { animation: none; }
}

.daypicker__grid {
    display: grid;
    grid-auto-flow: column;
    /* 7 jours -> remplit la largeur (1fr) ; 14/21/28 jours -> chaque carte à sa largeur mini et
       la bande défile horizontalement (au lieu de wrapper en rangées de 7). menu_days_ahead
       est paramétrable depuis Admin > Paramètres. */
    grid-auto-columns: minmax(88px, 1fr);
    gap: 10px;
    overflow-x: auto;
}
.daycard {
    padding: 14px;
    border-radius: var(--r-panel);
    cursor: pointer;
    background: var(--surface);
    color: var(--ink);
    border: 1px solid var(--line);
    text-align: left;
    display: block;
    position: relative;
}
.daycard--sel { background: var(--navy); color: #fff; border: none; }
.daycard--closed { opacity: 0.55; }
.daycard__top {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 8px;
}
.daycard__dow {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    opacity: 0.7;
}
.daycard__now {
    font-size: 10px;
    padding: 2px 7px;
    border-radius: var(--r-pill);
    font-weight: 600;
    background: var(--red);
    color: #fff;
}
.daycard__date {
    font-family: var(--display);
    font-size: 28px;
    font-weight: 400;
    letter-spacing: -0.03em;
    line-height: 1;
}
.daycard__month {
    font-size: 11px;
    opacity: 0.6;
    margin-top: 4px;
    text-transform: lowercase;
}

/* ---------- Day status bar ---------- */
.statusbar-wrap { padding: 16px 36px 0; }
.statusbar {
    padding: 14px 18px;
    border-radius: var(--r-panel);
    background: var(--navy-soft);
    color: var(--navy-ink);
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 13px;
}
.statusbar--locked {
    background: rgba(15, 19, 32, 0.05);
    color: var(--ink-70);
}
.theme-dark .statusbar--locked { background: rgba(242, 240, 235, 0.06); }
.statusbar__main { display: flex; align-items: center; gap: 10px; }
.statusbar__main strong { font-weight: 600; }

/* ---------- Toolbar (tabs + filters + child) ---------- */
.toolbar {
    padding: 22px 36px 18px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}
.toolbar__left { display: flex; align-items: center; gap: 24px; flex-wrap: wrap; }
.tabs {
    display: flex;
    gap: 4px;
    padding: 4px;
    background: var(--surface);
    border-radius: var(--r-pill);
    border: 1px solid var(--line);
}
.tab {
    padding: 8px 16px;
    border-radius: var(--r-pill);
    border: none;
    background: transparent;
    color: var(--ink-70);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 8px;
}
.tab--active { background: var(--navy); color: #fff; }
.tab__count {
    font-size: 11px;
    padding: 1px 7px;
    border-radius: var(--r-pill);
    background: rgba(15, 19, 32, 0.08);
}
.tab--active .tab__count { background: rgba(255, 255, 255, 0.2); }
.filters { display: flex; gap: 8px; flex-wrap: wrap; }
.ordering { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--ink-60); flex-wrap: wrap; }
.child-btn {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px 6px 6px;
    border-radius: var(--r-pill);
    background: var(--surface);
    border: 1px solid var(--line);
    font-size: 13px;
    cursor: pointer;
    color: var(--ink);
}
.child-avatar {
    width: 24px;
    height: 24px;
    border-radius: var(--r-pill);
    background: var(--navy-soft);
    color: var(--navy-ink);
    display: grid;
    place-items: center;
    font-size: 11px;
    font-weight: 600;
}

/* ---------- Dish grid ---------- */
.dishgrid-wrap { padding: 0 36px 50px; }
.dishgrid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 16px;
}
.empty {
    padding: 60px;
    border-radius: var(--r-card);
    background: var(--surface);
    border: 1px solid var(--line);
    text-align: center;
    color: var(--ink-60);
}
/* Date complète (avec l'année) en tête de l'état vide — cf. pages/menu.php::day_full_year(). */
.empty__date {
    font: 600 12px/1 var(--ui);
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--ink-60);
    margin-bottom: 10px;
}
.empty__title {
    font-family: var(--display);
    font-size: 22px;
    color: var(--ink);
    margin-bottom: 8px;
}
/* Action de reset des filtres dans l'état vide (cf. .claude/STANDARDS-UI.md §2). */
.empty__action {
    margin-top: 16px;
}

/* ---------- Dish card ---------- */
.dishcard {
    background: var(--surface);
    border-radius: var(--r-card);
    padding: 20px;
    border: 1px solid var(--line);
    display: flex;
    flex-direction: column;
    gap: 14px;
    min-height: 290px;
    position: relative;
}
.dishcard--locked { opacity: 0.75; }
.dishcard__lock { position: absolute; top: 14px; right: 14px; z-index: 2; }
.dishcard__tags { display: flex; gap: 6px; flex-wrap: wrap; }
.dishcard__plate { display: grid; place-items: center; padding: 6px 0 14px; }
.dishcard__name {
    font-family: var(--display);
    font-size: 19px;
    font-weight: 500;
    letter-spacing: -0.02em;
    line-height: 1.15;
}
.dishcard__sub { font-size: 13px; color: var(--ink-60); margin-top: 4px; }
.dishcard__foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px dashed var(--line);
    position: relative; /* ancre .dishcard__toast juste au-dessus, cf. ci-dessous */
}
.price {
    font-family: var(--display);
    font-size: 22px;
    font-weight: 500;
    letter-spacing: -0.02em;
}
.price .cur { font-size: 12px; color: var(--ink-60); }
.cal { font-size: 11px; color: var(--ink-60); }

/* Retour "plafond atteint / échec" au clic « Ajouter » (mission "Ajout au panier : retour
   visuel honnête"). Créé/rempli par public/js/screens/menu.js — jamais présent statiquement
   dans le HTML (aucune carte plat ne réserve d'espace pour un message qui n'apparaît qu'après
   un clic). Ancré à `.dishcard__foot` (bottom: 100%) plutôt qu'au bas de `.dishcard` : la
   hauteur au-dessus du foot varie selon la longueur du nom/sous-titre du plat, alors que la
   position relative au foot reste stable — le message flotte toujours juste au-dessus du bouton
   « Ajouter », sans jamais le recouvrir (pointer-events: none en prime). */
.dishcard__toast {
    position: absolute;
    left: 0;
    right: 0;
    bottom: calc(100% + 8px);
    z-index: 3;
    padding: 8px 12px;
    border-radius: var(--r-pill);
    border: 1px solid var(--line);
    font: 600 12px/1.35 var(--ui);
    text-align: center;
    opacity: 0;
    transform: translateY(4px);
    pointer-events: none;
    transition: opacity 180ms ease, transform 180ms ease;
}
.dishcard__toast.is-visible { opacity: 1; transform: translateY(0); }
/* Plafond (règle métier : 9/ligne, INCHANGÉE) — discret et informatif, pas alarmant : rien n'a
   été perdu, l'utilisateur a juste atteint la borne. */
.dishcard__toast--capped {
    background: var(--navy-soft);
    color: var(--navy-ink);
    border-color: color-mix(in oklch, var(--navy) 25%, var(--line));
}
/* Échec métier (cutoff, plat indisponible, session expirée, BDD…) — même palette d'alerte que le
   reste de l'app (wallet-pill--low, pill--redSoft), dérivée de --brand-accent, jamais un hex. */
.dishcard__toast--error {
    background: var(--red-soft);
    color: var(--red-ink);
    border-color: color-mix(in oklch, var(--red) 25%, var(--line));
}
@media (prefers-reduced-motion: reduce) {
    .dishcard__toast { transition: opacity 120ms ease; transform: none; }
}

/* ---------- Chef pick ---------- */
.chef-wrap { padding: 0 36px 60px; }
.chef {
    border-radius: 24px;
    background: var(--navy);
    color: #fff;
    padding: 32px;
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: center;
    gap: 32px;
    position: relative;
    overflow: hidden;
}
.chef__circle {
    position: absolute;
    right: -40px;
    bottom: -40px;
    width: 200px;
    height: 200px;
    border-radius: 50%;
    background: var(--red);
    opacity: 0.9;
}
.chef__body { position: relative; }
.chef__title {
    font-family: var(--display);
    font-size: 38px;
    font-weight: 400;
    letter-spacing: -0.03em;
    margin-top: 12px;
    line-height: 1.05;
}
.chef__desc { font-size: 14px; opacity: 0.75; margin-top: 8px; max-width: 540px; line-height: 1.5; }
.chef__actions { display: flex; gap: 10px; margin-top: 18px; flex-wrap: wrap; }
.chef__plate { position: relative; }

/* ============ RESPONSIVE (PWA ≤ 480px = mêmes pages) ============ */
@media (max-width: 1024px) {
    .dishgrid { grid-template-columns: repeat(2, 1fr); }
    .menu-hero { grid-template-columns: 1fr; }
    .menu-hero__title { font-size: 44px; }
    .chef { grid-template-columns: 1fr; }
    .chef__plate { display: none; }
}
@media (max-width: 640px) {
    .topnav, .menu-hero, .daypicker, .statusbar-wrap, .toolbar, .dishgrid-wrap, .chef-wrap {
        padding-left: 18px;
        padding-right: 18px;
    }
    /* NOTE (frontend-1, fix débordement mobile) : l'ancienne règle `.nav, .topnav__left {
       display: none }` masquait TOUT le bloc gauche du topnav (logo + bouton hamburger),
       contredisant le pattern hamburger construit dans public/css/mobile.css (chargé après ce
       fichier). `.nav` (le panneau déroulant) reste fermé par défaut via mobile.css lui-même
       (`.nav { display: none }` + `.nav--open`) — pas besoin de le re-masquer ici. Voir aussi
       mobile.css pour le traitement anti-débordement de `.topnav__actions`. */
    .daypicker__grid {
        grid-auto-flow: column;
        grid-template-columns: none;
        grid-auto-columns: 30%;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
    }
    .dishgrid { grid-template-columns: 1fr; }
    .menu-hero__title { font-size: 34px; }
    .toolbar { flex-direction: column; align-items: stretch; }
    /* Anti-débordement mobile de la toolbar : les onglets (Lunch/Kiddie/Snacks/Salad) défilent
       horizontalement (convention segmented control) au lieu de dépasser l'écran ; les boutons
       « Ordering for » et les filtres s'enroulent sur plusieurs lignes. */
    .toolbar__left { gap: 12px; width: 100%; min-width: 0; }
    .tabs { max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
    .tabs::-webkit-scrollbar { display: none; }
    .tab { flex: 0 0 auto; white-space: nowrap; }
    .filters { width: 100%; }
    .ordering { width: 100%; }
    /* .deadline a un min-width:300px en base (desktop) : sur très petits écrans (~320-360px)
       ce plancher peut dépasser la largeur disponible dans la colonne unique du hero. On le
       relâche ici, la carte prend simplement 100% de la largeur de sa colonne grid. */
    .deadline { min-width: 0; }
}
