/* ════════════════════════════════════════════════════════════════════
   THEANA — COMPONENTS.CSS
   Atomi (A1–A7) + Card (B1–B7).
   Dipende da tokens.css. Nessun valore hard-coded: solo var(--…).
   Navigazione (C) → main.css Fase 5.
   ════════════════════════════════════════════════════════════════════ */


/* ══════════════════════════════════════════════════════════════════
   A1 · BOTTONI
   4 stili × 3 dimensioni × stati (default/hover/focus/disabled).
   ══════════════════════════════════════════════════════════════════ */

.btn {
  font-family: var(--font-sans);
  font-weight: var(--fw-semibold);
  border-radius: var(--r-pill);
  border: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--sp-2);
  letter-spacing: .2px;
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
  transition: background-color var(--dur-base) var(--ease-out),
              color var(--dur-base) var(--ease-out),
              border-color var(--dur-base) var(--ease-out),
              box-shadow var(--dur-base) var(--ease-out),
              transform var(--dur-fast) var(--ease-out);
  /* Dimensione default md */
  padding: 11px 22px;
  font-size: var(--fs-small);
}

/* Stili */
.btn--primary {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}
.btn--primary:hover {
  background-color: var(--color-primary-hover);
  color: var(--color-on-primary);
}

.btn--accent {
  background-color: var(--color-accent);
  color: var(--color-on-accent);
}
.btn--accent:hover {
  background-color: var(--color-accent-hover);
  color: var(--color-on-accent);
}

.btn--secondary {
  background-color: transparent;
  color: var(--color-primary);
  border: 1px solid rgba(31, 26, 20, .28);
}
.btn--secondary:hover {
  border-color: var(--color-primary);
  background-color: transparent;
}

.btn--ghost {
  background-color: transparent;
  color: var(--color-primary);
  border: 0;
}
.btn--ghost:hover {
  background-color: var(--color-paper-soft);
}

/* Dimensioni */
.btn--sm { padding: 8px 16px;  font-size: 12px; }
.btn--md { padding: 11px 22px; font-size: var(--fs-small); }
.btn--lg { padding: 14px 28px; font-size: 14px; }

/* Full-width */
.btn--full { width: 100%; }

/* Disabled */
.btn:disabled,
.btn--disabled {
  background-color: var(--color-surface);
  color: var(--color-muted);
  opacity: .7;
  cursor: not-allowed;
  pointer-events: none;
}

/* Loading state */
.btn--loading {
  position: relative;
  color: transparent;
  pointer-events: none;
}
.btn--loading::after {
  content: '';
  position: absolute;
  width: 16px; height: 16px;
  border: 2px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  animation: btn-spin .7s linear infinite;
  inset: 50% auto auto 50%;
  transform: translate(-50%, -50%);
  color: var(--color-on-primary);
}
@keyframes btn-spin { to { transform: translate(-50%, -50%) rotate(360deg); } }

/* Done state */
.btn--done {
  background-color: var(--color-success);
  color: var(--color-on-primary);
}

/* SVG icone dentro bottone */
.btn svg { flex-shrink: 0; }


/* ══════════════════════════════════════════════════════════════════
   A2 · TAG & BADGE
   Pillole, etichette, filtri interattivi.
   ══════════════════════════════════════════════════════════════════ */

/* Base comune */
.badge,
.tag {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  border-radius: var(--r-pill);
  font-family: var(--font-mono);
  font-weight: var(--fw-medium);
  font-size: var(--fs-caps);
  line-height: var(--lh-caps);
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  padding: 4px 10px;
  white-space: nowrap;
}

