/* =========================================================================
   Single product page (redesign 2026-09-29)

   Loaded from products/show.blade.php through @stack('styles'), which is the
   last stylesheet in <head>. That is deliberate: it lets this file correct
   main.css and kalasoon.css without either of them being rebuilt, and it keeps
   every rule below scoped to this one page.

   Tokens mirror the ones the product cards use (kalasoon.css, .product-card-new)
   so the page stays on the same palette as the rest of the shop.
   ========================================================================= */

.product-single-page {
    --ps-primary: #00bcd4;
    --ps-primary-dark: #0097a7;
    --ps-light: #ebf6f8;
    --ps-divider: #f1f1f1;
    --ps-border: #e8eaed;
    --ps-muted: #7a7a7a;
    --ps-orange-bg: #fff4e5;
    --ps-orange: #e07b00;
    /* Tick tile for the ported bullet-list style; the SVG stroke in section 8b
       is the same colour written out literally. */
    --ps-tick-soft: rgba(0, 151, 167, 0.07);
    --ps-tick-line: rgba(0, 151, 167, 0.2);
    --ps-radius: 14px;
    --ps-gap: 16px;
}

/* -------------------------------------------------------------------------
   1. Page rhythm
   ------------------------------------------------------------------------- */

.product-single-page .title-breadcrumb-special {
    margin-bottom: 14px;
}

.product-single-page .product-top-row {
    margin-bottom: var(--ps-gap);
    padding: 0;
    background: transparent;
    box-shadow: none;
    border: 0;
}

.product-single-page .product-top-row > .row {
    margin-right: -8px;
    margin-left: -8px;
}

.product-single-page .product-top-col {
    padding-right: 8px;
    padding-left: 8px;
    margin-bottom: var(--ps-gap);
}

/* Each of the three top boxes is its own card. */
.product-single-page .product-gallery-col,
.product-single-page .product-info-main,
.product-single-page .product-top-col--purchase .purchase-box-slot {
    height: 100%;
    background: #fff;
    border: 1px solid var(--ps-border);
    border-radius: var(--ps-radius);
    padding: 18px 16px;
}

.product-single-page .product-services {
    margin-bottom: var(--ps-gap);
    background: #fff;
    border: 1px solid var(--ps-border);
    border-radius: var(--ps-radius);
    padding: 18px 10px 6px;
}

.product-single-page .product-bottom-row {
    margin-right: -8px;
    margin-left: -8px;
}

.product-single-page .product-bottom-main,
.product-single-page .product-bottom-side {
    padding-right: 8px;
    padding-left: 8px;
}

.product-single-page .product-bottom-main > section,
.product-single-page .product-bottom-main > .tabs-product-info {
    background: #fff;
    border: 1px solid var(--ps-border);
    border-radius: var(--ps-radius);
    padding: 18px 16px;
    margin-bottom: var(--ps-gap);
}

.product-single-page .product-bottom-side .purchase-box-slot {
    background: #fff;
    border: 1px solid var(--ps-border);
    border-radius: var(--ps-radius);
    padding: 18px 16px;
    margin-bottom: var(--ps-gap);
}

/* -------------------------------------------------------------------------
   2. Gallery column
   ------------------------------------------------------------------------- */

/* ul.gallery-options is absolutely positioned; it needs a containing block. */
.product-single-page .product-gallery-col {
    position: relative;
}

.product-single-page .gallery-options--edit {
    top: 10px;
    right: 10px;
}

/* main.css absolutely positions .promotion-badge at top:14px with an 80% width
   and a 54px height, which on this page dropped it on top of the main image --
   and behind it, since the gallery paints later. In this column the badge is an
   ordinary in-flow pill instead. */
.product-single-page .product-timeout {
    position: relative;
    z-index: 3;
    padding-top: 0;
    margin-bottom: 10px;
    min-height: 0;
    text-align: center;
}

.product-single-page .product-timeout .promotion-badge {
    position: static;
    width: auto;
    height: auto;
    line-height: 1;
    border-bottom: 0;
    margin: 0;
    font-size: 13px;
}

.product-single-page .product-timeout .promotion-badge.not-available {
    display: inline-block;
    padding: 5px 14px;
    border-radius: 10px;
    background-color: #f1f1f1;
    color: #6c757d;
    font-weight: 700;
}

.product-single-page .product-timeout .product-special {
    display: inline-block;
    padding: 5px 14px;
    border-radius: 10px;
    background: #f5262c;
    color: #fff;
    font-size: 13px;
    font-weight: 700;
    line-height: 1.7;
}

.product-single-page .product-timeout .countdown-timer {
    margin-top: 8px !important;
}

.product-single-page .product-gallery {
    padding: 0;
    max-width: 100%;
}

.product-single-page .product-gallery .main-gallery .item img {
    display: block;
    width: 100%;
    height: auto;
    max-height: 420px;
    object-fit: contain;
}

.product-single-page .product-gallery--empty img {
    display: block;
    width: 100%;
    height: auto;
    max-height: 420px;
    object-fit: contain;
    margin: 0 auto;
}

