/* Homepage entry point (BinakliyeGelsin -> Tedleyn Logistics Pro
   migration - see HOMEPAGE_ENTRY_POINT_MIGRATION_PLAN.md).

   Visual-only premium redesign. Every rule below is scoped under
   #tlp-quote-start so it cannot leak onto (or be affected by) any
   other plugin screen's shared .tlp-card/.tlp-btn/.tlp-form styles -
   this component now carries its own fully self-contained look.
   No behavior lives in this file; quote-start.js keeps targeting the
   same element IDs (tlp-quote-start, tlp-quote-start-form,
   tlp-quote-start-auth, tlp-quote-start-error, tlp-quote-pickup,
   tlp-quote-delivery, tlp-quote-start-submit, tlp-quote-start-back,
   tlp-quote-start-login, tlp-quote-start-register) untouched, and the
   Google Places Autocomplete binding (tlpInitQuoteStartMaps) attaches
   to the same two input elements regardless of the wrapper markup
   added here. */

#tlp-quote-start {
    --qs-radius-card: 18px;
    --qs-radius-control: 14px;
    --qs-border: #E6E8EC;
    --qs-border-hover: #CBCFD6;
    --qs-label: #667085;
    --qs-placeholder: #9AA1AC;
    --qs-shadow-card: 0 24px 60px -22px rgba(16, 42, 92, .32), 0 6px 16px -4px rgba(16, 42, 92, .08);
    --qs-shadow-btn: 0 10px 24px -10px rgba(0, 0, 0, .45);
    --qs-shadow-btn-hover: 0 16px 32px -12px rgba(0, 0, 0, .5);

    width: 100%;
    max-width: 440px;
    margin: 0 auto;
    box-sizing: border-box;
    background: var(--tlp-white);
    border-radius: var(--qs-radius-card);
    box-shadow: var(--qs-shadow-card);
    padding: 26px 24px 22px;
    font-family: var(--tlp-font);
}

#tlp-quote-start *,
#tlp-quote-start *::before,
#tlp-quote-start *::after {
    box-sizing: border-box;
}

@media (max-width: 480px) {
    #tlp-quote-start {
        max-width: 100%;
        padding: 18px 16px 16px;
        border-radius: 16px;
    }
}

#tlp-quote-start .tlp-quote-start-step + .tlp-quote-start-step {
    margin-top: var(--tlp-space-4, 16px);
}

/* Product-design polish (requirement #6: "every screen should feel
   simple, premium and trustworthy") — every step (form, price, OTP,
   auth-choice) eases in the instant its [hidden] attribute is removed,
   rather than snapping into view. Purely presentational, keyed off the
   same [hidden] toggling hideAllSteps()/showXStep() already does in
   quote-start.js — no script changes needed for this to apply
   everywhere a step becomes visible. */
@keyframes tlpQsStepIn {
    from { opacity: 0; transform: translateY(6px); }
    to { opacity: 1; transform: translateY(0); }
}

#tlp-quote-start .tlp-quote-start-step:not([hidden]) {
    animation: tlpQsStepIn .3s cubic-bezier(.2, .8, .2, 1);
}

@media (prefers-reduced-motion: reduce) {
    #tlp-quote-start .tlp-quote-start-step:not([hidden]) {
        animation: none;
    }
}

/* Error state - self-contained, no longer borrows the shared
   .tlp-alert look so this file has zero outside dependencies. */
#tlp-quote-start .tlp-quote-start-error {
    background: #FDECEA;
    color: var(--tlp-error, #C0392B);
    font-size: 13px;
    font-weight: 600;
    border-radius: 10px;
    padding: 11px 14px;
    margin-bottom: 20px;
}

/* Fields --------------------------------------------------------- */

#tlp-quote-start .tlp-quote-start-field {
    margin-bottom: 10px;
}

#tlp-quote-start .tlp-quote-start-field label {
    display: block;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .01em;
    color: var(--qs-label);
    margin-bottom: 5px;
}

#tlp-quote-start .tlp-quote-start-input {
    position: relative;
    display: flex;
    align-items: center;
}

#tlp-quote-start .tlp-quote-start-input-icon {
    position: absolute;
    left: 16px;
    display: inline-flex;
    color: #A6ACB6;
    pointer-events: none;
}