/* BIO — su sfondo chiaro */
.badge--bio {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

/* BIO — su immagine (con blur) */
.badge--bio-img {
  background-color: rgba(250, 241, 225, .92);
  color: var(--color-primary);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}

/* Novità */
.badge--new {
  background-color: var(--color-accent);
  color: var(--color-on-accent);
}

/* Limitato / Offerta */
.badge--limited {
  background-color: var(--color-error);
  color: var(--color-on-primary);
}

/* Categoria (passiva) */
.badge--cat {
  background-color: var(--color-paper-soft);
  color: var(--color-primary);
}

/* Trust badge inline (positivo) */
.badge--trust {
  background-color: rgba(61, 79, 53, .12);
  color: var(--color-primary);
}

/* Trust badge inline (urgenza) */
.badge--urgency {
  background-color: rgba(168, 85, 58, .12);
  color: var(--color-error);
}

/* Badge posizionati su immagine */
.card-badges {
  position: absolute;
  top: var(--sp-3);
  left: var(--sp-3);
  right: var(--sp-3);
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  pointer-events: none;
}

/* Filtro esigenza — interattivo */
.tag--filter {
  background-color: transparent;
  color: var(--color-primary);
  border: 1px solid rgba(31, 26, 20, .28);
  font-family: var(--font-sans);
  font-size: 12px;
  font-weight: var(--fw-regular);
  letter-spacing: 0;
  text-transform: none;
  cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-out),
              color var(--dur-fast) var(--ease-out),
              border-color var(--dur-fast) var(--ease-out);
}
.tag--filter:hover,
.tag--filter.is-active {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
  border-color: var(--color-primary);
}

/* Chip "filtri attivi" */
.tag--active {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
}
.tag--active__count {
  background-color: var(--color-accent);
  color: var(--color-on-accent);
  border-radius: var(--r-pill);
  padding: 1px 6px;
  font-size: 10px;
}
.tag--active__remove {
  background: rgba(250, 241, 225, .25);
  border: 0;
  border-radius: 50%;
  width: 16px; height: 16px;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer;
  color: inherit;
  padding: 0;
  transition: background-color var(--dur-fast) var(--ease-out);
}
.tag--active__remove:hover { background: rgba(250, 241, 225, .45); }


/* ══════════════════════════════════════════════════════════════════
   A3 · INPUT & FORM
   Text, select, textarea, checkbox, radio, segmented, stepper.
   ══════════════════════════════════════════════════════════════════ */

/* Label */
.form-label {
  display: block;
  font-family: var(--font-sans);
  font-size: 11px;
  font-weight: var(--fw-semibold);
  color: var(--color-primary);
  letter-spacing: .3px;
  text-transform: uppercase;
  margin-bottom: var(--sp-2);
}

/* Input base (text / email / tel / password) */
.form-input {
  width: 100%;
  padding: 12px 14px;
  background-color: var(--color-paper-soft);
  border: 1px solid var(--color-rule);
  border-radius: var(--r-md);
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  font-weight: var(--fw-regular);
  color: var(--color-ink);
  transition: background-color var(--dur-fast) var(--ease-out),
              border-color var(--dur-fast) var(--ease-out);
  appearance: none;
}
.form-input::placeholder { color: var(--color-muted); }
.form-input:focus {
  outline: none;
  background-color: var(--color-paper);
  border: 1.5px solid var(--color-primary);
}
.form-input.is-error {
  border-color: var(--color-error);
  background-color: var(--color-paper);
}

/* Hint sotto il campo */
.form-hint {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 12px;
  color: var(--color-muted);
  margin-top: var(--sp-1);
}

/* Messaggio di errore */
.form-error {
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  color: var(--color-error);
  margin-top: var(--sp-1);
  display: flex;
  align-items: center;
  gap: var(--sp-1);
}

/* Textarea */
.form-textarea {
  resize: vertical;
  min-height: 120px;
}

/* Select */
.form-select {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%231F1A14' stroke-width='1.4'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 12px center;
  padding-right: 36px;
  cursor: pointer;
}

/* Search input */
.form-search {
  padding-left: 40px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23736249' stroke-width='1.4'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: 12px center;
}

/* Gruppo form (label + input + hint) */
.form-group {
  display: flex;
  flex-direction: column;
  margin-bottom: var(--sp-5);
}

