/* Jay Scotts component styles. Every value derives from tokens/*.css.
   Squared geometry, hairline sand rules, warm-cream hovers, no bounce. */

/* ---------- Button ---------- */
.js-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:var(--control-h);padding:0 var(--space-6);border:1px solid transparent;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:var(--fs-caption);font-weight:var(--fw-semibold);letter-spacing:var(--ls-label);text-transform:uppercase;text-decoration:none;cursor:pointer;transition:var(--transition-color),var(--transition-lift);white-space:nowrap}
.js-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus)}
.js-btn:active{transform:var(--press-scale)}
.js-btn[disabled],.js-btn[aria-disabled="true"]{cursor:not-allowed;transform:none;background:var(--action-disabled);border-color:var(--action-disabled);color:var(--js-white);opacity:.65}
.js-btn--primary{background:var(--action-primary);border-color:var(--action-primary);color:var(--text-on-accent)}
.js-btn--primary:hover{background:var(--action-primary-hover);border-color:var(--action-primary-hover)}
.js-btn--primary:active{background:var(--action-primary-press)}
.js-btn--secondary{background:transparent;border-color:var(--action-secondary-border);color:var(--js-deep-ocean)}
.js-btn--secondary:hover{background:var(--surface-hover);border-color:var(--js-deep-ocean-hover);color:var(--js-deep-ocean-hover)}
.js-btn--ghost{background:transparent;border-color:transparent;color:var(--js-deep-ocean);padding:0 var(--space-3)}
.js-btn--ghost:hover{background:var(--js-deep-ocean-08)}
.js-btn--inverse{background:var(--js-white);border-color:var(--js-white);color:var(--js-deep-ocean)}
.js-btn--inverse:hover{background:var(--js-warm-cream);border-color:var(--js-warm-cream)}
.js-btn--outline-inverse{background:transparent;border-color:rgba(250,248,244,.7);color:var(--js-soft-white)}
.js-btn--outline-inverse:hover{background:rgba(250,248,244,.12);border-color:var(--js-soft-white)}
.js-btn--sm{min-height:var(--control-h-sm);padding:0 var(--space-4);font-size:var(--fs-micro)}
.js-btn--lg{min-height:var(--control-h-lg);padding:0 var(--space-8);font-size:var(--fs-body-sm);letter-spacing:.08em}
.js-btn--block{width:100%}

/* ---------- Icon button ---------- */
.js-iconbtn{display:inline-flex;align-items:center;justify-content:center;width:var(--control-h);height:var(--control-h);padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--js-deep-ocean);cursor:pointer;transition:var(--transition-color)}
.js-iconbtn:hover{background:var(--js-deep-ocean-08)}
.js-iconbtn:focus-visible{outline:none;box-shadow:var(--shadow-focus)}
.js-iconbtn--outlined{border-color:var(--border-hairline)}
.js-iconbtn--filled{background:var(--action-primary);color:var(--text-on-accent);border-color:var(--action-primary)}
.js-iconbtn--filled:hover{background:var(--action-primary-hover)}
.js-iconbtn--inverse{color:var(--js-soft-white)}
.js-iconbtn--inverse:hover{background:rgba(250,248,244,.14)}
.js-iconbtn--sm{width:var(--control-h-sm);height:var(--control-h-sm)}
.js-iconbtn[disabled]{opacity:.4;cursor:not-allowed}

/* ---------- Eyebrow ---------- */
.js-eyebrow{display:inline-block;font-family:var(--font-sans);font-size:var(--fs-eyebrow);font-weight:var(--fw-semibold);letter-spacing:var(--ls-eyebrow);text-transform:uppercase;color:var(--text-accent)}
.js-eyebrow--muted{color:var(--text-muted)}
.js-eyebrow--inverse{color:var(--text-on-inverse-muted)}
.js-eyebrow--ruled{display:flex;align-items:center;gap:var(--space-3)}
.js-eyebrow--ruled::after{content:"";flex:1;height:1px;background:var(--border-hairline)}

/* ---------- Section heading ---------- */
.js-sectionhead{display:flex;flex-direction:column;gap:var(--space-4)}
.js-sectionhead--center{align-items:center;text-align:center}
.js-sectionhead__title{font-family:var(--font-display);font-weight:var(--fw-light);font-size:var(--fs-h2);line-height:var(--lh-heading);letter-spacing:var(--ls-heading);color:var(--text-heading);margin:0}
.js-sectionhead__title em{font-family:var(--font-accent);font-style:italic;font-weight:var(--fw-regular);color:var(--text-accent)}
.js-sectionhead__lede{font-size:var(--fs-body-lg);line-height:var(--lh-body);color:var(--text-muted);max-width:var(--measure-lede);margin:0}
.js-sectionhead--inverse .js-sectionhead__title{color:var(--text-on-inverse)}
.js-sectionhead--inverse .js-sectionhead__lede{color:var(--text-on-inverse-muted)}