/* --- The overflow bug ---------------------------------------------------
   The thumbnail <ul> used to carry `d-flex justify-content-center`. Owl wraps
   its children in .owl-stage-outer, and a flex item sizes to its content --
   the whole stage -- so a gallery with more thumbnails than fit simply spilled
   out of the column. The class is gone from the markup; these rules make sure
   nothing else can reintroduce the overflow, including main.css's
   `overflow: unset` on the stage wrapper.                                   */
.product-single-page .product-gallery .product-thumbnails {
    display: block !important;
    width: 100%;
    max-width: 100%;
    padding: 9px 34px;
    margin-bottom: 0;
    overflow: hidden;
}

/* overflow-y:visible sitting next to overflow-x:hidden does not stay visible --
   CSS promotes it to `auto`, and that is the scrollbar that showed up on the
   thumbnail strip. Both axes are clipped instead; the active marker below was
   moved inside the tile so nothing needs to escape the box any more. */
.product-single-page .product-gallery .product-thumbnails .owl-stage-outer {
    overflow: hidden !important;
    max-width: 100%;
}

.product-single-page .product-gallery .product-thumbnails .owl-stage {
    display: flex;
    align-items: center;
}

.product-single-page .product-gallery .product-thumbnails .owl-item {
    display: flex;
    justify-content: center;
}

.product-single-page .product-gallery .product-thumbnails > li,
.product-single-page .product-gallery .product-thumbnails .owl-item > li {
    margin: 5px auto;
    max-width: 100%;
}

/* The stock marker is a 2px rule hanging 15px *below* the tile. With the stage
   clipped it would never be seen, and it was half of what made the stage
   overflow in the first place. An inset ring says the same thing from inside. */
.product-single-page .product-gallery .product-thumbnails li.active > a::after {
    display: none;
}

.product-single-page .product-gallery .product-thumbnails li.active {
    border-color: var(--ps-primary);
    box-shadow: inset 0 0 0 1px var(--ps-primary);
}

.product-single-page
    .product-thumbnails.carousel-products
    .owl-nav
    button.owl-next,
.product-single-page
    .product-thumbnails.carousel-products
    .owl-nav
    button.owl-prev {
    top: 50%;
    transform: translateY(-50%);
    margin: 0;
}

/* -------------------------------------------------------------------------
   3. Info column
   ------------------------------------------------------------------------- */

.product-single-page .product-info-main .product-title h1 {
    font-size: 20px;
    line-height: 1.6;
    font-weight: 700;
    color: #1f1f1f;
    /* main.css nowraps this and hides the overflow, which truncates any name
       longer than the column. The heading is the page's h1 -- it wraps. */
    white-space: normal;
    overflow: visible;
    margin-bottom: 4px;
}

.product-single-page .product-info-main .product-title .product-title-en {
    font-size: 13px;
    font-weight: 400;
    color: var(--ps-muted);
    direction: ltr;
    text-align: right;
    margin-bottom: 0;
    line-height: 1.7;
}

.product-single-page .product-info-divider {
    border: 0;
    border-top: 1px solid var(--ps-divider);
    margin: 14px 0 10px;
}

.product-single-page .product-meta-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
    min-height: 40px;
}

.product-single-page .product-rating-summary {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
}

/* .rating-stars is an existing main.css component (grey icons, margin-left:-7px
   so they overlap). Both have to be undone on the `i`, not the wrapper. */
.product-single-page .rating-stars {
    display: inline-flex;
    align-items: center;
    line-height: 1;
    direction: ltr;
}

.product-single-page .rating-stars i {
    margin: 0 1px;
    font-size: 17px;
    line-height: 1;
    color: #ffc107;
}

.product-single-page .rating-stars i.mdi-star-outline {
    color: #dcdcdc;
}

.product-single-page .rating-score {
    font-weight: 700;
    color: #333;
}

/* Shortcut into the reviews tab -- show.js wires the click. It is a <button>
   only because the panel is switched by a plugin and there is no URL to point
   at, so it has to be un-buttoned back into a link here. */
.product-single-page .rating-count {
    padding: 0;
    border: 0;
    border-bottom: 1px dashed currentColor;
    background: none;
    font: inherit;
    color: var(--ps-muted);
    cursor: pointer;
    transition: color 0.15s ease-in;
}

.product-single-page .rating-count:hover,
.product-single-page .rating-count:focus {
    color: var(--primary-color, var(--ps-primary));
    outline: none;
}

/* The action buttons relocated from the gallery: a horizontal strip instead of
   the absolutely positioned vertical stack main.css defines. */
.product-single-page .gallery-options--inline {
    position: static;
    display: flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    padding: 0;
    top: auto;
    right: auto;
}

.product-single-page .gallery-options--inline > li {
    margin-bottom: 0;
}

.product-single-page .gallery-options--inline button {
    width: 36px;
    height: 34px;
    font-size: 20px;
    background-color: var(--ps-light);
    border-radius: 9px;
    transition: background-color 0.15s ease-in, color 0.15s ease-in;
}

.product-single-page .gallery-options--inline button:hover {
    background-color: var(--ps-primary);
    color: #fff;
}

.product-single-page .gallery-options--inline button.favorites:hover {
    color: #fff;
}

