/*
 * TPMS (Αισθητήρες TPMS) storefront — linked by resources/views/front/tpms/index.blade.php
 * only. Every selector is scoped under .tpms-page; the admin screens have their own
 * sheet (public/css/tpms-admin.css), so the customer never downloads admin rules and
 * TpmsHardeningTest::test_every_css_rule_is_scoped_to_a_tpms_page still holds.
 *
 * WHERE THIS SHEET SITS IN THE CASCADE
 * The view links it from @section('meta'), which layouts/app.blade.php:13 yields into
 * <head> BEFORE front.css (:38) and custom.css (:40). It therefore wins by SPECIFICITY,
 * never by order: `.tpms-page .x` is (0,2,0) and outranks the single-class rules of both
 * sheets. Two site rules carry !important and need one back — each is marked below.
 *
 * WHY EVERY COLOUR IS SET AT ALL (v1.1)
 * The storefront's <main class="py-4"> is a dark gradient, #4B4B4B → #141313
 * (custom.css:380-388). front.css:6 sets body{color:#212529}. v1 set no colours, so every
 * heading, label and paragraph inherited #212529 onto that gradient — 1.24:1, i.e.
 * invisible. TPMS-DESIGN.md §6 has the full token table with the measured ratios.
 *
 * Tokens live on .tpms-page, not :root: the scoping contract allows no unscoped selector,
 * and nothing outside /tpms should inherit them. Every rule that carries the readability
 * fix declares the literal AND THEN the var(), so a browser without custom properties
 * (IE11) still gets the corrected colour instead of falling back to the #212529 this
 * sheet exists to remove.
 *
 * Plain CSS, no build step (the rims.css convention).
 */

/* ------------------------------------------------------------------ tokens */

.tpms-page {
    --tpms-text: #fff;                                  /* rims.css:13-19, custom.css:495 — 8.72:1 worst case */
    --tpms-muted: #c9c9c9;                              /* lightest-passing grey: 5.27:1 at the top of the gradient */
    --tpms-accent: #C90401;                             /* custom.css:73-75, :299-301, :366, :498 — edges and fills only */
    --tpms-surface: rgba(0, 0, 0, .3);                  /* .result-box, custom.css:482-496 */
    --tpms-surface-soft: rgba(255, 255, 255, .08);      /* .rim-spec, rims.css:261 — INSIDE a panel only (4.23:1 on the bare page) */
    --tpms-border: rgba(255, 255, 255, .18);            /* rims.css:259, :302, :396 */
    --tpms-border-strong: #707070;                      /* .side-bar-wrapper, custom.css:132 */
    --tpms-danger: #ffb3b3;                             /* Bootstrap #dc3545 is 1.93:1 here; this is 5.13:1 */
    --tpms-radius: 10px;                                /* custom.css:488 */
    --tpms-shadow: 0 1px 7px 1px rgba(0, 0, 0, .5);     /* custom.css:493 */

    /* v1.2. An OPAQUE surface for the one thing that floats over the page (the
       combobox listbox): the gradient's own end colour, custom.css:380-388.
       #fff on it is 18.1:1. A translucent dropdown over a translucent panel
       would show the field through it. */
    --tpms-overlay: #141313;

    /* v1.2. The accent as a WASH, never as text: a selected card's inner glow.
       #C90401 at 14% over the panel is a tint, not a colour anyone reads. */
    --tpms-accent-wash: rgba(201, 4, 1, .14);

    /* v1.2 spacing scale — 8px based, so every gap on the page is one of these
       seven numbers and nothing is eyeballed. Panel padding stays 20px (s5),
       which is what .result-box already uses (custom.css:486). */
    --tpms-s1: 4px;
    --tpms-s2: 8px;
    --tpms-s3: 12px;
    --tpms-s4: 16px;
    --tpms-s5: 20px;
    --tpms-s6: 24px;
    --tpms-s7: 32px;

    /* front.css:6 forces main.py-4 to padding:0 (it beats Bootstrap's own .py-4 utility
       with !important), so the page must bring its own — rims.css:13 does the same. */
    padding-top: 18px;
    padding-bottom: 2.5rem;
    color: #fff;
    color: var(--tpms-text);
}

/* --------------------------------------------------------------- typography */

.tpms-page h1 {
    margin: 0 0 .5rem;
    font-size: 2rem;
    font-weight: 700;
    line-height: 1.2;
    color: #fff;
    color: var(--tpms-text);
}

