/* ==========================================================================
   Clavhello — configurateur
   ========================================================================== */


/* ---------- En-tête de page ---------- */
.config-hero {
    padding: clamp(32px, 5vw, 56px) 0 clamp(24px, 4vw, 40px);
    background: linear-gradient(180deg, var(--pink) 0%, var(--cream) 100%);
    text-align: center;
}
.config-hero h1 {
    font-size: clamp(2.4rem, 5.5vw, 4rem);
    letter-spacing: -.03em;
}
.config-hero__lead {
    max-width: 560px;
    margin: 14px auto 0;
    color: var(--plum-soft);
    font-size: 1.15rem;
    font-weight: 600;
}

/* ---------- Mise en page ---------- */
.config {
    display: grid;
    grid-template-columns: minmax(0, 1.45fr) minmax(340px, 1fr);
    align-items: start;
    gap: clamp(24px, 3vw, 40px);
    padding-bottom: clamp(64px, 9vw, 112px);
}

/* ---------- Aperçu ---------- */
.stage {
    position: sticky;
    top: 104px;
    z-index: 5;
}
.stage__desk {
    position: relative;
    padding: clamp(20px, 4vw, 48px) clamp(14px, 3vw, 36px);
    border-radius: var(--radius-lg);
    background:
        radial-gradient(circle at 12% 18%, rgba(255, 255, 255, .7), transparent 32%),
        radial-gradient(circle at 92% 88%, rgba(167, 238, 224, .55), transparent 38%),
        radial-gradient(circle at 85% 8%, rgba(214, 198, 245, .7), transparent 34%),
        linear-gradient(160deg, #FDE7EA, #F8D3DA);
    box-shadow: var(--shadow);
    overflow: hidden;
}

.case {
    --case: #F3EADB;
    padding: 2.4%;
    border-radius: 3.2% / 9%;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, .45), rgba(255, 255, 255, 0) 30%),
        var(--case);
    box-shadow:
        inset 0 -6px 0 color-mix(in srgb, var(--case) 80%, #51316B),
        inset 0 2px 0 rgba(255, 255, 255, .6),
        0 22px 40px rgba(81, 49, 107, .22),
        0 4px 10px rgba(81, 49, 107, .12);
    transition: background .4s;
}
.case--dark {
    background:
        linear-gradient(180deg, rgba(255, 255, 255, .12), rgba(255, 255, 255, 0) 30%),
        var(--case);
}

.kb {
    --u: calc(100cqw / var(--W, 16));
    position: relative;
    width: 100%;
    container-type: inline-size;
    touch-action: none;
    user-select: none;
    -webkit-user-select: none;
}