/* Segmented — selettore formato (25g / 50g / 100g) */
.segmented {
  display: flex;
  border-radius: var(--r-md);
  border: 1px solid var(--color-rule);
  overflow: hidden;
}
.segmented__option {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 10px var(--sp-3);
  cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-out),
              color var(--dur-fast) var(--ease-out);
  border-right: 1px solid var(--color-rule);
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  color: var(--color-primary);
  user-select: none;
}
.segmented__option:last-child { border-right: none; }
.segmented__option.is-active {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}
.segmented__option:hover:not(.is-active) {
  background-color: var(--color-paper-soft);
}
.segmented__price {
  font-weight: var(--fw-semibold);
  font-size: 12px;
  margin-top: 2px;
}

/* Stepper quantità — pill arrotondato con due cerchi − / + (design tappa6) */
.stepper {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  padding: 4px;
  border: 1px solid rgba(31, 26, 20, 0.28);
  border-radius: var(--r-pill);
  background-color: var(--color-paper);
}
.stepper__btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px; height: 32px;
  border: 0;
  border-radius: var(--r-pill);
  background-color: transparent;
  cursor: pointer;
  color: var(--color-primary);
  font-size: 17px;
  line-height: 1;
  transition: background-color var(--dur-fast) var(--ease-out);
  flex-shrink: 0;
}
.stepper__btn--minus:hover { background-color: var(--color-paper-soft); }
.stepper__btn--plus {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}
.stepper__btn--plus:hover { background-color: var(--color-primary-hover); }

/* Il numero al centro: l'input numerico nativo, senza bordo né frecce */
.stepper .qty,
.stepper input[type="number"] {
  width: 40px;
  min-width: 0;
  padding: 0;
  border: 0;
  background: transparent;
  text-align: center;
  font-family: var(--font-sans);
  font-size: 14px;
  font-weight: var(--fw-bold);
  color: var(--color-ink);
  -moz-appearance: textfield;
  appearance: textfield;
}
.stepper .qty:focus,
.stepper input[type="number"]:focus { outline: none; }
.stepper .qty::-webkit-outer-spin-button,
.stepper .qty::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

@media (max-width: 768px) {
  .stepper__btn { width: 36px; height: 36px; }
}

/* Checkbox */
.form-check {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-2);
  cursor: pointer;
}
.form-check__input {
  appearance: none;
  width: 18px; height: 18px;
  flex-shrink: 0;
  border: 1.5px solid var(--color-rule);
  border-radius: var(--r-sm);
  background-color: var(--color-paper-soft);
  cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-out),
              border-color var(--dur-fast) var(--ease-out);
  position: relative;
  margin-top: 2px;
}
.form-check__input:checked {
  background-color: var(--color-primary);
  border-color: var(--color-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23FAF1E1' stroke-width='2.5'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
}
.form-check__label {
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  color: var(--color-ink);
  line-height: 1.5;
}

/* Radio */
.form-radio {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-2);
  cursor: pointer;
}
.form-radio__input {
  appearance: none;
  width: 18px; height: 18px;
  flex-shrink: 0;
  border: 1.5px solid var(--color-rule);
  border-radius: 50%;
  background-color: var(--color-paper-soft);
  cursor: pointer;
  transition: border-color var(--dur-fast) var(--ease-out);
  position: relative;
  margin-top: 2px;
}
.form-radio__input:checked {
  border-color: var(--color-primary);
  border-width: 2px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Ccircle cx='4' cy='4' r='3' fill='%233D4F35'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
}
.form-radio__label {
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  color: var(--color-ink);
  line-height: 1.5;
}


/* ══════════════════════════════════════════════════════════════════
   A4 · PREZZO
   ══════════════════════════════════════════════════════════════════ */

.price {
  display: inline-flex;
  align-items: baseline;
  gap: var(--sp-2);
}
.price__amount {
  font-family: var(--font-sans);
  font-size: 22px;
  font-weight: var(--fw-bold);
  color: var(--color-ink);
  line-height: 1;
}
.price__unit {
  font-family: var(--font-sans);
  font-size: 12px;
  font-weight: var(--fw-regular);
  color: var(--color-muted);
}

