/*
 * Kukburi — KUKBURI DUO builder (templates/page-duo.html). Full
 * replacement 2026-09-20 of the old flat-790-TL, single-.duo-columns
 * version: now two independent, always-live .duo-choice-step sections
 * (each with its own real running total) followed by a .duo-summary-step
 * that populates once both are complete. See inc/blocks.php's
 * kukburi_render_duo_choice_step()/kukburi_render_duo_summary_step() for
 * the markup this styles and assets/js/duo.js for the interactive
 * behavior.
 */

/* Page-banner intro copy (templates/page-duo.html) — .page-banner/.eyebrow
 * themselves are site.css's shared standalone-page-hero rules; these three
 * are specific to this page's own "savings badge / includes bullets"
 * content from the source brief. */
.page-banner p{ max-width: 640px; margin: 0 auto 14px; }
.duo-savings{
	display: inline-block; font-family: 'Jost',sans-serif; font-weight: 700; font-size: .95rem;
	color: var(--green); background: var(--paper-2); border-radius: 999px; padding: 6px 18px;
	margin: 6px 0 26px !important;
}
.duo-includes-heading{ font-size: 1.1rem; margin: 0 0 10px; }
.duo-includes-list{
	list-style: none; margin: 0 auto; padding: 0; max-width: 440px;
	display: grid; grid-template-columns: 1fr 1fr; gap: 8px 20px; text-align: left;
}
body[dir="rtl"] .duo-includes-list{ text-align: right; }
.duo-includes-list li{
	font-size: .88rem; padding-left: 18px; position: relative;
}
.duo-includes-list li::before{ content: "✓"; position: absolute; left: 0; color: var(--green); font-weight: 700; }
body[dir="rtl"] .duo-includes-list li{ padding-left: 0; padding-right: 18px; }
body[dir="rtl"] .duo-includes-list li::before{ left: auto; right: 0; }
@media (max-width: 480px){ .duo-includes-list{ grid-template-columns: 1fr; } }

#duo-builder{ padding: 20px 0 60px; display: flex; flex-direction: column; gap: 48px; }

/* .duo-choices (2026-09-21): side-by-side restoration of the backup's
 * original .duo-columns structure — the two choice steps were always
 * meant to sit as two meal columns, not stack sequentially; today's
 * stacked layout was a rebuild-era simplification, not the intended
 * design (confirmed against the owner's sketch + mockup). Stacked by
 * default (flex column, same 48px gap the two steps already had before
 * this wrapper existed — no change to that spacing), switching to a
 * real 2-up grid only once there's genuinely room for it.
 *
 * 1300px min-width, not an arbitrary number: each .duo-dish-grid inside
 * a step is capped at 574px (the real historical value, confirmed via
 * the backup reconstruction — see that file's own comment above), so
 * two side-by-side columns need 574+574+32(gap) = 1180px of actual
 * content width at minimum. .wrap's padding removes 80px from whatever
 * the viewport is (site.css), so the viewport itself needs to be
 * ≥1260px before that content width is even available — 1300px gives a
 * ~40px safety margin above that bare minimum (scrollbar width,
 * sub-pixel rounding) while still landing on the same clean, round
 * breakpoint convention the rest of the theme uses (780/900/980/1099
 * in site.css/home.css/etc). Below it, falls back to exactly today's
 * existing stacked behavior — nothing about the ≤480px .duo-dish-grid
 * override (below) changes, since it lives inside whichever layout is
 * currently active either way. */
.duo-choices{ display: flex; flex-direction: column; gap: 48px; }
@media (min-width: 1300px){
	.duo-choices{ display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px; align-items: start; }
}

.duo-choice-step{
	background: var(--cream-card); border: 1px solid var(--line); border-radius: 12px;
	padding: 28px; display: flex; flex-direction: column; gap: 14px;
}
.duo-step-eyebrow{
	font-family: 'Jost',sans-serif; font-weight: 700; font-size: .78rem;
	text-transform: uppercase; letter-spacing: .06em; opacity: .65; margin: 0;
}
.duo-step-heading{ font-size: 1.4rem; margin: 0 0 6px; }