/* ---------- Touches ---------- */
.key {
    --kc: #F6EEDF;
    --lg: #51316B;
    position: absolute;
    padding: calc(var(--u) * .035);
    border: 0;
    background: none;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.key:focus-visible { outline: none; }
.key:focus-visible .key__cap { box-shadow: 0 0 0 calc(var(--u) * .06) var(--lav-strong); }

.key__cap {
    position: relative;
    display: block;
    width: 100%;
    height: 100%;
    border-radius: calc(var(--u) * .13);
    background: color-mix(in srgb, var(--kc) 76%, #51316B);
    box-shadow: 0 calc(var(--u) * .05) calc(var(--u) * .06) rgba(61, 34, 83, .28);
    transition: transform .07s ease-out, box-shadow .07s ease-out, background .25s;
}
.key__top {
    position: absolute;
    inset: calc(var(--u) * .05) calc(var(--u) * .1) calc(var(--u) * .17);
    display: flex;
    align-items: flex-start;
    justify-content: flex-start;
    padding: calc(var(--u) * .07) calc(var(--u) * .09);
    border-radius: calc(var(--u) * .1);
    background:
        linear-gradient(180deg, color-mix(in srgb, var(--kc) 70%, #fff), var(--kc) 70%);
    box-shadow: inset 0 calc(var(--u) * -.02) 0 rgba(81, 49, 107, .06);
    transition: background .25s;
}
.key__lg {
    font-family: var(--font-display);
    font-size: calc(var(--u) * .24);
    font-weight: 600;
    line-height: 1.05;
    color: var(--lg);
    opacity: .85;
    white-space: nowrap;
    pointer-events: none;
}
.key__lg--dual {
    display: flex;
    flex-direction: column;
    gap: calc(var(--u) * .04);
    font-size: calc(var(--u) * .2);
}
.key--wide .key__top { align-items: flex-end; }

.key.is-down .key__cap {
    transform: translateY(calc(var(--u) * .045));
    box-shadow: 0 calc(var(--u) * .01) calc(var(--u) * .02) rgba(61, 34, 83, .3);
}
.key.is-down .key__top { filter: brightness(.97); }
.key.is-pop .key__cap { animation: pop .22s var(--ease); }

.key--artisan .key__top {
    align-items: center;
    justify-content: center;
    padding: calc(var(--u) * .04);
}
.key--artisan .key__lg { display: none; }
.key__art { width: 78%; pointer-events: none; }
.key__art svg { width: 100%; height: auto; }
.key__art--img { width: 82%; height: 82%; }
.key__art--img img { width: 100%; height: 100%; object-fit: contain; }

@keyframes pop {
    0%, 100% { transform: none; }
    45% { transform: translateY(calc(var(--u) * -.08)) scale(1.04); }
}

/* ---------- Barre sous l'aperçu ---------- */
.stage__bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px 16px;
    margin-top: 16px;
    padding: 10px 12px 10px 18px;
    background: var(--white);
    border-radius: 999px;
    box-shadow: var(--shadow-sm);
}
.stage__hint {
    display: flex;
    align-items: center;
    gap: 10px;
    color: var(--plum-soft);
    font-size: .95rem;
    font-weight: 600;
}
.stage__hint strong { color: var(--plum-dark); }
.stage__brush {
    flex: none;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    box-shadow: inset 0 0 0 2px rgba(81, 49, 107, .18);
    transition: background .2s;
}
.stage__tools { display: flex; align-items: center; gap: 12px; }
.stage__total {
    padding: 8px 16px;
    border-radius: 999px;
    background: var(--plum);
    color: rgba(255, 255, 255, .8);
    font-size: .9rem;
    font-weight: 700;
    white-space: nowrap;
}
.stage__total strong { color: var(--white); font-family: var(--font-display); font-size: 1.1rem; }

.tool-btn {
    display: grid;
    place-items: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--pink);
    color: var(--plum);
    transition: background .2s;
}
.tool-btn:hover { background: var(--pink-strong); }
.tool-btn svg {
    width: 22px;
    height: 22px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}
.tool-btn .i-off,
.tool-btn[aria-pressed="true"] .i-on { display: none; }
.tool-btn[aria-pressed="true"] .i-off { display: block; }

/* ---------- Rappel « mode silencieux » ---------- */
.sound-hint {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 8px;
    padding: 10px 8px 10px 14px;
    border-radius: var(--radius);
    background: var(--yellow);
    box-shadow: var(--shadow-sm);
    color: var(--plum-dark);
    font-size: .88rem;
    line-height: 1.4;
    opacity: 0;
    transform: translateY(-6px);
    transition: opacity .25s, transform .25s var(--ease);
}
.sound-hint[hidden] { display: none; }
.sound-hint.is-visible { opacity: 1; transform: none; }
.sound-hint > svg {
    flex: none;
    width: 26px;
    height: 26px;
    fill: none;
    stroke: var(--plum);
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}
.sound-hint p { flex: 1; }
.sound-hint__close {
    display: grid;
    place-items: center;
    flex: none;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    color: var(--plum);
}
.sound-hint__close:hover { background: rgba(255, 255, 255, .6); }
.sound-hint__close svg {
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2.2;
    stroke-linecap: round;
}

/* ---------- Panneau ---------- */
.panel { display: grid; gap: 20px; min-width: 0; }
.panel__options { display: grid; gap: 20px; }

.cstep {
    min-width: 0;
    margin: 0;
    padding: 24px;
    border: 0;
    border-radius: var(--radius-lg);
    background: var(--white);
    box-shadow: var(--shadow-sm);
}
.cstep__title {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 12px;
    width: 100%;
    margin: 0;
    padding: 0 0 18px;
    font-family: var(--font-display);
    font-size: 1.35rem;
    font-weight: 700;
    color: var(--plum-dark);
}
.cstep .step__num {
    display: grid;
    place-items: center;
    flex: none;
    width: 36px;
    height: 36px;
    border-radius: 11px;
    font-size: 1.1rem;
    box-shadow: inset 0 -3px 0 rgba(81, 49, 107, .12);
}
.step__num--yellow { background: var(--yellow); }
.cstep__hint { font-family: var(--font-body); font-size: .9rem; font-weight: 600; color: var(--plum-soft); }
.cstep__sub {
    display: block;
    margin: 20px 0 10px;
    font-family: var(--font-body);
    font-size: .85rem;
    font-weight: 800;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--plum-soft);
}
.cstep__title + .cstep__sub { margin-top: 0; }

/* Cartes de choix */
.choices { display: grid; gap: 10px; }
.choices--2 { grid-template-columns: 1fr 1fr; }
.choice { position: relative; display: block; cursor: pointer; }
.choice input,
.swatch input,
.paint input,
.artisan input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
.choice__box {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 2px 12px;
    height: 100%;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--cream);
    box-shadow: inset 0 0 0 2px #F1E6EE;
    transition: box-shadow .2s, background .2s, transform .2s var(--ease);
}
.choice:hover .choice__box { transform: translateY(-2px); }
.choice__name { font-family: var(--font-display); font-size: 1.15rem; font-weight: 600; color: var(--plum-dark); }
.choice__desc { grid-column: 1; color: var(--plum-soft); font-size: .9rem; line-height: 1.4; }
.choice__price { grid-column: 2; grid-row: 1; font-weight: 800; font-size: .9rem; white-space: nowrap; }
.choices--2 .choice__box { grid-template-columns: 1fr; }
.choices--2 .choice__price { grid-column: 1; grid-row: auto; margin-top: 6px; }