#tlp-quote-start .tlp-quote-start-input input[type="text"] {
    width: 100%;
    height: 46px;
    padding: 0 16px 0 44px;
    border: 1.5px solid var(--qs-border);
    border-radius: var(--qs-radius-control);
    background: var(--tlp-gray-50, #FAFAFA);
    color: var(--tlp-text, #101828);
    font-size: 15px;
    font-family: var(--tlp-font);
    line-height: normal;
    transition: border-color .15s ease, box-shadow .15s ease, background-color .15s ease;
}

#tlp-quote-start .tlp-quote-start-input input[type="text"]::placeholder {
    color: var(--qs-placeholder);
}

#tlp-quote-start .tlp-quote-start-input input[type="text"]:hover {
    border-color: var(--qs-border-hover);
}

#tlp-quote-start .tlp-quote-start-input input[type="text"]:focus {
    outline: none;
    background: var(--tlp-white);
    border-color: var(--tlp-yellow, #FFC400);
    box-shadow: 0 0 0 4px rgba(255, 196, 0, .18);
}

/* Mobile fix (2026-08-24): the base input styling two blocks up
   only ever matched input[type="text"] -- the quote-start-auth
   email step (input type="email") and the guest-estimate-gate OTP
   phone step (input type="tel") both fell through to the browser's
   unstyled default control width (~150px) instead of filling their
   card, unusable on a narrow phone viewport. Scoped to the same
   (max-width: 480px) breakpoint already used above so desktop's
   existing appearance for these two fields is left untouched. */
@media (max-width: 480px) {
    #tlp-quote-start .tlp-quote-start-input input[type="email"],
    #tlp-quote-start .tlp-quote-start-input input[type="tel"] {
        width: 100%;
        height: 46px;
        padding: 0 16px 0 44px;
        border: 1.5px solid var(--qs-border);
        border-radius: var(--qs-radius-control);
        background: var(--tlp-gray-50, #FAFAFA);
        color: var(--tlp-text, #101828);
        font-size: 15px;
        font-family: var(--tlp-font);
        line-height: normal;
        box-sizing: border-box;
    }

    #tlp-quote-start .tlp-quote-start-input input[type="email"]::placeholder,
    #tlp-quote-start .tlp-quote-start-input input[type="tel"]::placeholder {
        color: var(--qs-placeholder);
    }

    #tlp-quote-start .tlp-quote-start-input input[type="email"]:focus,
    #tlp-quote-start .tlp-quote-start-input input[type="tel"]:focus {
        outline: none;
        background: var(--tlp-white);
        border-color: var(--tlp-yellow, #FFC400);
        box-shadow: 0 0 0 4px rgba(255, 196, 0, .18);
    }
}
/* Submit button ---------------------------------------------------
   Slimmer, rounded, brand black/yellow, right-arrow that eases over
   on hover - deliberately a fresh, dedicated class rather than the
   shared .tlp-btn so this component's look never drifts if that
   shared class changes elsewhere, and vice versa. */

#tlp-quote-start .tlp-quote-start-submit {
    width: 100%;
    height: 48px;
    margin-top: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    background: var(--tlp-black, #000);
    color: var(--tlp-black-text, #FFC300);
    border: none;
    border-radius: var(--qs-radius-control);
    font-size: 15.5px;
    font-weight: 700;
    font-family: var(--tlp-font);
    cursor: pointer;
    box-shadow: var(--qs-shadow-btn);
    transition: background-color .18s ease, transform .18s ease, box-shadow .18s ease;
}

#tlp-quote-start .tlp-quote-start-submit:hover {
    background: var(--tlp-black-hover, #222);
    transform: translateY(-2px);
    box-shadow: var(--qs-shadow-btn-hover);
}

#tlp-quote-start .tlp-quote-start-submit:active {
    transform: translateY(0);
    box-shadow: var(--qs-shadow-btn);
}

#tlp-quote-start .tlp-quote-start-submit:focus-visible {
    outline: none;
    box-shadow: var(--qs-shadow-btn), 0 0 0 4px rgba(255, 196, 0, .35);
}

/* Single-Page Booking Flow: the primary CTA now starts disabled (see
   templates/customer/quote-start.php) and only enables once a real,
   current-matching priced estimate exists — never a spinner or a
   blocking overlay, just a calm, unmistakably "not yet" visual state. */
