/* ==========================================================================
   Acephal — extension sites (acephal.cloud, .app, .website, .pro), V2
   Page components shared by the four sites, on top of the acephal.fr design
   system (variables / base / components / sections / responsive / home /
   projet). Mobile-first. Colours only through the theme variables
   (--acephal-blue, --acephal-cyan, --accent-on-light): each site keeps its
   own accent through <html data-domain="…">.
   ========================================================================== */

/* ---- Long text --------------------------------------------------------- */
.prose {
    max-width: 46rem;
    color: var(--text-body);
    line-height: 1.7;
}

.prose > * + * {
    margin-top: var(--space-4);
}

.prose h2,
.prose h3 {
    margin-top: var(--space-6);
    color: var(--text-strong);
    line-height: 1.25;
}

.prose h2 { font-size: 1.4rem; }
.prose h3 { font-size: 1.15rem; }

.prose ul {
    padding-left: 1.25rem;
}

.prose li + li {
    margin-top: var(--space-2);
}

.prose a,
.card__text a,
.price-table a,
.notice a {
    color: var(--accent-on-light);
    font-weight: var(--weight-semibold);
    text-decoration: underline;
    text-underline-offset: 0.15em;
}

.section-head {
    max-width: 48rem;
    margin-bottom: var(--space-6);
}

/* ---- Cards (features, services, solutions) ------------------------------ */
.cards {
    display: grid;
    gap: var(--space-4);
    margin: 0;
    padding: 0;
    list-style: none;
}

.card {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    height: 100%;
    padding: var(--space-5);
    border: 1px solid var(--line-light);
    border-radius: var(--radius-panel);
    background: var(--surface-white);
    box-shadow: 0 14px 34px -28px color-mix(in srgb, var(--acephal-night) 60%, transparent);
}

.section--white .card {
    background: var(--surface-light);
}

.card__icon {
    display: inline-grid;
    place-items: center;
    width: 2.75rem;
    height: 2.75rem;
    border-radius: 12px;
    background: color-mix(in srgb, var(--accent-on-light) 12%, transparent);
    color: var(--accent-on-light);
}

.card__icon .icon {
    width: 1.35rem;
    height: 1.35rem;
}

.card__title {
    color: var(--text-strong);
    font-size: 1.1rem;
    font-weight: var(--weight-semibold);
    line-height: 1.3;
}

.card__text {
    color: var(--text-body);
    line-height: 1.6;
}

.card__list {
    display: grid;
    gap: var(--space-2);
    margin: 0;
    padding: 0;
    list-style: none;
    color: var(--text-body);
}

.card__list li {
    position: relative;
    padding-left: 1.4rem;
    line-height: 1.5;
}

.card__list li::before {
    content: "";
    position: absolute;
    top: 0.55em;
    left: 0.2rem;
    width: 0.45rem;
    height: 0.45rem;
    border-radius: 50%;
    background: var(--accent-on-light);
}

.card__link {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
    margin-top: auto;
    padding-top: var(--space-2);
    color: var(--accent-on-light);
    font-weight: var(--weight-semibold);
}

.card__link .icon {
    width: 1rem;
    height: 1rem;
    transition: transform var(--duration) var(--ease);
}

/* Whole card clickable when it has a link (as the eco-cards of acephal.eu): the link is
   stretched over the card, so screen readers still get one link per card. */
.card:has(.card__link) {
    position: relative;
    cursor: pointer;
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease), transform var(--duration) var(--ease);
}

.card__link::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
}

/* Other links of the card stay clickable above the stretched one. */
.card__text a {
    position: relative;
    z-index: 1;
}

.card:has(.card__link):hover {
    border-color: var(--accent-on-light);
    box-shadow: 0 18px 38px -24px color-mix(in srgb, var(--accent-on-light) 55%, transparent);
    transform: translateY(-2px);
}

.card:has(.card__link):hover .card__link .icon {
    transform: translateX(3px);
}

.card:has(.card__link:focus-visible) {
    box-shadow: var(--focus-ring);
}

@media (prefers-reduced-motion: reduce) {
    .card:has(.card__link),
    .card__link .icon {
        transition: none;
    }

    .card:has(.card__link):hover {
        transform: none;
    }
}

/* ---- Offer levels: Standard / Pro / Premium ------------------------------ */
.tiers {
    display: grid;
    gap: var(--space-4);
    margin: 0;
    padding: 0;
    list-style: none;
}

.tier {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    padding: var(--space-6) var(--space-5);
    border: 1px solid var(--line-light);
    border-top: 4px solid var(--accent-on-light);
    border-radius: var(--radius-panel);
    background: var(--surface-white);
    box-shadow: 0 14px 34px -26px color-mix(in srgb, var(--acephal-night) 60%, transparent);
}

.tier__level {
    color: var(--text-body);
    font-size: 0.75rem;
    font-weight: var(--weight-semibold);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}

.tier__name {
    color: var(--text-strong);
    font-size: 1.6rem;
    font-weight: var(--weight-bold);
    line-height: 1.1;
}

.tier__text {
    color: var(--text-body);
    line-height: 1.6;
}

.tier__price {
    margin-top: auto;
    padding-top: var(--space-3);
    border-top: 1px solid var(--line-light);
    color: var(--text-strong);
    font-weight: var(--weight-semibold);
}