.duo-section-label{
	font-family: 'Jost',sans-serif; font-weight: 700; font-size: .74rem;
	text-transform: uppercase; letter-spacing: .05em; opacity: .6; margin: 10px 0 0;
}

/* Restored 2026-09-20 to the real pre-rebuild sizing: repeat(3, 1fr) at
 * full width, breaking straight to repeat(2, 1fr) at <=480px with no
 * intermediate tier — these are the exact values this class (then named
 * .duo-pasta-grid, on the old single-pasta-only, side-by-side-.duo-
 * columns version of this page) used before today's full DUO-builder
 * rebuild, not a re-guessed "smaller" size. Originally sourced from this
 * session's own direct read of the pre-rebuild file, earlier the same
 * day, before overwriting it; a real backup (a full site export from
 * 2026-09-18, predating the rebuild) surfaced the next day and confirmed
 * it byte-for-byte — see the max-width note just below for what that
 * backup added to this picture. The 5-column-at-desktop/860px-tier
 * version this replaces was introduced by that rebuild (needed then
 * because a single .duo-dish-grid started serving both Pasta AND Main
 * Courses sections side by side, unlike the old pasta-only grid) — kept
 * applying to both sections' grids now, just at the real historical
 * column counts.
 *
 * max-width/margin added 2026-09-21, NOT from the backup's own CSS
 * (confirmed by direct comparison — the backup's .duo-pasta-grid had no
 * width cap of its own): the backup's page wrapped this same 3-column
 * grid inside .duo-columns, a 2-up grid-template-columns:1fr 1fr split
 * putting each meal (and its pasta grid) in roughly HALF the page width;
 * today's rebuilt page stacks each choice as its own full-width section
 * instead, so the identical repeat(3,1fr) rule alone now divides the
 * FULL width into 3, rendering visibly wider cards than the backup ever
 * showed despite matching column-for-column.
 *
 * 574px, not the 650px first used here: that 650px was a same-day
 * reasoned estimate (.wrap's ~1280px content width minus .duo-columns'
 * 32px gap, halved, minus .duo-meal's 24px padding on each side ≈
 * 576–624px), confirmed with the owner at the time but never measured
 * against the backup's actual rendering. The next day's real backup
 * archive (2026-09-18 export) let the old page-duo.html markup +
 * duo.css be reconstructed and rendered directly, side-by-side against
 * this page at the same viewport width — the old .duo-pasta-grid's own
 * getBoundingClientRect() width came back as exactly 574px, undercutting
 * even the low end of the earlier estimate. 650px had been rendering
 * cards/photos ~14–15% larger than the backup ever did. */
.duo-dish-grid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; max-width: 574px; margin: 0 auto; }
@media (max-width: 480px){ .duo-dish-grid{ grid-template-columns: repeat(2, 1fr); max-width: none; } }
.duo-dish-card{
	background: var(--paper); border: 2px solid transparent; border-radius: 8px; padding: 8px;
	cursor: pointer; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 4px;
	font-family: inherit; transition: border-color .15s ease, background .15s ease;
}
.duo-dish-card:hover{ border-color: var(--brown); }
.duo-dish-card.selected{ border-color: var(--green); background: var(--paper-2); }
/* Availability (2026-09-28) — a real `disabled` <button> already stops
 * clicks/keyboard activation on its own; this just makes that visible
 * (grayscale photo, dimmed text, no cursor/hover reaction) and adds the
 * inline badge's own small top margin so it doesn't crowd .duo-dish-price
 * above it. Same .availability-inline-badge component the pasta-addon
 * tiers use (assets/css/item-modal.css), not a second badge style. */