#tlp-quote-start .tlp-quote-start-submit:disabled {
    background: var(--tlp-gray-200, #E4E7EC);
    color: var(--qs-label, #667085);
    cursor: not-allowed;
    box-shadow: none;
    transform: none;
}

#tlp-quote-start .tlp-quote-start-submit:disabled:hover {
    background: var(--tlp-gray-200, #E4E7EC);
    transform: none;
    box-shadow: none;
}

#tlp-quote-start .tlp-quote-start-submit-arrow {
    transition: transform .18s ease;
}

#tlp-quote-start .tlp-quote-start-submit:hover .tlp-quote-start-submit-arrow {
    transform: translateX(4px);
}

/* Trust indicators -------------------------------------------------
   Subtle, small, centered under the button - never competes with the
   two address fields or the primary action for attention. */

#tlp-quote-start .tlp-quote-start-trust {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 6px 18px;
    margin: 10px 0 0;
    padding: 0;
}

#tlp-quote-start .tlp-quote-start-trust li {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 12px;
    font-weight: 500;
    color: var(--qs-label);
    white-space: nowrap;
}

#tlp-quote-start .tlp-quote-start-trust-icon {
    color: var(--tlp-success, #1E8E5A);
    flex-shrink: 0;
}

/* Auth-choice step --------------------------------------------------
   Reached only after "Teklif Al" is clicked while logged out; both
   actions keep identical styling and width - neither Log In nor
   Create Account is ever the visually "default" choice. */

#tlp-quote-start .tlp-quote-start-hint {
    font-size: 14px;
    line-height: 1.55;
    color: var(--tlp-text, #101828);
    text-align: center;
    margin: 0 0 22px;
}

#tlp-quote-start .tlp-quote-start-auth-actions {
    display: flex;
    gap: 12px;
}

#tlp-quote-start .tlp-quote-start-auth-btn {
    flex: 1 1 0;
    height: 52px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    background: var(--tlp-black, #000);
    color: var(--tlp-black-text, #FFC300);
    border-radius: var(--qs-radius-control);
    font-size: 14.5px;
    font-weight: 700;
    text-decoration: none;
    box-shadow: var(--qs-shadow-btn);
    transition: background-color .18s ease, transform .18s ease, box-shadow .18s ease;
}

#tlp-quote-start .tlp-quote-start-auth-btn:hover {
    background: var(--tlp-black-hover, #222);
    color: var(--tlp-black-text, #FFC300);
    transform: translateY(-2px);
    box-shadow: var(--qs-shadow-btn-hover);
}

#tlp-quote-start .tlp-quote-start-auth-btn:focus-visible {
    outline: none;
    box-shadow: var(--qs-shadow-btn), 0 0 0 4px rgba(255, 196, 0, .35);
}

@media (max-width: 380px) {
    #tlp-quote-start .tlp-quote-start-auth-actions {
        flex-direction: column;
    }
}

#tlp-quote-start .tlp-quote-start-back {
    display: block;
    margin: 18px auto 0;
    background: none;
    border: none;
    color: var(--qs-label);
    font-size: 13px;
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
    cursor: pointer;
    padding: 4px 8px;
}

#tlp-quote-start .tlp-quote-start-back:hover {
    color: var(--tlp-text, #101828);
}

/* Estimated-price step ------------------------------------------------
   Production Polish Sprint, Priority 1: reached after "Hesapla" is
   clicked and /public/quote-estimate returns a priced result. Reuses
   every existing token (--qs-*, --tlp-*) rather than introducing new
   ones, and reuses .tlp-quote-start-submit/-back as-is for its own
   buttons — only the price card itself is new markup. */

#tlp-quote-start .tlp-quote-start-price-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 2px;
    padding: 12px 14px 14px;
    margin-bottom: 12px;
    border-radius: 14px;
    background: var(--tlp-gray-50, #FAFAFA);
    border: 1px solid var(--qs-border, #E4E7EC);
}

#tlp-quote-start .tlp-quote-start-price-label {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .02em;
    text-transform: uppercase;
    color: var(--qs-label);
}

/* UI Polish pass (2026-08-15), fix #2: both the starting-from price
   and the live route price are now the brand's error/red token, per
   spec — every other visual token (family, weight, tabular-nums
   animation behavior) is unchanged. */