/* Tooltip flips from "to the right of a stacked button" to "below an inline
   one", arrow included. */
.product-single-page .gallery-options--inline .tooltip-option {
    top: calc(100% + 9px);
    right: 50%;
    transform: translateX(50%);
    width: auto;
    min-width: 108px;
    max-width: 180px;
    padding: 5px 8px;
    border-radius: 6px;
    white-space: nowrap;
}

.product-single-page .gallery-options--inline .tooltip-option::before {
    top: -10px;
    right: 50%;
    transform: translateX(50%);
    border-width: 0 7px 10px 7px;
    border-color: transparent transparent #6f6f6f transparent;
}

/* --- Product features card --- */
.product-single-page .product-features-box {
    margin-top: 14px;
    background: #fbfdfe;
    border: 1px solid var(--ps-divider);
    border-radius: 12px;
    padding: 12px 14px;
}

.product-single-page .product-features-box__title {
    display: flex;
    align-items: center;
    gap: 6px;
    padding-bottom: 8px;
    margin-bottom: 8px;
    border-bottom: 1px solid var(--ps-divider);
}

.product-single-page .product-features-box__title i {
    color: var(--ps-primary);
    font-size: 18px;
    line-height: 1;
}

.product-single-page .product-features-box__title h2 {
    font-size: 14px;
    font-weight: 700;
    color: #1f1f1f;
    margin: 0;
}

.product-single-page .product-features-box .little-des {
    font-size: 13px;
    line-height: 2;
    color: #55565a;
    margin-bottom: 8px;
}

/* Standalone row above the features card. */
.product-single-page .product-suggestion {
    display: flex;
    align-items: center;
    gap: 5px;
    font-size: 12.5px;
    color: #3a9d5d;
    margin: 12px 0 0;
    padding: 7px 10px;
    background: #f1faf4;
    border-radius: 10px;
}

.product-single-page .product-suggestion i {
    font-size: 16px;
    line-height: 1;
}

.product-single-page .product-suggestion span {
    font-weight: 700;
}

.product-single-page .product-features-box .product-params {
    height: 132px;
    padding-bottom: 26px;
}

.product-single-page .product-features-box .product-params.active {
    height: auto;
}

.product-single-page .product-features-box .product-params ul {
    margin: 0 0 4px;
}

/* main.css prints the ul's data-title as a pseudo heading; this card already
   has a real one. */
.product-single-page .product-features-box .product-params ul::before {
    content: none;
    display: none;
}

.product-single-page .product-features-box .product-params .sum-more {
    background: #fbfdfe;
}

/* Below the features card, separated by a rule rather than a second box -- two
   stacked cards in one column read as clutter. */
.product-single-page .product-taxonomy {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--ps-divider);
}

.product-single-page .product-taxonomy__row {
    font-size: 13px;
    line-height: 2;
    margin-bottom: 2px;
    color: #55565a;
}

.product-single-page .product-taxonomy__row.size-guide {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 10px;
}

.product-single-page .product-taxonomy__row.size-guide img {
    width: 22px;
    height: auto;
}

/* styles.css gives .link--with-border-bottom a dashed blue rule; on this page
   the links are plain primary-coloured text. */
.product-single-page .product-taxonomy a {
    color: var(--primary-color, var(--ps-primary));
    text-decoration: none;
    border-bottom: 0;
}

.product-single-page .product-taxonomy a:hover,
.product-single-page .product-taxonomy a:focus {
    color: var(--ps-primary-dark);
    text-decoration: none;
}

/* -------------------------------------------------------------------------
   4. Purchase box
   ------------------------------------------------------------------------- */

.product-single-page .purchase-box-labels {
    display: flex;
    flex-wrap: wrap;
    gap: 5px;
    margin-bottom: 10px;
}

/* The blade hangs px-3/pb-3/pt-0 utilities on this element, so the padding has
   to be !important to come out as one even box. */
.product-single-page .purchase-box .card.box-card {
    border: 0;
    box-shadow: none;
    margin-bottom: 0;
    padding: 14px !important;
    background-color: var(--ps-light);
    border-radius: 12px;
}

.product-single-page .purchase-box .card.box-card .box-border {
    border-radius: 12px;
}

.product-single-page .purchase-box .box-Price-number {
    margin-top: 0;
}

.product-single-page .purchase-box .product-variant {
    margin-bottom: 12px;
}

.product-single-page .purchase-box .warranty-notice-box {
    font-size: 12px;
    line-height: 1.8;
    color: #4a4a4a;
    background: none;
    border: 0;
    border-radius: 0;
    padding: 0;
}

.product-single-page .purchase-box .warranty-notice-box i {
    font-size: 17px;
    vertical-align: middle;
    margin-left: 4px;
}

/* --- Assurances --- */
.product-single-page .purchase-assurances {
    list-style: none;
    margin: 14px 0 0;
    padding: 12px 12px 4px;
    background: var(--ps-light);
    border: 1px solid var(--ps-divider);
    border-radius: 12px;
}

.product-single-page .purchase-assurances > li {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12.5px;
    color: #4a4a4a;
    margin-bottom: 8px;
}