.duo-dish-card.is-unavailable{ cursor: default; opacity: .55; }
.duo-dish-card.is-unavailable:hover{ border-color: transparent; }
.duo-dish-card.is-unavailable .duo-dish-img img{ filter: grayscale(65%); }
.duo-dish-card .availability-inline-badge{ margin-top: 2px; }
.duo-dish-img{ width: 100%; aspect-ratio: 1; border-radius: 6px; overflow: hidden; display: block; background: var(--paper-2); }
.duo-dish-img img{ width: 100%; height: 100%; object-fit: cover; display: block; }
.duo-dish-name{ font-size: .74rem; font-weight: 600; line-height: 1.25; }
.duo-dish-price{ font-size: .72rem; opacity: .65; }

/* Whole-offer unavailable (2026-09-28) — .offer-builder-unavailable on
 * #duo-builder/#pcb-builder (inc/blocks.php) when a required bundled item
 * (Caesar 34, and for DUO also Chocolate Velvet) is sold-out-today/
 * unavailable. pointer-events:none on the interactive sections is what
 * actually makes every control inside genuinely unreachable (a browser
 * can't dispatch 'click' through it, so duo.js's/pasta-caesar-builder.js's
 * existing handlers never fire — no JS changes needed there) — the
 * opacity is just the matching visual. .offer-unavailable-notice sits
 * OUTSIDE that dimmed area (a sibling, not a descendant of .duo-choices/
 * .pcb-builder's own dish-grid) so the explanation itself stays fully
 * legible, not dimmed along with the controls it's explaining. */
.offer-builder-unavailable .duo-choices,
.offer-builder-unavailable .duo-summary-step,
.offer-builder-unavailable .duo-dish-grid,
.offer-builder-unavailable .duo-included,
.offer-builder-unavailable .duo-step-total,
.offer-builder-unavailable #pcb-add-to-cart{ opacity: .5; pointer-events: none; }
.offer-unavailable-notice{
	background: rgba(164,64,47,0.1); border: 1px solid rgba(164,64,47,0.3); color: #A4402F;
	border-radius: 8px; padding: 14px 18px; font-size: .86rem; font-weight: 600; margin-bottom: 18px;
}