/* ---------- Divider ---------- */
.js-divider{border:none;height:1px;background:var(--border-hairline);margin:0}
.js-divider--strong{background:var(--divider-rule)}
.js-divider--short{width:56px;height:1px;background:var(--divider-rule)}
.js-divider--vertical{width:1px;height:auto;align-self:stretch}

/* ---------- Card ---------- */
.js-card{position:relative;display:flex;flex-direction:column;background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);padding:var(--gap-card);transition:var(--transition-lift),var(--transition-color)}
.js-card--flush{padding:0;overflow:hidden}
.js-card--warm{background:var(--surface-card-warm);border-color:transparent}
.js-card--panel{background:var(--surface-panel);border-color:transparent}
.js-card--inverse{background:var(--surface-inverse);border-color:var(--border-inverse);color:var(--text-on-inverse)}
.js-card--elevated{box-shadow:var(--shadow-sm);border-color:transparent}
.js-card--interactive{cursor:pointer;text-decoration:none}
.js-card--interactive:hover{transform:var(--lift-hover);box-shadow:var(--shadow-md);border-color:var(--border-hairline)}
.js-card--interactive:focus-visible{outline:none;box-shadow:var(--shadow-focus)}

/* ---------- Badge ---------- */
.js-badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:3px var(--space-2);border-radius:var(--radius-xs);font-family:var(--font-sans);font-size:var(--fs-micro);font-weight:var(--fw-semibold);letter-spacing:var(--ls-label);text-transform:uppercase;background:var(--js-deep-ocean-08);color:var(--js-deep-ocean)}
.js-badge--solid{background:var(--action-primary);color:var(--text-on-accent)}
.js-badge--sand{background:var(--js-cream);color:var(--js-deep-charcoal)}
.js-badge--success{background:var(--status-success-bg);color:var(--status-success)}
.js-badge--warning{background:var(--status-warning-bg);color:var(--status-warning)}
.js-badge--danger{background:var(--status-danger-bg);color:var(--status-danger)}
.js-badge--outline{background:transparent;border:1px solid var(--border-hairline);color:var(--text-muted)}

/* ---------- Tag ---------- */
.js-tag{display:inline-flex;align-items:center;gap:var(--space-2);min-height:32px;padding:0 var(--space-4);border:1px solid var(--border-hairline);border-radius:var(--radius-pill);background:var(--surface-page);font-family:var(--font-sans);font-size:var(--fs-caption);font-weight:var(--fw-medium);color:var(--text-body);cursor:pointer;transition:var(--transition-color);text-decoration:none}
.js-tag:hover{background:var(--surface-hover);border-color:var(--js-sand)}
.js-tag[aria-pressed="true"],.js-tag--selected{background:var(--action-primary);border-color:var(--action-primary);color:var(--text-on-accent)}
.js-tag__remove{display:inline-flex;opacity:.6;cursor:pointer}
.js-tag__remove:hover{opacity:1}

/* ---------- Fields ---------- */
.js-field{display:flex;flex-direction:column;gap:var(--space-2)}
.js-label{font-family:var(--font-sans);font-size:var(--fs-caption);font-weight:var(--fw-semibold);letter-spacing:var(--ls-label);text-transform:uppercase;color:var(--text-body)}
.js-label__req{color:var(--status-danger);margin-left:2px}
.js-input,.js-textarea,.js-select{width:100%;min-height:var(--control-h);padding:0 var(--space-4);border:1px solid var(--border-hairline);border-radius:var(--radius-sm);background:var(--surface-page);font-family:var(--font-sans);font-size:var(--fs-body-sm);color:var(--text-body);transition:var(--transition-color),box-shadow var(--dur-fast) var(--ease-standard)}
.js-textarea{padding:var(--space-3) var(--space-4);min-height:112px;line-height:var(--lh-body);resize:vertical}
.js-input::placeholder,.js-textarea::placeholder{color:var(--text-disabled)}
.js-input:hover,.js-textarea:hover,.js-select:hover{border-color:var(--js-sand)}
.js-input:focus,.js-textarea:focus,.js-select:focus{outline:none;border-color:var(--border-strong);box-shadow:0 0 0 3px var(--js-deep-ocean-08)}
.js-input[aria-invalid="true"],.js-textarea[aria-invalid="true"]{border-color:var(--status-danger)}
.js-input[disabled],.js-textarea[disabled],.js-select[disabled]{background:var(--js-pearl);color:var(--text-disabled);cursor:not-allowed}
.js-select{appearance:none;padding-right:var(--space-10);background-image:linear-gradient(45deg,transparent 50%,var(--js-deep-ocean) 50%),linear-gradient(135deg,var(--js-deep-ocean) 50%,transparent 50%);background-position:calc(100% - 20px) 50%,calc(100% - 14px) 50%;background-size:6px 6px,6px 6px;background-repeat:no-repeat}
.js-hint{font-size:var(--fs-caption);color:var(--text-muted)}
.js-hint--error{color:var(--status-danger)}