/* In offerta */
.price--sale .price__amount { color: var(--color-error); }
.price__old {
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  color: var(--color-muted);
  text-decoration: line-through;
}
.price__discount {
  font-family: var(--font-mono);
  font-size: var(--fs-caps);
  font-weight: var(--fw-medium);
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  background-color: var(--color-error);
  color: var(--color-on-primary);
  border-radius: var(--r-sm);
  padding: 2px 6px;
}

/* Prezzo in card (ridotto) */
.price--card .price__amount { font-size: 17px; }


/* ══════════════════════════════════════════════════════════════════
   A5 · RATING
   ══════════════════════════════════════════════════════════════════ */

.rating {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
}
.rating__stars {
  color: var(--color-accent);
  font-size: 14px;
  letter-spacing: 1px;
  line-height: 1;
}
.rating__score {
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  font-weight: var(--fw-semibold);
  color: var(--color-ink);
}
.rating__count {
  font-family: var(--font-sans);
  font-size: 11px;
  color: var(--color-muted);
}


/* ══════════════════════════════════════════════════════════════════
   A6 · AVVISI / ALERT INLINE
   ══════════════════════════════════════════════════════════════════ */

.alert {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-3);
  border-radius: var(--r-md);
  padding: 10px 14px;
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  line-height: 1.5;
}
.alert--success {
  background-color: rgba(61, 79, 53, .10);
  color: var(--color-primary);
}
.alert--urgency {
  background-color: rgba(168, 85, 58, .10);
  color: var(--color-error);
}
.alert--info {
  background-color: var(--color-paper-soft);
  color: var(--color-ink);
}
.alert__icon {
  flex-shrink: 0;
  width: 16px; height: 16px;
  margin-top: 1px;
}


/* ══════════════════════════════════════════════════════════════════
   A7 · LINK INLINE
   ══════════════════════════════════════════════════════════════════ */

.link-inline {
  font-family: var(--font-sans);
  font-weight: var(--fw-medium);
  color: var(--color-primary);
  border-bottom: 1px solid currentColor;
  transition: color var(--dur-fast) var(--ease-out);
}
.link-inline:hover { color: var(--color-accent); }


/* ══════════════════════════════════════════════════════════════════
   B1 · CARD PRODOTTO — STANDARD
   4 colonne desktop → 2 mobile. La card principale del catalogo.
   ══════════════════════════════════════════════════════════════════ */

.card-product {
  display: flex;
  flex-direction: column;
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-soft);
  background-color: var(--color-paper);
  overflow: hidden;
  transition: box-shadow var(--dur-base) var(--ease-out),
              transform var(--dur-base) var(--ease-out);
}
.card-product:hover {
  box-shadow: var(--shadow-raised);
  transform: translateY(-2px);
}

.card-product__image {
  position: relative;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: 0;
}
.card-product__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0;
  transition: transform var(--dur-slow) var(--ease-out);
}
.card-product:hover .card-product__image img {
  transform: scale(1.03);
}

.card-product__body {
  padding: var(--sp-4);
  display: flex;
  flex-direction: column;
  flex: 1;
}

.card-product__cat {
  display: block;
  margin-bottom: var(--sp-2);
}

.card-product__name {
  font-family: var(--font-serif);
  font-weight: var(--fw-medium);
  font-size: 20px;
  line-height: 1.25;
  color: var(--color-primary);
  margin-bottom: var(--sp-2);
}
.card-product__name em {
  font-style: italic;
  color: var(--color-accent);
}

.card-product__desc {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 12px;
  color: var(--color-muted);
  line-height: 1.5;
  margin-bottom: var(--sp-3);
  flex: 1;
}

.card-product__rating { margin-bottom: var(--sp-3); }

.card-product__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-top: 1px solid var(--color-rule);
  padding-top: var(--sp-3);
  margin-top: auto;
}

.card-product__price {
  font-family: var(--font-sans);
  font-size: 17px;
  font-weight: var(--fw-bold);
  color: var(--color-ink);
}