#tlp-quote-start .tlp-quote-start-price-amount {
    font-size: 24px;
    font-weight: 800;
    color: var(--tlp-error, #C0392B);
    line-height: 1.2;
    /* Single-Page Booking Flow: this figure now counts/rolls smoothly
       to each new value (quote-start.js's animatePriceTo()) rather than
       snapping — tabular-nums keeps every digit the same width during
       that animation so the text doesn't jitter/reflow frame to frame,
       the same reason a real odometer's digits are fixed-width. */
    font-variant-numeric: tabular-nums;
}

#tlp-quote-start .tlp-quote-start-price-meta {
    font-size: 12px;
    color: var(--qs-label);
}

/* Compact trip-info row (UI Polish pass, 2026-08-15, fix #3): now
   markup-ordered ABOVE the price (see quote-start.php) as a single
   tight horizontal strip — small inline icons (no circular badge),
   thin vertical dividers between the three stats instead of a full-
   width top border, minimal vertical footprint. */
#tlp-quote-start .tlp-quote-start-price-stats {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    gap: 0;
    margin-bottom: 8px;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--qs-border, #E4E7EC);
}

#tlp-quote-start .tlp-quote-start-price-stat {
    flex: 1 1 0;
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
    gap: 4px;
    min-width: 0;
    padding: 0 6px;
    position: relative;
}

#tlp-quote-start .tlp-quote-start-price-stat + .tlp-quote-start-price-stat {
    border-left: 1px solid var(--qs-border, #E4E7EC);
}

#tlp-quote-start .tlp-quote-start-price-stat-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: auto;
    height: auto;
    border-radius: 0;
    background: none;
    color: var(--qs-label, #6B7280);
    margin-bottom: 0;
}

#tlp-quote-start .tlp-quote-start-price-stat-icon svg {
    width: 12px;
    height: 12px;
}

#tlp-quote-start .tlp-quote-start-price-stat-value {
    font-size: 12px;
    font-weight: 700;
    color: var(--tlp-text, #101828);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}

/* Label text stays in the DOM for screen readers (the icon alone
   isn't a reliable category cue for everyone) but is visually
   collapsed — the compact row shows icon + value only. */
#tlp-quote-start .tlp-quote-start-price-stat-label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* "Use my current location" button (requirement #7) + address-
   confirmed feedback (requirement #2) — Booking Form UX Polish
   (2026-08-14). ------------------------------------------------- */

#tlp-quote-start #tlp-quote-pickup {
    padding-right: 44px;
}

#tlp-quote-start .tlp-quote-start-locate {
    position: absolute;
    right: 6px;
    top: 50%;
    transform: translateY(-50%);
    width: 34px;
    height: 34px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: none;
    border-radius: 999px;
    color: #8B929D;
    cursor: pointer;
    transition: background-color .15s ease, color .15s ease;
}

#tlp-quote-start .tlp-quote-start-locate:hover,
#tlp-quote-start .tlp-quote-start-locate:focus-visible {
    background: rgba(255, 196, 0, .16);
    color: var(--tlp-text, #101828);
    outline: none;
}

#tlp-quote-start .tlp-quote-start-locate.is-locating {
    color: var(--tlp-yellow, #FFC400);
    animation: tlpQsLocatePulse 1s ease-in-out infinite;
}

@keyframes tlpQsLocatePulse {
    0%, 100% { opacity: 1; }
    50% { opacity: .35; }
}

/* Brief, unmistakable confirmation the instant a Places suggestion (or
   "use my location") resolves — toggled by quote-start.js adding/
   removing .is-address-confirmed on the field wrapper for under a
   second. Reuses the input's own existing border-color/box-shadow
   transition (see the base input rule above), so the flash eases back
   out on its own with no extra animation needed. */
#tlp-quote-start .tlp-quote-start-input.is-address-confirmed input[type="text"] {
    border-color: var(--tlp-success, #1E8E5A);
    box-shadow: 0 0 0 4px rgba(30, 142, 90, .14);
}

#tlp-quote-start .tlp-quote-start-input-icon {
    transition: color .2s ease;
}

#tlp-quote-start .tlp-quote-start-input.is-address-confirmed .tlp-quote-start-input-icon {
    color: var(--tlp-success, #1E8E5A);
}