.product-single-page .purchase-assurances > li i {
    font-size: 18px;
    line-height: 1;
    color: var(--ps-primary-dark);
}

/* Same orange treatment the product cards use for a thin inventory. */
.product-single-page .purchase-assurances > li.assurance-low-stock {
    display: inline-flex;
    padding: 0 10px;
    border-radius: 8px;
    background-color: var(--ps-orange-bg);
    color: var(--ps-orange);
    line-height: 30px;
    font-weight: 600;
}

.product-single-page .purchase-assurances > li.assurance-low-stock i {
    color: var(--ps-orange);
}

/* --- Download files (physical products never render this) --- */
.product-single-page .product-files-box {
    border: 0;
    box-shadow: none;
}

.product-single-page .product-files-list {
    list-style: none;
    padding: 0;
    margin: 0;
}

.product-single-page .product-files-list > li {
    background: #fff;
    border: 1px solid var(--ps-border);
    border-radius: 10px;
    padding: 10px;
    margin-bottom: 10px;
}

.product-single-page .product-file-head {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
}

.product-single-page .product-file-title {
    flex: 1 1 auto;
    margin: 0;
}

.product-single-page .product-file-size {
    color: var(--ps-muted);
    font-size: 12px;
}

.product-single-page .product-file-price {
    font-size: 13px;
    margin: 6px 0 8px;
}

.product-single-page .product-file-price del {
    margin-right: 6px;
    font-size: 12px;
}

/* -------------------------------------------------------------------------
   5. Services strip

   main.css scopes its sizing to `footer.main-footer .footer-services`, so the
   base rules have to be repeated here. The responsive overrides in main.css
   and kalasoon.css are unscoped and still apply.
   ------------------------------------------------------------------------- */

.product-single-page .footer-services .row {
    align-items: flex-start;
}

.product-single-page .footer-services .service-item {
    text-align: center;
    position: relative;
    font-size: 13px;
    line-height: 1.692;
    color: #606060;
    letter-spacing: 0.2px;
    padding-bottom: 14px;
    margin: auto;
}

.product-single-page .footer-services .service-item img {
    width: 58px;
    height: 58px;
    margin-bottom: 7px;
}

.product-single-page .footer-services .service-item p {
    margin-bottom: 0;
}

/* -------------------------------------------------------------------------
   6. Video row
   ------------------------------------------------------------------------- */

.product-single-page .product-video-frame {
    position: relative;
    width: 100%;
    margin-top: 12px;
    border-radius: 12px;
    overflow: hidden;
    background: #000;
}

.product-single-page .product-video-frame video {
    display: block;
    width: 100%;
    height: auto;
    max-height: 520px;
    outline: none;
}

/* -------------------------------------------------------------------------
   7. Related products + tabs
   ------------------------------------------------------------------------- */

.product-single-page .related-products-section .section-title,
.product-single-page .product-video-section .section-title {
    margin-bottom: 6px;
}

.product-single-page .tabs-product-info {
    margin-bottom: var(--ps-gap);
}

.product-single-page .tabs-product-info .ah-tab-content-wrapper {
    padding: 14px 4px 0;
    margin: 0;
}

/* The plugin stylesheet sizes the strip for a full-width page (16px text,
   15px padding all round) and marks the active tab in black. */
.product-single-page .tabs-product-info .ah-tab > .ah-tab-item {
    padding: 11px 14px;
    font-size: 14.5px;
    color: #55565a;
}

.product-single-page .tabs-product-info .ah-tab > .ah-tab-item:hover,
.product-single-page .tabs-product-info .ah-tab > .ah-tab-item[data-ah-tab-active="true"] {
    color: #1f1f1f;
    border-bottom-color: var(--primary-color, var(--ps-primary));
}

.product-single-page .tabs-product-info .ah-tab .ah-tab-item i {
    font-size: 17px;
    vertical-align: -2px;
}

/* Specification rows. main.css floats a 19% key against a 79% value, which in
   this column leaves Persian labels wrapping to three lines beside a mostly
   empty value cell. Flex, with a third of the width for the key. */
.product-single-page .params .params-list li {
    display: flex;
    float: none;
    width: 100%;
    gap: 8px;
    margin: 0 0 8px;
    padding-right: 0;
}

.product-single-page .params .params-list li .params-list-key,
.product-single-page .params .params-list li .params-list-value {
    float: none;
    margin-bottom: 0;
    padding: 10px 12px;
    font-size: 13px;
    line-height: 1.9;
}

.product-single-page .params .params-list li .params-list-key {
    flex: 0 0 32%;
    width: 32%;
    color: #55565a;
}

.product-single-page .params .params-list li .params-list-value {
    flex: 1 1 auto;
    width: auto;
}

.product-single-page .params-title {
    font-size: 14px;
    font-weight: 700;
    margin: 16px 0 8px;
}

.product-single-page .tab-empty-note {
    color: var(--ps-muted);
    font-size: 13px;
    margin: 16px 0 6px;
}

.product-single-page .description-product {
    line-height: 2.1;
    font-size: 13.5px;
}

.product-single-page .description-product img {
    max-width: 100%;
    height: auto;
}