.card-product__cta {
  font-family: var(--font-sans);
  font-size: 10px;
  font-weight: var(--fw-bold);
  color: var(--color-primary);
  letter-spacing: .5px;
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  transition: color var(--dur-fast) var(--ease-out);
}
.card-product__cta:hover { color: var(--color-accent); }

/* Griglia prodotti */
.products-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--sp-5);
}
@media (max-width: 1024px) {
  .products-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 768px) {
  .products-grid { grid-template-columns: repeat(2, 1fr); gap: var(--sp-4); }
}
@media (max-width: 480px) {
  .products-grid { grid-template-columns: repeat(2, 1fr); gap: var(--sp-3); }
}


/* ══════════════════════════════════════════════════════════════════
   B2 · CARD PRODOTTO — COMPATTA (riga)
   Carrello, mini-cart, cross-sell.
   ══════════════════════════════════════════════════════════════════ */

.card-product-compact {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-3);
  border: 1px solid var(--color-rule);
  border-radius: var(--r-md);
  background-color: var(--color-paper);
}

.card-product-compact__thumb {
  width: 64px;
  height: 64px;
  flex-shrink: 0;
  border-radius: var(--r-md);
  object-fit: cover;
}

.card-product-compact__info {
  flex: 1;
  min-width: 0;
}
.card-product-compact__cat {
  display: block;
  margin-bottom: 2px;
}
.card-product-compact__name {
  font-family: var(--font-serif);
  font-weight: var(--fw-medium);
  font-size: 15px;
  color: var(--color-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.card-product-compact__price {
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  font-weight: var(--fw-semibold);
  color: var(--color-ink);
  margin-top: 2px;
}

.card-product-compact__action {
  flex-shrink: 0;
}

/* Bottone + tondo (cross-sell) */
.btn-add-round {
  width: 32px; height: 32px;
  border-radius: 50%;
  border: 0;
  background-color: var(--color-primary);
  color: var(--color-on-primary);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-out);
  flex-shrink: 0;
}
.btn-add-round:hover { background-color: var(--color-primary-hover); }


/* ══════════════════════════════════════════════════════════════════
   B3 · CARD PRODOTTO — HERO (in evidenza)
   Blocco 2 colonne in home/shop.
   ══════════════════════════════════════════════════════════════════ */

.card-product-hero {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-6);
  align-items: center;
  background-color: var(--color-paper-soft);
  border-radius: var(--r-xl);
  padding: var(--sp-6);
  min-height: 280px;
}

.card-product-hero__content {}
.card-product-hero__eyebrow { margin-bottom: var(--sp-3); }
.card-product-hero__name {
  font-family: var(--font-serif);
  font-weight: var(--fw-medium);
  font-size: 28px;
  line-height: 1.2;
  color: var(--color-primary);
  margin-bottom: var(--sp-3);
}
.card-product-hero__name em {
  font-style: italic;
  color: var(--color-accent);
}
.card-product-hero__desc {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 14px;
  color: var(--color-muted);
  line-height: 1.6;
  margin-bottom: var(--sp-4);
}
.card-product-hero__tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin-bottom: var(--sp-5);
}
.card-product-hero__footer {
  display: flex;
  align-items: center;
  gap: var(--sp-4);
}
.card-product-hero__image img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  border-radius: var(--r-lg);
}

@media (max-width: 768px) {
  .card-product-hero {
    grid-template-columns: 1fr;
    gap: var(--sp-4);
  }
  .card-product-hero__image { order: -1; }
}


/* ══════════════════════════════════════════════════════════════════
   B4 · CARD "PER ESIGENZA" (NeedCard)
   Entry-point per il target non esperto. Griglia 4 colonne.
   ══════════════════════════════════════════════════════════════════ */

.card-need {
  display: flex;
  flex-direction: column;
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-soft);
  background-color: var(--color-paper);
  overflow: hidden;
  transition: box-shadow var(--dur-base) var(--ease-out),
              transform var(--dur-base) var(--ease-out);
  text-decoration: none;
}
.card-need:hover {
  box-shadow: var(--shadow-raised);
  transform: translateY(-2px);
}