/* Address swap control (QMove-interaction pass, 2026-08-15) ---------
   Sits between the two .tlp-quote-start-field blocks, which are
   position:relative in normal flow — this button overlaps their shared
   edge without disturbing either field's own layout. */
#tlp-quote-start .tlp-quote-start-swap {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    margin: -6px 0 -6px auto;
    border-radius: 999px;
    border: 1.5px solid var(--qs-border, #E4E7EC);
    background: var(--tlp-white, #fff);
    color: var(--tlp-text, #101828);
    cursor: pointer;
    position: relative;
    z-index: 1;
    transition: border-color .15s ease, transform .15s ease, background-color .15s ease;
}

#tlp-quote-start .tlp-quote-start-swap:hover {
    border-color: var(--tlp-yellow, #FFC400);
}

#tlp-quote-start .tlp-quote-start-swap:active {
    transform: rotate(180deg);
}

#tlp-quote-start .tlp-quote-start-swap:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px rgba(255, 196, 0, .4);
}

/* Geçiş Noktası — intermediate stops (QMove-interaction pass) -------
   Each row reuses the exact same input/icon shape as
   .tlp-quote-start-field so a stop never reads as a lesser-class
   field, just a numbered, removable one. */
#tlp-quote-start .tlp-quote-start-waypoints:not(:empty) {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-top: 4px;
}

#tlp-quote-start .tlp-quote-start-waypoint-row {
    display: flex;
    align-items: center;
    gap: 8px;
}

#tlp-quote-start .tlp-quote-start-waypoint-badge {
    flex: 0 0 auto;
    width: 22px;
    height: 22px;
    border-radius: 999px;
    background: var(--tlp-gray-200, #E4E7EC);
    color: var(--tlp-text, #101828);
    font-size: 11px;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
}

#tlp-quote-start .tlp-quote-start-waypoint-row .tlp-quote-start-input {
    flex: 1 1 auto;
}

#tlp-quote-start .tlp-quote-start-waypoint-remove {
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    border: 1.5px solid var(--qs-border, #E4E7EC);
    background: var(--tlp-white, #fff);
    color: var(--tlp-error, #C0392B);
    cursor: pointer;
}

#tlp-quote-start .tlp-quote-start-waypoint-remove:hover {
    border-color: var(--tlp-error, #C0392B);
}

#tlp-quote-start .tlp-quote-start-add-waypoint {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 6px;
    padding: 6px 10px;
    border-radius: 10px;
    border: 1.5px dashed var(--qs-border, #E4E7EC);
    background: transparent;
    color: var(--tlp-text, #101828);
    font-family: var(--tlp-font);
    font-size: 12.5px;
    font-weight: 600;
    cursor: pointer;
    transition: border-color .15s ease, color .15s ease;
}

#tlp-quote-start .tlp-quote-start-add-waypoint:hover {
    border-color: var(--tlp-yellow, #FFC400);
    color: var(--tlp-yellow, #FFC400);
}

/* Vehicle selector (QMove-interaction pass, 2026-08-15) -------------
   Reproduces the interaction observed in the supplied QMove reference
   video: a row of compact horizontal TEXT TABS (an underline on the
   active one) above a single large selected-vehicle illustration, with
   the immediate neighbors peeking in at both edges. Own BinakliyeGelsin
   artwork/colors throughout — QMove's card-carousel styling and
   artwork are not reused anywhere in this block. */

#tlp-quote-start .tlp-quote-start-vehicles {
    margin-top: 10px;
}

#tlp-quote-start .tlp-quote-start-vehicle-tabs {
    display: flex;
    gap: 2px;
    overflow-x: auto;
    scrollbar-width: none;
    padding-bottom: 2px;
    border-bottom: 1.5px solid var(--qs-border, #E4E7EC);
}

#tlp-quote-start .tlp-quote-start-vehicle-tabs::-webkit-scrollbar {
    display: none;
}

#tlp-quote-start .tlp-qs-vehicle-tab {
    flex: 0 0 auto;
    background: transparent;
    border: none;
    padding: 6px 8px 7px;
    font-family: var(--tlp-font);
    font-size: 12.5px;
    font-weight: 600;
    color: var(--qs-label, #6B7280);
    cursor: pointer;
    position: relative;
    white-space: nowrap;
}

#tlp-quote-start .tlp-qs-vehicle-tab::after {
    content: '';
    position: absolute;
    left: 8px;
    right: 8px;
    bottom: -1.5px;
    height: 2.5px;
    border-radius: 999px;
    background: transparent;
    transition: background-color .15s ease;
}

#tlp-quote-start .tlp-qs-vehicle-tab.is-active {
    color: var(--tlp-text, #101828);
}

#tlp-quote-start .tlp-qs-vehicle-tab.is-active::after {
    background: var(--tlp-yellow, #FFC400);
}

#tlp-quote-start .tlp-qs-vehicle-tab:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px rgba(255, 196, 0, .4);
    border-radius: 6px;
}