.choice input:checked + .choice__box {
    background: #F7F1FE;
    box-shadow: inset 0 0 0 2.5px var(--plum);
}
.choice input:focus-visible + .choice__box { outline: 3px solid var(--lav-strong); outline-offset: 2px; }

.choice--sound .choice__box { padding-right: 68px; }
.choice--sound .choice__price { grid-column: 1; grid-row: auto; margin-top: 4px; font-size: .85rem; color: var(--plum-soft); }
.play-btn {
    position: absolute;
    top: 50%;
    right: 14px;
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: var(--plum);
    color: var(--white);
    transform: translateY(-50%);
    transition: transform .2s var(--ease), background .2s;
}
.play-btn:hover { background: var(--plum-dark); transform: translateY(-50%) scale(1.08); }
.play-btn svg { width: 18px; height: 18px; margin-left: 2px; fill: currentColor; }

/* Pastilles de couleur du boîtier */
.swatches {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(76px, 1fr));
    gap: 10px;
}
.swatch {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    padding: 12px 6px 10px;
    border-radius: var(--radius);
    cursor: pointer;
    transition: background .2s;
}
.swatch:hover { background: var(--cream); }
.swatch__dot {
    width: 44px;
    height: 44px;
    border-radius: 14px;
    background: linear-gradient(180deg, rgba(255, 255, 255, .5), transparent 50%), var(--sw);
    box-shadow: inset 0 -4px 0 rgba(81, 49, 107, .14), inset 0 0 0 1.5px rgba(81, 49, 107, .1);
    transition: transform .2s var(--ease), box-shadow .2s;
}
.swatch__name { font-size: .85rem; font-weight: 700; color: var(--plum-soft); }
.swatch input:checked ~ .swatch__dot {
    transform: scale(1.06);
    box-shadow: inset 0 -4px 0 rgba(81, 49, 107, .14), 0 0 0 3px var(--white), 0 0 0 5.5px var(--plum);
}
.swatch input:checked ~ .swatch__name { color: var(--plum-dark); }
.swatch input:focus-visible ~ .swatch__dot { outline: 3px solid var(--lav-strong); outline-offset: 6px; }