.card-need__image {
  aspect-ratio: 3 / 2;
  overflow: hidden;
}
.card-need__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0;
  transition: transform var(--dur-slow) var(--ease-out);
}
.card-need:hover .card-need__image img { transform: scale(1.03); }

.card-need__body {
  padding: var(--sp-4);
  flex: 1;
  display: flex;
  flex-direction: column;
}

.card-need__label {
  display: block;
  margin-bottom: var(--sp-2);
}

.card-need__title {
  font-family: var(--font-serif);
  font-weight: var(--fw-medium);
  font-size: 20px;
  line-height: 1.25;
  color: var(--color-primary);
  margin-bottom: var(--sp-3);
}

.card-need__ingredients {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 12px;
  color: var(--color-muted);
  line-height: 1.7;
  flex: 1;
  margin-bottom: var(--sp-3);
}

.card-need__cta {
  font-family: var(--font-sans);
  font-size: 10px;
  font-weight: var(--fw-bold);
  color: var(--color-primary);
  letter-spacing: .5px;
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  margin-top: auto;
  transition: color var(--dur-fast) var(--ease-out);
}
.card-need:hover .card-need__cta { color: var(--color-accent); }

/* Griglia NeedCard */
.need-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--sp-5);
}
@media (max-width: 1024px) { .need-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px)  { .need-grid { grid-template-columns: 1fr; } }


/* ══════════════════════════════════════════════════════════════════
   B5 · CARD CATEGORIA
   Riga compatta: thumbnail + nome + conteggio + freccia.
   ══════════════════════════════════════════════════════════════════ */

.card-category {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4);
  background-color: var(--color-paper-soft);
  border-radius: var(--r-lg);
  text-decoration: none;
  transition: background-color var(--dur-fast) var(--ease-out),
              box-shadow var(--dur-fast) var(--ease-out);
}
.card-category:hover {
  background-color: var(--color-surface);
  box-shadow: var(--shadow-soft);
}
.card-category__thumb {
  width: 50px; height: 50px;
  border-radius: var(--r-md);
  object-fit: cover;
  flex-shrink: 0;
}
.card-category__info { flex: 1; min-width: 0; }
.card-category__name {
  font-family: var(--font-serif);
  font-weight: var(--fw-medium);
  font-size: 18px;
  color: var(--color-primary);
  display: block;
}
.card-category__count {
  font-family: var(--font-sans);
  font-size: 10px;
  color: var(--color-muted);
}
.card-category__arrow {
  color: var(--color-muted);
  flex-shrink: 0;
  transition: color var(--dur-fast) var(--ease-out),
              transform var(--dur-fast) var(--ease-out);
}
.card-category:hover .card-category__arrow {
  color: var(--color-primary);
  transform: translateX(2px);
}

/* Griglia categorie — 3 colonne */
.category-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-3);
}
@media (max-width: 768px) { .category-grid { grid-template-columns: 1fr; } }


/* ══════════════════════════════════════════════════════════════════
   B6 · CARD ARTICOLO (Diario) — 2 layout
   Verticale (griglia) e orizzontale (featured).
   ══════════════════════════════════════════════════════════════════ */

/* Verticale */
.card-blog {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--color-rule);
  border-radius: var(--r-lg);
  background-color: var(--color-paper);
  overflow: hidden;
  text-decoration: none;
  transition: box-shadow var(--dur-base) var(--ease-out),
              transform var(--dur-base) var(--ease-out);
}
.card-blog:hover {
  box-shadow: var(--shadow-raised);
  transform: translateY(-2px);
}

.card-blog__image {
  aspect-ratio: 3 / 2;
  overflow: hidden;
}
.card-blog__image img {
  width: 100%; height: 100%;
  object-fit: cover;
  border-radius: 0;
  transition: transform var(--dur-slow) var(--ease-out);
}
.card-blog:hover .card-blog__image img { transform: scale(1.03); }

.card-blog__body {
  padding: var(--sp-4);
  flex: 1;
  display: flex;
  flex-direction: column;
}

.card-blog__eyebrow {
  display: block;
  margin-bottom: var(--sp-2);
}