/* The stage: one large centered illustration per vehicle, with the
   previous/next vehicle's own illustration peeking in at both edges —
   each "slide" is narrower than the track's viewport on purpose so the
   neighbors are always partially visible, communicating horizontal
   navigation the same way the reference video's stage does. Native
   scroll-snap drives BOTH tap-a-tab (scrollIntoView) and swipe — see
   quote-start.js's scroll listener that detects which slide is nearest
   center and syncs the tab/selection to it, so a swipe alone (no tap)
   correctly changes the selected vehicle, matching the reference
   video's interaction. */
#tlp-quote-start .tlp-quote-start-vehicle-stage {
    margin-top: 2px;
    overflow: hidden;
}

#tlp-quote-start .tlp-quote-start-vehicle-stage-track {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-behavior: smooth;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
}

#tlp-quote-start .tlp-quote-start-vehicle-stage-track::-webkit-scrollbar {
    display: none;
}

/* UI Polish pass (2026-08-15), fix #4: narrower slides (~46% instead
   of 76%) so roughly two vehicles are recognizable at once on a
   mobile-width viewport, per spec — still QMove-style scroll-snap
   horizontal navigation, still one clearly emphasized active vehicle,
   just a smaller stage/illustration footprint. The 440px card max-
   width means this same percentage already keeps 2 comfortably
   visible on desktop too. */
#tlp-quote-start .tlp-qs-vehicle-slide {
    flex: 0 0 46%;
    scroll-snap-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 4px 2%;
    opacity: .35;
    transform: scale(.9);
    transition: opacity .2s ease, transform .2s ease;
}

#tlp-quote-start .tlp-qs-vehicle-stage-edge-spacer {
    flex: 0 0 0;
    scroll-snap-align: none;
}

#tlp-quote-start .tlp-qs-vehicle-slide.is-active {
    opacity: 1;
    transform: scale(1);
}

#tlp-quote-start .tlp-qs-vehicle-slide-media {
    width: 100%;
    max-width: 118px;
    height: 62px;
    display: flex;
    align-items: center;
    justify-content: center;
}

#tlp-quote-start .tlp-qs-vehicle-slide-media img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

#tlp-quote-start .tlp-qs-vehicle-slide .tlp-vehicle-image-fallback {
    color: #9AA1AC;
    display: inline-flex;
    width: 48px;
    height: 30px;
}

/* Real capacity/spec line (only real, admin-entered data — never
   invented; see quote-start.js's renderVehicleDetails()). */
#tlp-quote-start .tlp-quote-start-vehicle-details {
    text-align: center;
    font-size: 12px;
    line-height: 1.3;
    color: var(--qs-label, #6B7280);
    min-height: 0;
    margin-top: 2px;
}

#tlp-quote-start .tlp-quote-start-vehicle-details:empty {
    display: none;
}

/* Compact trip bar (Homepage Form Completion pass, 2026-08-16) —
   replaces the old large "Tahmini Fiyat" card + separate "…'den
   başlayan" block with ONE thin horizontal row: Mesafe | Fiyat | Süre.
   #tlp-quote-start-price-card keeps its id (quote-start.js's existing
   priceCardEl/is-updating wiring), only its class/look changed — the
   confirm step's OWN price card below still uses the older
   .tlp-quote-start-price-card CLASS untouched, so none of these new
   rules affect it. */
