/* Media Strom configurator, premium refinement 30/10/2026.
   Brand basis (mediastrom.com, 10/2026): logo red #E62128 with oxblood wave #761F1C, monochrome site (black/white/greys),
   type Proxima Nova Wide (licensed Typekit) with Commissioner as the site's own fallback -> Commissioner self-hosted here.
   Hierarchy: ink = primary (selected fills, text), red = accent (your choice, focus, total), oxblood = pressed/hover of red.
   Admin and /v1 keep style.css; this file is loaded by the configurator only. */
@font-face{font-family:Commissioner;src:url(/web/fonts/commissioner-greek.woff2) format("woff2");font-weight:300 700;font-display:swap;
  unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}
@font-face{font-family:Commissioner;src:url(/web/fonts/commissioner-latin.woff2) format("woff2");font-weight:300 700;font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

:root{
  --ink:#151515;--ink-2:#3b3b3b;--muted:#696969;--line:#e6e6e6;--line-2:#d2d2d2;
  --bg:#f5f5f5;--surface:#fff;--sunk:#f8f8f8;
  --red:#e62128;--red-deep:#761f1c;--red-tint:#fdeeee;
  --ok:#2c7a4b;--warn:#93560f;--warn-tint:#fbf4e8;
  --r-sm:8px;--r:12px;--pill:999px;
  --ease:cubic-bezier(.23,1,.32,1);
  --head:64px;--panel:408px;
  --shadow:0 1px 2px rgba(21,21,21,.05),0 8px 24px -12px rgba(21,21,21,.18);
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.5 Commissioner,"Segoe UI",system-ui,sans-serif;-webkit-font-smoothing:antialiased}
::selection{background:var(--red-tint);color:var(--ink)}
:focus-visible{outline:2px solid var(--red);outline-offset:2px}
a{color:inherit}
button,select,input{font:inherit;color:inherit}
h2{font-size:15px;font-weight:600;margin:0;letter-spacing:.01em}
.muted{color:var(--muted)}.small{font-size:13px}
.warn{color:var(--warn);font-size:13px}
[hidden]{display:none!important}
body:not(.tech) .tech-only{display:none!important}

/* header */
header.top{height:var(--head);display:flex;align-items:center;gap:18px;padding:0 24px;background:var(--surface);border-bottom:1px solid var(--line)}
.logo{display:flex}.logo img{height:28px;width:auto;display:block}
.title{font-weight:500;color:var(--ink-2);padding-left:18px;border-left:1px solid var(--line)}
.util{margin-left:auto;display:flex;align-items:center;gap:16px;font-size:13px;color:var(--muted)}
.util a{text-decoration:none;transition:color .15s ease}.util a:hover{color:var(--ink)}
.pilot{border:1px solid var(--line);border-radius:var(--pill);padding:2px 10px}

/* layout: image gets everything except the option column */
main.cfg{display:grid;grid-template-columns:minmax(0,1fr) var(--panel);height:calc(100dvh - var(--head))}
.stage{overflow-y:auto;padding:20px 24px 28px;display:flex;flex-direction:column;gap:18px;scrollbar-width:thin}
.canvas-wrap{position:relative;width:min(100%,calc((100dvh - var(--head) - 190px) * 16 / 9));margin:0 auto;aspect-ratio:16/9;border-radius:var(--r);overflow:hidden;background:#e9e9e9;box-shadow:var(--shadow)}
.canvas-wrap canvas{width:100%;height:100%;display:block}
.loading{position:absolute;right:14px;top:14px;background:rgba(255,255,255,.92);padding:5px 12px;border-radius:var(--pill);font-size:12px;font-weight:500;opacity:0;transform:translateY(-4px);transition:opacity .2s var(--ease),transform .2s var(--ease);pointer-events:none}
.loading.on{opacity:1;transform:none;transition-delay:.25s}

/* scenes: one horizontal strip instead of a 19-card wall */
.scenes-wrap{width:min(100%,calc((100dvh - var(--head) - 190px) * 16 / 9));margin:0 auto}
.scenes-head{display:flex;align-items:baseline;gap:12px;margin-bottom:8px}
.scenes{display:grid;grid-auto-flow:column;grid-auto-columns:116px;gap:8px;overflow-x:auto;scroll-snap-type:x proximity;padding:2px 2px 8px;scrollbar-width:thin}
.scard{scroll-snap-align:start;padding:0;border:0;background:none;cursor:pointer;border-radius:var(--r-sm);position:relative;transition:transform .16s var(--ease)}
.scard img{width:100%;aspect-ratio:16/10;object-fit:cover;border-radius:var(--r-sm);display:block}
.scard span{position:absolute;inset:0;border-radius:var(--r-sm);box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);transition:box-shadow .16s ease}
.scard.on span{box-shadow:inset 0 0 0 2px var(--red),inset 0 0 0 4px #fff}
.scard:active{transform:scale(.97)}
@media (hover:hover) and (pointer:fine){.scard:hover span{box-shadow:inset 0 0 0 1px rgba(0,0,0,.35)}.scard.on:hover span{box-shadow:inset 0 0 0 2px var(--red),inset 0 0 0 4px #fff}}

/* pending + provisional notes */
#pending:empty{display:none}
#pending{width:min(100%,calc((100dvh - var(--head) - 190px) * 16 / 9));margin:0 auto;display:flex;flex-direction:column;gap:8px}
.note{border-radius:var(--r);padding:12px 14px;font-size:13px;background:var(--surface);border:1px solid var(--line)}
.note b{font-weight:600}
.note.wait{background:var(--warn-tint);border-color:#efdcbc;color:#5c3a0c}
.note ul{margin:6px 0 0 18px;padding:0}
.note .btn{margin-top:8px}

/* technical drawer (pilot only) */
.tech{width:min(100%,calc((100dvh - var(--head) - 190px) * 16 / 9));margin:0 auto;font-size:13px;color:var(--muted)}
.tech summary{cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:6px}
.tech summary::-webkit-details-marker{display:none}
.tech summary::before{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform .2s var(--ease)}
.tech[open] summary::before{transform:rotate(45deg)}
.tech-body{display:flex;flex-direction:column;gap:8px;padding:10px 0 0}
.tech-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.chip{display:inline-flex;font-size:12px;padding:3px 10px;border-radius:var(--pill);background:#eee}
.chip.auto{background:#e7f3ec;color:var(--ok)}.chip.ref{background:var(--warn-tint);color:var(--warn)}

/* option column */
.panel{display:flex;flex-direction:column;background:var(--surface);border-left:1px solid var(--line);min-height:0}
.steps{flex:1;overflow-y:auto;scrollbar-width:thin;overscroll-behavior:contain}
.step{border-bottom:1px solid var(--line)}
.step>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:12px;padding:18px 24px;user-select:none}
.step>summary::-webkit-details-marker{display:none}
.step>summary .h{font-weight:600;font-size:16px}
.step>summary .v{margin-left:auto;font-size:13px;color:var(--muted);text-align:right;max-width:58%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.step>summary::after{content:"";flex:none;width:7px;height:7px;border-right:1.5px solid var(--ink-2);border-bottom:1.5px solid var(--ink-2);transform:rotate(45deg) translate(-2px,-2px);transition:transform .22s var(--ease)}
.step[open]>summary::after{transform:rotate(-135deg) translate(-2px,-2px)}
.step[open]>summary .v{color:var(--ink)}
@media (hover:hover) and (pointer:fine){.step>summary:hover{background:var(--sunk)}}
.step .body{padding:0 24px 22px;display:flex;flex-direction:column;gap:12px}
.lbl{font-size:12px;font-weight:600;color:var(--muted);margin:4px 0 -4px}
#modular,#readyBox,#hbFabBox,#linCushion{display:flex;flex-direction:column;gap:12px}

/* selectable cards */
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.cards.two{grid-template-columns:repeat(2,1fr)}
.card{position:relative;border:1px solid var(--line);border-radius:var(--r-sm);padding:10px 11px;cursor:pointer;background:var(--surface);text-align:left;min-height:52px;
  transition:border-color .15s ease,box-shadow .15s ease,transform .16s var(--ease)}
.card:active{transform:scale(.97)}
@media (hover:hover) and (pointer:fine){.card:hover{border-color:var(--line-2)}}
.card.on{border-color:var(--red);box-shadow:inset 0 0 0 1px var(--red)}
.card img{width:100%;height:56px;object-fit:contain;display:block;margin-bottom:6px}
.card .n{font-weight:600;font-size:13.5px;line-height:1.3}
.card .s{font-size:12px;color:var(--muted);margin-top:2px}
.badge{font-size:10px;font-weight:600;padding:1px 6px;border-radius:var(--pill);background:#e7f3ec;color:var(--ok);margin-left:4px;vertical-align:1px}
.badge.ai{background:#f0eef7;color:#4b3c9a}
body:not(.tech) .badge,body:not(.tech) .sku{display:none}

/* segmented + tabs: ink is the primary fill */
.seg{display:inline-flex;background:var(--sunk);border:1px solid var(--line);border-radius:var(--pill);padding:3px;gap:2px}
.seg.full{display:flex}.seg.full button{flex:1}
.seg button{border:0;background:none;border-radius:var(--pill);padding:7px 14px;cursor:pointer;font-size:13.5px;font-weight:500;color:var(--ink-2);transition:background-color .18s ease,color .18s ease,transform .16s var(--ease)}
.seg button:active{transform:scale(.97)}
.seg button.on{background:var(--ink);color:#fff}
.seg button:disabled{opacity:.4;cursor:not-allowed}
.tabs{display:flex;gap:6px;flex-wrap:wrap}
.tabs button{border:1px solid var(--line);background:var(--surface);border-radius:var(--pill);padding:5px 12px;cursor:pointer;font-size:13px;transition:background-color .15s ease,border-color .15s ease,color .15s ease,transform .16s var(--ease)}
.tabs button:active{transform:scale(.97)}
@media (hover:hover) and (pointer:fine){.tabs button:hover{border-color:var(--line-2)}}
.tabs button.on{background:var(--ink);border-color:var(--ink);color:#fff}
.tabs .pm{opacity:.6;font-size:12px;margin-left:4px}

/* swatches: red ring = your choice */
.swatches{display:flex;flex-wrap:wrap;gap:8px;padding:4px;margin:-4px}
.sw{width:36px;height:36px;border-radius:50%;border:0;padding:0;cursor:pointer;background-size:cover;background-position:center;box-shadow:inset 0 0 0 1px rgba(0,0,0,.12);transition:box-shadow .15s ease,transform .16s var(--ease)}
.sw:active{transform:scale(.94)}
.sw.on{box-shadow:inset 0 0 0 1px rgba(0,0,0,.12),0 0 0 2px #fff,0 0 0 4px var(--red)}
.sw.df{background:linear-gradient(135deg,var(--c1) 50%,var(--c2) 50%)}
.swname{font-size:13px;color:var(--ink-2)}
.swname:empty{display:none}

/* form fields */
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:12px;font-weight:600;color:var(--muted)}
.field label b{color:var(--ink);font-weight:600}
select,input[type=number]{height:40px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--surface);padding:0 12px;transition:border-color .15s ease}
select{appearance:none;padding-right:34px;background-image:linear-gradient(45deg,transparent 50%,var(--ink-2) 50%),linear-gradient(135deg,var(--ink-2) 50%,transparent 50%);
  background-position:calc(100% - 17px) 17px,calc(100% - 12px) 17px;background-size:5px 5px;background-repeat:no-repeat;cursor:pointer;width:100%}
select:hover,input[type=number]:hover{border-color:#b7b7b7}
input[type=number]{width:68px;text-align:center;font-variant-numeric:tabular-nums}
input[type=range]{width:100%;accent-color:var(--red)}
input[type=checkbox]{accent-color:var(--red);width:16px;height:16px;margin:0}
.check{display:flex;align-items:center;gap:10px;font-size:14px;cursor:pointer}
.qtyrow,.row{display:flex;gap:8px;align-items:center}
.qtyrow select,.row select{flex:1}
#pillowRows{display:flex;flex-direction:column;gap:8px}
.btn{border:1px solid var(--ink);background:var(--ink);color:#fff;border-radius:var(--pill);padding:8px 16px;cursor:pointer;font-size:13.5px;font-weight:500;transition:background-color .15s ease,transform .16s var(--ease)}
.btn:active{transform:scale(.97)}
.btn.ghost,.btn.sec{background:var(--surface);color:var(--ink);border-color:var(--line-2);align-self:flex-start}
@media (hover:hover) and (pointer:fine){.btn.ghost:hover,.btn.sec:hover{border-color:var(--ink)}}

/* linens */
.lincats{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.lincat{display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid var(--line);border-radius:var(--r-sm);padding:9px 10px;background:var(--surface);cursor:pointer;font-size:13px;text-align:left;transition:border-color .15s ease,transform .16s var(--ease)}
.lincat:active{transform:scale(.98)}
.lincat.act{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.lincat .tg{width:32px;height:18px;border-radius:var(--pill);background:#d4d4d4;position:relative;flex:none;transition:background-color .18s ease}
.lincat .tg::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);transition:transform .2s var(--ease)}
.lincat .tg.on{background:var(--red)}.lincat .tg.on::after{transform:translateX(14px)}
.linpanel{display:flex;flex-direction:column;gap:10px;border-top:1px solid var(--line);padding-top:12px}
details.sub{font-size:13px;color:var(--muted)}
details.sub summary{cursor:pointer}
details.sub ul{margin:6px 0 0 18px;padding:0}
.prov-note{font-size:12px;color:var(--muted)}

/* price: always visible at the bottom of the option column */
.pricebar{border-top:1px solid var(--line);background:var(--surface);box-shadow:0 -10px 24px -18px rgba(21,21,21,.35)}
.pricebar>summary{list-style:none;cursor:pointer;display:flex;align-items:baseline;gap:12px;padding:16px 24px}
.pricebar>summary::-webkit-details-marker{display:none}
.pl{font-size:13px;color:var(--muted)}
.pt{font-size:22px;font-weight:700;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.pt .was{font-size:14px;font-weight:400;color:var(--muted);text-decoration:line-through;margin-right:8px}
.pd{margin-left:auto;font-size:13px;font-weight:500;display:inline-flex;align-items:center;gap:6px}
.pd::after{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-135deg) translate(-1px,-1px);transition:transform .22s var(--ease)}
.pricebar[open] .pd::after{transform:rotate(45deg) translate(-2px,-2px)}
.price{max-height:min(52vh,460px);overflow-y:auto;padding:0 24px 16px;font-variant-numeric:tabular-nums}
.price .line{display:grid;grid-template-columns:1fr auto;gap:2px 12px;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px}
.price .line .d{grid-column:1/-1;font-size:12px;color:var(--muted)}
.price .line.pend span:nth-child(2){color:var(--warn);font-style:italic}
.price .was{text-decoration:line-through;color:var(--muted);margin-right:8px}
.price .disc{color:var(--red);font-weight:600}
.price .tot{display:none}
.notice{font-size:12px;color:var(--muted);background:var(--sunk);border-radius:var(--r-sm);padding:10px 12px;margin-top:12px}

/* tablet: image on top, options below, price pinned to the viewport */
@media (max-width:1100px){
  :root{--panel:360px}
  .stage{padding:16px}
}
@media (max-width:900px){
  main.cfg{display:block;height:auto}
  .stage{display:contents}  /* children join main, so the sticky image stays in view over the whole option list */
  .scenes-wrap{margin-top:14px!important}
  #pending{margin-top:12px!important}
  .tech{margin:12px 16px 14px!important}
  .canvas-wrap{position:sticky;top:0;z-index:5;width:100%;border-radius:0;box-shadow:0 6px 18px -12px rgba(21,21,21,.5)}
  .scenes-wrap,#pending,.tech{width:auto;margin:0 16px}
  .panel{border-left:0;border-top:1px solid var(--line);padding-bottom:84px}
  .steps{overflow:visible}
  .step>summary{padding:16px;scroll-margin-top:calc(56.25vw + 4px)}.step .body{padding:0 16px 20px}
  .pricebar{position:fixed;left:0;right:0;bottom:0;z-index:20;padding-bottom:env(safe-area-inset-bottom)}
  .pricebar>summary{padding:14px 16px}
  .price{padding:0 16px 16px}
  header.top{padding:0 16px;gap:12px}
  .title{display:none}
  .pilot{display:none}
}
@media (max-width:420px){
  .cards{grid-template-columns:repeat(2,1fr)}
  .scenes{grid-auto-columns:96px}
  .pt{font-size:20px}
}
@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important}}

/* 30/10/2026 preview + loading feedback --------------------------------------------------------------------- */
/* image: a thin indeterminate line on the top edge + the pill (both delayed, so fast cached updates never flash) */
.progress{position:absolute;left:0;right:0;top:0;height:2px;overflow:hidden;opacity:0;transition:opacity .2s ease;pointer-events:none}
.progress::after{content:"";position:absolute;top:0;bottom:0;width:32%;left:-32%;background:linear-gradient(90deg,transparent,var(--red),transparent)}
body.busy .progress{opacity:1;transition-delay:.15s}
body.busy .progress::after{animation:slide 1.1s var(--ease) infinite}
@keyframes slide{to{left:100%}}
.loading{display:inline-flex;align-items:center;gap:8px}
.spin{width:12px;height:12px;border-radius:50%;border:1.5px solid rgba(21,21,21,.18);border-top-color:var(--ink);animation:rot .7s linear infinite}
@keyframes rot{to{transform:rotate(360deg)}}
/* the option just chosen shows that it is being applied */
.card,.lincat{position:relative}
body.busy .card.on::after,body.busy .lincat.act::after{content:"";position:absolute;top:8px;right:8px;width:10px;height:10px;border-radius:50%;
  border:1.5px solid rgba(230,33,40,.25);border-top-color:var(--red);animation:rot .7s linear infinite;opacity:0;animation-delay:0s;transition:opacity .15s ease .15s}
body.busy .card.on::after,body.busy .lincat.act::after{opacity:1}
body.busy .lincat.act::after{top:auto;bottom:-5px;right:50%}
.sw{position:relative}
body.busy .sw.on{animation:pulse 1s ease-in-out infinite}
@keyframes pulse{50%{box-shadow:inset 0 0 0 1px rgba(0,0,0,.12),0 0 0 2px #fff,0 0 0 4px rgba(230,33,40,.35)}}
.step>summary .v{transition:opacity .2s ease}
body.busy .step[open]>summary .v{opacity:.45}
.pt,.price{transition:opacity .2s ease}
body.busy .pt,body.busy .price{opacity:.45;transition-delay:.15s}
/* display controls on the image */
.overlay{position:absolute;left:14px;bottom:14px;right:14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;pointer-events:none}
.overlay>*{pointer-events:auto}
.seg.glass{background:rgba(255,255,255,.86);border-color:rgba(255,255,255,.6);box-shadow:0 4px 16px -8px rgba(21,21,21,.45);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.seg.glass button{padding:6px 14px;font-size:13px}
.seg.glass button:disabled{opacity:.45}
.vchip{font-size:12px;font-weight:500;padding:5px 11px;border-radius:var(--pill);background:rgba(21,21,21,.72);color:#fff}
.hint{margin:0;font-size:13px;color:var(--ink-2);background:var(--sunk);border-radius:var(--r-sm);padding:10px 12px}
@media (max-width:420px){.overlay{left:8px;bottom:8px}.seg.glass button{padding:5px 10px;font-size:12px}.vchip{display:none}}
@media (prefers-reduced-motion:reduce){body.busy .progress::after,.spin,body.busy .card.on::after,body.busy .lincat.act::after,body.busy .sw.on{animation:none}}
/* 30/10/2026 (2): stable layout + provisional-linen badge on the image */
.stage{scrollbar-gutter:stable}
.infopop{position:relative;margin-left:auto}
.infopop>summary{list-style:none;cursor:pointer;font-size:12px;font-weight:500;padding:5px 11px 5px 9px;border-radius:var(--pill);background:rgba(255,255,255,.88);color:var(--ink);
  display:inline-flex;align-items:center;gap:7px;box-shadow:0 4px 16px -8px rgba(21,21,21,.45);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.infopop>summary::-webkit-details-marker{display:none}
.infopop>summary::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--warn)}
.infopop .pop{position:absolute;right:0;bottom:calc(100% + 8px);width:min(380px,80vw);background:var(--surface);border-radius:var(--r);padding:12px 14px;font-size:12.5px;line-height:1.45;color:var(--ink-2);
  box-shadow:0 18px 40px -16px rgba(21,21,21,.45),0 0 0 1px rgba(0,0,0,.05);transform-origin:bottom right;animation:popin .18s var(--ease)}
.infopop .pop ul{margin:6px 0 0 16px;padding:0}
@keyframes popin{from{opacity:0;transform:scale(.97) translateY(4px)}}
@media (prefers-reduced-motion:reduce){.infopop .pop{animation:none}}

/* ---- cart & try-on (30/10/2026): picture-only try-on vs cart vs committed bed ---------------------------------- */
.lincat .cnt{min-width:20px;height:20px;padding:0 6px;border-radius:var(--pill);background:var(--ink);color:#fff;font-size:11.5px;font-weight:600;display:inline-grid;place-items:center;flex:none}
.lincat .eye{width:8px;height:8px;border-radius:50%;background:var(--red);flex:none;margin-left:auto}
.lincat .eye+.cnt{margin-left:0}
.acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.acts .btn{align-self:auto}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}
.btn.sec.on{border-color:var(--red);color:var(--red-deep);background:var(--red-tint)}
.btn.full{width:100%;margin-top:12px;padding:11px 16px}
.link{background:none;border:0;padding:6px 0 0;color:var(--ink);text-decoration:underline;text-underline-offset:3px;font-size:13px;cursor:pointer;display:block}
.incart{margin-top:6px}
.trynote{margin-top:10px;padding:10px 12px;border-radius:var(--r-sm);background:var(--red-tint);font-size:13px}
.trynote .acts{margin-top:8px}
.addrow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}
.addrow select{flex:1 1 180px;min-width:0}
/* cart / pillow lines: name | qty | price | bin */
.cline{display:grid;grid-template-columns:1fr auto auto auto;gap:4px 10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}
#pillowRows .cline{grid-template-columns:1fr auto auto}
.cline .ci{display:flex;flex-direction:column;gap:2px;min-width:0}
.cline .ci span{font-size:12px;color:var(--muted)}
body .cline .ci .sku{display:block;font-variant-numeric:tabular-nums}
.cline .cp{font-variant-numeric:tabular-nums;text-align:right;min-width:72px}
.cp .pend,.line .pend{color:var(--warn);font-style:italic}
.stepper{display:inline-flex;align-items:center;border:1px solid var(--line-2);border-radius:var(--pill);height:32px}
.stepper button{width:30px;height:30px;border:0;background:none;font-size:16px;line-height:1;cursor:pointer;border-radius:var(--pill);color:var(--ink);transition:transform .16s var(--ease)}
.stepper button:active{transform:scale(.9)}
.stepper button:disabled{color:#c4c4c4;cursor:default;transform:none}
.stepper output{min-width:22px;text-align:center;font-variant-numeric:tabular-nums;font-size:13.5px}
.trash{width:34px;height:34px;display:grid;place-items:center;border:0;border-radius:50%;background:none;color:var(--muted);cursor:pointer;transition:color .15s ease,background-color .15s ease,transform .16s var(--ease)}
.trash:active{transform:scale(.92)}
@media (hover:hover) and (pointer:fine){.trash:hover{color:var(--red);background:var(--red-tint)}.link:hover{color:var(--red-deep)}}
.price .sec{margin:14px 0 2px;font-size:11.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.price .sec:first-child{margin-top:0}
.price .empty{padding:10px 0}
.price .tot{display:flex;justify-content:space-between;padding:12px 0 0;font-weight:600;font-size:15px}
/* try-on bar on the picture */
.trybar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--r);background:rgba(255,255,255,.92);box-shadow:var(--shadow);font-size:12px;max-width:100%}
.trybar .tl{color:var(--muted);padding:0 4px}
.tchip{display:inline-flex;align-items:center;gap:2px;padding:3px 4px 3px 10px;border-radius:var(--pill);background:var(--red-tint);color:var(--red-deep);font-weight:500}
.tchip button{width:22px;height:22px;border:0;border-radius:50%;background:none;color:inherit;font-size:15px;line-height:1;cursor:pointer}
@media (hover:hover) and (pointer:fine){.tchip button:hover{background:rgba(118,31,28,.12)}}
.trybar .reset{border:1px solid var(--line-2);background:var(--surface);border-radius:var(--pill);padding:4px 10px;font-size:12px;cursor:pointer}
.toast{position:fixed;left:50%;bottom:96px;z-index:40;transform:translate(-50%,8px);opacity:0;pointer-events:none;background:var(--ink);color:#fff;padding:10px 16px;border-radius:var(--pill);font-size:13.5px;box-shadow:var(--shadow);transition:opacity .2s var(--ease),transform .2s var(--ease);max-width:calc(100vw - 32px)}
.toast.on{opacity:1;transform:translate(-50%,0)}
@media (max-width:900px){.toast{bottom:84px}}
@media (prefers-reduced-motion:reduce){.toast{transition:opacity .15s ease;transform:translate(-50%,0)}}
@media (max-width:600px){.trybar{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding:4px 6px;font-size:11.5px}.trybar::-webkit-scrollbar{display:none}.trybar>*{flex:none}.tchip{white-space:nowrap}}

/* ---- visual on/off (30/10/2026): what the picture shows, independent of the cart and of the price ------------------ */
.visrow{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:12px 0 4px}
.seg.presets{flex:none}
.seg.presets button{font-size:12.5px;padding:6px 12px}
.vischips{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.vis{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 11px 0 9px;border:1px solid var(--line-2);border-radius:var(--pill);background:var(--surface);color:var(--muted);font-size:12.5px;cursor:pointer;transition:border-color .15s ease,color .15s ease,transform .16s var(--ease)}
.vis:active{transform:scale(.97)}
.vis.on{color:var(--ink);border-color:var(--ink)}
.vis:not(.on) span{text-decoration:line-through;text-decoration-color:rgba(105,105,105,.6)}
.vis small{font-size:11px;color:var(--muted);padding-left:6px;border-left:1px solid var(--line-2)}
.vis.cart small{color:var(--ink);font-weight:600}
.vis.view small{color:var(--red-deep)}
.vis:disabled{opacity:.45;cursor:not-allowed;transform:none}
@media (hover:hover) and (pointer:fine){.vis:hover{border-color:var(--ink)}}
.link.reset{padding:0 4px;font-size:12.5px;display:inline}
@media (max-width:600px){.visrow{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:8px 0 2px;padding-bottom:2px}.visrow::-webkit-scrollbar{display:none}.vischips{flex-wrap:nowrap}.vis,.seg.presets,.link.reset{flex:none;white-space:nowrap}}

/* ---- menu visual controls (30/10/2026): one compact row per category: name · red dot · pieces · eye · bin ---------- */
.lincats{grid-template-columns:1fr;gap:6px}
.lincat{padding:0 4px 0 0;gap:2px;cursor:default}
.lincat .ln{flex:1;min-width:0;text-align:left;background:none;border:0;padding:10px 6px 10px 12px;font:inherit;color:inherit;cursor:pointer}
.lincat.act .ln{font-weight:600}
.lincat .dot{width:8px;height:8px;border-radius:50%;flex:none;margin:0 6px;background:transparent;transition:background-color .18s ease}
.lincat .dot.on{background:var(--red)}
.lincat .cnt{margin-right:4px}
.lincat .cnt.zero{background:var(--sunk);color:#a3a3a3;border:1px solid var(--line)}
.eyeb{width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:50%;background:none;color:#a3a3a3;cursor:pointer;flex:none;transition:color .15s ease,background-color .15s ease,transform .16s var(--ease)}
.eyeb.on{color:var(--ink)}
.eyeb:active{transform:scale(.92)}
.eyeb:disabled{opacity:.35;cursor:default;transform:none}
.trash.sm{width:32px;height:32px;flex:none}
.trash:disabled{opacity:.3;cursor:default;transform:none;background:none;color:var(--muted)}
@media (hover:hover) and (pointer:fine){.eyeb:not(:disabled):hover{background:var(--sunk)}}
.step>summary .tools{display:inline-flex;align-items:center;gap:0;margin-left:-4px}
.step>summary .tools:empty{display:none}
.step>summary .v{margin-left:auto}
.vacts{margin-left:auto;display:inline-flex;gap:8px}
.vacts .btn{padding:6px 12px;font-size:12.5px}
#newCfg.confirm{background:var(--red);border-color:var(--red);color:#fff}
.cname{display:inline-flex;align-items:center;gap:5px;background:none;border:0;padding:0;font:inherit;font-weight:600;color:var(--ink);text-align:left;cursor:pointer}
.cname.on{color:var(--ink)}
.cname svg{color:var(--red-deep);flex:none}
@media (hover:hover) and (pointer:fine){.cname:not(.on):hover{text-decoration:underline;text-underline-offset:3px}}
@media (max-width:600px){.scenes-head{flex-wrap:wrap}.vacts{width:100%;margin-left:0}.vacts .btn{flex:1}}
.lincat:active{transform:none}
/* 01/11/2026 UI-first e2e: touch targets on coarse pointers (tabs and steppers were 28-30px high) */
@media (pointer:coarse){.tabs button{min-height:40px;padding:8px 14px}.stepper{height:40px}.stepper button{width:40px;height:38px}}
/* ---- UX lab 01/11/2026, integrated in the pilot (steps d-f) ------------------------------------------------------------ */
/* (d) price impact on each option (server quote): reserved line, so it never pushes the grid when it arrives */
.card .dp{min-height:17px;margin-top:6px;font-size:12px;font-weight:500;line-height:17px;color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.card .dp.less{color:var(--ok)}
.card .dp.cur{color:var(--muted);font-weight:400}
.card.on .dp.cur{color:var(--red-deep)}
/* (e) total: by how much it just changed */
.pdelta{align-self:center;font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--ink-2);background:var(--sunk);border:1px solid var(--line);border-radius:var(--pill);padding:1px 8px;
  opacity:0;transform:translateY(3px);transition:opacity .2s var(--ease),transform .2s var(--ease);pointer-events:none}
.pdelta.on{opacity:1;transform:none}
.pdelta.less{color:var(--ok)}
.pdelta:empty{display:none}
@media (prefers-reduced-motion:reduce){.pdelta{transform:none}}
.sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
/* (f) two long mattress-group names: the segmented control wraps inside its pill instead of breaking into two rows of chips */
.seg.wrap button{white-space:normal;line-height:1.25;padding:8px 12px;flex:1 1 0}
/* (f) first paint: the option column appears once, fully built (the catalog-driven cards used to push the steps down: CLS) */
body:not(.ready) .steps{visibility:hidden}
/* 01/11/2026 (Astra review): a failed quote greys the previous lines and offers a retry */
#price.stale .line,#price.stale .cline,#price.stale .tot{opacity:.45}
.linkbtn{background:none;border:0;padding:4px 2px;min-height:32px;color:inherit;text-decoration:underline;font:inherit;cursor:pointer}

/* what to buy (02/11/2026, Spyros QA §2) */
.price .buy{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:8px 0 4px}
.price .buy .check.sm{font-size:13px;gap:6px;min-height:32px}
.price .line.excl{opacity:.55}
.price .line.excl span:nth-child(2){font-size:12px;font-style:italic;color:var(--muted)}

/* save & share (02/11/2026) */
.share{display:flex;flex-direction:column;gap:6px;margin:4px 0 12px;max-width:560px}
.share-row{display:flex;gap:8px}
.share input{flex:1;min-width:0;font:inherit;font-size:13px;padding:8px 12px;border:1px solid var(--line-2);border-radius:var(--pill);background:var(--surface);color:var(--ink)}
.share input:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.saved-note{margin:2px 0 12px}
#saveCfg[aria-busy=true]{opacity:.6;cursor:progress}
/* price bar with discounts (02/11/2026): crossed-out total + delta never wrap; the delta floats on the bar's top edge */
.pricebar>summary{position:relative}
.pl,.pt,.pt .was,.pdelta{white-space:nowrap}
.pt .was{font-size:13px;margin-right:6px}
.pdelta{position:absolute;right:24px;top:-12px;box-shadow:0 2px 8px -4px rgba(21,21,21,.35);background:var(--surface)}
@media (max-width:900px){.pdelta{right:16px}}

/* Fivos assistant (02/11/2026): our own launcher over the picture's lower-right corner; the chat iframe is loaded but
   invisible (no clicks captured) until it opens: a side card next to the options on desktop, a bottom sheet on phones */
iframe.fivos{position:fixed;z-index:60;border:0;width:1px;height:1px;right:0;bottom:0;opacity:0;pointer-events:none}
iframe.fivos.fivos-open{opacity:1;pointer-events:auto;width:412px;height:min(82svh,760px);right:calc(var(--panel) + 16px);bottom:16px;
  border-radius:16px;border:1px solid var(--line);background:#fff;box-shadow:0 18px 48px -16px rgba(21,21,21,.45);
  animation:fivosIn .22s var(--ease)}
@keyframes fivosIn{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
.fivos-launch{position:fixed;z-index:59;right:calc(var(--panel) + 20px);bottom:20px;display:flex;align-items:center;gap:8px;
  padding:4px 14px 4px 4px;border:1px solid var(--line);border-radius:var(--pill);background:var(--surface);color:var(--ink);
  font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;box-shadow:0 8px 24px -12px rgba(21,21,21,.45);
  transition:transform .16s var(--ease),box-shadow .16s var(--ease)}
.fivos-launch img{width:40px;height:40px;border-radius:50%;object-fit:cover;object-position:top;background:var(--sunk)}
.fivos-launch:active{transform:scale(.97)}
@media (hover:hover) and (pointer:fine){.fivos-launch:hover{box-shadow:0 10px 28px -12px rgba(21,21,21,.55)}}
.fivos-launch:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
.ask-fivos{display:inline-flex;align-items:center;gap:6px;margin-top:10px;padding:6px 12px;border:1px solid var(--line-2);border-radius:var(--pill);
  background:var(--surface);color:var(--ink);font:inherit;font-size:13px;cursor:pointer}
.ask-fivos::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--red)}
@media (hover:hover) and (pointer:fine){.ask-fivos:hover{border-color:var(--ink)}}
.ask-fivos:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
@media (max-width:900px){
  .fivos-launch{right:12px;bottom:calc(76px + env(safe-area-inset-bottom));padding:3px 12px 3px 3px}
  .fivos-launch img{width:34px;height:34px}
  iframe.fivos.fivos-open{bottom:0;right:0;left:0;width:100%;height:70svh;border-radius:16px 16px 0 0}
}
@media (prefers-reduced-motion:reduce){iframe.fivos.fivos-open{animation:none}.fivos-launch{transition:none}}

/* languages (02/11/2026) */
html.i18n-wait body{visibility:hidden}
.langs{display:inline-flex;gap:2px;margin-left:auto;margin-right:12px;padding:2px;border:1px solid var(--line);border-radius:var(--pill)}
.langs button{border:0;background:transparent;color:var(--muted);font:inherit;font-size:12px;font-weight:600;letter-spacing:.04em;padding:4px 9px;border-radius:var(--pill);cursor:pointer}
.langs button.on{background:var(--ink);color:#fff}
@media (hover:hover) and (pointer:fine){.langs button:not(.on):hover{color:var(--ink)}}
.langs button:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.langs + .util{margin-left:0}

/* Fivos: page-owned close button on the chat's outer top-left corner (Astra review 5) */
.fivos-close{position:fixed;z-index:61;right:calc(var(--panel) + 16px + 412px - 14px);bottom:calc(min(82svh,760px) + 16px - 14px);
  width:30px;height:30px;border-radius:50%;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:18px;
  line-height:1;cursor:pointer;box-shadow:0 4px 12px -6px rgba(21,21,21,.5)}
.fivos-close:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
@media (max-width:900px){.fivos-close{right:12px;bottom:calc(70svh - 15px)}}
.langs[hidden],.langs button[hidden]{display:none}

/* ---- download menu + «i» info buttons + info dialog (02/11/2026, Spyros QA §4) ---------------------------------------- */
.dl{position:relative;display:inline-flex}
.dl-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:30;display:flex;flex-direction:column;min-width:180px;padding:4px;
  background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 32px -14px rgba(21,21,21,.45)}
.dl-menu[hidden]{display:none}
.dl-menu button{border:0;background:none;text-align:left;font:inherit;font-size:13.5px;color:var(--ink);padding:9px 12px;border-radius:8px;cursor:pointer}
@media (hover:hover) and (pointer:fine){.dl-menu button:hover{background:var(--sunk)}}
.dl-menu button:focus-visible{outline:2px solid var(--red);outline-offset:-2px}
.btn[aria-busy=true]{opacity:.6;cursor:progress}
@media (max-width:600px){.vacts{flex-wrap:wrap}.vacts>.btn,.vacts>.dl{flex:1 1 calc(50% - 4px)}.dl .btn{width:100%}.dl-menu{left:0;right:auto}}

.infos{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.infos[hidden]{display:none}
.info-chip{display:inline-flex;align-items:center;gap:7px;padding:6px 12px 6px 9px;border:1px solid var(--line-2);border-radius:var(--pill);
  background:var(--surface);color:var(--ink);font:inherit;font-size:13px;cursor:pointer;transition:border-color .15s ease,transform .16s var(--ease)}
.info-chip::before{content:"";width:16px;height:16px;flex:none;background:var(--red);
  -webkit-mask:var(--ico) center/contain no-repeat;mask:var(--ico) center/contain no-repeat}
.info-chip.cat{--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9.5'/%3E%3Cpath d='M12 11v6M12 7.5v.01'/%3E%3C/svg%3E")}
.info-chip.turn{--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cellipse cx='12' cy='12' rx='9.5' ry='4.5'/%3E%3Cpath d='M15 4.5l2.5 3-3.2 1.4'/%3E%3C/svg%3E")}
.info-chip:active{transform:scale(.97)}
@media (hover:hover) and (pointer:fine){.info-chip:hover{border-color:var(--ink)}}

.infodlg{border:0;padding:0;border-radius:16px;width:min(760px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;
  background:var(--surface);color:var(--ink);box-shadow:0 24px 60px -20px rgba(21,21,21,.55)}
.infodlg::backdrop{background:rgba(21,21,21,.45)}
.infodlg[open]{animation:dlgIn .22s cubic-bezier(.2,.8,.2,1)}
.infodlg[open]::backdrop{animation:dlgFade .22s ease-out}
@keyframes dlgIn{from{opacity:0;transform:translateY(10px) scale(.985)}}
@keyframes dlgFade{from{opacity:0}}
.infodlg-head{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:12px;padding:14px 14px 12px 20px;background:var(--surface);border-bottom:1px solid var(--line)}
.infodlg-head h2{margin:0;font-size:17px;font-weight:600;flex:1;text-wrap:balance}
.infodlg-x{width:36px;height:36px;flex:none;border:1px solid var(--line-2);border-radius:50%;background:var(--surface);color:var(--ink);font:inherit;font-size:20px;line-height:1;cursor:pointer}
@media (hover:hover) and (pointer:fine){.infodlg-x:hover{border-color:var(--ink)}}
.infodlg-media{background:var(--sunk)}
.infodlg-media[hidden]{display:none}
.info-img{display:block;width:100%;max-height:58dvh;object-fit:contain;user-select:none}
.turn .info-img{cursor:grab;touch-action:pan-y}
.turn.drag .info-img{cursor:grabbing}
.infodlg .turn-range{display:block;width:calc(100% - 40px);margin:10px 20px 4px;accent-color:var(--red)}
.turn-hint{padding:0 20px 12px}
.turn:not(.ready) .turn-hint::after{content:" …"}
.info-video{display:flex;align-items:center;justify-content:center;padding:14px 20px}
.info-video iframe{width:100%;height:100%;border:0;display:block}
.info-video:has(iframe){padding:0;aspect-ratio:16/9}
.infodlg-text{padding:16px 20px 20px;max-width:68ch}
.infodlg-text[hidden]{display:none}
.infodlg-text p{margin:0 0 10px;white-space:pre-line;color:var(--ink-2)}
.infodlg-text p:last-child{margin-bottom:0}
@media (prefers-reduced-motion:reduce){.infodlg[open],.infodlg[open]::backdrop{animation:none}.info-chip{transition:none}}

/* «Έως 36 άτοκες δόσεις» under the total (legacy #installments, Spyros QA §4) */
.price .inst{display:flex;flex-direction:column;gap:2px;margin:6px 0 2px;text-align:right}
.price .inst b{font-size:13px;font-weight:600;color:var(--ink)}
.price .inst span{font-size:11.5px;color:var(--muted);line-height:1.4}

/* ---- polish 02/11/2026 (Impeccable critique + Astra review) ------------------------------------------------------------ */
/* actions under the picture: one line each, never squeezing the room name (1024 px wrapped every label into two lines) */
.vacts .btn{white-space:nowrap}
@media (max-width:1180px) and (min-width:601px){.scenes-head{flex-wrap:wrap}.vacts{width:100%;margin-left:0;flex-wrap:wrap}}
/* basket lines in the price panel: the name gets its own full row, controls below it (names were broken word by word) */
#price .cline{grid-template-columns:auto 1fr auto;row-gap:8px}
#price .cline .ci{grid-column:1/-1}
#price .cline .cp{justify-self:end}
/* phones: one «Ενέργειες» menu instead of three separate buttons (Astra review 8) */
.mact{display:none}
@media (max-width:600px){
  .vacts{flex-wrap:nowrap}
  .vacts>#saveCfg,.vacts>#dlWrap,.vacts>#newCfg{display:none}
  .vacts>#showCart,.vacts>.mact{display:inline-flex;flex:1 1 0}
  .mact .btn{width:100%;justify-content:center}
  .mact .dl-menu{left:auto;right:0;min-width:220px}
  .mact .dl-menu button.confirm{color:var(--red-deep);background:var(--red-tint)}
}
/* the picture could not be updated: it says so until the next picture arrives (Astra review 2) */
.imgfail{position:absolute;left:12px;bottom:12px;z-index:3;display:flex;align-items:center;gap:10px;padding:8px 8px 8px 14px;max-width:calc(100% - 24px);
  background:rgba(255,255,255,.94);border:1px solid var(--line);border-radius:var(--pill);font-size:13px;color:var(--ink);box-shadow:0 8px 22px -14px rgba(21,21,21,.5)}
.imgfail[hidden]{display:none}
.imgfail .btn{padding:5px 12px;font-size:12.5px}
/* catalog loading / failure (Astra review 3) */
.catload{padding:20px 24px;font-size:14px;color:var(--muted)}
.catload[hidden]{display:none}
.catload.err{color:var(--warn)}
.catload.err .btn{margin-left:6px}
/* what the card amounts mean (Astra review 6) */
.dhint{margin:0 0 8px;font-size:12px;color:var(--muted)}
/* a partial total says so in the closed price bar (Astra review 1) */
.ppend{font-size:12px;font-weight:500;color:var(--warn);white-space:nowrap}
.ppend[hidden]{display:none}
/* price bar action names its effect (Astra review 7) */
.pd-close{display:none}
.pricebar[open] .pd-open{display:none}
.pricebar[open] .pd-close{display:inline}
/* touch targets ≥ 44 px without changing the drawn size (Astra review 4) */
@media (pointer:coarse){
  .sw::after,.eyeb::after,.trash::after{content:"";position:absolute;inset:-4px}
  .eyeb,.trash{position:relative}
  .eyeb::after{inset:-6px}
  .trash::after{inset:-5px}
  .tabs button,.seg button,.dl-menu button,.info-chip,.ask-fivos{min-height:44px}
  .stepper{height:44px}.stepper button{width:44px;height:42px}
  .check{min-height:44px}
  .infodlg-x{width:44px;height:44px}
  .langs button{position:relative}.langs button::after{content:"";position:absolute;inset:-8px 0}
  .vacts .btn{min-height:44px}
}
.pricebar>summary:has(.ppend:not([hidden])){flex-wrap:wrap;row-gap:0}
.ppend{order:9;flex-basis:100%}
/* mattress family filter + «Η επιλογή μου» (Astra review 9) */
.famrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0 12px}
.famrow[hidden]{display:none}
.famrow .linkbtn{margin-left:auto;font-size:13px;color:var(--ink-2)}
.tabs.fam{margin:0}
/* basket count: what it counts (Astra review 11) */
@media (max-width:600px){.ccw{display:none}}

/* ==== UI detail pass 03/11/2026 (owner: «εύχρηστο, κατανοητό, ελκυστικό»). Same layout, brand, type and behaviour. ==== */
/* 1. the steps are numbered: the order of the process is visible at a glance; the open step's number turns ink */
.steps{counter-reset:st}
.step:not([hidden]){counter-increment:st}
.step>summary .h{display:inline-flex;align-items:center;gap:12px;white-space:nowrap}
.step>summary .h::before{content:counter(st);flex:none;width:24px;height:24px;border-radius:50%;display:inline-grid;place-items:center;
  font-size:12px;font-weight:600;line-height:1;color:var(--ink-2);background:var(--sunk);border:1px solid var(--line);font-variant-numeric:tabular-nums;
  transition:background-color .2s ease,border-color .2s ease,color .2s ease}
.step[open]>summary .h::before{background:var(--ink);border-color:var(--ink);color:#fff}
/* 2. product cards show the product: one picture tile per card (bases, headboards, feet, mattresses) */
.cards.withimg .card{display:flex;flex-direction:column;padding:6px 6px 10px}
.cards.withimg .card img,.cards.withimg .card .ph{width:100%;height:68px;object-fit:contain;margin:0 0 8px;padding:6px 8px;
  background:var(--sunk);border-radius:5px;display:block;box-sizing:border-box;transition:background-color .2s ease}
.cards.withimg .card .n,.cards.withimg .card .s,.cards.withimg .card .dp{padding:0 5px}
.cards.withimg .card .ph{background:none;border:1px dashed var(--line-2)}
.cards.withimg .card.on img{background:#fbf1f1}
.cards.hbc .card img,.cards.hbc .card .ph{height:76px;padding:8px 10px}
.cards.feet .card img{height:58px;padding:6px}
.cards.feet .card{min-height:0}
#bases .card img{padding:4px 2px}
@media (hover:hover) and (pointer:fine){.cards.withimg .card:hover img{background:#efefef}.cards.withimg .card.on:hover img{background:#fbf1f1}}
/* selected card: a red check in the corner as well as the red frame (the spinner takes its place while the picture updates) */
.card.on::before{content:"";position:absolute;z-index:1;top:7px;right:7px;width:18px;height:18px;border-radius:50%;
  background:var(--red) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 12.5l4 4 8-9'/%3E%3C/svg%3E") center/12px no-repeat;
  box-shadow:0 0 0 2px var(--surface)}
body.busy .card.on::before{opacity:0}
.card.on::before{transition:opacity .15s ease}
/* 3. quieter rows: an empty basket count and a bin with nothing to remove are not shown (they read as noise) */
.lincat .cnt.zero,.lincat .trash:disabled{visibility:hidden}
.step>summary .trash:disabled{display:none}
/* 4. actions under the picture carry an icon each */
.vacts .btn{display:inline-flex;align-items:center;justify-content:center;gap:7px}
#showCart::before,#saveCfg::before,#dlBtn::before,#newCfg::before,#mactBtn::before{content:"";width:15px;height:15px;flex:none;background:currentColor;
  -webkit-mask:var(--ico) center/contain no-repeat;mask:var(--ico) center/contain no-repeat}
#showCart{--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 12a8.5 8.5 0 1 0 2.6-6.1M3.5 4v4.5H8'/%3E%3C/svg%3E")}
#saveCfg{--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 14a4.5 4.5 0 0 0 6.4 0l3-3a4.5 4.5 0 0 0-6.4-6.4l-1 1M14 10a4.5 4.5 0 0 0-6.4 0l-3 3a4.5 4.5 0 0 0 6.4 6.4l1-1'/%3E%3C/svg%3E")}
#dlBtn{--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4v11M7 10.5l5 5 5-5M5 20h14'/%3E%3C/svg%3E")}
#newCfg{--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E")}
#mactBtn{--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Ccircle cx='5' cy='12' r='2'/%3E%3Ccircle cx='12' cy='12' r='2'/%3E%3Ccircle cx='19' cy='12' r='2'/%3E%3C/svg%3E")}
#newCfg.confirm::before{display:none}
/* 5. room strip: the right edge fades while more rooms follow (scrolling to the end removes the fade) */
.scenes{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 56px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 56px),transparent)}
.scenes.at-end{-webkit-mask-image:none;mask-image:none}
.scenes{gap:10px;padding-top:4px}
/* 6. desktop: picture and room strip sit centred in the column instead of leaving an empty band at the bottom */
@media (min-width:901px){.stage::before,.stage::after{content:"";margin-block:auto}}
/* 7. price bar: the discount is said in one word next to the total */
.psave{align-self:center;font-size:12px;font-weight:600;line-height:1;color:var(--red-deep);background:var(--red-tint);border-radius:var(--pill);padding:5px 8px;white-space:nowrap;font-variant-numeric:tabular-nums}
.psave[hidden]{display:none}
.pricebar>summary{align-items:center}
.pl{align-self:center}
@media (max-width:420px){.pt .was{display:none}}
/* 8. mattress family row: «Η επιλογή μου» is a quiet button, not a stray underlined word */
.famrow .linkbtn{text-decoration:none;display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line-2);border-radius:var(--pill);padding:4px 12px;font-size:12.5px;color:var(--ink);min-height:32px}
.famrow .linkbtn::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--red);box-shadow:0 0 0 3px var(--red-tint)}
@media (hover:hover) and (pointer:fine){.famrow .linkbtn:hover{border-color:var(--ink)}}
@media (pointer:coarse){.famrow .linkbtn{min-height:44px}}
@media (prefers-reduced-motion:reduce){.card.on::before,.step>summary .h::before{transition:none}}
/* headboards and feet: three per row on phones too (short drawings; two per row made the list twice as long) */
@media (max-width:420px){.cards.hbc,.cards.feet{grid-template-columns:repeat(3,1fr)}.cards.hbc .card img,.cards.hbc .card .ph{height:60px;padding:6px}.cards.feet .card img{height:48px}
  .cards.withimg .card .n{font-size:13px}.cards.withimg .card .s{font-size:11.5px}}
.cards.feet .card .n{font-size:13px}
/* narrow option column (901-1100 px): the badge says the discount, the crossed-out total stays in the breakdown */
@media (max-width:1100px) and (min-width:901px){.pt .was{display:none}.pricebar>summary{gap:10px}}
/* fabrics (03/11/2026, owner: «χάος» in the pills): an even grid of fabric cards: swatch · name · €/m · colours */
.fabgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.fabgrid .fab{display:flex;align-items:center;gap:9px;min-width:0;padding:7px 8px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);
  color:var(--ink);font:inherit;text-align:left;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,transform .16s var(--ease)}
.fabgrid .fab:active{transform:scale(.97)}
@media (hover:hover) and (pointer:fine){.fabgrid .fab:hover{border-color:var(--line-2)}}
.fabgrid .fab.on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.fabgrid .fsw{flex:none;width:30px;height:30px;border-radius:50%;background:#ddd center/cover;box-shadow:inset 0 0 0 1px rgba(0,0,0,.12)}
.fabgrid .ft{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.fabgrid .ft b{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fabgrid .ft small{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
@media (max-width:1100px) and (min-width:901px){.fabgrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:360px){.fabgrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (pointer:coarse){.fabgrid .fab{min-height:48px}}
/* colours under the fabric: an even row rhythm, the chosen colour named in ink */
.swatches{gap:10px}
.swname{font-weight:500;color:var(--ink)}