/* "To be defined" badge: prices, options and details not decided yet. */
.tbd {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
    padding: 0.2rem 0.65rem;
    border: 1px dashed currentColor;
    border-radius: var(--radius-pill);
    color: var(--text-body);
    font-size: 0.75rem;
    font-weight: var(--weight-semibold);
    letter-spacing: 0.04em;
    white-space: nowrap;
}

/* ---- Single offer with its price (acephal.cloud) --------------------------
   TTC first (private customers), HT next to it (professionals). */
.offer {
    display: grid;
    gap: var(--space-6);
    padding: var(--space-6) var(--space-5);
    border: 1px solid var(--line-light);
    border-top: 4px solid var(--accent-on-light);
    border-radius: var(--radius-panel);
    background: var(--surface-white);
    box-shadow: 0 14px 34px -26px color-mix(in srgb, var(--acephal-night) 60%, transparent);
}

.section--white .offer {
    background: var(--surface-light);
}

.offer__label {
    color: var(--accent-on-light);
    font-size: 0.75rem;
    font-weight: var(--weight-semibold);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}

.offer__price {
    margin-top: var(--space-3);
    color: var(--text-strong);
    font-size: 1.05rem;
    font-weight: var(--weight-semibold);
}

.offer__price strong {
    font-size: clamp(2.4rem, 9vw, 3.2rem);
    font-weight: var(--weight-bold);
    line-height: 1;
    letter-spacing: -0.02em;
}

.offer__ht {
    margin-top: var(--space-2);
    color: var(--text-body);
}

.offer__terms {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    margin: var(--space-4) 0 0;
    padding: 0;
    list-style: none;
}

.offer__terms li {
    padding: 0.3rem 0.75rem;
    border-radius: var(--radius-pill);
    background: color-mix(in srgb, var(--accent-on-light) 10%, transparent);
    color: var(--text-strong);
    font-size: 0.85rem;
    font-weight: var(--weight-semibold);
}

.offer .actions {
    margin-top: var(--space-5);
}

.offer__title {
    margin-bottom: var(--space-3);
    color: var(--text-strong);
    font-size: 1.1rem;
    font-weight: var(--weight-semibold);
}

/* Ticked list: what is included. */
.check-list {
    display: grid;
    gap: var(--space-3);
    margin: 0;
    padding: 0;
    list-style: none;
    color: var(--text-body);
    line-height: 1.5;
}

.check-list li {
    position: relative;
    padding-left: 1.9rem;
}

.check-list li::before {
    content: "✓";
    position: absolute;
    top: 0;
    left: 0;
    display: grid;
    place-items: center;
    width: 1.3rem;
    height: 1.3rem;
    border-radius: 50%;
    background: color-mix(in srgb, var(--accent-on-light) 14%, transparent);
    color: var(--accent-on-light);
    font-size: 0.75rem;
    font-weight: var(--weight-bold);
}

.check-list strong {
    color: var(--text-strong);
}

/* Price list: options, HT and TTC. */
.price-table {
    width: 100%;
    border-collapse: collapse;
    border-radius: var(--radius-panel);
    overflow: hidden;
    background: var(--surface-white);
    box-shadow: 0 14px 34px -28px color-mix(in srgb, var(--acephal-night) 60%, transparent);
}

.section--white .price-table {
    background: var(--surface-light);
}

.price-table th,
.price-table td {
    padding: var(--space-3) var(--space-4);
    border-bottom: 1px solid var(--line-light);
    color: var(--text-body);
    line-height: 1.45;
    text-align: left;
    vertical-align: top;
}

.price-table thead th {
    background: var(--acephal-night);
    color: var(--acephal-white);
    font-size: 0.75rem;
    font-weight: var(--weight-semibold);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}

.price-table tbody th {
    color: var(--text-strong);
    font-weight: var(--weight-semibold);
}

.price-table td {
    white-space: nowrap;
}

.price-table td[colspan] {
    white-space: normal;
}

.price-table tbody tr:last-child > * {
    border-bottom: 0;
}

.price-table small {
    display: block;
    margin-top: 0.15rem;
    color: var(--text-body);
    font-size: 0.85rem;
    font-weight: var(--weight-regular);
}

@media (max-width: 479px) {
    .price-table th,
    .price-table td {
        padding: var(--space-3);
        font-size: 0.9rem;
    }
}

/* ---- "Level + options = final service" ---------------------------------- */
.equation {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--space-3);
    margin: var(--space-6) 0 0;
    padding: var(--space-5);
    border-radius: var(--radius-panel);
    background: var(--acephal-night);
    color: var(--acephal-white);
    list-style: none;
    text-align: center;
}

.equation__item {
    padding: 0.6rem 1.1rem;
    border: 1px solid color-mix(in srgb, var(--acephal-cyan) 55%, transparent);
    border-radius: var(--radius-pill);
    font-weight: var(--weight-semibold);
}

.equation__item--result {
    border-color: transparent;
    background: var(--acephal-blue);
}

.equation__op {
    color: var(--acephal-cyan);
    font-size: 1.4rem;
    font-weight: var(--weight-bold);
}

/* ---- The two ways to buy: project cycle / direct ------------------------ */
.cycles {
    display: grid;
    gap: var(--space-4);
}