#tlp-quote-start .tlp-quote-start-tripbar {
    display: flex;
    align-items: center;
    gap: 4px;
    padding: 8px 6px;
    margin-bottom: 8px;
    border-radius: 12px;
    background: var(--tlp-gray-50, #FAFAFA);
    border: 1px solid var(--qs-border, #E4E7EC);
}

#tlp-quote-start .tlp-quote-start-tripbar-cell {
    flex: 1 1 0;
    min-width: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 1px;
}

#tlp-quote-start .tlp-quote-start-tripbar-value {
    font-size: 12.5px;
    font-weight: 700;
    color: var(--tlp-text, #101828);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}

#tlp-quote-start .tlp-quote-start-tripbar-label {
    font-size: 9.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: var(--qs-label, #6B7280);
}

/* The price cell is the strongest element in the row — larger, bold,
   red, with its own vertical divider on both sides so it reads as the
   headline even though the row itself is compact. */
#tlp-quote-start .tlp-quote-start-tripbar-price-cell {
    flex: 1.4 1 0;
    padding: 0 6px;
    border-left: 1px solid var(--qs-border, #E4E7EC);
    border-right: 1px solid var(--qs-border, #E4E7EC);
}

#tlp-quote-start .tlp-quote-start-tripbar-price {
    font-size: 20px;
    font-weight: 800;
    color: var(--tlp-error, #C0392B);
    line-height: 1.15;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

#tlp-quote-start .tlp-quote-start-tripbar-price-suffix {
    font-size: 10.5px;
    font-weight: 600;
    color: var(--tlp-error, #C0392B);
    opacity: .8;
}

/* Live re-price state: dims the figure briefly while a live-estimate
   call is in flight — triggered by an address change OR a vehicle tap,
   since the Single-Page Booking Flow recalculates automatically on
   either — so a network round trip, however fast, never reads as a
   frozen/unresponsive number. Deliberately just a dim, not a spinner
   or overlay — "a subtle loading state," per spec, not a blocking one;
   the customer can keep adjusting inputs while this shows. */
#tlp-quote-start .tlp-quote-start-tripbar.is-updating .tlp-quote-start-tripbar-price,
#tlp-quote-start .tlp-quote-start-tripbar.is-updating .tlp-quote-start-tripbar-value {
    opacity: .4;
    transition: opacity .12s ease;
}

/* Confirm-step price card keeps the pre-existing dim behavior too. */
#tlp-quote-start .tlp-quote-start-price-card.is-updating .tlp-quote-start-price-amount,
#tlp-quote-start .tlp-quote-start-price-card.is-updating .tlp-quote-start-price-stat-value {
    opacity: .4;
    transition: opacity .12s ease;
}

/* "Devam Et" + trust badges (Homepage Form Completion pass): moved out
   of #tlp-quote-start-form into their own sibling wrapper so the map
   can sit between the price row and this button — see
   quote-start.php/quote-start.js for why. Visually identical spacing
   to when the button lived inside the form. */
#tlp-quote-start .tlp-quote-start-form-actions {
    margin-top: 0;
}

/* Confirmation/summary step (Single-Page Booking Flow) --------------
   Read-only echo of what the first page already priced: origin,
   destination, and the chosen vehicle (image + name, no selector).
   Reuses .tlp-quote-start-price-card verbatim for the final price —
   no new price styling needed, only this small summary block above
   it. */

#tlp-quote-start .tlp-quote-start-confirm-route {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-bottom: 16px;
}

#tlp-quote-start .tlp-quote-start-confirm-row {
    display: flex;
    align-items: flex-start;
    gap: 10px;
}

/* Read-only Geçiş Noktası echo (QMove-interaction pass) — same row
   shape as .tlp-quote-start-confirm-row, numbered badge instead of a
   pin icon so stops read visually distinct from origin/destination. */
#tlp-quote-start .tlp-quote-start-confirm-waypoints:not(:empty) {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin: -2px 0 2px;
}

#tlp-quote-start .tlp-quote-start-confirm-waypoint-row {
    display: flex;
    align-items: flex-start;
    gap: 10px;
}

#tlp-quote-start .tlp-quote-start-confirm-waypoint-badge {
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    border-radius: 999px;
    background: var(--tlp-gray-200, #E4E7EC);
    color: var(--tlp-text, #101828);
    font-size: 12px;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-top: 1px;
}

#tlp-quote-start .tlp-quote-start-confirm-row-icon {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 999px;
    background: rgba(255, 196, 0, .16);
    color: var(--tlp-text, #101828);
    margin-top: 1px;
}

#tlp-quote-start .tlp-quote-start-confirm-row-text {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

#tlp-quote-start .tlp-quote-start-confirm-row-label {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: var(--qs-label);
}