/* ---------- Choice controls ---------- */
.js-choice{display:inline-flex;align-items:flex-start;gap:var(--space-3);cursor:pointer;font-size:var(--fs-body-sm);color:var(--text-body);line-height:var(--lh-snug);position:relative}
.js-choice input{position:absolute;opacity:0;width:0;height:0}
.js-choice__box{flex:none;width:18px;height:18px;margin-top:2px;border:1px solid var(--js-sand);border-radius:var(--radius-xs);background:var(--surface-page);display:grid;place-items:center;transition:var(--transition-color)}
.js-choice__box--round{border-radius:var(--radius-circle)}
.js-choice:hover .js-choice__box{border-color:var(--js-deep-ocean)}
.js-choice input:checked+.js-choice__box{background:var(--action-primary);border-color:var(--action-primary)}
.js-choice input:focus-visible+.js-choice__box{box-shadow:var(--shadow-focus)}
.js-choice input:disabled+.js-choice__box{background:var(--js-pearl);border-color:var(--js-sand);opacity:.6}
.js-choice__mark{width:10px;height:10px;color:var(--js-white);opacity:0;transition:opacity var(--dur-fast) var(--ease-standard)}
.js-choice input:checked+.js-choice__box .js-choice__mark{opacity:1}
.js-choice__dot{width:7px;height:7px;border-radius:var(--radius-circle);background:var(--js-white);transform:scale(0);transition:transform var(--dur-fast) var(--ease-out)}
.js-choice input:checked+.js-choice__box .js-choice__dot{transform:scale(1)}
.js-switch{display:inline-flex;align-items:center;gap:var(--space-3);cursor:pointer;font-size:var(--fs-body-sm);color:var(--text-body);position:relative}
.js-switch input{position:absolute;opacity:0;width:0;height:0}
.js-switch__track{flex:none;width:44px;height:24px;border-radius:var(--radius-pill);background:var(--js-sand);padding:2px;transition:background-color var(--dur-base) var(--ease-standard)}
.js-switch__thumb{display:block;width:20px;height:20px;border-radius:var(--radius-circle);background:var(--js-white);box-shadow:var(--shadow-xs);transition:transform var(--dur-base) var(--ease-out)}
.js-switch input:checked+.js-switch__track{background:var(--action-primary)}
.js-switch input:checked+.js-switch__track .js-switch__thumb{transform:translateX(20px)}
.js-switch input:focus-visible+.js-switch__track{box-shadow:var(--shadow-focus)}
.js-switch input:disabled+.js-switch__track{opacity:.5}

/* ---------- Tabs ---------- */
.js-tabs{display:flex;gap:var(--space-8);border-bottom:1px solid var(--border-hairline)}
.js-tab{position:relative;appearance:none;background:none;border:none;padding:0 0 var(--space-3);font-family:var(--font-sans);font-size:var(--fs-caption);font-weight:var(--fw-semibold);letter-spacing:var(--ls-label);text-transform:uppercase;color:var(--text-muted);cursor:pointer;transition:var(--transition-color)}
.js-tab::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--divider-rule);transform:scaleX(0);transform-origin:left;transition:transform var(--dur-base) var(--ease-out)}
.js-tab:hover{color:var(--text-body)}
.js-tab[aria-selected="true"]{color:var(--text-heading)}
.js-tab[aria-selected="true"]::after{transform:scaleX(1)}
.js-tab:focus-visible{outline:none;box-shadow:var(--shadow-focus)}

/* ---------- Breadcrumb ---------- */
.js-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);font-size:var(--fs-caption);color:var(--text-muted)}
.js-breadcrumb a{color:var(--text-muted);border-bottom:none}
.js-breadcrumb a:hover{color:var(--text-link-hover)}
.js-breadcrumb__sep{opacity:.5}
.js-breadcrumb__current{color:var(--text-body);font-weight:var(--fw-medium)}