.cycle {
    padding: var(--space-6) var(--space-5);
    border: 1px solid var(--line-light);
    border-radius: var(--radius-panel);
    background: var(--surface-white);
}

.section--white .cycle {
    background: var(--surface-light);
}

.cycle__tag {
    display: inline-block;
    margin-bottom: var(--space-3);
    color: var(--accent-on-light);
    font-size: 0.75rem;
    font-weight: var(--weight-semibold);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}

.cycle__title {
    color: var(--text-strong);
    font-size: 1.3rem;
    font-weight: var(--weight-bold);
    line-height: 1.25;
}

.cycle__text {
    margin-top: var(--space-3);
    color: var(--text-body);
    line-height: 1.6;
}

/* Process as chained pills: Dépôt › Analyse › … */
.flow {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    margin: var(--space-4) 0 0;
    padding: 0;
    list-style: none;
    counter-reset: flow;
}

.flow li {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    color: var(--text-strong);
    font-size: 0.9rem;
    font-weight: var(--weight-semibold);
}

.flow li span {
    padding: 0.35rem 0.8rem;
    border-radius: var(--radius-pill);
    background: color-mix(in srgb, var(--accent-on-light) 10%, transparent);
}

.flow li:not(:last-child)::after {
    content: "›";
    color: var(--accent-on-light);
    font-weight: var(--weight-bold);
}

.cycle .actions {
    margin-top: var(--space-5);
}

/* ---- Callouts ----------------------------------------------------------- */
.notice {
    display: flex;
    gap: var(--space-3);
    margin-top: var(--space-6);
    padding: var(--space-4) var(--space-5);
    border-left: 4px solid var(--accent-on-light);
    border-radius: 0 var(--radius-card) var(--radius-card) 0;
    background: color-mix(in srgb, var(--accent-on-light) 7%, var(--surface-white));
    color: var(--text-body);
    line-height: 1.6;
}

.notice > .icon {
    flex: none;
    width: 1.35rem;
    height: 1.35rem;
    margin-top: 0.15rem;
    color: var(--accent-on-light);
}

.notice strong {
    color: var(--text-strong);
}

/* Something not available yet. */
.notice--future {
    border-left-style: dashed;
}

/* ---- Two columns: text + aside ------------------------------------------ */
.split {
    display: grid;
    gap: var(--space-6);
}

.aside-box {
    align-self: start;
    padding: var(--space-5);
    border-radius: var(--radius-panel);
    background: var(--acephal-night);
    color: var(--acephal-gray);
    line-height: 1.6;
}

.aside-box__title {
    margin-bottom: var(--space-3);
    color: var(--acephal-white);
    font-size: 1.15rem;
    font-weight: var(--weight-semibold);
}

.aside-box__list {
    display: grid;
    gap: var(--space-3);
    margin: 0;
    padding-left: 1.25rem;
}

.aside-box__list li::marker {
    color: var(--acephal-cyan);
    font-weight: var(--weight-bold);
}

.aside-box .button {
    margin-top: var(--space-4);
}

/* ---- Request form (js/request.js) --------------------------------------- */
.request-layout {
    display: grid;
    gap: var(--space-6);
}

/* Level choices: one per line on phones (long words such as "fonctionnement"
   would otherwise push the two columns out of the card). */
.request-layout .choices {
    grid-template-columns: minmax(0, 1fr);
}