.tpms-page h2 {
    color: #fff;
    color: var(--tpms-text);
}

.tpms-page .tpms-intro {
    max-width: 46rem;
    margin-bottom: 1.25rem;
    font-size: 1.05rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* "Από X €" — the cheapest enabled package. v1 painted it #1a7f37 (1.72:1 and a green
   that appears nowhere else on the site); it is a secondary figure, so it is muted. */
.tpms-page .tpms-from {
    display: inline-block;
    margin-top: .4rem;
    font-size: 1.05rem;
    font-weight: 700;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

.tpms-page .tpms-note {
    font-size: .95rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

.tpms-page hr {
    margin: 1.5rem 0;
    border-top: 1px solid rgba(255, 255, 255, .18);
    border-top: 1px solid var(--tpms-border);
}

/* custom.css:299-301 is a{color:#C90401!important} — 1.45:1 on this page, and on the red
   .btn-primary (custom.css:73-75) it is red-on-red: the v1 CTA was an empty rectangle.
   rims.css answers the same rule seven times (:159, :168, :178, :228, :361, :460). */
.tpms-page a {
    color: #fff !important;
    color: var(--tpms-text) !important;
    text-decoration: underline;
}

.tpms-page a.btn {
    text-decoration: none;
}

/* ------------------------------------------------------------------ panels */

/* The site's panel recipe, not a white card: .result-box (custom.css:482-496) over the
   dark gradient, framed like .side-bar-wrapper (custom.css:129-135). */
.tpms-page .tpms-panel {
    margin-bottom: 20px;
    padding: 20px;
    background: rgba(0, 0, 0, .3);
    background: var(--tpms-surface);
    border: 1px solid #707070;
    border: 1px solid var(--tpms-border-strong);
    border-radius: 10px;
    border-radius: var(--tpms-radius);
    box-shadow: 0 1px 7px 1px rgba(0, 0, 0, .5);
    box-shadow: var(--tpms-shadow);
    color: #fff;
    color: var(--tpms-text);
    word-wrap: break-word;
    overflow-wrap: break-word;
}

/* A form laid out as a .row inside a 20px panel: the row's -15px margin plus the
   column's 15px padding puts the first control back on the panel's padding edge. */
.tpms-page .tpms-panel > .row {
    margin-bottom: 0;
}

.tpms-page .tpms-panel-title {
    margin-bottom: .85rem;
    color: #fff;
    color: var(--tpms-text);
}

/* The summary is the panel that matters, marked the way the site marks one:
   .widget{border-bottom:5px #c90101 solid} (custom.css:165-171) and
   .cart-footer{border-bottom:15px solid #C90401} (custom.css:408-417). A thin accent
   border was rejected — #C90401 against the panel is 2.08:1, under the 3:1 guideline. */
.tpms-page .tpms-summary {
    border-bottom: 5px solid #C90401;
    border-bottom: 5px solid var(--tpms-accent);

    /* v1.2: the card follows the selector down the page. 84px clears the
       .overheader.fixed-top, which is min-height:64px (custom.css:254-259),
       plus a 20px breath. Turned off below 992px in the media block at the
       foot of this sheet, where the two columns stack. */
    position: -webkit-sticky;
    position: sticky;
    top: 84px;
}

/* --------------------------------------------------------------- form fields */

.tpms-page .tpms-field {
    margin-bottom: 1rem;
}

/* One rule for every group heading on the page: the enquiry form's field labels,
   the label above a fallback control, and the <legend> of the two radio groups.
   The legend selector is a DESCENDANT one on purpose — the fieldset sits inside
   .tpms-enhanced, not directly inside .tpms-block. */
.tpms-page .tpms-field label,
.tpms-page .tpms-block > div > label,
.tpms-page .tpms-block fieldset > legend {
    display: block;
    margin-bottom: .3rem;
    padding: 0;
    font-size: 1rem;
    font-weight: 700;
    line-height: 1.3;
    color: #fff;
    color: var(--tpms-text);
}

.tpms-page .tpms-req {
    margin-left: 2px;
    color: #ffb3b3;
    color: var(--tpms-danger);
}

.tpms-page .tpms-required-note {
    margin: 0 0 1rem;
    font-size: .85rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

.tpms-page .tpms-help {
    display: block;
    margin-top: .3rem;
    font-size: .85rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* ------------------------------------------------- progressive layers (v1.2) */

/*
 * The selector panel is a price CALCULATOR: every amount comes from
 * POST /tpms/quote, so without JavaScript it cannot produce a number whatever it
 * looks like. v1.2 therefore ships both layers and lets the script pick one:
 *
 *   .tpms-fallback   the native, labelled controls — what a visitor without
 *                    JavaScript gets, and exactly what v1.1 shipped;
 *   .tpms-enhanced   the combobox, the cards and the segment bar — shown only
 *                    once public/js/tpms.js has put `tpms-js` on .tpms-page,
 *                    which it does at PARSE TIME (the script tag is the last
 *                    thing in <body>), so there is no flash of the fallback.
 *
 * The fallback controls never leave the DOM: with JavaScript they are the VALUE
 * HOLDERS the quote request reads (#tpms-brand, #tpms-category, #tpms-quantity).
 * That is why every existing `for="…"` assertion still points at a real control.
 */
.tpms-page .tpms-enhanced {
    display: none;
}

.tpms-page.tpms-js .tpms-enhanced {
    display: block;
}

.tpms-page.tpms-js .tpms-fallback {
    display: none;
}

/* One control group inside the selector panel. Deliberately NOT `.tpms-field`:
   that class is the enquiry form's grid cell and TpmsUiTest counts it. */
.tpms-page .tpms-block {
    margin-bottom: 20px;
    margin-bottom: var(--tpms-s5);
}

.tpms-page .tpms-block:last-child {
    margin-bottom: 0;
}

/* ------------------------------------------------------ brand combobox (v1.2) */

/* The listbox is absolutely positioned against this. */
.tpms-page .tpms-combo {
    position: relative;
}

.tpms-page .tpms-combo-list {
    position: absolute;
    z-index: 5;
    top: 100%;
    left: 0;
    right: 0;
    max-height: 17rem;
    margin: 4px 0 0;
    margin: var(--tpms-s1) 0 0;
    padding: 4px;
    padding: var(--tpms-s1);
    overflow-y: auto;
    list-style: none;
    background: #141313;
    background: var(--tpms-overlay);
    border: 1px solid rgba(255, 255, 255, .18);
    border: 1px solid var(--tpms-border);
    border-radius: 8px;
    box-shadow: 0 1px 7px 1px rgba(0, 0, 0, .5);
    box-shadow: var(--tpms-shadow);
}

.tpms-page .tpms-combo-option {
    min-height: 44px;                 /* the touch-target floor, everywhere on this page */
    padding: 11px 12px;
    border-radius: 6px;
    font-size: .95rem;
    line-height: 1.4;
    color: #fff;
    color: var(--tpms-text);
    cursor: pointer;
}

.tpms-page .tpms-combo-option + .tpms-combo-option {
    margin-top: 2px;
}

.tpms-page .tpms-combo-option:hover,
.tpms-page .tpms-combo-active {
    background: rgba(255, 255, 255, .08);
    background: var(--tpms-surface-soft);
}

/* The active row is marked with the accent as an EDGE. As text the accent is
   1.45:1 here, so it never paints a letter. */
.tpms-page .tpms-combo-active {
    box-shadow: inset 2px 0 0 0 #C90401;
    box-shadow: inset 2px 0 0 0 var(--tpms-accent);
}

/* <mark> is yellow-on-black by default, which would be the brightest thing on
   the page. The matched run is marked by WEIGHT instead. */
.tpms-page .tpms-combo-option mark {
    padding: 0;
    background: transparent;
    color: #fff;
    color: var(--tpms-text);
    font-weight: 700;
}

.tpms-page .tpms-combo-empty {
    margin: 8px 0 0;
    margin: var(--tpms-s2) 0 0;
    padding: 10px 12px;
    background: rgba(255, 255, 255, .08);
    background: var(--tpms-surface-soft);
    border: 1px solid rgba(255, 255, 255, .18);
    border: 1px solid var(--tpms-border);
    border-radius: 8px;
    font-size: .9rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* A link that is a <button>, because custom.css:299-301 paints every <a> red
   with !important and this one sits on a dark wash. */
.tpms-page .tpms-linkish {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    padding: 0 2px;
    background: none;
    border: 0;
    font: inherit;
    color: #fff;
    color: var(--tpms-text);
    text-decoration: underline;
    cursor: pointer;
}

/* Bootstrap's .form-control is calc(2.25rem + 2px) — about 38px. 44px is the
   floor every control on this page is held to. (0,2,1) keeps the textarea's own
   height below. */
.tpms-page .form-control {
    min-height: 44px;
}

.tpms-page textarea.form-control {
    min-height: 6rem;
}

/* front.css:6 paints .invalid-feedback #dc3545 — 1.93:1 against this page. Specificity
   alone wins here, so no !important. */
.tpms-page .invalid-feedback {
    font-size: .85rem;
    color: #ffb3b3;
    color: var(--tpms-danger);
}

/* ----------------------------------------------------- category cards (v1.2) */

/* A fieldset is the right grouping element for a radio set, and Bootstrap's
   `legend{width:100%}` is all it needs; the rest of the browser default has to
   go or the group draws a second frame inside the panel. */
.tpms-page .tpms-block fieldset {
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
}

/* 4-up on desktop, 2x2 everywhere else. Written as a max-width override of a
   4-up default on purpose: a min-width query at 1200 would trip TpmsUiTest's
   "no fixed pixel width" scan, which cannot tell a media query from a
   declaration and exempts only max-width. Every query in this sheet is
   therefore a max-width one. */
.tpms-page .tpms-cards {
    display: flex;
    flex-wrap: wrap;
    margin: 0 -4px;
    margin: 0 calc(-1 * var(--tpms-s1));
}

.tpms-page .tpms-card-slot {
    position: relative;
    flex: 0 0 25%;
    max-width: 25%;
    padding: 0 4px 8px;
    padding: 0 var(--tpms-s1) var(--tpms-s2);
}

/* The radio itself: off-screen but still focusable and still the thing the
   keyboard and the screen reader drive. Bootstrap's own .sr-only recipe. */
.tpms-page .tpms-card-input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.tpms-page .tpms-card {
    position: relative;
    display: block;
    height: 100%;
    margin: 0;
    padding: 14px 12px 12px;
    background: rgba(255, 255, 255, .08);
    background: var(--tpms-surface-soft);
    border: 1px solid rgba(255, 255, 255, .18);
    border: 1px solid var(--tpms-border);
    border-radius: 10px;
    border-radius: var(--tpms-radius);
    cursor: pointer;
    transition: border-color .18s ease, background-color .18s ease, box-shadow .18s ease;
}

.tpms-page .tpms-card:hover {
    border-color: rgba(255, 255, 255, .35);
}

/* SELECTED. The accent appears here and on the primary action, nowhere else:
   a 1px edge, a 14% wash and a soft inner glow. No accent text, ever — #C90401
   on this surface is 2.08:1. */
.tpms-page .tpms-card-input:checked + .tpms-card {
    background: rgba(201, 4, 1, .14);
    background: var(--tpms-accent-wash);
    border-color: #C90401;
    border-color: var(--tpms-accent);
    box-shadow: inset 0 0 22px 0 rgba(201, 4, 1, .18);
}

/* (0,3,0) beats the page-wide `.tpms-page input:focus` ring at (0,2,1): the
   ring has to land on the card, not on the 1px box the radio occupies. */
.tpms-page .tpms-card-input:focus {
    outline: none;
}

.tpms-page .tpms-card-input:focus + .tpms-card {
    outline: 3px solid #fff;
    outline: 3px solid var(--tpms-text);
    outline-offset: 2px;
}

.tpms-page .tpms-card-icon {
    display: block;
    margin-bottom: 8px;
    margin-bottom: var(--tpms-s2);
    color: #c9c9c9;
    color: var(--tpms-muted);
    transition: color .18s ease;
}

.tpms-page .tpms-card-svg {
    display: block;
    width: 48px;
    height: 28px;
}

.tpms-page .tpms-card-input:checked + .tpms-card .tpms-card-icon {
    color: #fff;
    color: var(--tpms-text);
}

.tpms-page .tpms-card-label {
    display: block;
    font-size: .95rem;
    font-weight: 700;
    line-height: 1.25;
    color: #fff;
    color: var(--tpms-text);
}

.tpms-page .tpms-card-help {
    display: block;
    margin-top: 4px;
    margin-top: var(--tpms-s1);
    font-size: .8rem;
    line-height: 1.35;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* The check is white inside a filled accent disc (5.9:1), because the accent
   as a stroke on the card would only reach 2.08:1. */
.tpms-page .tpms-card-check {
    position: absolute;
    top: 8px;
    right: 8px;
    display: block;
    width: 20px;
    height: 20px;
    padding: 3px;
    background: #C90401;
    background: var(--tpms-accent);
    border-radius: 50%;
    color: #fff;
    color: var(--tpms-text);
    opacity: 0;
    transform: scale(.75);
    transition: opacity .18s ease, transform .18s ease;
}

.tpms-page .tpms-card-check svg {
    display: block;
    width: 14px;
    height: 14px;
}

.tpms-page .tpms-card-input:checked + .tpms-card .tpms-card-check {
    opacity: 1;
    transform: none;
}

/* The fifth option is not a card: it is an escape hatch, and it buys an
   enquiry, not a price. */
.tpms-page .tpms-unsure-row {
    margin: 4px 0 10px;
    margin: var(--tpms-s1) 0 10px;
}

.tpms-page .tpms-unsure {
    font-size: .9rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* ------------------------------------------------- quantity segments (v1.2) */

.tpms-page .tpms-seg-row {
    display: flex;
    align-items: center;
}

.tpms-page .tpms-seg {
    position: relative;
    display: inline-flex;
    padding: 4px;
    padding: var(--tpms-s1);
    background: rgba(255, 255, 255, .08);
    background: var(--tpms-surface-soft);
    border: 1px solid rgba(255, 255, 255, .18);
    border: 1px solid var(--tpms-border);
    border-radius: 10px;
    border-radius: var(--tpms-radius);
}

/* Same off-screen-but-focusable radio as the cards. */
.tpms-page .tpms-seg-input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* 1px of margin either side gives 2px between segments and keeps the bar's own
   padding even — no flex `gap`, which older Safari ignores in a flex row. */
.tpms-page .tpms-seg-label {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 52px;
    min-height: 44px;
    margin: 0 1px;
    padding: 0 12px;
    border-radius: 7px;
    font-size: 1.05rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    color: #fff;
    color: var(--tpms-text);
    cursor: pointer;
    transition: background-color .18s ease, box-shadow .18s ease;
}

.tpms-page .tpms-seg-label:hover {
    background: rgba(255, 255, 255, .08);
    background: var(--tpms-surface-soft);
}

.tpms-page .tpms-seg-input:checked + .tpms-seg-label {
    background: rgba(201, 4, 1, .14);
    background: var(--tpms-accent-wash);
    box-shadow: inset 0 0 0 1px #C90401;
    box-shadow: inset 0 0 0 1px var(--tpms-accent);
}

.tpms-page .tpms-seg-input:focus {
    outline: none;
}

.tpms-page .tpms-seg-input:focus + .tpms-seg-label {
    outline: 3px solid #fff;
    outline: 3px solid var(--tpms-text);
    outline-offset: 2px;
}

.tpms-page .tpms-seg-caption {
    margin-left: 10px;
    font-size: .9rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* ------------------------------------------------------------ price + CTA */

.tpms-page .tpms-price-region {
    margin-top: 1rem;
    padding: 14px;
    background: rgba(255, 255, 255, .08);
    background: var(--tpms-surface-soft);
    border: 1px solid rgba(255, 255, 255, .18);
    border: 1px solid var(--tpms-border);
    border-radius: 6px;
}

.tpms-page .tpms-state {
    margin: 0;
    font-size: 1rem;
    color: #fff;
    color: var(--tpms-text);
}

.tpms-page .tpms-total {
    font-size: 2.6rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    letter-spacing: -.01em;
    line-height: 1.05;
    color: #fff;
    color: var(--tpms-text);
}

.tpms-page .tpms-per-package {
    font-size: 1rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

.tpms-page .tpms-selection {
    margin-top: .5rem;
    padding-top: .5rem;
    border-top: 1px solid rgba(255, 255, 255, .18);
    border-top: 1px solid var(--tpms-border);
    font-size: .9rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* ------------------------------------------------------- summary card (v1.2) */

/* The empty state: the cheapest enabled package, then what to do about it.
   `.tpms-from` keeps its muted colour from the rule above — it is a starting
   figure, not the answer — and only grows and goes tabular here. */
.tpms-page .tpms-price-region .tpms-from {
    display: block;
    margin: 0 0 2px;
    font-size: 1.6rem;
    font-variant-numeric: tabular-nums;
    line-height: 1.15;
}

.tpms-page .tpms-empty-note {
    display: block;
    font-size: .9rem;
    line-height: 1.4;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

.tpms-page .tpms-four-pack {
    margin-top: .4rem;
    font-size: .85rem;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* The crossfade. A transition, not an animation: @keyframes would contribute
   the unscoped selectors `from` and `to`, which the CSS scoping test rejects.
   tpms.js adds .tpms-fade-out, forces a reflow and removes it again, so the new
   amount comes up from 0 while the skeleton it replaces is already gone. */
.tpms-page .tpms-price-body {
    transition: opacity .24s ease, transform .24s ease;
}

.tpms-page .tpms-fade-out {
    opacity: 0;
    transform: translateY(6px);
}

/* Two quiet bars where the number and the per-package line will be. Static on
   purpose: a pulse needs @keyframes, and a spinner was ruled out. */
.tpms-page .tpms-skeleton-line {
    display: block;
    height: 2.6rem;
    margin-bottom: 8px;
    margin-bottom: var(--tpms-s2);
    background: rgba(255, 255, 255, .08);
    background: var(--tpms-surface-soft);
    border-radius: 6px;
}

.tpms-page .tpms-skeleton-short {
    height: 1rem;
    max-width: 55%;
    margin-bottom: 0;
}

/* 1 Επιλογή → 2 Ραντεβού → 3 Τοποθέτηση. The arrows are decoration and
   live in CSS, so a screen reader reads three list items, not three arrows. */
.tpms-page .tpms-steps {
    display: flex;
    margin: 16px 0 0;
    margin: var(--tpms-s4) 0 0;
    padding: 12px 0 0;
    padding: var(--tpms-s3) 0 0;
    border-top: 1px solid rgba(255, 255, 255, .18);
    border-top: 1px solid var(--tpms-border);
    list-style: none;
}

.tpms-page .tpms-step {
    display: flex;
    flex: 1 1 0;
    align-items: center;
    font-size: .78rem;
    line-height: 1.2;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

.tpms-page .tpms-step + .tpms-step::before {
    content: "\2192";
    margin: 0 6px 0 2px;
    color: rgba(255, 255, 255, .55);
}

.tpms-page .tpms-step-n {
    flex: 0 0 auto;
    display: inline-block;
    width: 20px;
    height: 20px;
    margin-right: 6px;
    border: 1px solid rgba(255, 255, 255, .18);
    border: 1px solid var(--tpms-border);
    border-radius: 50%;
    font-size: .72rem;
    font-weight: 700;
    line-height: 18px;
    text-align: center;
    color: #fff;
    color: var(--tpms-text);
}

/* ---------------------------------------------------- mobile price bar (v1.2) */

/* Off by default at every width. The media block at the foot of this sheet is
   the only place it is ever shown, and only with `tpms-bar-on`. */
.tpms-page .tpms-bar {
    display: none;
}

.tpms-page .tpms-bar-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.tpms-page .tpms-bar-price {
    font-size: 1.35rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: #fff;
    color: var(--tpms-text);
}

/* .tpms-cta .btn is full width; this one sits beside the price. */
.tpms-page .tpms-bar-cta {
    flex: 0 0 auto;
    margin-left: 12px;
    margin-left: var(--tpms-s3);
    padding: .55rem 1.1rem;
    font-weight: 700;
}


.tpms-page .tpms-cta {
    margin-top: 1.25rem;
}

.tpms-page .tpms-cta .btn {
    display: block;
    width: 100%;
    padding: .6rem 1rem;
    font-size: 1.05rem;
    font-weight: 700;
}

/* front.css:6 has .btn{border:0!important}, so a hover frame has to be a box-shadow —
   the same answer rims.css:58-60 gives. */
.tpms-page .btn-primary:hover,
.tpms-page .btn-primary:focus {
    box-shadow: inset 0 0 0 2px rgba(255, 255, 255, .75);
}

/* --------------------------------------------------- enquiry toggle (v1.2) */

.tpms-page .tpms-toggle-row {
    margin: 0 0 1rem;
}

/* A secondary action, so it is NOT .btn-primary: a second red button beside the
   summary CTA would give the page two primary actions. front.css:6 has
   .btn{border:0!important}, which is one more reason not to borrow that class —
   this button draws its own 1px frame. */
.tpms-page .tpms-enquiry-toggle {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    padding: 10px 18px;
    background: transparent;
    border: 1px solid rgba(255, 255, 255, .18);
    border: 1px solid var(--tpms-border);
    border-radius: 8px;
    font-size: 1rem;
    font-weight: 700;
    line-height: 1.2;
    color: #fff;
    color: var(--tpms-text);
    cursor: pointer;
    transition: background-color .18s ease, border-color .18s ease;
}

.tpms-page .tpms-enquiry-toggle:hover {
    background: rgba(255, 255, 255, .08);
    background: var(--tpms-surface-soft);
    border-color: rgba(255, 255, 255, .35);
}

.tpms-page .tpms-toggle-chevron {
    display: inline-block;
    margin-left: 8px;
    margin-left: var(--tpms-s2);
    transition: transform .18s ease;
}

.tpms-page .tpms-toggle-chevron svg {
    display: block;
    width: 16px;
    height: 16px;
}

.tpms-page .tpms-enquiry.tpms-open .tpms-toggle-chevron {
    transform: rotate(180deg);
}

/* --------------------------------------------------------------------- FAQ */

.tpms-page .tpms-faq-item {
    border-bottom: 1px solid rgba(255, 255, 255, .18);
    border-bottom: 1px solid var(--tpms-border);
}

.tpms-page .tpms-faq-item:last-child {
    border-bottom: 0;
}

/* The row has to be a 44px target, and the browser's own disclosure triangle
   has to go: the chevron on the right is the affordance. `list-style: none`
   does it in Firefox, the -webkit pseudo-element in Blink and Safari. */
.tpms-page .tpms-faq-q {
    display: flex;
    align-items: center;
    justify-content: space-between;
    min-height: 44px;
    padding: 12px 0;
    padding: var(--tpms-s3) 0;
    font-size: 1.02rem;
    font-weight: 700;
    line-height: 1.35;
    color: #fff;
    color: var(--tpms-text);
    list-style: none;
    cursor: pointer;
}

.tpms-page .tpms-faq-q::-webkit-details-marker {
    display: none;
}

.tpms-page .tpms-faq-mark {
    flex: 0 0 auto;
    margin-left: 12px;
    margin-left: var(--tpms-s3);
    color: #c9c9c9;
    color: var(--tpms-muted);
    transition: transform .18s ease;
}

.tpms-page .tpms-faq-mark svg {
    display: block;
    width: 16px;
    height: 16px;
}

.tpms-page .tpms-faq-item[open] .tpms-faq-mark {
    transform: rotate(180deg);
}

.tpms-page .tpms-faq-a {
    padding: 0 0 14px;
    font-size: .95rem;
    line-height: 1.6;
    color: #c9c9c9;
    color: var(--tpms-muted);
}

/* ------------------------------------------------------------------ states */

.tpms-page .tpms-hidden {
    display: none;
}

/* A white ring, offset so it lands on the dark panel rather than on the white field it
   surrounds. Bootstrap's .form-control:focus (0,2,0) is outranked by (0,2,1) here. */
.tpms-page a:focus,
.tpms-page button:focus,
.tpms-page input:focus,
.tpms-page select:focus,
.tpms-page textarea:focus {
    outline: 3px solid #fff;
    outline: 3px solid var(--tpms-text);
    outline-offset: 2px;
}

/* <summary> is focusable but is none of the five elements the ring above names,
   and it must not be the one control on the page you cannot see yourself on. */
.tpms-page summary:focus {
    outline: 3px solid #fff;
    outline: 3px solid var(--tpms-text);
    outline-offset: 2px;
}

/* ------------------------------------------------ load stagger + motion (v1.2) */

/*
 * ONE orchestrated reveal, 400ms end to end (180ms of delay + a 220ms
 * transition). Transitions, not @keyframes: see the note on the crossfade.
 *
 * The hidden state is gated on `tpms-js`, so a visitor without JavaScript never
 * has anything set to opacity:0 — the failure mode that would leave the page
 * blank. `tpms-ready` is added on the first frame after DOM ready, with a 300ms
 * timeout behind it because requestAnimationFrame does not fire in a background
 * tab.
 */
.tpms-page.tpms-js h1,
.tpms-page.tpms-js .tpms-intro,
.tpms-page.tpms-js .tpms-selector,
.tpms-page.tpms-js .tpms-summary,
.tpms-page.tpms-js .tpms-compat,
.tpms-page.tpms-js .tpms-enquiry,
.tpms-page.tpms-js .tpms-faq {
    opacity: 0;
    transform: translateY(10px);
    transition: opacity .22s ease-out, transform .22s ease-out;
}

.tpms-page.tpms-js .tpms-intro { transition-delay: .04s; }
.tpms-page.tpms-js .tpms-selector { transition-delay: .08s; }
.tpms-page.tpms-js .tpms-summary { transition-delay: .12s; }
.tpms-page.tpms-js .tpms-compat { transition-delay: .14s; }
.tpms-page.tpms-js .tpms-enquiry { transition-delay: .16s; }
.tpms-page.tpms-js .tpms-faq { transition-delay: .18s; }

/* Same specificity (0,3,0) as the block above, so order decides — this one is
   second on purpose. */
.tpms-page.tpms-ready h1,
.tpms-page.tpms-ready .tpms-intro,
.tpms-page.tpms-ready .tpms-selector,
.tpms-page.tpms-ready .tpms-summary,
.tpms-page.tpms-ready .tpms-compat,
.tpms-page.tpms-ready .tpms-enquiry,
.tpms-page.tpms-ready .tpms-faq {
    opacity: 1;
    transform: none;
}

/* Every moving thing on this page, in one place: the reveal, the card and
   segment transitions, the chevrons, the price crossfade and the skeleton. The
   states still change — they just arrive instead of travelling. */
@media (prefers-reduced-motion: reduce) {
    .tpms-page *,
    .tpms-page *::before,
    .tpms-page *::after {
        transition-duration: .001ms !important;
        transition-delay: 0s !important;
        animation-duration: .001ms !important;
        animation-delay: 0s !important;
    }
}

/* ------------------------------------------------------------------ widths */

/* Under the xl breakpoint the selector column is too narrow for four cards in a
   row, so the grid folds to the 2x2 the design calls for. */
@media (max-width: 1199px) {
    .tpms-page .tpms-card-slot {
        flex: 0 0 50%;
        max-width: 50%;
    }
}

/* < 992px: the selector and the summary stack, so the summary gets its own breathing
   room and the price stays the first thing under the selector. */
@media (max-width: 991px) {
    .tpms-page .tpms-total {
        font-size: 2.3rem;
    }

    /* The columns stack here, so there is nothing to stick to. */
    .tpms-page .tpms-summary {
        position: static;
        top: auto;
    }
}

/* Phones and small tablets: the fixed price bar. It appears only when tpms.js
   has seen a real quote AND the IntersectionObserver reports the summary card
   off screen — no observer, no bar. */
@media (max-width: 767px) {
    .tpms-page.tpms-bar-on .tpms-bar {
        display: block;
        position: fixed;
        z-index: 1030;
        right: 0;
        bottom: 0;
        left: 0;
        padding: 10px 12px;
        padding: 10px 12px calc(10px + env(safe-area-inset-bottom));
        background: #141313;
        background: var(--tpms-overlay);
        border-top: 1px solid rgba(255, 255, 255, .18);
        border-top: 1px solid var(--tpms-border);
        box-shadow: 0 -2px 12px rgba(0, 0, 0, .55);
    }

    /* Room for it, so it can never sit on top of «Αποστολή αιτήματος». */
    .tpms-page.tpms-bar-on {
        padding-bottom: 96px;
        padding-bottom: calc(96px + env(safe-area-inset-bottom));
    }
}

/* Phones down to 360px: nothing has a fixed width, so the only work is trimming the
   gutters and the display type so no line has to scroll sideways. */
@media (max-width: 575px) {
    .tpms-page {
        padding-top: 12px;
    }
    .tpms-page h1 {
        font-size: 1.5rem;
    }
    .tpms-page .tpms-intro {
        font-size: 1rem;
    }
    .tpms-page .tpms-panel {
        padding: 14px;
        margin-bottom: 14px;
    }
    .tpms-page .tpms-total {
        font-size: 2.1rem;
    }
    .tpms-page .tpms-price-region {
        padding: 12px;
    }

    /* Three labels across 360px would either wrap raggedly or push the card
       sideways; at this width the strip is a list, and the arrows go with it. */
    .tpms-page .tpms-steps {
        display: block;
    }

    .tpms-page .tpms-step {
        margin-bottom: 4px;
        margin-bottom: var(--tpms-s1);
    }

    .tpms-page .tpms-step + .tpms-step::before {
        display: none;
    }

    .tpms-page .tpms-card {
        padding: 12px 10px 10px;
    }

    .tpms-page .tpms-seg-label {
        min-width: 44px;
        padding: 0 8px;
    }
}