/* ---------- Pagination ---------- */
.js-pagination{display:flex;align-items:center;gap:var(--space-2)}
.js-pagination__item{min-width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--radius-sm);background:none;font-family:var(--font-sans);font-size:var(--fs-body-sm);color:var(--text-body);cursor:pointer;transition:var(--transition-color)}
.js-pagination__item:hover{background:var(--surface-hover)}
.js-pagination__item[aria-current="page"]{background:var(--action-primary);color:var(--text-on-accent)}
.js-pagination__item[disabled]{opacity:.35;cursor:not-allowed}

/* ---------- Accordion ---------- */
.js-accordion{border-top:1px solid var(--border-hairline)}
.js-accordion__item{border-bottom:1px solid var(--border-hairline)}
.js-accordion__trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);padding:var(--space-5) 0;background:none;border:none;text-align:left;font-family:var(--font-sans);font-size:var(--fs-body);font-weight:var(--fw-medium);color:var(--text-heading);cursor:pointer;transition:var(--transition-color)}
.js-accordion__trigger:hover{color:var(--text-accent)}
.js-accordion__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus)}
.js-accordion__sign{flex:none;width:14px;height:14px;position:relative;color:var(--text-accent)}
.js-accordion__sign::before,.js-accordion__sign::after{content:"";position:absolute;background:currentColor;transition:transform var(--dur-base) var(--ease-out),opacity var(--dur-fast) var(--ease-standard)}
.js-accordion__sign::before{left:0;top:6px;width:14px;height:1px}
.js-accordion__sign::after{left:6px;top:0;width:1px;height:14px}
.js-accordion__trigger[aria-expanded="true"] .js-accordion__sign::after{opacity:0;transform:rotate(90deg)}
.js-accordion__panel{padding:0 0 var(--space-6);color:var(--text-muted);font-size:var(--fs-body-sm);line-height:var(--lh-body);max-width:var(--measure-prose)}

/* ---------- Dialog ---------- */
.js-dialog__scrim{position:fixed;inset:0;background:var(--surface-scrim);backdrop-filter:blur(var(--blur-scrim));display:grid;place-items:center;padding:var(--space-6);z-index:var(--z-modal);animation:js-fade var(--dur-base) var(--ease-standard)}
.js-dialog{width:100%;max-width:520px;background:var(--surface-page);border-radius:var(--radius-md);box-shadow:var(--shadow-xl);padding:var(--space-10);animation:js-rise var(--dur-slow) var(--ease-out)}
.js-dialog__title{font-family:var(--font-display);font-weight:var(--fw-light);font-size:var(--fs-h3);letter-spacing:var(--ls-heading);color:var(--text-heading);margin:0 0 var(--space-3)}
.js-dialog__body{font-size:var(--fs-body-sm);line-height:var(--lh-body);color:var(--text-muted)}
.js-dialog__body p{margin:0}
.js-dialog__actions{display:flex;gap:var(--gap-inline);justify-content:flex-end;margin-top:var(--space-8)}
.js-dialog__close{position:absolute;top:var(--space-4);right:var(--space-4)}
@keyframes js-fade{from{opacity:0}to{opacity:1}}
@keyframes js-rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---------- Toast ---------- */
.js-toast{display:flex;align-items:stretch;gap:var(--space-3);min-width:280px;max-width:420px;padding:var(--space-4) var(--space-5);background:var(--surface-inverse);color:var(--text-on-inverse);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);animation:js-rise var(--dur-slow) var(--ease-out)}
.js-toast--light{background:var(--surface-page);color:var(--text-body);border:1px solid var(--border-hairline)}
.js-toast__rail{flex:none;width:2px;background:var(--js-ocean-blue);border-radius:var(--radius-pill)}
.js-toast--success .js-toast__rail{background:var(--status-success)}
.js-toast--danger .js-toast__rail{background:var(--status-danger)}
.js-toast__title{font-size:var(--fs-body-sm);font-weight:var(--fw-semibold);margin:0 0 2px}
.js-toast__text{font-size:var(--fs-caption);opacity:.78;margin:0}