/* Short answers (Smartphone, Oui, budgets…): two columns even on phones. */
.request-layout .choices--short {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

@media (min-width: 560px) {
    .request-layout .choices {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

/* Long form split into lettered sections (.app request form, 2026-10-11). */
.form-section {
    display: grid;
    gap: var(--space-4);
    padding-top: var(--space-5);
    border-top: 1px solid var(--line-light);
}

.form-section:first-of-type {
    padding-top: 0;
    border-top: 0;
}

.form-section__title {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    font-size: 1.05rem;
    font-weight: var(--weight-bold);
    color: var(--text-strong);
}

.form-section__step {
    display: inline-grid;
    place-items: center;
    flex: none;
    width: 1.9rem;
    height: 1.9rem;
    border-radius: 8px;
    background: var(--info-bg);
    color: var(--accent-on-light);
    font-size: 0.85rem;
}

.choice-group .field__help {
    margin-top: -0.2rem;
}

/* Same look as the other fields (projet.css styles text, e-mail, select, textarea). */
.field input[type="date"] {
    width: 100%;
    max-width: 16rem;
    min-height: 44px;
    padding: 0.5rem 0.8rem;
    border: 1px solid var(--field-border);
    border-radius: 8px;
    background: var(--surface-white);
    color: var(--text-strong);
    font: inherit;
    font-size: 1rem;
}

.field.is-invalid input[type="date"] {
    border-color: var(--error);
}

/* ---- Breakpoints -------------------------------------------------------- */
@media (min-width: 720px) {
    .cards--2,
    .cards--3,
    .cards--4 {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .cycles {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (min-width: 1024px) {
    .cards--3,
    .tiers {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .cards--4 {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }

    .split {
        grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
        align-items: start;
    }

    .offer {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
        gap: var(--space-7);
        padding: var(--space-7);
    }

    .request-layout {
        grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr);
        align-items: start;
    }
}

/* ==========================================================================
   Showcase pages (acephal.website: site types, modules, method), after the
   brochure "Acephal, solutions web modernes": light page with diagonal accent
   shapes, device illustrations built in HTML/CSS, airy panels, step line.
   Colours only through the theme variables (accent of the site).
   ========================================================================== */

/* ---- Short tagline: "Présenter · Rassurer · Développer" ---- */
.pillars {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-1) var(--space-3);
    margin: 0;
    padding: 0;
    list-style: none;
    color: var(--accent-on-light);
    font-size: 0.78rem;
    font-weight: var(--weight-bold);
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.pillars li + li::before {
    content: "·";
    margin-right: var(--space-3);
}

.section-head .pillars {
    margin-bottom: var(--space-3);
}

/* ---- List with one icon per item ---- */
.icon-list {
    display: grid;
    gap: var(--space-3);
    margin: 0;
    padding: 0;
    list-style: none;
    color: var(--text-body);
    line-height: 1.45;
}

.icon-list li {
    display: flex;
    align-items: flex-start;
    gap: var(--space-3);
}

.icon-list .icon {
    flex: none;
    width: 1.15rem;
    height: 1.15rem;
    margin-top: 0.12em;
    color: var(--accent-on-light);
}

/* ---- Showcase section ---- */
.showcase {
    position: relative;
    z-index: 0;
    overflow: hidden;
    padding-block: var(--space-7) var(--space-8);
    background: linear-gradient(180deg, var(--surface-white) 0%, var(--surface-light) 100%);
}

/* Diagonal accent shapes (top right, bottom right), as on the brochure. */
.showcase::before,
.showcase::after {
    content: "";
    position: absolute;
    z-index: -1;
    right: 0;
    pointer-events: none;
}

.showcase::before {
    top: 0;
    width: 42vw;
    max-width: 30rem;
    height: 2.75rem;
    background: linear-gradient(140deg, var(--acephal-cyan) 0%, var(--accent-on-light) 55%, var(--acephal-night) 100%);
    clip-path: polygon(30% 0, 100% 0, 100% 100%);
}

.showcase::after {
    bottom: 0;
    width: 70vw;
    max-width: 44rem;
    height: 18rem;
    background: linear-gradient(200deg, color-mix(in srgb, var(--acephal-cyan) 38%, transparent), color-mix(in srgb, var(--accent-on-light) 8%, transparent));
    clip-path: polygon(100% 0, 100% 100%, 15% 100%);
}

/* Landscape in the bottom left corner (modules, method): room kept below the content. */
.showcase--scenery {
    padding-bottom: 11rem;
}

.showcase.showcase--scenery::before {
    height: 2.75rem;
}

.showcase__scenery {
    position: absolute;
    z-index: -1;
    left: 0;
    bottom: 0;
    width: 60vw;
    max-width: 30rem;
    height: 11rem;
    object-fit: cover;
    object-position: 70% 75%;
    clip-path: polygon(0 18%, 100% 100%, 0 100%);
    pointer-events: none;
}

.showcase__inner {
    display: grid;
    gap: var(--space-7);
    align-items: center;
}

.showcase__title {
    margin: var(--space-3) 0 var(--space-4);
    color: var(--text-strong);
    font-size: clamp(2.3rem, 7vw, 3.7rem);
    font-weight: var(--weight-bold);
    line-height: 1.05;
    letter-spacing: -0.02em;
}

.showcase__title span {
    color: var(--accent-on-light);
}

.showcase__lead {
    max-width: 32rem;
    margin: 0;
    color: var(--text-strong);
    font-size: clamp(1.1rem, 2.6vw, 1.3rem);
    line-height: 1.45;
}

.showcase__rule {
    display: block;
    width: 3rem;
    height: 3px;
    margin: var(--space-5) 0;
    border-radius: 3px;
    background: var(--acephal-cyan);
}

.showcase__desc {
    max-width: 34rem;
    margin: 0;
    color: var(--text-body);
    line-height: 1.65;
}

.showcase__visual {
    position: relative;
    min-width: 0;
}

/* Two airy panels: base and options. */
.feature-panels {
    display: grid;
    gap: var(--space-5);
    margin-top: var(--space-8);
}

.feature-panel {
    padding: var(--space-6) var(--space-5);
    border: 1px solid var(--line-light);
    border-radius: 20px;
    background: var(--surface-white);
    box-shadow: 0 26px 50px -38px color-mix(in srgb, var(--acephal-night) 55%, transparent);
}

.feature-panel__head {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    margin-bottom: var(--space-5);
}

.feature-panel__head .icon {
    flex: none;
    width: 2.1rem;
    height: 2.1rem;
    color: var(--accent-on-light);
}

.feature-panel__title {
    margin: 0;
    color: var(--text-strong);
    font-size: 1.15rem;
    font-weight: var(--weight-bold);
}

/* Closing words of the page, with its actions. */
.showcase__closing {
    display: grid;
    gap: var(--space-5);
    margin-top: var(--space-8);
}

.showcase__closing-title {
    margin: 0;
    color: var(--text-strong);
    font-size: clamp(1.35rem, 3.4vw, 1.75rem);
    font-weight: var(--weight-bold);
    line-height: 1.25;
}

.showcase__closing .showcase__rule {
    margin: var(--space-4) 0;
}

.showcase__closing p {
    margin: 0;
    color: var(--text-body);
}

.showcase__closing .actions {
    margin: 0;
}

/* ---- Devices (decorative, aria-hidden) ---- */
.devices {
    position: relative;
    max-width: 38rem;
    margin-inline: auto;
    padding-right: 12%;
    padding-bottom: 6%;
}

/* Laptop alone (no phone beside it). */
.devices--solo {
    padding: 0;
}

.laptop__screen {
    padding: 2.6%;
    border-radius: 14px 14px 0 0;
    background: var(--acephal-anthracite);
    box-shadow: 0 34px 60px -34px color-mix(in srgb, var(--acephal-night) 80%, transparent);
}

.laptop__base {
    position: relative;
    height: 0.85rem;
    margin-inline: -5%;
    border-radius: 0 0 14px 14px;
    background: linear-gradient(180deg, var(--acephal-gray), color-mix(in srgb, var(--acephal-gray) 60%, var(--acephal-text-muted)));
}

.laptop__base::before {
    content: "";
    position: absolute;
    top: 0;
    left: 42%;
    width: 16%;
    height: 40%;
    border-radius: 0 0 6px 6px;
    background: color-mix(in srgb, var(--acephal-gray) 55%, var(--acephal-text-muted));
}

.phone {
    position: absolute;
    right: 0;
    bottom: 0;
    width: 27%;
    padding: 2.2% 1.6%;
    border-radius: 1.3rem;
    background: var(--acephal-anthracite);
    box-shadow: 0 26px 46px -24px color-mix(in srgb, var(--acephal-night) 85%, transparent);
}

.phone .mock {
    aspect-ratio: 9 / 18;
    border-radius: 0.95rem;
}

/* Mock page inside a screen; sizes follow the screen width (container units). */
.mock {
    container-type: inline-size;
    position: relative;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    aspect-ratio: 16 / 10;
    border-radius: 4px;
    background: var(--surface-white);
    color: var(--text-strong);
    line-height: 1.2;
}

.mock__nav {
    display: flex;
    align-items: center;
    gap: 2cqi;
    padding: 2.4cqi 3.5cqi;
}

.mock__logo {
    width: 4.5cqi;
    height: auto;
}

.mock__brand {
    font-size: 2.6cqi;
    font-weight: var(--weight-bold);
}

.mock__links {
    display: flex;
    gap: 2.5cqi;
    margin-left: auto;
}

.mock__links span,
.mock__line {
    display: block;
    width: 8cqi;
    height: 1.2cqi;
    border-radius: 1cqi;
    background: var(--line-light);
}

.mock__nav .icon {
    width: 3.5cqi;
    height: 3.5cqi;
    color: var(--accent-on-light);
}

.mock__hero {
    position: relative;
    z-index: 0;
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    gap: 3cqi;
    padding: 4cqi 6cqi;
    color: var(--acephal-white);
}

.mock__bg {
    position: absolute;
    z-index: -1;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 75% 60%;
}

.mock__title {
    margin: 0;
    font-size: 5cqi;
    font-weight: var(--weight-bold);
    line-height: 1.15;
}

.mock__btn {
    display: inline-block;
    padding: 1.4cqi 3cqi;
    border-radius: 1cqi;
    background: var(--accent-on-light);
    color: var(--acephal-white);
    font-size: 2.1cqi;
    font-weight: var(--weight-semibold);
}

.mock__row {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 3cqi;
    padding: 3cqi 5cqi;
}

.mock__row span {
    display: block;
    height: 1.4cqi;
    border-radius: 1cqi;
    background: var(--line-light);
}

/* Phone version: bigger text, stacked blocks. */
.phone .mock__nav {
    padding: 6cqi 7cqi;
}

.phone .mock__logo {
    width: 12cqi;
}

.phone .mock__brand {
    font-size: 7cqi;
}

.phone .mock__nav .icon {
    width: 10cqi;
    height: 10cqi;
    margin-left: auto;
}

.phone .mock__hero {
    gap: 6cqi;
    padding: 8cqi;
}

.phone .mock__title {
    font-size: 11cqi;
}

.phone .mock__btn {
    padding: 3cqi 6cqi;
    border-radius: 2cqi;
    font-size: 6cqi;
}

.phone .mock__row {
    grid-template-columns: 1fr;
    gap: 4cqi;
    padding: 7cqi 8cqi;
}

.phone .mock__row span {
    height: 3cqi;
}

/* Shop: banner with products, product row. */
.mock__shop {
    flex: 1;
    display: grid;
    grid-template-columns: 1fr 1.2fr;
    align-items: center;
    margin: 0 3.5cqi;
    padding: 0 4cqi;
    border-radius: 2cqi;
    background: linear-gradient(120deg, var(--surface-light), color-mix(in srgb, var(--acephal-cyan) 22%, var(--surface-white)));
}

.mock__shop-text {
    display: grid;
    justify-items: start;
    gap: 3cqi;
}

.mock__shop-visual {
    display: flex;
    align-items: flex-end;
    justify-content: center;
    gap: 3cqi;
    height: 100%;
    padding-top: 4cqi;
}

.mock__product {
    width: 9cqi;
    height: 22cqi;
    border-radius: 3cqi 3cqi 1.2cqi 1.2cqi;
    background: linear-gradient(180deg, var(--accent-on-light), var(--acephal-night));
    box-shadow: 0 2cqi 3cqi -2cqi var(--acephal-night);
}

.mock__product:nth-child(2) {
    height: 28cqi;
    background: linear-gradient(180deg, var(--acephal-cyan), var(--accent-on-light));
}

.mock__product:nth-child(3) {
    height: 16cqi;
    border-radius: 1.2cqi;
    background: linear-gradient(180deg, var(--acephal-gray), color-mix(in srgb, var(--acephal-gray) 50%, var(--acephal-text-muted)));
}

.mock__products {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 2.5cqi;
    padding: 3cqi 3.5cqi;
}

.mock__products li {
    display: grid;
    gap: 1.2cqi;
}

.mock__thumb {
    display: block;
    aspect-ratio: 4 / 3;
    border-radius: 1.5cqi;
    background: var(--surface-light);
    border: 1px solid var(--line-light);
}

.mock__products .mock__line {
    width: 70%;
}

/* Business application: side menu, figures, calendar, list. */
.mock--app {
    flex-direction: row;
    background: var(--surface-light);
}

.mock__side {
    display: flex;
    flex-direction: column;
    gap: 2.4cqi;
    width: 20%;
    padding: 3cqi 2.4cqi;
    background: var(--acephal-night);
}

.mock__side .mock__logo {
    margin-bottom: 1.5cqi;
}

.mock__side-item {
    display: flex;
    align-items: center;
    gap: 1.5cqi;
    padding: 1.2cqi 1.4cqi;
    border-radius: 1cqi;
    color: var(--acephal-gray);
}

.mock__side-item.is-active {
    background: var(--accent-on-light);
    color: var(--acephal-white);
}

.mock__side-item .icon {
    flex: none;
    width: 2.6cqi;
    height: 2.6cqi;
}

.mock__side-item span {
    flex: 1;
    height: 1cqi;
    border-radius: 1cqi;
    background: currentColor;
    opacity: 0.55;
}

.mock__main {
    flex: 1;
    display: grid;
    grid-template-rows: auto auto 1fr;
    gap: 2.5cqi;
    padding: 3cqi;
}

.mock__h {
    margin: 0;
    font-size: 2.8cqi;
    font-weight: var(--weight-bold);
}

.mock__stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 2cqi;
}

.mock__stat,
.mock__card {
    border-radius: 1.5cqi;
    background: var(--surface-white);
    box-shadow: 0 1cqi 2cqi -1.5cqi color-mix(in srgb, var(--acephal-night) 40%, transparent);
}

.mock__stat {
    display: flex;
    align-items: flex-end;
    gap: 0.8cqi;
    height: 9cqi;
    padding: 1.8cqi;
}

.mock__stat span {
    flex: 1;
    border-radius: 0.5cqi 0.5cqi 0 0;
    background: color-mix(in srgb, var(--accent-on-light) 30%, transparent);
}

.mock__stat span:nth-child(1) { height: 35%; }
.mock__stat span:nth-child(2) { height: 60%; }
.mock__stat span:nth-child(3) { height: 45%; }
.mock__stat span:nth-child(4) { height: 85%; background: var(--accent-on-light); }

.mock__panels {
    display: grid;
    grid-template-columns: 1.3fr 1fr;
    gap: 2cqi;
}

.mock__card {
    padding: 2cqi;
}

.mock__cal {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 0.9cqi;
}

.mock__cal span {
    aspect-ratio: 1;
    border-radius: 0.6cqi;
    background: var(--surface-light);
}

.mock__cal span.is-on {
    background: var(--accent-on-light);
}

.mock__cal span.is-soft {
    background: color-mix(in srgb, var(--acephal-cyan) 45%, transparent);
}

.mock__list {
    display: grid;
    align-content: start;
    gap: 2cqi;
}

.mock__list span {
    display: flex;
    align-items: center;
    gap: 1.2cqi;
}

.mock__list span::before {
    content: "";
    flex: none;
    width: 2cqi;
    height: 2cqi;
    border-radius: 50%;
    background: color-mix(in srgb, var(--accent-on-light) 35%, transparent);
}

.mock__list span::after {
    content: "";
    flex: 1;
    height: 1cqi;
    border-radius: 1cqi;
    background: var(--line-light);
}

/* ---- Module tiles ---- */
.modules {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--space-3);
    margin: 0;
    padding: 0;
    list-style: none;
}

.module {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    min-height: 7rem;
    padding: var(--space-4) var(--space-2);
    border: 1px solid var(--line-light);
    border-radius: 14px;
    background: color-mix(in srgb, var(--surface-white) 88%, var(--acephal-cyan));
    box-shadow: 0 18px 34px -30px color-mix(in srgb, var(--acephal-night) 60%, transparent);
    color: var(--text-strong);
    font-size: 0.9rem;
    font-weight: var(--weight-semibold);
    line-height: 1.3;
    text-align: center;
}

.module .icon {
    width: 1.9rem;
    height: 1.9rem;
    color: var(--accent-on-light);
}

/* Full-width module grid (home page): 12 modules on 2 rows */
.modules--wide + .actions {
    margin-top: var(--space-6);
}

@media (min-width: 1024px) {
    .modules.modules--wide {
        grid-template-columns: repeat(6, minmax(0, 1fr));
    }
}

/* ---- Step line (method) ---- */
.timeline {
    position: relative;
    display: grid;
    gap: var(--space-6);
    margin: 0;
    padding: 0;
    list-style: none;
    isolation: isolate;
}

/* Vertical line on mobile, horizontal on large screens. */
.timeline::before {
    content: "";
    position: absolute;
    z-index: -1;
    top: 1rem;
    bottom: 1rem;
    left: 2.25rem;
    width: 2px;
    background: color-mix(in srgb, var(--accent-on-light) 30%, transparent);
}

.timeline__step {
    display: grid;
    align-content: start;
    grid-template-columns: 4.5rem minmax(0, 1fr);
    column-gap: var(--space-4);
    align-items: start;
}

.timeline__mark {
    position: relative;
    grid-row: span 2;
    display: grid;
    place-items: center;
    width: 4.5rem;
    height: 4.5rem;
    border-radius: 50%;
    background: color-mix(in srgb, var(--surface-white) 85%, var(--acephal-cyan));
    box-shadow: 0 0 0 6px var(--surface-white);
    color: var(--accent-on-light);
}

.timeline__mark .icon {
    width: 1.8rem;
    height: 1.8rem;
}

.timeline__num {
    position: absolute;
    top: -0.35rem;
    left: -0.35rem;
    display: grid;
    place-items: center;
    width: 1.75rem;
    height: 1.75rem;
    border-radius: 50%;
    background: var(--accent-on-light);
    color: var(--acephal-white);
    font-size: 0.85rem;
    font-weight: var(--weight-bold);
}

.timeline__title {
    margin: var(--space-2) 0 var(--space-1);
    color: var(--text-strong);
    font-size: 1.05rem;
    font-weight: var(--weight-bold);
    line-height: 1.3;
}

.timeline__text {
    margin: 0;
    color: var(--text-body);
    font-size: 0.92rem;
    line-height: 1.5;
}

/* Wide banner: human support (method). */
.assist {
    display: flex;
    align-items: center;
    gap: var(--space-4);
    margin-top: var(--space-7);
    padding: var(--space-5);
    border: 1px solid var(--line-light);
    border-radius: 20px;
    background: var(--surface-white);
    box-shadow: 0 26px 50px -38px color-mix(in srgb, var(--acephal-night) 55%, transparent);
    color: var(--text-body);
    text-decoration: none;
}

.assist__icon {
    flex: none;
    display: grid;
    place-items: center;
    width: 3.5rem;
    height: 3.5rem;
    border-radius: 50%;
    background: linear-gradient(140deg, var(--acephal-cyan), var(--accent-on-light) 60%, var(--acephal-night));
    color: var(--acephal-white);
}

.assist__icon .icon {
    width: 1.6rem;
    height: 1.6rem;
}

.assist__title {
    display: block;
    margin-bottom: var(--space-1);
    color: var(--accent-on-light);
    font-size: 1.1rem;
    font-weight: var(--weight-bold);
}

.assist__arrow {
    display: none;
    flex: none;
    width: 1.3rem;
    height: 1.3rem;
    margin-left: auto;
    color: var(--accent-on-light);
    transition: transform var(--duration) var(--ease);
}

.assist:hover .assist__arrow {
    transform: translateX(3px);
}

@media (min-width: 720px) {
    .showcase::before {
        height: 11rem;
    }

    .feature-panels {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .feature-panel {
        padding: var(--space-6);
    }

    .modules {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .showcase__scenery {
        height: 13rem;
    }

    .assist__arrow {
        display: block;
    }
}

@media (min-width: 1024px) {
    .showcase {
        padding-block: var(--space-8);
    }

    .showcase__inner {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
    }

    .showcase--scenery {
        padding-bottom: 12rem;
    }

    .showcase.showcase--scenery::before {
        height: 4.5rem;
    }

    .showcase__inner--wide .showcase__title {
        font-size: clamp(2.3rem, 3.6vw, 3.2rem);
    }

    .showcase__inner--wide {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1.8fr);
        align-items: start;
    }

    .showcase::before {
        height: 15rem;
    }

    .showcase__closing {
        grid-template-columns: minmax(0, 1fr) auto;
        align-items: end;
    }

    .modules {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }

    .timeline {
        grid-template-columns: repeat(5, minmax(0, 1fr));
        gap: var(--space-4);
    }

    .timeline::before {
        top: 3.25rem;
        bottom: auto;
        left: 10%;
        right: 10%;
        width: auto;
        height: 2px;
    }

    .timeline__step {
        grid-template-columns: 1fr;
        justify-items: center;
        text-align: center;
    }

    .timeline__mark {
        grid-row: auto;
        margin-top: 1rem;
    }

    .timeline__num {
        top: -1.1rem;
        left: 50%;
        transform: translateX(-50%);
    }

    .timeline__title {
        margin-top: var(--space-4);
    }
}

/* ---- Offer: composition diagram and level panels (acephal.website /offres/) ---- */
.compose {
    display: grid;
    gap: var(--space-2);
    margin: 0;
    padding: 0;
    list-style: none;
}

.compose__item {
    display: flex;
    align-items: center;
    gap: var(--space-4);
    padding: var(--space-4) var(--space-5);
    border: 1px solid var(--line-light);
    border-radius: 18px;
    background: var(--surface-white);
    box-shadow: 0 22px 44px -36px color-mix(in srgb, var(--acephal-night) 55%, transparent);
}

.compose__item--result {
    border-color: transparent;
    background: linear-gradient(140deg, var(--accent-on-light), var(--acephal-night));
    color: var(--acephal-white);
}

.compose__icon {
    flex: none;
    display: grid;
    place-items: center;
    width: 2.9rem;
    height: 2.9rem;
    border-radius: 50%;
    background: color-mix(in srgb, var(--surface-white) 85%, var(--acephal-cyan));
    color: var(--accent-on-light);
}

.compose__item--result .compose__icon {
    background: var(--acephal-cyan);
    color: var(--acephal-night);
}

.compose__icon .icon {
    width: 1.35rem;
    height: 1.35rem;
}

.compose__label {
    display: block;
    color: var(--text-strong);
    font-weight: var(--weight-bold);
}

.compose__value {
    display: block;
    color: var(--text-body);
    font-size: 0.92rem;
}

.compose__item--result .compose__label,
.compose__item--result .compose__value {
    color: var(--acephal-white);
}

.compose__op {
    justify-self: center;
    color: var(--accent-on-light);
    font-size: 1.4rem;
    font-weight: var(--weight-bold);
    line-height: 1;
}

.feature-panel__level {
    display: block;
    margin-top: 0.15rem;
    color: var(--accent-on-light);
    font-size: 0.72rem;
    font-weight: var(--weight-bold);
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.feature-panel__text {
    margin: 0 0 var(--space-4);
    color: var(--text-body);
}

.feature-panel__price {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2);
    margin: 0;
    padding-top: var(--space-4);
    border-top: 1px solid var(--line-light);
    color: var(--text-strong);
    font-weight: var(--weight-semibold);
}

.feature-panels--3 .feature-panel {
    display: flex;
    flex-direction: column;
}

.feature-panels--3 .feature-panel__price {
    margin-top: auto;
}

.feature-panels + .notice {
    margin-top: var(--space-5);
}

@media (min-width: 1024px) {
    .feature-panels--3 {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

/* ---- Site type cards (home of acephal.website): same layout as the ecosystem cards of
   acephal.eu (eco-card from components.css): visual with the title on the left and the
   tagline on the right, text, features on two columns, wide button, whole card clickable.
   The visual is the site landscape with a small device illustration. ---- */
.type-cards {
    display: grid;
    gap: var(--space-5);
    margin: 0 0 var(--space-6);
    padding: 0;
    list-style: none;
}

.type-cards .eco-card__media {
    aspect-ratio: 4 / 3;
}

.type-cards .eco-card__title {
    flex: none;
    white-space: nowrap;
}

.type-cards .eco-card__domain {
    font-size: 1.8rem;
}

.type-cards .eco-card__media > img {
    object-fit: cover;
    object-position: 80% 70%;
}

.type-cards li:nth-child(2) .eco-card__media > img {
    object-position: 45% 80%;
}

.type-cards li:nth-child(3) .eco-card__media > img {
    object-position: 10% 60%;
}

.type-cards .eco-card__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--space-3);
    padding: 1rem 1.25rem 0 1.5rem;
}

.type-cards .eco-card__subtitle {
    margin-top: 0.3rem;
    text-align: right;
}

.type-card__device {
    position: absolute;
    right: 1.5rem;
    bottom: 0.9rem;
    width: 54%;
    filter: drop-shadow(0 14px 18px color-mix(in srgb, var(--acephal-night-deep) 55%, transparent));
}

.type-card__device .laptop__screen {
    padding: 2.4%;
    border-radius: 8px 8px 0 0;
}

.type-card__device .laptop__base {
    height: 0.45rem;
    border-radius: 0 0 8px 8px;
}

/* The eco-card rule for its visual (".eco-card__media img") must not reach the small logo. */
.type-card__device .mock__logo {
    position: static;
    z-index: auto;
    width: 4.5cqi;
    height: auto;
}

.mock__fill {
    position: absolute;
    z-index: -1;
    inset: 0;
    background: linear-gradient(130deg, var(--acephal-night) 0%, var(--accent-on-light) 70%, var(--acephal-cyan) 130%);
}

.type-cards .eco-card__features {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.7rem var(--space-4);
    margin-block: 1.1rem 1.4rem;
}

.type-cards .eco-card__features li {
    gap: 0.6rem;
    font-size: 0.84rem;
    line-height: 1.3;
}

.type-cards .eco-card__features .icon {
    flex: none;
    width: 1.35rem;
    height: 1.35rem;
}

/* Whole card clickable (stretched link); no filter or transform on the link or its parents
   inside the card (see docs: the ::after would shrink to the button). */
.type-cards .eco-card {
    cursor: pointer;
}

.type-cards .eco-card__cta::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
}

.type-cards .eco-card:hover .eco-card__cta,
.type-cards .eco-card__cta:hover {
    filter: none;
    background: color-mix(in srgb, var(--button-bg, var(--acephal-blue)) 88%, var(--acephal-white));
    box-shadow: 0 10px 24px -10px var(--button-bg, var(--acephal-blue));
}

.type-cards .eco-card:hover .eco-card__cta .icon {
    transform: translateX(3px);
}

@media (min-width: 720px) {
    .type-cards {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .type-cards .eco-card__media {
        aspect-ratio: 16 / 10;
    }

    .type-cards .eco-card__domain {
        font-size: 2.1rem;
    }
}

@media (min-width: 1024px) {
    .type-cards {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}