.card-blog__title {
  font-family: var(--font-serif);
  font-weight: var(--fw-medium);
  font-size: 20px;
  line-height: 1.3;
  color: var(--color-primary);
  margin-bottom: var(--sp-3);
}

.card-blog__excerpt {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 12px;
  color: var(--color-muted);
  line-height: 1.6;
  flex: 1;
  margin-bottom: var(--sp-4);
}

.card-blog__footer {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  margin-top: auto;
}
.card-blog__avatar {
  width: 28px; height: 28px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}
.card-blog__author {
  font-family: var(--font-sans);
  font-size: 12px;
  font-weight: var(--fw-medium);
  color: var(--color-ink);
}
.card-blog__date {
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--color-muted);
  letter-spacing: .5px;
  margin-left: auto;
}

/* Orizzontale (articolo in evidenza) */
.card-blog--horizontal {
  flex-direction: row;
}
.card-blog--horizontal .card-blog__image {
  width: 180px;
  flex-shrink: 0;
  aspect-ratio: unset;
}
.card-blog--horizontal .card-blog__title {
  font-size: 22px;
}
@media (max-width: 768px) {
  .card-blog--horizontal { flex-direction: column; }
  .card-blog--horizontal .card-blog__image { width: 100%; aspect-ratio: 3 / 2; }
}

/* Griglia blog — 3 colonne */
.blog-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-5);
}
@media (max-width: 1024px) { .blog-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px)  { .blog-grid { grid-template-columns: 1fr; } }


/* ══════════════════════════════════════════════════════════════════
   B7 · RIEPILOGO CARRELLO (CartSummary / OrderSummary)
   ══════════════════════════════════════════════════════════════════ */

.cart-summary {
  background-color: var(--color-paper-soft);
  border-radius: var(--r-lg);
  padding: var(--sp-5);
}

.cart-summary__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--sp-5);
  padding-bottom: var(--sp-4);
  border-bottom: 1px solid var(--color-rule);
}
.cart-summary__title {
  font-family: var(--font-serif);
  font-weight: var(--fw-medium);
  font-size: 20px;
  color: var(--color-primary);
}
.cart-summary__count {
  font-family: var(--font-mono);
  font-size: var(--fs-caps);
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  color: var(--color-muted);
}

.cart-summary__items {
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
  margin-bottom: var(--sp-5);
}

.cart-summary__totals {
  border-top: 1px solid var(--color-rule);
  padding-top: var(--sp-4);
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}
.cart-summary__row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  color: var(--color-muted);
}
.cart-summary__row--total {
  border-top: 1px solid var(--color-rule);
  padding-top: var(--sp-3);
  font-size: 18px;
  font-weight: var(--fw-bold);
  color: var(--color-ink);
}
.cart-summary__row--free {
  font-weight: var(--fw-semibold);
  color: var(--color-primary);
}
.cart-summary__vat {
  font-family: var(--font-sans);
  font-size: 11px;
  color: var(--color-muted);
  text-align: center;
  margin-top: var(--sp-2);
}
.cart-summary__cta { margin-top: var(--sp-4); }

/* Barra spedizione gratuita */
.free-shipping-bar {
  background-color: var(--color-paper-soft);
  border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
  margin-bottom: var(--sp-4);
}
.free-shipping-bar__text {
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  color: var(--color-ink);
  margin-bottom: var(--sp-2);
}
.free-shipping-bar__text strong { color: var(--color-primary); }
.free-shipping-bar__track {
  width: 100%;
  height: 4px;
  background-color: var(--color-surface);
  border-radius: var(--r-pill);
  overflow: hidden;
}
.free-shipping-bar__fill {
  height: 100%;
  background-color: var(--color-primary);
  border-radius: var(--r-pill);
  transition: width var(--dur-slow) var(--ease-out);
}
.free-shipping-bar--done .free-shipping-bar__text {
  color: var(--color-primary);
  font-weight: var(--fw-semibold);
}
.free-shipping-bar--done .free-shipping-bar__fill {
  background-color: var(--color-success);
}