.duo-included{
	display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px;
	padding: 12px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
.duo-included-label{
	flex-basis: 100%; font-family: 'Jost',sans-serif; font-weight: 700; font-size: .72rem;
	text-transform: uppercase; letter-spacing: .05em; opacity: .6; margin: 0;
}
/* display:flex + the 26x26 circular img size are both restored to the
 * pre-rebuild backup's own .duo-included-item rule exactly (see
 * inc/blocks.php's kukburi_render_duo_choice_step() comment on the
 * $caesar['img']/$dessert['img'] restore) — genuinely tiny, inline
 * beside the checkmark+text, not the drink-option cards' larger 34px
 * photos below. */
.duo-included-item{ display: flex; align-items: center; gap: 6px; font-size: .85rem; }
.duo-included-item img{ width: 26px; height: 26px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }

.duo-drink-label{
	font-family: 'Jost',sans-serif; font-weight: 700; font-size: .78rem;
	text-transform: uppercase; letter-spacing: .06em; opacity: .65; margin: 0;
}
/* Compacted 2026-09-21 partway toward the backup's old .duo-drink-choice
 * sizing (confirmed with the owner, not applied silently): that backup
 * card was a small centered icon+name "pill" with no per-drink price
 * shown at all (flex:1 with no minimum basis, 8px padding all around,
 * 40px icon). This card carries real content the backup's never needed
 * to fit — the DUO add-on price and "Save X₺" badge, both today's real,
 * required pricing (kept completely intact; only sizing changed here) —
 * so it can't shrink all the way to the backup's own numbers without
 * that text wrapping badly. flex-basis dropped from 220px to 160px and
 * padding tightened from 12px/14px to 10px/12px gets meaningfully closer
 * to the backup's compactness while still leaving room for every field;
 * .duo-drink-name's font-size also came down a step (.92rem -> .85rem)
 * for the same reason — a smaller heading reads as more compact even
 * though the fields below it are new. */
.duo-drink-options{ display: flex; align-items: stretch; gap: 8px; flex-wrap: wrap; }
.duo-drink-or{ font-size: .82rem; opacity: .55; align-self: center; }
.duo-drink-option{
	flex: 1 1 160px; display: flex; flex-direction: column; gap: 2px;
	background: var(--paper); border: 2px solid transparent; border-radius: 8px; padding: 10px 12px;
	cursor: pointer; position: relative;
}
.duo-drink-option:hover{ border-color: var(--brown); }
.duo-drink-option.selected{ border-color: var(--green); background: var(--paper-2); }
.duo-drink-option input[type="radio"]{ position: absolute; top: 10px; right: 12px; margin: 0; }
body[dir="rtl"] .duo-drink-option input[type="radio"]{ right: auto; left: 12px; }
.duo-drink-option img{ width: 34px; height: 34px; border-radius: 50%; object-fit: cover; margin-bottom: 4px; }
.duo-drink-name{ font-weight: 700; font-size: .85rem; padding-inline-end: 20px; }
.duo-drink-note{ font-size: .72rem; opacity: .6; }
/* .duo-drink-addon/.duo-drink-save (the on-card "+355 ₺"/"150 ₺ tasarruf"
 * text the comment above once sized this card around) were removed
 * 2026-09-23 — that pricing now shows in the summary step instead
 * (inc/blocks.php's kukburi_render_duo_choice_step() comment). Left
 * flex-basis/padding/font-size above as they were rather than re-tuning
 * them tighter now that the card holds less content — still a
 * reasonable size for image+name+note, and re-compacting wasn't asked
 * for here, just the removal. */
.duo-drink-helper{ font-size: .76rem; opacity: .55; margin: 4px 0 0; }

.duo-step-total{
	font-family: 'Jost',sans-serif; font-weight: 700; font-size: 1.15rem; margin: 4px 0 0;
	padding-top: 12px; border-top: 1px dashed var(--line);
}

.duo-summary-step{
	background: var(--paper-2); border: 1px solid var(--line); border-radius: 12px;
	padding: 28px; text-align: center;
}
.duo-summary-step h2{ margin: 0 0 12px; }
.duo-summary-hint{ font-family: 'Jost',sans-serif; font-weight: 700; font-size: .95rem; opacity: .65; }
.duo-summary-body{ display: flex; flex-direction: column; gap: 24px; text-align: left; }
body[dir="rtl"] .duo-summary-body{ text-align: right; }
.duo-summary-body[hidden]{ display: none; }
@media (min-width: 640px){
	.duo-summary-body{ flex-direction: row; gap: 24px; }
	.duo-summary-choice{ flex: 1; }
}
.duo-summary-choice{
	background: var(--cream-card); border: 1px solid var(--line); border-radius: 10px; padding: 18px;
}
.duo-summary-choice h3{ margin: 0 0 8px; font-size: 1.05rem; }
.duo-summary-choice p{ margin: 0 0 6px; font-size: .88rem; }
.duo-summary-total{ font-weight: 700; }
.duo-edit-choice{
	margin-top: 8px; background: none; border: 1px solid var(--ink); border-radius: 20px;
	padding: 6px 14px; font-family: 'Jost',sans-serif; font-size: .74rem; font-weight: 600;
	cursor: pointer; color: var(--ink); transition: background .15s ease, color .15s ease;
}
.duo-edit-choice:hover{ background: var(--ink); color: var(--paper); }

.duo-grand-total{ font-family: 'Jost',sans-serif; font-weight: 700; font-size: 1.6rem; margin: 20px 0 4px; text-align: center; }
.duo-tagline{ text-align: center; opacity: .7; font-style: italic; margin: 0 0 18px; }
#duo-add-to-cart{ display: flex; margin: 0 auto; }
#duo-add-to-cart:disabled{ opacity: .45; cursor: not-allowed; }