/* A pasted <pre> inside admin-authored description HTML must scroll inside the
   tab, never widen the page. Tables are handled below -- they need a wrapper. */
.product-single-page .description-product pre {
    display: block;
    max-width: 100%;
    overflow-x: auto;
}

/* -------------------------------------------------------------------------
   Description tables

   These come out of the WYSIWYG with border="1", cellpadding="1", cellspacing
   and a hard-coded style="width:500px", which is why a two-column spec table
   renders as a cramped 3D-bevelled box floating in the middle of the tab. All
   of that is presentational markup, so a plain author rule outranks it -- only
   the inline width needs !important.

   The scroll wrapper is added by products/show.js: a <table> cannot both lay
   out as a table and clip its own overflow, and putting `display: block` on the
   table instead is what made narrow tables collapse to their content width.
   ------------------------------------------------------------------------- */

.product-single-page .description-product .description-table-scroll {
    max-width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    margin: 18px 0;
    border: none;
    border-radius: 10px;
}

.product-single-page .description-product table {
    display: table;
    width: 100% !important;
    max-width: none;
    min-width: 320px;
    margin: 0;
    border: 0;
    border-collapse: collapse;
    border-spacing: 0;
    table-layout: auto;
    font-size: 13px;
    line-height: 1.9;
    color: #444;
    text-align: right;
}

.product-single-page .description-product table td,
.product-single-page .description-product table th {
    padding: 10px 12px;
    border: 0;
    border-bottom: 1px solid var(--ps-divider);
    border-left: 1px solid var(--ps-divider);
    vertical-align: middle;
    text-align: right;
    word-break: break-word;
}

/* The frame is drawn by the wrapper, so the cells on the outside edges must not
   double it up. RTL: the first cell of a row is the right-hand one. */
.product-single-page .description-product table tr > *:last-child {
    border-left: 0;
}

.product-single-page .description-product table tr:last-child > * {
    border-bottom: 0;
}

/* Header row. `tbody:first-child` is how a table with no <thead> is spotted --
   these editors emit the heading as a plain first <tr> of the body. */
.product-single-page .description-product table thead th,
.product-single-page .description-product table thead td,
.product-single-page .description-product table > tbody:first-child > tr:first-child > td {
    background-color: var(--ps-light);
    font-weight: 700;
    color: #2b2b2b;
}

.product-single-page .description-product table tbody tr:nth-child(even) {
    background-color: #fbfcfd;
}

/* The thin case the whole section is about: exactly two columns is a key/value
   table, and letting the browser split it on content leaves a wide empty value
   column next to a squeezed key. `:nth-last-child(2)` on the first cell is the
   only way to count columns in CSS. */
.product-single-page .description-product table tr > *:first-child:nth-last-child(2) {
    width: 34%;
    font-weight: 600;
    color: #55565a;
    background-color: #fbfdfe;
}

/* ...but not for the header row, which has its own fill. */
.product-single-page .description-product table thead tr > *:first-child:nth-last-child(2),
.product-single-page .description-product table > tbody:first-child > tr:first-child > td:first-child:nth-last-child(2) {
    background-color: var(--ps-light);
    color: #2b2b2b;
    font-weight: 700;
}

/* Three columns is still narrow enough that a fixed first column helps. */
.product-single-page .description-product table tr > *:first-child:nth-last-child(3) {
    width: 28%;
}

.product-single-page .description-product table p {
    margin: 0;
}

.product-single-page .description-product table img {
    max-width: 100%;
    height: auto;
}


.product-single-page .params-list-value {
    word-break: break-word;
}

/* -------------------------------------------------------------------------
   8. Sticky purchase column

   theiaStickySidebar (initialised in main.js for `.container .sticky-sidebar`)
   does the sticking; CSS position:sticky cannot, because body and .wrapper
   both set overflow-x:hidden !important.
   ------------------------------------------------------------------------- */

.product-single-page .product-bottom-side .theiaStickySidebar {
    will-change: transform;
}

/* -------------------------------------------------------------------------
   8b. Purchase box rhythm

   The box is assembled from bootstrap utilities (mt-4 / mt-3 / mt-2) that were
   tuned for the old full-width layout and read as uneven in a narrow column.
   Each override below is more specific than the single utility class it
   replaces, so no !important is needed.
   ------------------------------------------------------------------------- */

.product-single-page .purchase-box .box-Price-number.box-margin {
    margin: 0;
}

/* Quantity row, separated from the prices by a hairline instead of a gap. */
.product-single-page .purchase-box .box-Price-number > .d-flex:first-child {
    align-items: center;
    margin-bottom: 0;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--ps-divider);
}

.product-single-page .purchase-box .box-Price-number > .d-flex:first-child .number {
    font-size: 13px;
    color: #55565a;
}

/* Price rows: one consistent step between them, label and figure on one line. */
.product-single-page .purchase-box .section-title .row > .col-12 > .d-flex {
    align-items: center;
    margin-top: 14px;
}

.product-single-page
    .purchase-box
    .section-title
    .row
    > .col-12
    > .d-flex.single-price-row-customer {
    padding-bottom: 12px;
    border-bottom: 1px dashed var(--ps-divider);
}