/* Thèmes */
.themes {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 10px;
}
.theme {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 14px 10px 10px;
    border-radius: var(--radius);
    background: var(--cream);
    box-shadow: inset 0 0 0 2px #F1E6EE;
    text-align: left;
    transition: box-shadow .2s, transform .2s var(--ease), background .2s;
}
.theme:hover { transform: translateY(-2px); }
.theme.is-active { background: #F7F1FE; box-shadow: inset 0 0 0 2.5px var(--plum); }
.theme__colors {
    display: grid;
    grid-template-columns: 1fr 1fr;
    flex: none;
    width: 36px;
    height: 36px;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: inset 0 0 0 1.5px rgba(81, 49, 107, .1);
}
.theme__name { font-weight: 700; font-size: .95rem; color: var(--plum-dark); line-height: 1.2; }

/* Palette du pinceau */
.palette {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 10px;
}
.paint { position: relative; display: grid; place-items: center; cursor: pointer; }
.paint__dot {
    width: 100%;
    max-width: 48px;
    aspect-ratio: 1;
    border-radius: 30%;
    background: linear-gradient(180deg, rgba(255, 255, 255, .45), transparent 55%), var(--sw);
    box-shadow: inset 0 -4px 0 rgba(81, 49, 107, .16), inset 0 0 0 1.5px rgba(81, 49, 107, .1);
    transition: transform .2s var(--ease), box-shadow .2s;
}
.paint:hover .paint__dot { transform: translateY(-2px); }
.paint input:checked + .paint__dot {
    transform: scale(1.08);
    box-shadow: inset 0 -4px 0 rgba(81, 49, 107, .16), 0 0 0 3px var(--white), 0 0 0 5.5px var(--plum);
}
.paint input:focus-visible + .paint__dot { outline: 3px solid var(--lav-strong); outline-offset: 6px; }

/* Remplissage rapide */
.fills { display: flex; flex-wrap: wrap; gap: 8px; }
/* Zone de test */
.test-zone { margin-top: 20px; }
.test-zone textarea {
    width: 100%;
    padding: 14px 16px;
    border: 0;
    border-radius: var(--radius);
    background: var(--cream);
    box-shadow: inset 0 0 0 2px #F1E6EE;
    font: inherit;
    color: var(--plum-dark);
    resize: vertical;
    transition: box-shadow .2s;
}
.test-zone textarea::placeholder { color: #A893B8; }
.test-zone textarea:focus { outline: none; box-shadow: inset 0 0 0 2.5px var(--lav-strong); }
.volume {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 12px;
    font-size: .9rem;
    font-weight: 700;
    color: var(--plum-soft);
}
.volume input { flex: 1; accent-color: var(--plum); }

/* Keycaps artisanales */
.artisans {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 8px;
}
.artisan { position: relative; cursor: pointer; }
.artisan__box {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    height: 100%;
    padding: 12px 4px;
    border-radius: var(--radius);
    background: var(--cream);
    box-shadow: inset 0 0 0 2px #F1E6EE;
    text-align: center;
    transition: box-shadow .2s, background .2s, transform .2s var(--ease);
}
.artisan:hover .artisan__box { transform: translateY(-2px); }
.artisan__icon {
    --sw: #F4EEF7;
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    padding: 8px;
    border-radius: 13px;
    background: linear-gradient(180deg, rgba(255, 255, 255, .5), transparent 55%), var(--sw);
    box-shadow: inset 0 -4px 0 rgba(81, 49, 107, .14);
}
.artisan__icon svg { width: 100%; height: 100%; }
.artisan__icon img { width: 100%; height: 100%; object-fit: contain; }
.artisan__icon--line svg { fill: none; stroke: #B6A5C4; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.artisan__name { font-size: .85rem; font-weight: 700; color: var(--plum-dark); }
.artisan__price { font-size: .78rem; font-weight: 700; color: var(--plum-soft); }
.artisan input:checked + .artisan__box { background: #F7F1FE; box-shadow: inset 0 0 0 2.5px var(--plum); }
.artisan input:focus-visible + .artisan__box { outline: 3px solid var(--lav-strong); outline-offset: 2px; }

/* Motif importé */
.motif {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 14px;
}
.motif .pill { flex: none; }
.motif .pill svg { fill: none; stroke: currentColor; }
.motif__hint { color: var(--plum-soft); font-size: .82rem; line-height: 1.45; }

/* ---------- Récapitulatif ---------- */
.summary {
    padding: 28px 24px;
    border-radius: var(--radius-lg);
    background:
        radial-gradient(circle at 100% 0%, rgba(255, 183, 195, .35), transparent 45%),
        radial-gradient(circle at 0% 100%, rgba(167, 238, 224, .3), transparent 45%),
        var(--plum);
    color: var(--white);
}
.summary h2 { color: var(--white); font-size: 1.6rem; margin-bottom: 16px; }
.summary__list { display: grid; gap: 10px; margin: 0; }
.summary__list div {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    padding-bottom: 10px;
    border-bottom: 1px solid rgba(255, 255, 255, .12);
}
.summary__list dt { color: rgba(255, 255, 255, .7); }
.summary__list dd { margin: 0; font-weight: 700; text-align: right; }
.summary__total {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    margin: 18px 0 22px;
    font-weight: 700;
}
.summary__total strong { font-family: var(--font-display); font-size: 2.2rem; }
.summary__actions { display: flex; flex-direction: column; align-items: center; gap: 14px; }
.summary__note {
    margin: 18px 0 20px;
    color: rgba(255, 255, 255, .72);
    font-size: .88rem;
}
.summary .btn--primary {
    width: 100%;
    justify-content: center;
    background: var(--white);
    color: var(--plum-dark);
    box-shadow: none;
}
.summary .btn--primary:hover { background: var(--yellow); }
.summary .link-underline { color: var(--white); font-size: .95rem; }

/* ---------- Demande de devis ---------- */
.quote { scroll-margin-top: 110px; }
.quote > .field { margin-bottom: 18px; }
.quote textarea.input { resize: vertical; min-height: 84px; }
.field__optional { font-weight: 600; color: var(--plum-soft); }
.quote__intro { margin-bottom: 14px; color: var(--plum-soft); font-weight: 600; }
.quote__error {
    margin-bottom: 16px;
    padding: 12px 16px;
    border-radius: var(--radius-sm);
    background: #FFE4E8;
    color: #9B1C3C;
    font-weight: 700;
    font-size: .92rem;
}
.quote__who {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 16px;
    color: var(--plum-soft);
}
.quote__who strong { color: var(--plum-dark); }
.quote__avatar {
    display: grid;
    place-items: center;
    flex: none;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--lav);
    color: var(--plum-dark);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 1.1rem;
    text-transform: uppercase;
}

.tabs {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 4px;
    margin-bottom: 18px;
    padding: 4px;
    border-radius: 999px;
    background: var(--cream);
    box-shadow: inset 0 0 0 2px #F1E6EE;
}
.tabs__tab {
    padding: 10px 12px;
    border-radius: 999px;
    font-weight: 700;
    font-size: .92rem;
    color: var(--plum-soft);
    transition: background .2s, color .2s, box-shadow .2s;
}
.tabs__tab[aria-selected="true"] {
    background: var(--white);
    color: var(--plum-dark);
    box-shadow: var(--shadow-sm);
}

/* ---------- Notification ---------- */
.toast {
    position: fixed;
    left: 50%;
    bottom: 24px;
    z-index: 80;
    max-width: calc(100% - 32px);
    padding: 14px 22px;
    border-radius: 999px;
    background: var(--plum-dark);
    color: var(--white);
    font-weight: 700;
    box-shadow: var(--shadow-lg);
    text-align: center;
    opacity: 0;
    visibility: hidden;
    transform: translate(-50%, 16px);
    transition: opacity .25s, transform .25s var(--ease), visibility .25s;
}
.toast.is-visible { opacity: 1; visibility: visible; transform: translate(-50%, 0); }

/* ---------- Responsive ---------- */
@media (max-width: 1024px) {
    .config { grid-template-columns: 1fr; }
    .stage { top: 72px; margin-inline: calc(var(--gutter) * -1); padding: 8px var(--gutter) 10px; background: rgba(255, 249, 247, .92); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
    .stage__desk { padding: 16px 12px; border-radius: var(--radius); }
    .stage__bar { margin-top: 8px; padding: 6px 6px 6px 14px; }
    .panel { max-width: 720px; width: 100%; margin-inline: auto; }
}

@media (max-width: 600px) {
    .stage__hint { font-size: .85rem; }
    .stage__hint-long { display: none; }
    .stage__total { padding: 6px 12px; }
    .tool-btn { width: 34px; height: 34px; }
    .cstep { padding: 20px 16px; }
    .themes { grid-template-columns: 1fr 1fr; }
    .palette { gap: 8px; }
    .summary { padding: 24px 18px; }
}

@media (max-width: 420px) {
    .motif { flex-direction: column; align-items: flex-start; }
}

/* Lien vers la demande de devis (remplace l'ancien total) */
.stage__quote {
    padding: 8px 16px;
    border-radius: 999px;
    background: var(--plum);
    color: var(--white);
    font-size: .9rem;
    font-weight: 800;
    white-space: nowrap;
    transition: background .2s;
}
.stage__quote:hover { background: var(--plum-dark); }