/* ---------- Tooltip ---------- */
.js-tooltip{position:relative;display:inline-flex}
.js-tooltip__bubble{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%) translateY(4px);padding:var(--space-2) var(--space-3);background:var(--js-deep-navy);color:var(--js-soft-white);font-size:var(--fs-caption);white-space:nowrap;border-radius:var(--radius-sm);opacity:0;pointer-events:none;transition:opacity var(--dur-fast) var(--ease-standard),transform var(--dur-fast) var(--ease-out);z-index:var(--z-overlay)}
.js-tooltip:hover .js-tooltip__bubble,.js-tooltip:focus-within .js-tooltip__bubble{opacity:1;transform:translateX(-50%)}

/* ---------- Spinner ---------- */
.js-spinner{display:inline-block;border:2px solid var(--js-deep-ocean-16);border-top-color:var(--js-deep-ocean);border-radius:var(--radius-circle);animation:js-spin 720ms linear infinite}
@keyframes js-spin{to{transform:rotate(360deg)}}

/* ---------- Logo ---------- */
.js-logo{display:inline-flex;align-items:center}
.js-logo img{height:100%;width:auto;display:block}
.js-logo--onDark img{filter:brightness(0) invert(1)}

/* ---------- Product card ---------- */
.js-product{display:flex;flex-direction:column;background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);overflow:hidden;text-decoration:none;transition:var(--transition-lift),var(--transition-color)}
.js-product:hover{transform:var(--lift-hover);box-shadow:var(--shadow-md);border-color:var(--border-hairline)}
.js-product__media{position:relative;aspect-ratio:1/1;background:var(--js-pearl);overflow:hidden}
.js-product__media img{width:100%;height:100%;object-fit:cover;transition:var(--transition-media)}
.js-product:hover .js-product__media img{transform:var(--media-zoom-hover)}
.js-product__flag{position:absolute;top:var(--space-3);left:var(--space-3)}
.js-product__body{padding:var(--space-5);display:flex;flex-direction:column;gap:var(--space-2)}
.js-product__name{font-family:var(--font-display);font-weight:var(--fw-regular);font-size:var(--fs-h4);line-height:var(--lh-snug);letter-spacing:var(--ls-heading);color:var(--text-heading);margin:0}
.js-product__meta{font-size:var(--fs-caption);color:var(--text-muted);margin:0;font-variant-numeric:tabular-nums}
.js-product__price{font-size:var(--fs-body-sm);font-weight:var(--fw-semibold);color:var(--text-body);font-variant-numeric:tabular-nums}
.js-product__swatches{display:flex;gap:var(--space-1);margin-top:var(--space-1)}

/* ---------- Finish swatch ---------- */
.js-finish{position:relative;display:inline-flex;flex-direction:column;align-items:center;gap:var(--space-2);background:none;border:none;padding:0;cursor:pointer}
.js-finish__chip{position:relative;width:44px;height:44px;border-radius:var(--radius-circle);border:1px solid var(--border-subtle);overflow:hidden;transition:var(--transition-lift),box-shadow var(--dur-base) var(--ease-out)}
.js-finish__chip::after{content:"";position:absolute;inset:0}
.js-finish:hover .js-finish__chip{transform:var(--lift-hover);box-shadow:var(--shadow-sm)}
.js-finish[aria-pressed="true"] .js-finish__chip{box-shadow:0 0 0 1px var(--surface-page),0 0 0 2px var(--js-deep-ocean)}
.js-finish:focus-visible .js-finish__chip{box-shadow:var(--shadow-focus)}
.js-finish__code{font-family:var(--font-sans);font-size:var(--fs-micro);font-weight:var(--fw-semibold);letter-spacing:var(--ls-label);color:var(--text-muted)}
.js-finish--sm .js-finish__chip{width:22px;height:22px}
.js-finish--square .js-finish__chip{border-radius:var(--radius-xs)}

/* ---------- Spec table ---------- */
.js-spec{width:100%;border-collapse:collapse;font-size:var(--fs-body-sm)}
.js-spec caption{text-align:left;font-family:var(--font-sans);font-size:var(--fs-eyebrow);font-weight:var(--fw-semibold);letter-spacing:var(--ls-eyebrow);text-transform:uppercase;color:var(--text-accent);padding-bottom:var(--space-3)}
.js-spec th,.js-spec td{text-align:left;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-subtle)}
.js-spec thead th{font-size:var(--fs-micro);font-weight:var(--fw-semibold);letter-spacing:var(--ls-label);text-transform:uppercase;color:var(--text-muted);border-bottom-color:var(--border-hairline)}
.js-spec tbody td{font-variant-numeric:tabular-nums;color:var(--text-body)}
.js-spec tbody tr:hover{background:var(--surface-page-alt)}
.js-spec th[scope="row"]{font-weight:var(--fw-medium);color:var(--text-heading)}