.product-single-page .purchase-box .section-title .text-price {
    font-size: 13px;
    color: #55565a;
    white-space: nowrap;
}

.product-single-page .purchase-box .section-title .row .row {
    flex: 1 1 auto;
    margin: 0;
}

.product-single-page .purchase-box .section-title .row .row > .col-12 {
    padding: 0;
}

.product-single-page .purchase-box .price {
    font-size: 18px;
    font-weight: 700;
    line-height: 1.5;
}

.product-single-page .purchase-box .currency {
    font-size: 12px;
    color: var(--ps-muted);
}

.product-single-page .purchase-box del {
    font-size: 13px;
    color: var(--ps-gray, #b2b2b2);
}

.product-single-page .purchase-box .add-to-cart.btn-show-product {
    height: 46px;
    margin-top: 18px;
    border-radius: 13px;
    font-size: 15px;
    font-weight: 700;
}

.product-single-page .purchase-box .warranty-notice-box {
    justify-content: center;
    margin-top: 0;
    display: none !important;
}

.product-single-page .purchase-box .add-to-cart.btn-show-product + .mt-3 {
    margin-top: 12px !important;
}

.product-single-page .purchase-box .box-product-unavailable {
    margin-bottom: 14px;
}

.product-single-page .purchase-box .cart-not-available {
    width: 100%;
    height: 46px;
    border-radius: 13px;
}

/* -------------------------------------------------------------------------
   8c. Related products slider

   Four cards now share the 8/12 column, so the card's own nowrap cart button
   has less room than it does in a full-width grid.
   ------------------------------------------------------------------------- */

.product-single-page .related-products-carousel .owl-stage {
    display: flex;
}

.product-single-page .related-products-carousel .owl-item {
    display: flex;
}

.product-single-page .related-products-carousel .owl-item > * {
    width: 100%;
}

.product-single-page .related-products-carousel .product-card-new {
    height: 100%;
}

.product-single-page .related-products-carousel .pc-cart-btn {
    gap: 4px;
    padding: 0 8px;
    font-size: 12px;
    overflow: hidden;
}

.product-single-page .related-products-carousel .pc-cart-btn span {
    overflow: hidden;
    text-overflow: ellipsis;
}

/* The slider dropped `product-carousel` (main.js initialises that class with
   items:1, and it would claim the element before show.js runs), which also
   dropped the nav styling scoped to it. Restated here, inset rather than
   overhanging so the arrows stay inside the card. */
.product-single-page .related-products-carousel .owl-nav button {
    position: absolute;
    top: 50%;
    width: 40px;
    height: 40px;
    margin-top: -20px;
    line-height: 37px !important;
    text-align: center;
    background-color: #fff;
    border-radius: 50%;
    box-shadow: 0 8px 9px 0 rgba(0, 0, 0, 0.12);
    font-size: 34px;
    color: #6a6a6a;
    outline: none;
    opacity: 1;
    transition: 0.3s;
    z-index: 2;
}

.product-single-page .related-products-carousel .owl-nav button.owl-next {
    left: -6px;
    cursor: pointer;
}

.product-single-page .related-products-carousel .owl-nav button.owl-prev {
    right: -6px;
    cursor: pointer;
}

.product-single-page .related-products-carousel .owl-nav button:hover {
    background-color: #fff;
    color: #000;
}

.product-single-page .related-products-carousel .owl-nav button.disabled {
    opacity: 0 !important;
    pointer-events: none;
}

.product-single-page .related-products-section {
    position: relative;
}

/* -------------------------------------------------------------------------
   8b. Ticked lists

   The partnership landing page marks its bullet lists with a small rounded
   tile and a tick rather than a dot, and the same treatment is reused here for
   the feature list in the info column and for the admin-authored description.
   It is drawn entirely with ::before so nothing has to be added to the stored
   HTML -- the description comes out of the editor as a plain <ul><li>.

   This section sits after the two it overrides (the features card in 5 and the
   description in 8): the selectors below tie on specificity with theirs, so
   only source order decides, and it has to be this one that wins.
   ------------------------------------------------------------------------- */

.product-single-page .product-info-main ul:not(.gallery-options),
.product-single-page .description-product ul {
    list-style: none;
    margin: 14px 0 0;
    padding: 0;
}

/* Absolute tile rather than a flex row: the description is arbitrary editor
   HTML, and an <li> that stays a normal block keeps long text wrapping with a
   hanging indent instead of turning every inline child into a flex item. */
.product-single-page .product-info-main ul:not(.gallery-options) > li,
.product-single-page .description-product ul > li {
    position: relative;
    display: block;
    float: none;
    width: auto;
    margin: 0 0 8px;
    padding: 0 32px 0 0;
    font-size: 13px;
    line-height: 1.95;
    color: #444;
}

.product-single-page .product-info-main ul:not(.gallery-options) > li:last-child,
.product-single-page .description-product ul > li:last-child {
    margin-bottom: 0;
}

/* The tick is an inline SVG data URI, and a data URI cannot read a custom
   property -- the stroke is --ps-primary-dark written out as %230097a7 and has
   to be changed in step with it. The !important is aimed at styles.css's
   `.product-params ul li:before { background: var(--primary-color) !important }`,
   which would otherwise repaint the tile as a solid cyan block. */
.product-single-page .product-info-main ul:not(.gallery-options) > li::before,
.product-single-page .description-product ul > li::before {
    content: "";
    position: absolute;
    top: 3px;
    right: 0;
    left: auto;
    width: 22px;
    height: 22px;
    margin: 0;
    border-radius: 7px;
    border: 1px solid var(--ps-tick-line);
    background: var(--ps-tick-soft) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='11' viewBox='0 0 24 24' fill='none' stroke='%230097a7' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") no-repeat center !important;
}

.product-single-page .product-info-main ul:not(.gallery-options) > li::after,
.product-single-page .description-product ul > li::after {
    content: none;
}

/* Key: value rows in the features card. The first span is already bold from
   main.css; it only needs to stop being an inline-block so a long value wraps
   under the key instead of pushing the row wide. */
.product-single-page .product-features-box .product-params ul {
    margin: 2px 0 4px;
}

.product-single-page .product-features-box .product-params ul > li {
    font-size: 12.5px;
    line-height: 1.85;
    margin-bottom: 7px;
}

.product-single-page .product-features-box .product-params ul > li span {
    display: inline;
    margin-left: 4px;
}

.product-single-page .product-features-box .product-params ul > li span:first-child {
    color: #55565a;
}

/* Nested lists keep a plain disc: a second level of tiles reads as a second
   list rather than as a child of the row above it. */
.product-single-page .description-product ul ul,
.product-single-page .description-product ul ol {
    margin: 6px 0 0;
    padding-right: 18px;
    list-style: disc;
}

.product-single-page .description-product ul ol {
    list-style: decimal;
}

.product-single-page .description-product ul ul > li,
.product-single-page .description-product ul ol > li {
    display: list-item;
    padding-right: 0;
    margin-bottom: 2px;
}

.product-single-page .description-product ul ul > li::before,
.product-single-page .description-product ul ol > li::before {
    content: none;
}

/* Ordered lists in the description stay numbered -- only bullets become ticks. */
.product-single-page .description-product ol {
    padding-right: 20px;
    margin: 14px 0;
}

.product-single-page .description-product ol > li {
    margin-bottom: 6px;
}

/* -------------------------------------------------------------------------
   9. Responsive

   The page is laid out for the desktop three-column top row; everything below
   narrows the type and the gaps as the columns collapse, so the phone view is
   not the desktop view with the same 14-16px rhythm crammed into 360px.
   ------------------------------------------------------------------------- */

/* Tablet and below: the purchase box is already the full-width third block of
   the top row, so the sticky clone would just repeat it. */
@media (max-width: 991.98px) {
    .product-single-page {
        --ps-gap: 14px;
    }

    .product-single-page .product-bottom-side {
        display: none;
    }

    .product-single-page .product-bottom-main {
        flex: 0 0 100%;
        max-width: 100%;
    }

    .product-single-page .product-gallery .main-gallery .item img {
        max-height: 340px;
    }

    .product-single-page .product-info-main .product-title h1 {
        font-size: 18px;
    }

    /* Below 992 the purchase box is a full-width block, so the price no longer
       needs to shout to be found in a narrow column. */
    .product-single-page .purchase-box .price {
        font-size: 17px;
    }

    .product-single-page .params .params-list li .params-list-key {
        flex: 0 0 34%;
        width: 34%;
    }
}

@media (max-width: 767.98px) {
    .product-single-page {
        --ps-gap: 12px;
    }

    .product-single-page .product-gallery-col,
    .product-single-page .product-info-main,
    .product-single-page .product-top-col--purchase .purchase-box-slot,
    .product-single-page .product-bottom-main > section,
    .product-single-page .product-bottom-main > .tabs-product-info,
    .product-single-page .product-services {
        padding: 14px 12px;
        border-radius: 12px;
    }

    .product-single-page .product-top-col {
        margin-bottom: 12px;
    }

    /* main.css keeps the trail on one nowrap line and ellipsises the overflow,
       which on a phone means the last two crumbs are simply gone. It wraps. */
    .product-single-page .title-breadcrumb-special .breadcrumb nav {
        white-space: normal;
        overflow: visible;
        line-height: 2.1;
    }

    .product-single-page .title-breadcrumb-special .breadcrumb a,
    .product-single-page .title-breadcrumb-special .breadcrumb nav > span {
        font-size: 12px;
    }

    .product-single-page .title-breadcrumb-special .breadcrumb nav > span {
        color: #8a8a8a;
        font-weight: 400;
    }

    .product-single-page .product-meta-row {
        align-items: flex-start;
        flex-direction: column;
    }

    .product-single-page .gallery-options--inline {
        width: 100%;
        justify-content: flex-start;
    }

    /* A tooltip anchored to the first button would hang off the right edge on a
       narrow screen; the touch UI does not surface it anyway. */
    .product-single-page .gallery-options--inline .tooltip-option {
        display: none;
    }

    .product-single-page .product-gallery .product-thumbnails {
        padding: 9px 26px;
    }

    .product-single-page .product-gallery .main-gallery .item img {
        max-height: 300px;
    }

    .product-single-page .tabs-product-info .ah-tab-content-wrapper {
        padding: 12px 0 0;
    }

    .product-single-page .product-video-frame video {
        max-height: 260px;
    }

    /* Three tabs at 14.5px do not fit 360px; the strip is what shrinks, not the
       labels' legibility -- the icons go instead. */
    .product-single-page .tabs-product-info .ah-tab > .ah-tab-item {
        padding: 10px 8px;
        font-size: 13px;
    }

    .product-single-page .tabs-product-info .ah-tab .ah-tab-item i {
        display: none;
    }

    .product-single-page .product-features-box {
        padding: 12px;
    }

    .product-single-page .product-features-box .little-des,
    .product-single-page .product-taxonomy__row,
    .product-single-page .description-product {
        font-size: 12.5px;
    }

    .product-single-page .description-product {
        line-height: 1.95;
    }

    /* Ticked lists: the tile and its gutter come down with the type. */
    .product-single-page .product-info-main ul:not(.gallery-options) > li,
    .product-single-page .description-product ul > li {
        font-size: 12.5px;
        padding-left: 0;
        padding-right: 28px;
        margin-bottom: 7px;
    }

    .product-single-page .product-info-main ul:not(.gallery-options) > li::before,
    .product-single-page .description-product ul > li::before {
        width: 20px;
        height: 20px;
        border-radius: 6px;
        background-size: 10px 10px !important;
    }

    .product-single-page .description-product .description-table-scroll {
        margin: 14px 0;
    }

    .product-single-page .description-product table {
        font-size: 12.5px;
        line-height: 1.8;
        min-width: 300px;
    }

    .product-single-page .description-product table td,
    .product-single-page .description-product table th {
        padding: 8px 10px;
    }

    .product-single-page .purchase-box .card.box-card {
        padding: 12px !important;
    }

    .product-single-page .purchase-assurances {
        margin-top: 12px;
        padding: 10px 10px 2px;
    }

    .product-single-page .purchase-assurances > li {
        font-size: 12px;
        margin-bottom: 7px;
    }

    .product-single-page .purchase-box .add-to-cart.btn-show-product {
        height: 44px;
        margin-top: 14px;
        font-size: 14px;
    }
}

@media (max-width: 575.98px) {
    .product-single-page {
        --ps-gap: 10px;
    }

    .product-single-page .product-info-main .product-title h1 {
        font-size: 16px;
    }

    .product-single-page .product-info-main .product-title .product-title-en {
        font-size: 12px;
    }

    .product-single-page .rating-stars {
        font-size: 15px;
    }

    .product-single-page .rating-stars i {
        font-size: 15px;
    }

    .product-single-page .product-rating-summary {
        font-size: 12px;
    }

    .product-single-page .product-gallery .product-thumbnails {
        padding: 9px 22px;
    }

    .product-single-page .product-gallery .main-gallery .item img {
        max-height: 240px;
    }

    /* kalasoon.css puts four service tiles across the phone width at 11px; two
       across at a readable size is the same strip without the squeeze. Its
       font-size carries !important, so this one has to as well. */
    .product-single-page .footer-services .service-item {
        flex: 0 0 50%;
        max-width: 50%;
        font-size: 12px !important;
        padding-bottom: 10px;
    }

    .product-single-page .footer-services .service-item img {
        width: 46px;
        height: 46px;
    }

    /* A 34% key column leaves roughly nine characters per line for the value.
       Key over value instead. */
    .product-single-page .params .params-list li {
        flex-direction: column;
        gap: 3px;
        margin-bottom: 10px;
    }

    .product-single-page .params .params-list li .params-list-key,
    .product-single-page .params .params-list li .params-list-value {
        flex: none;
        width: 100%;
        padding: 8px 11px;
        font-size: 12.5px;
        line-height: 1.8;
    }

    .product-single-page .params .params-list li .params-list-key {
        font-weight: 700;
    }

    .product-single-page .product-features-box__title h2,
    .product-single-page .params-title {
        font-size: 13.5px;
    }

    .product-single-page .product-suggestion {
        font-size: 12px;
    }

    .product-single-page .product-info-main ul:not(.gallery-options) > li,
    .product-single-page .description-product ul > li {
        font-size: 12px;
        padding-right: 26px;
        margin-bottom: 6px;
    }

    .product-single-page .product-info-main ul:not(.gallery-options) > li::before,
    .product-single-page .description-product ul > li::before {
        top: 2px;
        width: 18px;
        height: 18px;
        border-radius: 6px;
        background-size: 9px 9px !important;
    }

    .product-single-page .description-product table {
        font-size: 12px;
        min-width: 280px;
    }

    .product-single-page .description-product table td,
    .product-single-page .description-product table th {
        padding: 7px 9px;
    }

    /* Less room, so the key column gives up a little of its share. */
    .product-single-page .description-product table tr > *:first-child:nth-last-child(2) {
        width: 40%;
    }

    .product-single-page .purchase-box .price {
        font-size: 16px;
    }

    .product-single-page .tabs-product-info .ah-tab > .ah-tab-item {
        padding: 9px 6px;
        font-size: 12.5px;
    }
}