#tlp-quote-start .tlp-quote-start-confirm-row-value {
    font-size: 14px;
    font-weight: 600;
    color: var(--tlp-text, #101828);
    line-height: 1.35;
    word-break: break-word;
}

#tlp-quote-start .tlp-quote-start-confirm-vehicle {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    margin-bottom: 16px;
    border-radius: 14px;
    background: var(--tlp-gray-50, #FAFAFA);
    border: 1px solid var(--qs-border, #E4E7EC);
}

#tlp-quote-start .tlp-quote-start-confirm-vehicle-media {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 40px;
    border-radius: 10px;
    background: var(--tlp-white, #fff);
    border: 1px solid var(--qs-border, #E4E7EC);
    color: var(--tlp-text, #101828);
    overflow: hidden;
}

#tlp-quote-start .tlp-quote-start-confirm-vehicle-media img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

#tlp-quote-start .tlp-quote-start-confirm-vehicle-media .tlp-vehicle-image-fallback {
    width: 28px;
    height: 18px;
}

#tlp-quote-start .tlp-quote-start-confirm-vehicle-name {
    font-size: 14.5px;
    font-weight: 700;
    color: var(--tlp-text, #101828);
}

/* Route preview map — Customer Experience Redesign (QMove-benchmark
   sprint). A persistent element, sibling to both the form and price
   steps (see templates/customer/quote-start.php), never recreated —
   assets/js/quote-start.js reveals it and drops the first marker the
   instant an address is selected, well before "Hesapla" is clicked.
   Stays [hidden] (zero footprint, no layout gap) until that first
   selection, then fades/grows in via .is-visible rather than just
   popping into place. */
#tlp-quote-start .tlp-quote-start-map {
    position: relative;
    width: 100%;
    height: 0;
    margin-bottom: 0;
    border-radius: 14px;
    border: 0 solid var(--qs-border, #E4E7EC);
    overflow: hidden;
    background: var(--tlp-gray-50, #FAFAFA);
    opacity: 0;
    transition: height .32s cubic-bezier(.2, .8, .2, 1), opacity .28s ease, margin-bottom .32s ease, border-width .32s ease;
}

#tlp-quote-start .tlp-quote-start-map:not([hidden]) {
    height: 150px;
    margin-bottom: 12px;
    border-width: 1px;
}

#tlp-quote-start .tlp-quote-start-map.is-visible {
    opacity: 1;
}

/* Live status pill ("Rota hesaplanıyor…") shown while the background
   prefetch is in flight — overlaid on the map itself rather than
   shifting any layout, so its appearance/disappearance never causes
   the surrounding card to reflow. */
#tlp-quote-start .tlp-quote-start-map-status {
    position: absolute;
    left: 10px;
    top: 10px;
    z-index: 2;
    background: rgba(16, 24, 40, .82);
    color: #fff;
    font-size: 11.5px;
    font-weight: 600;
    letter-spacing: .01em;
    padding: 6px 11px;
    border-radius: 999px;
    pointer-events: none;
    transition: opacity .2s ease;
}

/* Defensive: some page/theme stacking contexts on this site carry a
   very high z-index (sticky headers, Elementor overlays), which has
   been observed elsewhere to sit visually above Google's own
   .pac-container suggestion dropdown and swallow its first click —
   the exact "double-click to select" symptom this sprint exists to
   eliminate. .pac-container is appended directly to <body> by
   Google's widget, outside #tlp-quote-start, so it must be addressed
   globally rather than scoped like every other rule in this file. */
.pac-container {
    z-index: 10000 !important;
}

/* Guest phone-verification step ---------------------------------------
   Production Polish Sprint, Priority 1: reached only after
   GuestEstimateGate reports the free-calculation cap has been reached
   for this browser (Security\Otp\OtpService powers the actual code
   round-trip). Reuses .tlp-quote-start-field/-input/-hint/-submit/-back
   from the sections above verbatim. */

#tlp-quote-start #tlp-quote-otp-code-wrap {
    margin-top: 14px;
}
