:root{--paper:#F4F1E9;--paper-2:#ECE6D8;--panel:#E5D9C2;--ink:#17140E;--ink-soft:#241F16;--rubric:#1F4E79;--rubric-dark:#163A5C;--eyebrow-mark:"\00A7";--accent-on-dark:#A7C2DD;--accent-creed:#8FB1D0;--accent-pale:#CFE0F0;--rubric-rgb:31,78,121;--mark-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'%3E%3Cpath d='M7 9.5C7 6.5 8 4.5 8.5 4.5 9 4.5 10 6.5 10 9 10 6 11 4 12 4 13 4 14 6 14 9 14 6.5 15 4.5 15.5 4.5 16 4.5 17 6.5 17 9.5 17 12.5 15 15 12 15.5 9 15 7 12.5 7 9.5Z'/%3E%3Cpath d='M11.4 15h1.2v7h-1.2z'/%3E%3Cpath d='M12 19C8.5 18.5 6.8 16.5 6.5 14 9.5 14.8 11.4 16.3 12 19Z'/%3E%3Cpath d='M12 19C15.5 18.5 17.2 16.5 17.5 14 14.5 14.8 12.6 16.3 12 19Z'/%3E%3C/svg%3E");--header-bg:#fff;--footer-bg:#173B5C;--muted:#6E6657;--line:rgba(23,20,14,.14);--line-lt:rgba(244,241,233,.16);}
/* Color-scheme toggle. Default = Geneva navy (blue) — the primary brand theme.
   Setting data-theme="red" on <html> swaps the accent back to the original rubric red
   + pilcrow eyebrow. The head script sets it from ?theme=blue|red (remembered in
   localStorage); each theme also overrides the on-dark/pale accent tints + --rubric-rgb. */
[data-theme="red"]{--rubric:#9E2B22;--rubric-dark:#85221b;--eyebrow-mark:"\00B6";--footer-bg:#7E211A;--accent-on-dark:#E7A79F;--accent-creed:#D98A82;--accent-pale:#F3CFCB;--rubric-rgb:158,43,34;}
*{box-sizing:border-box;}
body{margin:0;background:var(--paper);color:var(--ink);font-family:Inter,system-ui,sans-serif;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;min-height:100vh;display:flex;flex-direction:column;}
/* Sticky footer (all page templates): short pages stretch the main area so the
   footer sits at the bottom of the viewport instead of floating mid-page with
   blank space beneath it. Most pages wrap <main>+footer in <div class="page">;
   some (index, products, categories) put content/footer straight in <body>.
   These rules cover every variant — whichever wrapper exists grows to fill. */
.page{flex:1 0 auto;display:flex;flex-direction:column;}
#main{flex:1 0 auto;}
.foot{margin-top:auto;}
a{color:inherit;text-decoration:none;}img{max-width:100%;display:block;}
.wrap{max-width:1180px;margin:0 auto;padding:0 28px;}
.serif{font-family:Fraunces,Georgia,serif;}
.rubric{font:500 .72rem/1 Inter;letter-spacing:.24em;text-transform:uppercase;color:var(--rubric);display:inline-flex;align-items:center;gap:.55em;}
.rubric::before{content:"";display:inline-block;width:1.15em;height:1.15em;background-color:currentColor;-webkit-mask:var(--mark-mask) center/contain no-repeat;mask:var(--mark-mask) center/contain no-repeat;}
.btn{display:inline-block;font:500 .82rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;padding:15px 30px;border:1px solid var(--ink);cursor:pointer;transition:.18s;}
.btn-solid{background:var(--rubric);border-color:var(--rubric);color:var(--paper);}.btn-solid:hover{background:var(--rubric-dark);border-color:var(--rubric-dark);}
.btn-ghost{background:transparent;color:var(--paper);border-color:var(--line-lt);}.btn-ghost:hover{background:var(--paper);color:var(--ink);border-color:var(--paper);}

.utility{background:var(--ink);color:var(--paper);font:500 .72rem/1 Inter;letter-spacing:.14em;text-transform:uppercase;}
.utility .wrap{display:flex;align-items:center;justify-content:space-between;padding:10px 28px;}
.utility .msg .dot{color:var(--rubric);margin:0 .6em;}
.utility .msg .ann-flash{background:var(--rubric);color:var(--paper);padding:2px 9px;border-radius:2px;margin-left:.7em;letter-spacing:.08em;}
.utility .soc{display:flex;gap:14px;font-size:.95rem;}
.utility .soc a:hover{color:var(--rubric);}

.head{position:sticky;top:0;z-index:40;background:var(--header-bg);border-bottom:1px solid var(--line);}
.head .wrap.head-top{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;height:76px;gap:12px;}
.head-top .burger{grid-column:1;justify-self:start;}
.head-top .brand{grid-column:2;justify-self:center;}
.head-top .icons{grid-column:3;justify-self:end;}
.navrow{border-top:1px solid var(--line);}
.navrow .menu{max-width:1180px;margin:0 auto;padding:0 28px;justify-content:center;height:auto;gap:0;}
.navrow .menu>li>a{padding:14px 18px;}
.brand{font-family:Fraunces,serif;font-weight:600;font-size:1.44rem;letter-spacing:.01em;display:inline-flex;align-items:center;}.brand .amp{color:var(--rubric);}
.brand img{height:54px;width:auto;display:block;}
.d-top .brand img{height:30px;}
.menu{display:flex;gap:30px;list-style:none;margin:0;padding:0;height:100%;}
.menu>li{display:flex;align-items:center;}
.menu>li>a{font:500 .78rem/1 Inter;letter-spacing:.13em;text-transform:uppercase;padding:6px 0;border-bottom:1.5px solid transparent;transition:.15s;}
.menu>li:hover>a,.menu>li:focus-within>a{color:var(--rubric);border-color:var(--rubric);}
.icons{display:flex;gap:18px;align-items:center;}.icons a,.icons button{display:inline-flex;background:none;border:0;color:var(--ink);cursor:pointer;padding:0;}.icons svg{width:21px;height:21px;}
.icons #cartToggle{position:relative;overflow:visible;}
.cart-count{position:absolute;top:-6px;right:-8px;min-width:16px;height:16px;padding:0 4px;box-sizing:border-box;border-radius:8px;background:var(--rubric);color:#fff;font:600 .6rem/16px Inter;text-align:center;letter-spacing:.02em;pointer-events:none;}
.cart-count.hidden{display:none;}
.burger{display:none;appearance:none;-webkit-appearance:none;background:none;border:0;padding:0;margin:0;cursor:pointer;color:var(--ink);align-items:center;justify-content:center;}
.burger svg{width:24px;height:24px;display:block;}

.mega{position:absolute;left:0;right:0;top:100%;background:var(--paper);border-top:1px solid var(--line);box-shadow:0 26px 46px rgba(23,20,14,.12);opacity:0;visibility:hidden;transition:opacity .2s ease, visibility 0s linear .2s;z-index:39;}
.menu>li:hover .mega,.menu>li:focus-within .mega{opacity:1;visibility:visible;transition:opacity .2s ease;}
/* nowrap keeps all containers on one row so a promo never floats to a second line; the text columns' flex-shrink then compresses them (links wrap within reason) to make room, while the fixed-width promos hold their size. */
.mega .inner{max-width:1280px;margin:0 auto;padding:30px 28px 36px;display:flex;flex-wrap:nowrap;justify-content:center;gap:22px 16px;align-items:flex-start;}
.mega .mh{flex:0 0 100%;margin-bottom:2px;}
.mega a{font-size:.84rem;color:#43403a;padding:4px 0;display:block;border-bottom:1px solid transparent;width:max-content;}
.mega a:hover{color:var(--rubric);}
/* Promo block (mType=promo) — featured image+caption card in the mega panel. */
.mega a.mega-promo{flex:0 0 177px;align-self:flex-start;width:auto;padding:0;border:0;border-radius:0;overflow:visible;background:none;box-shadow:none;}
.mega a.mega-promo .mega-promo-frame{display:block;overflow:hidden;background:#ECE6D8;}
.mega a.mega-promo img{display:block;width:177px;height:236px;object-fit:cover;border-radius:0;background:#ECE6D8;transition:opacity .4s ease, transform .5s;}
.mega a.mega-promo:hover .mega-promo-img{transform:scale(1.04);}
.mega .mega-promo-t{display:block;font-weight:500;color:var(--ink);padding:8px 0 0;font-size:.82rem;}
.mega a.mega-promo:hover .mega-promo-t{color:var(--rubric);}
.mega .mega-promo-b{display:block;color:#7a766c;font-size:.76rem;line-height:1.3;padding:1px 0 0;}
/* Grouped column (mType=group) / loose-link column: heading + child links. */
/* Text columns sit at their own content width (grow:0 → no empty padding inside a short block): narrow menus stay narrow, wider menus + fixed-width promos still fit one row, and columns shrink (text wraps within reason) before anything floats to a second row. max-width only caps a pathologically long single column; the panel's justify-content:center then clusters the blocks instead of stretching/spreading them. */
.mega .mega-col,.mega .mega-loose{flex:0 1 auto;min-width:0;max-width:240px;align-self:flex-start;}
.mega .mega-col a{width:auto;white-space:normal;line-height:1.25;}
/* 1-2 text columns: size to content (links don't wrap), plus a fixed breathing gutter so a dense column isn't cramped — a set amount beyond natural width, rather than growing to absorb all the slack (which over-pads short columns, the Discover-menu problem). */
.mega.mega-wide .mega-col,.mega.mega-wide .mega-loose{flex:0 1 auto;min-width:0;max-width:320px;padding-right:34px;}
.mega.mega-wide .mega-col-h,.mega.mega-wide .mega-col a{white-space:nowrap;}
/* Hairline "pinstripe" dividers between adjacent text columns only — never against an image block. Drawn as an absolutely-positioned pseudo-element so its height is independent of the column: it starts at the top of the content and runs the height of the promo image (236px, matching .mega-promo img). */
.mega .mega-col + .mega-col{position:relative;padding-left:22px;}
.mega .mega-col + .mega-col::before{content:"";position:absolute;left:0;top:0;height:236px;width:1px;background:var(--line);}
.mega .mega-col-h{display:block;font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;color:#9b8f78;font-weight:600;padding:0;margin-bottom:4px;width:auto;}
/* lazysizes fade-in + parchment placeholder while the image loads. */
.mega a.mega-promo img{background:#ECE6D8;}
.mega img.lazyload{opacity:0;}
.mega img.lazyloaded{opacity:1;transition:opacity .4s ease;}
/* Below full desktop width, drop the feature image cards (they duplicate the
   text links) so the columns get the room; text menu stays to the drawer cutoff. */
@media(max-width:1280px){.mega a.mega-promo{display:none;}}

.slider{position:relative;background:var(--ink);color:var(--paper);overflow:hidden;max-width:1280px;margin:0 auto;}
.slides{display:flex;transition:transform .6s cubic-bezier(.4,0,.1,1);}
.slide{min-width:100%;position:relative;}
.imgslide{display:block;}
.imgslide img{width:100%;height:auto;display:block;}
.slide .wrap{padding:108px 28px 104px;position:relative;z-index:2;}
.slide .rubric{color:var(--accent-creed);}
.slide h2{font-family:Fraunces,serif;font-weight:500;font-size:clamp(2.8rem,8vw,5.6rem);line-height:.98;letter-spacing:-.018em;margin:.5rem 0 1.3rem;max-width:13ch;}
.slide h2 em{font-style:italic;color:var(--rubric);}
.slide p{font-size:1.16rem;color:#CFC7B5;max-width:34ch;margin:0 0 2.1rem;}
.slide .ghost{position:absolute;right:-2%;bottom:-6%;font-family:Fraunces,serif;font-style:italic;font-size:clamp(5rem,15vw,12rem);color:rgba(244,241,233,.045);white-space:nowrap;z-index:1;pointer-events:none;}
/* Sleek circular "glass" arrows (replaces the old translucent squares). */
.s-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:5;display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;border:0;background:rgba(23,20,14,.30);color:#fff;font-size:1.3rem;line-height:1;cursor:pointer;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);box-shadow:0 2px 10px rgba(23,20,14,.18);transition:background .18s ease,transform .18s ease;}
.s-arrow:hover{background:rgba(23,20,14,.52);}
.s-arrow:active{transform:translateY(-50%) scale(.92);}
.s-arrow.prev{left:14px;}.s-arrow.next{right:14px;}
.dots{position:absolute;bottom:24px;left:0;right:0;display:flex;justify-content:center;gap:10px;z-index:5;}
.dot{width:9px;height:9px;border-radius:50%;border:1px solid rgba(244,241,233,.5);background:transparent;cursor:pointer;padding:0;}.dot.on{background:var(--rubric);border-color:var(--rubric);}
/* Mobile: lift the dots off the image into a discrete strip below it (on the page
   parchment, not a black bar), and drop the arrows — autoplay + dots already cue the swipe. */
@media(max-width:700px){
  .slider{background:var(--paper);}
  .dots{position:static;padding:13px 0 14px;}
  .dot{border-color:rgba(23,20,14,.32);}  /* visible on the light strip */
  .s-arrow{display:none;}
}

.section{padding:84px 0;}
.section-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:38px;gap:20px;flex-wrap:wrap;}
.section-head h2{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.9rem,4vw,2.7rem);letter-spacing:-.015em;margin:.5rem 0 0;}
.section-head .more{font:500 .76rem/1 Inter;letter-spacing:.13em;text-transform:uppercase;color:var(--rubric);border-bottom:1.5px solid var(--rubric);padding-bottom:3px;}

/* Interior page header (account, contact, faq, returns, legal, etc.) */
.page-hero{padding:48px 0 6px;}
.page-hero .crumb{font:500 .72rem/1 Inter;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:10px;}
.page-hero .crumb a{color:inherit;text-decoration:none;}.page-hero .crumb a:hover{color:var(--rubric);}
.page-hero h1{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.9rem,4vw,2.7rem);letter-spacing:-.015em;margin:0;}
.page-hero h1::before{content:"";display:inline-block;width:.74em;height:.74em;background-color:var(--rubric);-webkit-mask:var(--mark-mask) center/contain no-repeat;mask:var(--mark-mask) center/contain no-repeat;vertical-align:-.02em;margin-right:.5rem;}
.page-hero p.lede{color:var(--muted);max-width:60ch;margin:14px 0 0;}

/* Long-form content pages (policies, FAQ, care, shipping) */
.prose{max-width:72ch;margin:0 auto;}
.prose h2,.prose h3,.prose h4{font-family:Fraunces,serif;font-weight:500;letter-spacing:-.01em;margin:1.8em 0 .5em;}
.prose h2{font-size:1.55rem;}
.prose h3{font-size:1.3rem;}
.prose h4{font-size:1.12rem;}
.prose p,.prose li{line-height:1.7;}
.prose ul,.prose ol{padding-left:1.2em;margin:0 0 1em;}
.prose li{margin:.3em 0;}
.prose a{color:var(--rubric);text-decoration:underline;text-underline-offset:2px;}
.prose hr{border:0;border-top:1px solid var(--line);margin:1.8em 0;}
.prose blockquote{border-left:3px solid var(--rubric);padding-left:1em;margin:1.4em 0;color:var(--muted);}
.prose blockquote center{text-align:left;}

/* "Still need help?" style call-to-action band */
.cta-band{background:var(--ink);color:var(--paper);text-align:center;padding:56px 0;}
.cta-band h3{font-family:Fraunces,serif;font-weight:500;font-size:1.6rem;margin:0 0 18px;color:var(--paper);}

/* FAQ accordion (native details/summary, no JS) */
.faq{max-width:72ch;margin:0 auto;}
.faq details{border-top:1px solid var(--line);}
.faq details:last-child{border-bottom:1px solid var(--line);}
.faq summary{list-style:none;cursor:pointer;padding:18px 0;font-family:Fraunces,serif;font-size:1.12rem;font-weight:500;display:flex;justify-content:space-between;align-items:center;gap:1em;}
.faq summary::-webkit-details-marker{display:none;}
.faq summary::after{content:"+";color:var(--rubric);font-size:1.4em;line-height:1;}
.faq details[open] summary::after{content:"\2013";}
.faq details > div{padding:0 0 20px;max-width:68ch;}
.faq details > div p{margin:0 0 .8em;line-height:1.7;}
.faq a{color:var(--rubric);text-decoration:underline;text-underline-offset:2px;}

/* Contact page */
.contact-wrap{max-width:560px;margin:0 auto;}
.contact-wrap .form-control,.contact-wrap select,.contact-wrap textarea{margin-bottom:14px;}
.contact-wrap button{width:100%;}
.contact-meta{display:flex;flex-wrap:wrap;gap:24px;justify-content:center;margin:42px auto 0;max-width:560px;text-align:center;}
.contact-meta .ci{flex:1 1 200px;}
.contact-meta .ci i{color:var(--rubric);font-size:1.4rem;display:block;margin-bottom:8px;}
.contact-meta .ci h4{font-family:Fraunces,serif;font-weight:500;margin:0 0 .25em;}
.contact-meta .ci a{color:var(--rubric);}

/* 404 / error page */
.notfound{text-align:center;padding:90px 0;}
.notfound .code{font-family:Fraunces,serif;font-size:clamp(4rem,12vw,8rem);font-weight:500;color:var(--rubric);line-height:1;}
.notfound p{color:var(--muted);font-size:1.1rem;margin:12px 0 28px;}

/* ECT product-not-found state (proddetail.php → notfoundmarkup(): a #stextform wrapper holding
   .prodnoexist h1, .notfoundremoved, .notfoundtrysearch and a search bar). Bare/unstyled out of
   the box — give it the centred empty-state treatment matching .notfound above. NB: the class
   `notfoundinput` is on BOTH the wrapper div and the <input>, so disambiguate with div./input. */
.pg-proddetail #stextform{max-width:620px;margin:0 auto;text-align:center;padding:30px 0 12px;}
.pg-proddetail .prodnoexist{margin:0;}
.pg-proddetail .prodnoexist h1{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.7rem,4vw,2.5rem);line-height:1.14;color:var(--ink);margin:0 0 16px;}
.pg-proddetail .notfoundremoved{color:var(--muted);font-size:1.05rem;line-height:1.6;margin:0;}
.pg-proddetail .notfoundtrysearch{color:var(--ink);font-weight:500;margin:20px 0 14px;}
.pg-proddetail .notfoundinputcntnr{display:flex;justify-content:center;}
.pg-proddetail div.notfoundinput{display:flex;align-items:stretch;width:100%;max-width:420px;text-align:left;}
.pg-proddetail input.ecttextinput.notfoundinput{flex:1;min-width:0;border:1px solid var(--line);border-right:0;border-radius:2px 0 0 2px;padding:13px 15px;font:400 .98rem Inter;background:#fff;color:var(--ink);}
.pg-proddetail input.ecttextinput.notfoundinput:focus{outline:none;border-color:var(--ink);}
.pg-proddetail .notfoundsubmit{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;min-width:52px;border:1px solid var(--rubric);background:var(--rubric);color:var(--paper);border-radius:0 2px 2px 0;font-size:1.05rem;line-height:1;cursor:pointer;transition:.18s;}
.pg-proddetail .notfoundsubmit:hover{background:var(--rubric-dark);border-color:var(--rubric-dark);}
/* Optional "similar category" suggestion + contact-us fallback, if ECT emits them */
.pg-proddetail .prodnoexistaltcat{margin:22px 0 4px;}
.pg-proddetail .prodnoexistcatimg img{max-width:160px;height:auto;border:1px solid var(--line);border-radius:3px;}
.pg-proddetail .prodnoexistcat a,.pg-proddetail .notfoundcontact a{color:var(--rubric);}
.pg-proddetail .notfoundcontact{color:var(--muted);margin-top:22px;}

/* Gift certificate options */
.gift-duo{display:grid;grid-template-columns:repeat(2,1fr);gap:24px;}
.gift-tile{background:var(--paper-2);border:1px solid var(--line);padding:48px 36px;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:280px;}
.gift-tile .rubric{margin-bottom:14px;}
.gift-tile h2{font-family:Fraunces,serif;font-weight:500;margin:0 0 22px;font-size:1.7rem;}
@media(max-width:700px){.gift-duo{grid-template-columns:1fr;}}

/* Partner / client logo strip (about page) */
.logo-strip{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:38px;margin-top:6px;}
.logo-strip img{height:54px;width:auto;opacity:.55;filter:grayscale(1);transition:.2s;}
.logo-strip img:hover{opacity:1;filter:none;}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:34px 26px;}
.card{position:relative;}
.card .frame{background:var(--paper-2);aspect-ratio:4/5;overflow:hidden;margin-bottom:16px;}
.card .frame img{width:100%;height:100%;object-fit:cover;transition:transform .5s;}
.card:hover .frame img{transform:scale(1.04);}
.card .nm{font-size:.98rem;line-height:1.35;margin-bottom:3px;}.card:hover .nm{color:var(--rubric);}
.card .pr{font:500 .92rem/1 Inter;color:var(--muted);}
.tag{position:absolute;top:12px;left:12px;background:var(--rubric);color:var(--paper);font:500 .62rem/1 Inter;letter-spacing:.14em;text-transform:uppercase;padding:6px 9px;}

/* Store-generated product blocks (ECT inccrosssell, fp-bs-*) */
.ectblock{padding:70px 0;}
.ectblock.alt{background:var(--paper-2);}
.ectblock .cstitle{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.8rem,4vw,2.6rem);letter-spacing:-.015em;margin:0 0 34px;}
.ectblock .cstitle::before{content:"";display:inline-block;width:.78em;height:.78em;background-color:var(--rubric);-webkit-mask:var(--mark-mask) center/contain no-repeat;mask:var(--mark-mask) center/contain no-repeat;vertical-align:-.04em;margin-right:.5rem;}
.cs-carousel{position:relative;}
/* overflow-y:hidden is deliberate — overflow-x:auto alone makes overflow-y compute to auto,
   giving the rail a few px of vertical scroll that absorbs page-scroll and jitters the row.
   justify-content:safe center centers a partial row but falls back to start when it overflows. */
.fp-bs-products{display:flex;gap:26px;justify-content:safe center;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;list-style:none;margin:0;padding:0 0 6px;scrollbar-width:none;}
.fp-bs-products::-webkit-scrollbar{display:none;}
.fp-bs-product{position:relative;flex:0 0 calc((100% - 78px)/4);scroll-snap-align:start;}
.fp-bs-product.reveal{transform:none;}/* fade only — vertical rise would clip under overflow-y:hidden */
/* Sleek, discreet edge arrows. Hidden by default; each slides in only when the pointer
   is on its side of the rail (JS toggles .show-prev/.show-next on the wrap), and the arrow
   for an end you've already reached is removed (JS toggles .at-start/.at-end). */
.cs-arrow{position:absolute;top:46%;z-index:4;display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:0;border-radius:50%;background:rgba(255,255,255,.8);color:var(--ink);font-size:1.05rem;line-height:1;cursor:pointer;opacity:0;box-shadow:0 2px 9px rgba(23,20,14,.12);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);transition:opacity .2s ease, transform .2s ease, background .15s, color .15s;}
.cs-arrow.prev{left:8px;transform:translateY(-50%) translateX(-8px);}
.cs-arrow.next{right:8px;transform:translateY(-50%) translateX(8px);}
/* reveal the arrow for the hovered side (or on keyboard focus) — slide flush to the edge */
.cs-carousel.show-prev .cs-arrow.prev,.cs-carousel.show-next .cs-arrow.next,.cs-arrow:focus-visible{opacity:1;transform:translateY(-50%) translateX(0);}
.cs-arrow:hover{background:#fff;color:var(--rubric);}
/* no arrow pointing where you can't go: hide prev at the start, next at the end */
.cs-carousel.at-start .cs-arrow.prev,.cs-carousel.at-end .cs-arrow.next{display:none;}
.cs-carousel.no-overflow .cs-arrow{display:none;}/* nothing to scroll (partial row) — hide arrows */
/* Touch / mobile: no arrows at all — free-scroll with peeking neighbours is the cue
   (ScriptureType style). Dropping mandatory snap makes the rail glide instead of stopping. */
@media (hover:none){.cs-arrow{display:none;}.fp-bs-products{scroll-snap-type:none;}}
div.fp-bs-prodimage{background:var(--paper-2);aspect-ratio:4/5;overflow:hidden;margin-bottom:14px;}
.ectblock.alt div.fp-bs-prodimage{background:#E2DAC9;}
div.fp-bs-prodimage .ectlink,div.fp-bs-prodimage a{display:block;width:100%;height:100%;}
img.fp-bs-prodimage{width:100%;height:100%;object-fit:cover;transition:transform .5s;}
.fp-bs-product:hover img.fp-bs-prodimage{transform:scale(1.04);}
.fp-bs-prodname{font-size:.96rem;line-height:1.35;}
.fp-bs-prodname a{color:var(--ink);}
.fp-bs-product:hover .fp-bs-prodname a{color:var(--rubric);}
/* Narrower viewports: size the cards so the NEXT one peeks past the edge — the
   visual cue that the rail is swipeable (ScriptureType-style). The gesture itself
   is native: overflow-x:auto + scroll-snap (set above) give touch momentum + snap.
   scroll-padding-left keeps the snapped card off the container edge. */
@media(max-width:920px){.fp-bs-products{gap:18px;scroll-padding-left:0;}.fp-bs-product{flex:0 0 44%;}}
@media(max-width:600px){.fp-bs-product{flex:0 0 70%;}}
/* Detail-page related-product section titles ("You might also like", "More From This Collection",
   "Best Sellers"…). On proddetail these aren't inside .ectblock, so style them here — a centered
   centered Fraunces heading. Scoped to .pd-more so the homepage titles are untouched. */
.pd-more .cstitle{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.3rem,2.2vw,1.7rem);letter-spacing:-.01em;color:var(--ink);text-align:center;margin:0 0 30px;}

.brandintro{text-align:center;padding:82px 0 70px;}
.brandintro .rubric{justify-content:center;margin-bottom:1.25rem;}
.brandintro h2{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.9rem,4.6vw,3rem);line-height:1.08;letter-spacing:-.018em;margin:0 auto;max-width:17ch;}
.brandintro p{color:var(--muted);font-size:1.08rem;line-height:1.6;margin:1.1rem auto 0;max-width:52ch;}
/* Leaner top spacing for the bento tiles (the intro heading now lives in .brandline). */
.catfeature{padding-top:60px;}
.values{padding:18px 0 84px;}
.vgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:46px;text-align:center;}
.vitem .seal{width:86px;height:86px;border-radius:50%;background:var(--paper-2);display:inline-flex;align-items:center;justify-content:center;margin-bottom:20px;position:relative;}
.vitem .seal::after{content:"";position:absolute;inset:7px;border:1px solid rgba(var(--rubric-rgb),.42);border-radius:50%;}
.vitem .seal i{font-size:30px;color:var(--rubric);line-height:1;}
.vitem h3{font-family:Fraunces,serif;font-weight:500;font-size:1.3rem;margin:0 0 9px;}
.vitem p{color:var(--muted);font-size:.95rem;line-height:1.6;margin:0 auto;max-width:32ch;}
@media(max-width:780px){.vgrid{grid-template-columns:1fr;gap:36px;}}
.ticker{background:var(--ink);color:var(--paper);overflow:hidden;padding:13px 0;}
.ticker-track{display:flex;width:max-content;animation:tickermove 32s linear infinite;}
.ticker:hover .ticker-track{animation-play-state:paused;}
.ticker-set{display:flex;align-items:center;flex:0 0 auto;}
.ticker .ph{font-family:Fraunces,serif;font-style:italic;font-size:1.12rem;padding:0 26px;white-space:nowrap;}
.ticker .sep{color:var(--rubric);font-size:.95rem;}
@keyframes tickermove{from{transform:translateX(0);}to{transform:translateX(-50%);}}
@media(prefers-reduced-motion:reduce){.ticker-track{animation:none;flex-wrap:wrap;justify-content:center;}.ticker .ph{padding:4px 16px;}}
.tmonials{padding:90px 0;background:var(--ink);color:var(--paper);}
.tmonials .t-head{text-align:center;margin-bottom:46px;}
.tmonials .t-head .rubric{justify-content:center;margin-bottom:1rem;color:#9A9079;}
.tmonials .t-head h2{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.9rem,4vw,2.7rem);letter-spacing:-.015em;margin:0;color:var(--paper);max-width:24ch;margin-inline:auto;}
/* Homepage "wall of praise": aggregate proof bar + two auto-scrolling marquee
   rows (opposite directions), pause on hover, full-bleed with masked edges. */
.tmonials .t-head h2{margin-bottom:1.1rem;}
.praise-proof{display:flex;align-items:center;justify-content:center;gap:8px 14px;flex-wrap:wrap;}
.praise-proof .pstars{color:#C9A24B;letter-spacing:4px;font-size:1.2rem;line-height:1;}
.praise-proof .pscore{font-family:Fraunces,serif;font-weight:600;font-size:1.25rem;color:var(--paper);}
.praise-proof .ptext{font-size:.92rem;color:#B7AF9D;}
.praise-wall{position:relative;display:flex;flex-direction:column;gap:18px;overflow:hidden;
  -webkit-mask:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);mask:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);}
.praise-row{overflow:hidden;}
.praise-track{display:flex;gap:18px;width:max-content;}
.praise-wall.scroll .praise-track{animation:praise-scroll 64s linear infinite;}
.praise-wall.scroll .praise-row.rev .praise-track{animation-direction:reverse;animation-duration:78s;}
.praise-wall.scroll:hover .praise-track{animation-play-state:paused;}
@keyframes praise-scroll{from{transform:translateX(0);}to{transform:translateX(-50%);}}
.praise-card{flex:0 0 clamp(260px,26vw,340px);background:#211B12;border:1px solid rgba(244,241,233,.07);border-radius:5px;padding:22px 24px;display:flex;flex-direction:column;gap:11px;}
.praise-card .stars{color:#C9A24B;letter-spacing:3px;font-size:.92rem;line-height:1;}
.praise-card .stars .off{color:rgba(201,162,75,.26);}
.praise-card blockquote{margin:0;font-family:Inter,sans-serif;font-size:.95rem;line-height:1.55;color:#D9D2C2;}
.praise-card .who{font-weight:600;font-size:.82rem;letter-spacing:.02em;color:var(--paper);margin-top:auto;}
.praise-card .who::before{content:"\2014\00a0";color:#9A9079;}
@media (prefers-reduced-motion:reduce){
  .praise-wall{-webkit-mask:none;mask:none;}
  .praise-wall.scroll .praise-track{animation:none;flex-wrap:wrap;justify-content:center;width:auto;}
}
/* Mobile: a single scrolling row keeps the reviews block from getting too tall. */
@media(max-width:560px){.praise-wall .praise-row.rev{display:none;}}
.section.alt{background:var(--paper-2);}
.catfeature .bento,.catfeature .plates{margin-top:4px;}
.tile{position:relative;overflow:hidden;display:block;background:var(--paper-2);}
.tile img{width:100%;height:100%;object-fit:cover;transition:transform .6s ease;}
.tile:hover img{transform:scale(1.05);}
.tile .ov{position:absolute;inset:0;background:linear-gradient(to top,rgba(23,20,14,.74),rgba(23,20,14,.06) 56%,rgba(23,20,14,0));}
.tile .cap{position:absolute;left:20px;right:20px;bottom:17px;display:flex;align-items:flex-end;justify-content:space-between;gap:10px;}
.tile .nm{font-family:Fraunces,serif;font-weight:500;font-size:1.45rem;line-height:1.04;color:var(--paper);}
.tile .go{font:500 .67rem/1 Inter;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-pale);white-space:nowrap;padding-bottom:5px;transition:.15s;}
.tile:hover .go{color:var(--paper);}
.bento{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:198px;gap:14px;}
.bento .b1{grid-column:1/3;grid-row:1/3;}.bento .b2{grid-column:3/5;}.bento .b5{grid-column:1/3;}.bento .b6{grid-column:3/5;}

/* Apparel-styles expanding panels (interactive lookbook) sitting under the bento.
   Hover a panel to widen it and reveal its caption; the others collapse to vertical
   serif labels. First panel (.is-open) is open by default until the row is hovered.
   Per-panel background image is set inline in index.php; empty panels fall back to a
   tinted fill so the row reads before photos are added. */
.panels-head{margin:34px 0 14px;}
.panels{display:flex;gap:8px;height:300px;overflow:hidden;}
.panels .panel{position:relative;flex:1 1 0;min-width:0;overflow:hidden;display:block;background:var(--panel) center/cover no-repeat;flex-grow:1;transition:flex-grow .55s cubic-bezier(.4,.05,.15,1);}
.panels .panel .ov{position:absolute;inset:0;background:linear-gradient(to top,rgba(23,20,14,.82),rgba(23,20,14,.12) 62%,rgba(23,20,14,.28));transition:.3s;}
.panels .vlab{position:absolute;bottom:18px;left:50%;transform:translateX(-50%) rotate(180deg);writing-mode:vertical-rl;font-weight:500;font-size:1.05rem;letter-spacing:.02em;color:var(--paper);white-space:nowrap;transition:opacity .3s;}
.panels .cap{position:absolute;left:18px;right:18px;bottom:16px;display:flex;align-items:flex-end;justify-content:space-between;gap:8px;opacity:0;transition:opacity .35s .12s;}
.panels .cap .nm{font-weight:500;font-size:1.45rem;line-height:1.02;color:var(--paper);}
.panels .cap .go{font:500 .67rem/1 Inter;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-pale);white-space:nowrap;padding-bottom:5px;}
.panels .panel.is-open{flex-grow:4.6;}
.panels .panel.is-open .vlab{opacity:0;}.panels .panel.is-open .cap{opacity:1;}
.panels:hover .panel{flex-grow:1;}
.panels:hover .panel .vlab{opacity:1;}.panels:hover .panel .cap{opacity:0;}
.panels:hover .panel:hover{flex-grow:4.6;}
.panels:hover .panel:hover .vlab{opacity:0;}.panels:hover .panel:hover .cap{opacity:1;}
.panels .panel:hover .ov{background:linear-gradient(to top,rgba(23,20,14,.7),rgba(23,20,14,.04) 66%);}
.panels .panel:nth-child(6n+1){background-color:#34302a;}
.panels .panel:nth-child(6n+2){background-color:#6b3b3b;}
.panels .panel:nth-child(6n+3){background-color:#2e2b26;}
.panels .panel:nth-child(6n+4){background-color:#3c3a34;}
.panels .panel:nth-child(6n+5){background-color:#2a2825;}
.panels .panel:nth-child(6n){background-color:#5a3b40;}
@media(max-width:780px){
  .panels{display:grid;grid-template-columns:1fr 1fr;gap:10px;height:auto;}
  .panels .panel{height:150px;}
  .panels .vlab{display:none;}
  .panels .cap{opacity:1;}
}
.plates{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;}
.plates .tile{aspect-ratio:3/4;}
.plates .ov{background:rgba(23,20,14,.34);transition:.25s;}
.plates .tile:hover .ov{background:rgba(23,20,14,.52);}
.plates .cap{flex-direction:column;align-items:center;justify-content:center;inset:0;text-align:center;gap:8px;}
.plates .eyebrow{font:500 .64rem/1 Inter;letter-spacing:.22em;text-transform:uppercase;color:var(--accent-pale);}
.plates .nm{font-size:1.5rem;}
@media(max-width:780px){.bento{grid-template-columns:1fr 1fr;grid-auto-rows:158px;}.bento .tile{grid-column:auto!important;grid-row:auto!important;}.plates{grid-template-columns:1fr 1fr;}}
.creed{background:var(--ink);color:var(--paper);text-align:center;}
.creed .wrap{padding:96px 28px;}.creed .rubric{color:var(--accent-creed);justify-content:center;margin-bottom:1.5rem;}
.creed blockquote{font-family:Fraunces,serif;font-weight:400;font-size:clamp(1.8rem,4.4vw,3.1rem);line-height:1.18;margin:0 auto;max-width:20ch;}
.creed blockquote em{font-style:italic;color:var(--rubric);}
.creed cite{display:block;margin-top:1.7rem;font:500 .76rem/1 Inter;letter-spacing:.16em;text-transform:uppercase;color:#9A9079;font-style:normal;}

/* Editorial mission band — a parchment block that bridges the image-heavy slider and
   the dark brand hero below it. Two-column "masthead" split (statement left, supporting
   copy + shop link right, hairline between) finished with a flanked Latin-motto colophon. */
.brandline{background:var(--paper);padding:84px 28px;}
.brandline .rubric{margin-bottom:1rem;}
.brandline .rubric::before{display:none;}/* drop the fleuron mark on this eyebrow */
.brandline h2 em{font-style:italic;color:var(--rubric);}
.bl-split{max-width:1040px;margin:0 auto;display:grid;grid-template-columns:1fr auto 1fr;gap:56px;align-items:center;}
.bl-logo{display:flex;align-items:center;justify-content:center;}
.bl-logo img{width:132px;height:132px;object-fit:contain;display:block;}/* no circle crop — the emblem is already round on transparent bg, so a mask would trim its edges */
.bl-logo-ph{width:118px;height:118px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:500;font-size:2.1rem;letter-spacing:.04em;color:var(--rubric);background:var(--paper);border:1.5px solid var(--rubric);box-shadow:inset 0 0 0 5px var(--paper),inset 0 0 0 6px rgba(var(--rubric-rgb),.35);}
.bl-head{text-align:right;}/* hug the centered logo so it reads as the centerpiece */
.bl-head h2{font-family:Fraunces,serif;font-weight:500;font-size:clamp(2.1rem,4.2vw,2.9rem);line-height:1.04;letter-spacing:-.02em;color:var(--ink);margin:0;}
.bl-copy p{color:var(--muted);font-size:1.05rem;line-height:1.62;margin:0 0 22px;}
.bl-link{display:inline-block;font:500 .76rem/1 Inter;letter-spacing:.13em;text-transform:uppercase;color:var(--rubric);border-bottom:1.5px solid var(--rubric);padding-bottom:3px;transition:.15s;}
.bl-link:hover{color:var(--rubric-dark);border-color:var(--rubric-dark);}
/* "conviction" — a rubric brushstroke that paints itself left-to-right when the split
   scrolls into view (and re-paints on hover of the band). With no JS / reduced motion
   (no .reveal-on) the stroke is simply shown, fully painted. */
.bl-copy .ul-draw{position:relative;white-space:nowrap;}
.bl-copy .ul-scribble{position:absolute;left:-5px;right:-5px;bottom:-9px;width:calc(100% + 10px);height:13px;overflow:visible;}
.bl-copy .ul-scribble path{fill:var(--rubric);}
.reveal-on .brandline .ul-scribble{clip-path:inset(0 100% 0 0);transition:clip-path .95s cubic-bezier(.45,.05,.2,1);}
.reveal-on .brandline .bl-split.in .ul-scribble,.brandline:hover .ul-scribble{clip-path:inset(0 0 0 0);}
/* Colophon — Latin mottos centred between two short rules. */
.bl-colophon{display:flex;align-items:center;justify-content:center;gap:18px;margin-top:42px;}
.bl-colophon::before,.bl-colophon::after{content:"";height:1px;width:72px;background:var(--line);}
.bl-motto{font:500 .72rem/1 Inter;letter-spacing:.22em;text-transform:uppercase;color:var(--ink);display:inline-flex;align-items:center;gap:12px;}
.bl-motto i{color:var(--rubric);font-style:normal;}
@media(max-width:680px){
  .brandline{padding:52px 22px;}
  .bl-split{grid-template-columns:1fr;gap:20px;text-align:center;justify-items:center;}
  .bl-logo{order:-1;}/* logo stacks on top on mobile */
  .bl-logo img{width:92px;height:92px;}
  .bl-logo-ph{width:84px;height:84px;}
  .bl-logo-ph{font-size:1.5rem;box-shadow:inset 0 0 0 4px var(--paper),inset 0 0 0 5px rgba(var(--rubric-rgb),.35);}
  .bl-head{text-align:center;}
  .brandline .rubric{justify-content:center;}
  .bl-colophon{margin-top:30px;}
  .bl-colophon::before,.bl-colophon::after{width:42px;}
  .bl-motto .m-extra{display:none;}/* mobile: Soli Deo Gloria only */
}

/* Full-width product feature hero — full-bleed stylized image with a left-weighted
   scrim, slow Ken Burns drift, and scroll-revealed copy. Shared by the brand
   ("Wear what you believe"), statue, and sticker blocks on the homepage; each sets
   its own background inline in index.php (CDN-served, swappable). */
.feat-hero{position:relative;display:flex;align-items:center;overflow:hidden;isolation:isolate;min-height:clamp(420px,54vw,600px);background:var(--ink);}
.feat-hero .sh-bg{position:absolute;inset:0;z-index:-2;background-size:cover;background-position:center 28%;transform:scale(1.06);will-change:transform;animation:sh-kenburns 24s ease-in-out infinite alternate;}
.feat-hero .sh-scrim{position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,rgba(15,12,8,.88) 0%,rgba(15,12,8,.66) 40%,rgba(15,12,8,.22) 76%,rgba(15,12,8,.04) 100%);}
.feat-hero .sh-inner{width:100%;}
.feat-hero .sh-copy{max-width:34rem;color:var(--paper);padding:74px 0;}
.feat-hero .sh-copy .rubric{color:var(--accent-on-dark);margin-bottom:1.1rem;}
.feat-hero .sh-copy h2{font-family:Fraunces,serif;font-weight:500;font-size:clamp(2.1rem,5vw,3.4rem);line-height:1.06;letter-spacing:-.02em;margin:0 0 1rem;}
.feat-hero .sh-copy h2 em{font-style:italic;color:var(--accent-on-dark);}
.feat-hero .sh-copy p{color:rgba(244,241,233,.85);font-size:1.06rem;line-height:1.6;margin:0 0 1.9rem;max-width:42ch;}
@keyframes sh-kenburns{from{transform:scale(1.06) translate3d(0,0,0);}to{transform:scale(1.15) translate3d(-2%,-1.5%,0);}}
@media(prefers-reduced-motion:reduce){.feat-hero .sh-bg{animation:none;transform:none;}}
@media(max-width:700px){
  .feat-hero{min-height:0;}
  .feat-hero .sh-bg{background-position:center 22%;}
  .feat-hero .sh-scrim{background:linear-gradient(180deg,rgba(15,12,8,.40) 0%,rgba(15,12,8,.80) 100%);}
  .feat-hero .sh-copy{padding:54px 0;max-width:none;text-align:center;}
  .feat-hero .sh-copy .rubric{justify-content:center;}
  .feat-hero .sh-copy p{margin-left:auto;margin-right:auto;}
}

/* Email-signup band: its own full-width strip in the brand accent (toggles with
   the theme), sitting above the deeper-accent footer. */
.foot-signup{background:var(--rubric);color:var(--paper);}
.foot-news{display:flex;align-items:center;justify-content:space-between;gap:40px;padding:42px 0;}
.foot-news h3{font-family:Fraunces,serif;font-weight:500;color:var(--paper);font-size:1.4rem;margin:0 0 5px;}
.foot-news p{font-size:.9rem;color:rgba(244,241,233,.82);margin:0;max-width:48ch;}
.fn-formwrap{flex:0 0 auto;width:440px;max-width:100%;}
.fn-form{display:flex;width:100%;}
.fn-form input[type=email]{flex:1;min-width:0;background:var(--paper);border:1px solid var(--paper);color:var(--ink);padding:13px 16px;font:400 .9rem Inter;}
.fn-form input[type=email]:focus{outline:2px solid var(--paper);outline-offset:-2px;}
/* Join the field + button into one clean control: square the button (Bootstrap's
   .btn adds a 4px radius on product pages, leaving it looking detached/rounded
   against the square input) and split them with a hairline divider. */
.fn-form .btn{padding:13px 22px;white-space:nowrap;border-radius:0;border-left:1px solid var(--line);}
/* Solid buttons on dark / accent surfaces invert: parchment fill + accent text, so
   a primary button never sits invisibly on a dark section or accent band. Buttons on
   the light parchment body keep the normal solid-accent fill (defined above). */
.slider .btn-solid,.cta-band .btn-solid,.tmonials .btn-solid,.creed .btn-solid,.foot-signup .btn-solid,.foot .btn-solid{background:var(--paper);border-color:var(--paper);color:var(--rubric);}
.slider .btn-solid:hover,.cta-band .btn-solid:hover,.tmonials .btn-solid:hover,.creed .btn-solid:hover,.foot-signup .btn-solid:hover,.foot .btn-solid:hover{background:#fff;border-color:#fff;color:var(--rubric);}
/* Hairline between field and button (needs to out-rank the .btn-solid border-color above). */
.foot-signup .fn-form .btn{border-left:1px solid rgba(23,20,14,.16);}
.fn-result{margin:10px 0 0;font-size:.85rem;min-height:1em;color:#A39A86;}
.fn-result.ok{color:#8fc99a;}
.fn-result.err{color:#e6a39c;}
.foot-cols{display:grid;grid-template-columns:1.5fr 1fr 1fr 1.2fr;gap:40px;padding:44px 0 6px;}

.foot{background:var(--footer-bg);color:#CFC7B5;}
.foot .wrap{padding:0 28px;}
.foot h4{font-family:Fraunces,serif;font-weight:500;color:var(--paper);font-size:1.05rem;margin:0 0 16px;}
.foot ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;}
.foot ul a{font-size:.92rem;}.foot ul a:hover,.foot p a:hover{color:var(--paper);}
.foot .soc{display:flex;gap:16px;font-size:1.15rem;margin-top:16px;}.foot .soc a:hover{color:var(--paper);}
.foot .colophon{border-top:1px solid var(--line-lt);padding:22px 0 36px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;font-size:.8rem;color:#8C836F;}
.foot .colophon .sdg{color:var(--rubric);letter-spacing:.16em;text-transform:uppercase;font-weight:500;}

.scrim{position:fixed;inset:0;background:rgba(23,20,14,.5);opacity:0;visibility:hidden;transition:.2s;z-index:50;}.scrim.on{opacity:1;visibility:visible;}
.drawer{position:fixed;top:0;left:0;bottom:0;width:86%;max-width:360px;background:var(--paper);z-index:60;transform:translateX(-100%);transition:transform .25s ease;overflow-y:auto;}
.drawer.open{transform:none;}
.drawer .d-top{display:flex;align-items:center;justify-content:flex-end;padding:14px 18px;border-bottom:1px solid var(--line);}
/* Quick Ship menu label: small green ship-now dot to the right (reinforces the on-product dot) */
.nav-shipdot{margin-left:3px;}
.d-cat{border-bottom:1px solid var(--line);}
.d-cat>.d-cat-h{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;font:500 .82rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;}
.d-cat .d-sub{display:none;padding:0 22px 14px;}
.d-cat.exp .d-sub{display:block;}.d-cat.exp>.d-cat-h .chev{transform:rotate(180deg);}
.d-cat .d-sub a{display:block;padding:8px 0;font-size:.95rem;color:#43403a;}
.d-cat .d-sub .d-sub-h{display:block;font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:#9b8f78;font-weight:600;margin:12px 0 2px;}
/* Indent each run of sub-links under a subtle left rule so long category lists
   read as tidy groups; the d-sub-h headings (and the lead "Shop all" link +
   promo cards) stay flush, which breaks the rule between groups. */
.d-cat .d-sub a:not(.d-promo):not(:first-child){border-left:1.5px solid var(--line);padding-left:15px;margin-left:1px;}
.d-cat .d-sub a:not(.d-promo):not(:first-child):hover{border-left-color:var(--rubric);color:var(--ink);}
.d-cat .d-sub>a:first-child{margin-bottom:3px;}
.d-cat .d-sub a.d-promo{display:flex;align-items:center;gap:10px;padding:8px 0;}
.d-cat .d-sub a.d-promo img{width:52px;height:52px;object-fit:cover;border-radius:8px;background:#ECE6D8;flex:none;}
.d-cat .d-sub a.d-promo img.lazyload{opacity:0;}
.d-cat .d-sub a.d-promo img.lazyloaded{opacity:1;transition:opacity .4s ease;}
.d-cat .chev{transition:.2s;color:var(--rubric);}
.drawer .d-soc{display:flex;gap:18px;font-size:1.25rem;padding:22px;}

/* Mini cart tray (slides in from the right; ECT incminicart output) */
.cart-tray{position:fixed;top:0;right:0;bottom:0;width:90%;max-width:380px;background:var(--paper);z-index:60;transform:translateX(100%);transition:transform .25s ease;overflow-y:auto;display:flex;flex-direction:column;}
.cart-tray.open{transform:none;}
.ct-top{display:flex;align-items:center;justify-content:space-between;padding:20px 22px;border-bottom:1px solid var(--line);}
.ct-title{font-family:Fraunces,serif;font-weight:600;font-size:1.2rem;}
.ct-x{background:none;border:0;color:var(--ink);cursor:pointer;padding:0;display:inline-flex;}
.ct-body{padding:6px 22px 24px;}
/* Theme the ECT-generated .minicart markup */
.ct-body .minicart{font-family:Inter,system-ui,sans-serif;font-size:.95rem;}
.ct-body .minicart img{display:none;}
.ct-body .minicartcnt{padding:12px 0;border-bottom:1px solid var(--line);color:var(--ink-soft);}
.ct-body .mcLNitems .minicartcnt{display:flex;justify-content:space-between;gap:12px;}
.ct-body .ectMCquant,.ct-body .ectMCtot{font-weight:600;color:var(--ink);}
.ct-body .minicart>.minicartcnt:first-child,.ct-body .minicart>.minicartcnt:last-child{border-bottom:0;}
.ct-body .minicart>.minicartcnt:first-child{padding-top:14px;}
.ct-body .minicart>.minicartcnt:first-child a.mincart{font:500 .72rem/1 Inter;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);}
.ct-body .minicart>.minicartcnt:first-child a.mincart:hover{color:var(--rubric);}
.ct-body button.mincart,.ct-body input.mincart{display:block;width:100%;text-align:center;margin-top:16px;background:var(--rubric);border:1px solid var(--rubric);color:var(--paper);font:500 .82rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;padding:15px 30px;cursor:pointer;transition:.18s;}
.ct-body button.mincart:hover,.ct-body input.mincart:hover{background:var(--rubric-dark);border-color:var(--rubric-dark);color:var(--paper);}

/* Soft-add-to-cart popup. ECT injects #scdiv.scart.scwrap into the shared #opaquediv.ectopaque
   overlay (styled in the softform-modals block above) when the hard cart is off, to confirm the
   added item. The .ectopaque backdrop + .scclose::before X are inherited; here we only theme the
   inner .scwrap box and its contents, mirroring the .ectsoftwrapper / .qbuywrapper look. */
.scart.scwrap{position:relative;background:var(--paper);width:100%;max-width:560px;padding:34px 30px 28px;border-radius:3px;box-shadow:0 30px 70px rgba(23,20,14,.35);box-sizing:border-box;text-align:left;font-family:Inter,system-ui,sans-serif;color:var(--ink-soft);animation:nis-pop .22s ease;}
.scart.sccheckout{display:inline-block;margin-bottom:4px;}
#scoutercontainer{clear:both;}
.scart.scprodsadded{clear:both;font-family:Fraunces,serif;font-size:1.25rem;font-weight:500;color:var(--ink);padding:2px 0 14px;border-bottom:1px solid var(--line);margin-bottom:16px;}
.scimgproducts{display:flex;gap:18px;align-items:flex-start;}
.scart.scimage{flex:0 0 120px;width:120px;text-align:center;}
img.scimage{max-width:100%;height:auto;border:1px solid var(--line);}
.scart.scproducts{flex:1;min-width:0;}
.scart.scproduct{padding-bottom:12px;}
.scart.scprodname{font-weight:500;color:var(--ink);}
.scart.scprice{margin-top:6px;font-weight:600;color:var(--ink);}
.scart.scoptions{margin-top:6px;}
.scart.scoption{display:flex;gap:6px;font-size:.9rem;color:var(--muted);}
.scart.sccartitems{text-align:right;color:var(--muted);font-size:.9rem;padding-top:12px;margin-top:14px;border-top:1px solid var(--line);}
.scart.sccarttotal{text-align:right;font-weight:600;font-size:1.05rem;color:var(--ink);padding-top:4px;}
.scart.sccarttotal span.sccartdscnt,.scart .sccartdscamnt,.scart .mcMCdsct{color:var(--rubric);}
.scart.scnostock,.scart.scbackorder{text-align:center;padding:9px;background:#FBE9E7;border:1px solid var(--rubric);color:var(--rubric);margin:8px 0;}
.scart.scerror{text-align:center;padding:60px 0;color:var(--rubric);}
.scart.sclinks{text-align:right;padding-top:18px;margin-top:6px;border-top:1px solid var(--line);color:var(--muted);}
/* Buttons inside the popup */
.scart .ectbutton{font:500 .74rem/1 Inter;letter-spacing:.08em;text-transform:uppercase;padding:12px 20px;cursor:pointer;transition:.18s;border:1px solid var(--ink);background:transparent;color:var(--ink);}
.scart .ectbutton:hover{background:var(--ink);color:var(--paper);}
.scart button.sccheckout,.scart .sccheckout .ectbutton{background:var(--rubric);border-color:var(--rubric);color:var(--paper);}
.scart button.sccheckout:hover,.scart .sccheckout .ectbutton:hover{background:var(--rubric-dark);border-color:var(--rubric-dark);color:var(--paper);}
.scart .sclinks .ectbutton{margin:0 2px;}
#softcartrelated{margin-top:18px;padding-top:16px;border-top:1px solid var(--line);clear:both;}

@media(max-width:920px){
  .navrow,.icons .desk{display:none;}
  .head .wrap.head-top{height:56px;}
  .head-top .brand img{height:38px;}
  .burger{display:inline-flex;}
  .grid{grid-template-columns:repeat(2,1fr);gap:28px 18px;}
  .foot-cols{grid-template-columns:1fr 1fr;}
  .foot-news{flex-direction:column;align-items:flex-start;gap:16px;}
  .fn-formwrap{width:100%;}
  .utility .soc{display:none;}
}
/* Scroll-reveal: hidden state applied pre-paint via the head's `reveal-on` class
   (set only when JS+IO available and motion allowed) so content never flashes/jumps.
   The footer JS just adds `.in` to fade each element in on scroll. */
.reveal-on .brandline>*,.reveal-on .vitem,.reveal-on .section-head,.reveal-on .bento .tile,.reveal-on .plates .tile,.reveal-on .fp-bs-product,.reveal-on .creed blockquote,.reveal-on .news h2,.reveal-on .news p,.reveal-on .ms-card,.reveal-on .feat-hero .sh-copy>*{opacity:0;transform:translateY(18px);transition:opacity .65s ease,transform .65s cubic-bezier(.2,.7,.2,1);}
.reveal-on .brandline>*.in,.reveal-on .vitem.in,.reveal-on .section-head.in,.reveal-on .bento .tile.in,.reveal-on .plates .tile.in,.reveal-on .fp-bs-product.in,.reveal-on .creed blockquote.in,.reveal-on .news h2.in,.reveal-on .news p.in,.reveal-on .ms-card.in,.reveal-on .feat-hero .sh-copy>*.in{opacity:1;transform:none;}
@media(prefers-reduced-motion:reduce){*{transition:none!important;}.slides{transition:none;}}

/* ===== ECT product detail (proddetail.php) ===== */
.proddetail-col1,.proddetail-col2{margin-bottom:1.5rem;}
/* Collapse an empty cross-sell rail (e.g. "recommended" with no matching products):
   ECT still prints the <section> wrapper, so its vertical padding leaves a blank band
   above the footer. Hide any rail whose product column rendered empty. Scoped to the
   crosssell columns (they carry the inline text-align), so the reviews slot is untouched.
   Keyed off the missing .fp-bs-products rail — can't use :empty (ECT leaves a whitespace
   node) and can't nest :has() inside :has(), so test for the rail via :not(:has()). */
.pd-more section:has(> .container > .row > .col-md-12[style*="text-align"]):not(:has(.fp-bs-products)){display:none;}
/* Sticky gallery: the image column follows the scroll until the (taller) info
   column runs out, then releases — like scripturetype.com. Desktop only; on
   mobile the columns stack so there's nothing to pin against. Top offset clears
   the sticky header (.head-top 76px + nav row ≈ 124px). */
@media(min-width:768px){
  .proddetail-col1 .pd-gallery-sticky{position:sticky;top:130px;}
}
.detailimage img{width:100%;height:auto;border-radius:2px;}
/* Reserve the thumbnail strip's height before MagicScroll initializes (it builds
   late, after load), so the page doesn't jump when the initially-tall raw markup
   collapses to a single strip. Reserved height ≈ one square thumb = column ÷ cols
   (3 across on desktop, 2 on narrow); overflow clips the tall inner until mw.js
   pins the exact height. Keep this slightly generous so a thumb is never cropped. */
.detailthumbnailimage{overflow:hidden;aspect-ratio:2/1;}
@media(min-width:768px){.detailthumbnailimage{aspect-ratio:3/1;}}
.detailname{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.7rem,3vw,2.3rem);line-height:1.12;letter-spacing:-.012em;color:var(--ink);margin:0 0 1rem;}
/* Shopify-style price box: current price + struck original + save pill on one row */
.mw-pricebox{display:flex;align-items:baseline;flex-wrap:wrap;gap:.55rem .7rem;margin:.5rem 0 1rem;}
.detailprice{font-size:1.7rem;font-weight:600;color:var(--ink);margin:0;line-height:1;}
.detailprice strong{display:none;} /* hide the "Price:" label */
.detailprice .price{color:inherit;}
/* When discounted (save badge present), the live price turns rubric-red */
.mw-pricebox:has(.mw-savebadge) .detailprice .price{color:var(--rubric);}
.listpricediv,.detaillistprice{color:var(--muted);}
.detaillistprice{font-size:1.05rem;}
.detaillistprice del,.listprice del,.detailprice del{color:var(--muted);font-weight:400;text-decoration-thickness:1px;}
/* "Save X%" pill */
.mw-savebadge{display:inline-flex;align-items:center;}
.mw-savebadge .badge{display:inline-block;background:var(--rubric);color:var(--paper);font:600 .68rem/1 Inter;letter-spacing:.06em;text-transform:uppercase;padding:.4em .6em;border-radius:999px;}
/* Hide the now-redundant ECT percent-off text (the pill carries it) */
.detailpercentofflistprice{display:none;}
.shiptime{font-size:.92rem;color:var(--muted);margin:.5rem 0 1rem;}
.detailoptions,.optioncontainer{margin:1.1rem 0;}
.optiontext,.detailoptiontext{font:500 .78rem/1.4 Inter;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:.5rem;display:block;}
.detailquantity,.quantity2div{margin:1rem 0;}
.quantity2input,input.detailquantity2input,input.detailquantity{border:1px solid var(--line);padding:10px 12px;width:74px;font:400 1rem Inter;border-radius:2px;}
/* ECT buttons -> theme button (also themes cart/checkout/account site-wide) */
.ectbutton{display:inline-block;font:500 .8rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;padding:14px 28px;border:1px solid var(--rubric);background:var(--rubric);color:var(--paper);cursor:pointer;transition:.18s;border-radius:2px;text-decoration:none;}
.ectbutton:hover{background:var(--rubric-dark);border-color:var(--rubric-dark);color:var(--paper);}
.ectbutton.forgotpassword,.ectbutton.createaccount,.ectbutton.newaccount{background:transparent;color:var(--ink);border-color:var(--ink);}
.ectbutton.forgotpassword:hover,.ectbutton.createaccount:hover,.ectbutton.newaccount:hover{background:var(--ink);color:var(--paper);}
.addtocartquant,.detailaddtocartquant{margin-top:1.4rem;}
.detailbuybutton,.ectbutton.buybutton{padding:16px 40px;font-size:.88rem;}
.detailprodoption,.rcoption{margin-bottom:.4rem;}

/* ===== Product detail refinements: breadcrumb, options-as-buttons, quantity, add-to-cart ===== */
/* Breadcrumb cleanup + hide the in-breadcrumb "Proceed to Checkout" */
.catnavdetail{font-size:.85rem;color:var(--muted);line-height:1.7;margin:0 0 1.2rem;}
.catnavdetail .ectbreadcrumb{display:inline;}
.catnavdetail a.ectlink{color:var(--muted);text-decoration:none;}
.catnavdetail a.ectlink:hover{color:var(--rubric);}
.catnavcheckout{display:none;}

/* Radio/checkbox options styled as selectable buttons.
   A single-value option group is emitted by ECT as a pre-checked .ectcheckbox
   (not a radio) — hide that native box too so it renders as a button like the rest. */
.option.detailoption{display:flex;flex-wrap:wrap;gap:8px;}
.rcoption{position:relative;margin:0;}
.rcoption input.ectradio,.rcoption input.ectcheckbox{position:absolute;opacity:0;width:1px;height:1px;}
.rcoption label.ectlabel{display:inline-block;border:1px solid var(--line);background:#fff;color:var(--ink);padding:9px 16px;min-width:46px;text-align:center;font-size:.92rem;line-height:1.1;cursor:pointer;border-radius:2px;transition:.15s;}
.rcoption label.ectlabel:hover{border-color:var(--ink);}
.rcoption input.ectradio:checked + label.ectlabel,.rcoption input.ectcheckbox:checked + label.ectlabel{background:var(--ink);border-color:var(--ink);color:var(--paper);}
.rcoption input.ectradio:focus-visible + label.ectlabel,.rcoption input.ectcheckbox:focus-visible + label.ectlabel{outline:2px solid var(--rubric);outline-offset:2px;}
/* "hidden" admin option Class = remove the option entirely (not just mark it sold out).
   ECT puts the optClass on the .rcoption wrapper, so an option set to "hidden" in the
   back office disappears from the size selector. (.hidden is scoped here, not global,
   so it can't clobber other uses like .cart-count.hidden.) */
.rcoption.hidden{display:none;}
/* Sold-out option buttons. ECT marks the <label> with .oostock (and ectcart.js may
   also mark the .rcoption), so target both. Recessed parchment fill, muted text, a
   thin corner-to-corner diagonal slash = "this size exists but is gone". Kept
   clickable so the shopper can pick it and join the back-in-stock waitlist. */
.rcoption label.ectlabel.oostock,
.rcoption.oostock label.ectlabel{color:var(--muted);border-color:var(--line);background-color:var(--paper);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='none'%3E%3Cline x1='0' y1='100' x2='100' y2='0' stroke='%236E6657' stroke-width='1' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:center;background-size:100% 100%;text-decoration:none;}
.rcoption label.ectlabel.oostock:hover,
.rcoption.oostock label.ectlabel:hover{border-color:var(--muted);}
/* Selected but sold-out (waitlist pick): keep the slash + muted fill so it never
   reads as a normal in-stock selection; add an ink ring to show it's the active size.
   Overrides the in-stock "selected" (dark fill) rule above. */
.rcoption input.ectradio:checked + label.ectlabel.oostock,
.rcoption input.ectcheckbox:checked + label.ectlabel.oostock,
.rcoption.oostock input.ectradio:checked + label.ectlabel,
.rcoption.oostock input.ectcheckbox:checked + label.ectlabel{background-color:var(--paper);color:var(--muted);border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);}
/* ===== Color options as circular swatches =====
   The proddetail swatch JS adds .is-color-swatch to a Color option group, then on
   each label it can resolve sets a CSS color (or gradient, for two-tone names like
   "Black/White") in --sw and adds .sw. Labels it can't resolve keep the default
   text-pill look above, so an unknown color name never disappears. The selected
   color name is echoed after the group header via .swname (e.g. "Color: Navy"). */
.optioncontainer.is-color-swatch .option.detailoption{gap:12px;}
.optioncontainer.is-color-swatch .swname{text-transform:none;letter-spacing:0;color:var(--ink);font-weight:400;}
.rcoption label.ectlabel.sw{position:relative;width:30px;height:30px;min-width:0;padding:0;border-radius:50%;background:var(--sw,#cfcabd);border:1px solid rgba(23,20,14,.22);box-shadow:inset 0 0 0 1px rgba(255,255,255,.35);font-size:0;line-height:0;transition:transform .12s ease, box-shadow .15s, border-color .15s;}
.rcoption label.ectlabel.sw:hover{transform:scale(1.08);border-color:rgba(23,20,14,.5);}
.rcoption input.ectradio:checked + label.ectlabel.sw,
.rcoption input.ectcheckbox:checked + label.ectlabel.sw{border-color:var(--ink);box-shadow:0 0 0 2px var(--paper),0 0 0 4px var(--ink);}
/* Sold-out swatch: dimmed circle with a diagonal slash overlay. */
.rcoption label.ectlabel.sw.oostock,
.rcoption.oostock label.ectlabel.sw{opacity:.5;background-image:none;}
.rcoption label.ectlabel.sw.oostock::after,
.rcoption.oostock label.ectlabel.sw::after{content:"";position:absolute;inset:0;border-radius:50%;background:linear-gradient(135deg,transparent 45%,#6E6657 45%,#6E6657 55%,transparent 55%);}
/* Color <select> rendered as a swatch row. Most color options on this store are
   dropdowns (apparel colors are size-dependent selects; wall-decal colors are one
   big select), so the swatch JS hides the real <select> (kept for ECT's cart +
   validation) and renders clickable .sw-chip circles that mirror its value. */
.is-color-swatch select.sw-hidden{position:absolute;opacity:0;width:1px;min-width:0;height:1px;padding:0;margin:0;border:0;pointer-events:none;clip:rect(0 0 0 0);}
.sw-row{display:flex;flex-wrap:wrap;gap:12px;margin:.2rem 0 .4rem;}
.sw-chip{position:relative;width:30px;height:30px;padding:0;border-radius:50%;background:var(--sw,#cfcabd);border:1px solid rgba(23,20,14,.22);box-shadow:inset 0 0 0 1px rgba(255,255,255,.35);cursor:pointer;font-size:0;line-height:0;transition:transform .12s ease, box-shadow .15s, border-color .15s;}
.sw-chip:hover{transform:scale(1.08);border-color:rgba(23,20,14,.5);}
.sw-chip.is-active{border-color:var(--ink);box-shadow:0 0 0 2px var(--paper),0 0 0 4px var(--ink);}
.sw-chip:focus-visible{outline:2px solid var(--rubric);outline-offset:3px;}
.sw-chip.oostock{opacity:.5;}
.sw-chip.oostock::after{content:"";position:absolute;inset:0;border-radius:50%;background:linear-gradient(135deg,transparent 45%,#6E6657 45%,#6E6657 55%,transparent 55%);}
/* Unresolved color name: a readable text chip instead of a blank circle. */
.sw-chip.sw-text{width:auto;height:auto;border-radius:2px;padding:9px 14px;font-size:.9rem;line-height:1.1;background:#fff;color:var(--ink);box-shadow:none;}
.sw-chip.sw-text.is-active{background:var(--ink);color:var(--paper);border-color:var(--ink);}

/* Select-style options */
.optioncontainer select{border:1px solid var(--line);border-radius:2px;padding:11px 14px;font:400 .95rem Inter;background:#fff;min-width:200px;}

/* Quantity stepper + add-to-cart row */
.addtocartquant,.detailaddtocartquant{display:flex;align-items:stretch;gap:12px;margin-top:1.5rem;flex-wrap:wrap;}
.detailquantity{margin:0;}
.quantity2div{display:inline-flex;align-items:stretch;border:1px solid var(--line);border-radius:2px;overflow:hidden;background:#fff;}
.quantity2div > div{width:44px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:1.25rem;color:var(--ink);user-select:none;transition:.15s;}
.quantity2div > div:hover{background:var(--paper-2);color:var(--rubric);}
.quantity2input,input.detailquantity2input{border:0;border-left:1px solid var(--line);border-right:1px solid var(--line);width:58px;text-align:center;font:500 1rem Inter;padding:13px 0;border-radius:0;}
.addtocart,.detailaddtocart{flex:1 1 220px;display:flex;}
.addtocart .ectbutton,.detailaddtocart .ectbutton{flex:1;font-size:.92rem;padding:0 28px;min-height:52px;}

/* Add to List = compact outline-heart button beside Add to Cart (fills rubric on hover).
   The picker (ECT #savelistdiv, class .savecartlist) is emitted at the top of the page;
   on click ECT's JS relocates it next to the heart and flips visibility to visible, so
   absolute+hidden here stops it dumping inline and anchors it under the heart. */
.detailaddtocart .wishlistcontainer.detailwishlist{flex:0 0 auto;position:relative;display:flex;margin-left:10px;}
.detailaddtocart .ectbutton.detailwishlist{flex:0 0 auto;width:52px;min-height:52px;padding:0;background:transparent;border:1px solid var(--ink);color:var(--ink);border-radius:2px;font-size:0;display:inline-flex;align-items:center;justify-content:center;}
.detailaddtocart .ectbutton.detailwishlist::before{content:"";width:23px;height:23px;background-color:currentColor;transition:.18s;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21S4 14.5 4 8.8A3.8 3.8 0 0 1 12 6a3.8 3.8 0 0 1 8 2.8C20 14.5 12 21 12 21z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21S4 14.5 4 8.8A3.8 3.8 0 0 1 12 6a3.8 3.8 0 0 1 8 2.8C20 14.5 12 21 12 21z'/%3E%3C/svg%3E") center/contain no-repeat;}
.detailaddtocart .ectbutton.detailwishlist:hover{background:var(--rubric);border-color:var(--rubric);color:var(--paper);}
.detailaddtocart .ectbutton.detailwishlist:hover::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'%3E%3Cpath d='M12 21S4 14.5 4 8.8A3.8 3.8 0 0 1 12 6a3.8 3.8 0 0 1 8 2.8C20 14.5 12 21 12 21z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'%3E%3Cpath d='M12 21S4 14.5 4 8.8A3.8 3.8 0 0 1 12 6a3.8 3.8 0 0 1 8 2.8C20 14.5 12 21 12 21z'/%3E%3C/svg%3E");}

/* Saved-lists picker — shared ECT class (.savecartlist) for both the product-page
   "Add to List" dropdown (#savelistdiv) and the cart "move to list" popup (#savecartlist). */
.savecartlist{background:var(--paper);border:1px solid var(--ink);border-radius:4px;box-shadow:0 18px 40px rgba(23,20,14,.18);padding:5px;min-width:180px;font:400 .9rem Inter;z-index:9000;}
.savecartlist > div{padding:9px 14px;border-radius:2px;color:var(--ink);cursor:pointer;white-space:nowrap;transition:.12s;}
.savecartlist > div:hover{background:var(--panel);color:var(--rubric);}
.savecartlist .savecartdivider,.savecartlist .savecartdivider:hover{padding:6px 14px;color:var(--muted);cursor:default;background:transparent;font-size:.8rem;}
.savecartlist .savecartclose{position:absolute;top:6px;right:8px;width:14px;height:14px;cursor:pointer;opacity:.5;background-color:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E") center/contain no-repeat;}
.savecartlist .savecartclose:hover{opacity:1;color:var(--rubric);}
/* product-page picker: drop under the heart, hidden until ECT's JS reveals it */
#savelistdiv{position:absolute;visibility:hidden;top:calc(100% + 8px);right:0;}
/* cart-page picker: keep ECT's centered placement */
#savecartlist{position:absolute;visibility:hidden;top:50%;left:50%;transform:translate(-50%,-50%);}

/* "Other [type] Styles" thumbnail menu (inc-proddetail-similar) — no bullets, grid */
.newprodmenu.similar{margin:1.4rem 0;}
.newprodmenu.similar ul{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:12px;}
.newprodmenu.similar li.proddetailmenu{margin:0;}
.newprodmenu.similar li a{display:flex;flex-direction:column;align-items:center;text-align:center;width:78px;color:var(--ink);text-decoration:none;font-size:.74rem;line-height:1.2;}
.newprodmenu.similar li img{width:66px;height:auto;border:1px solid var(--line);border-radius:2px;padding:3px;background:#fff;transition:.15s;}
.newprodmenu.similar li a:hover img{border-color:var(--rubric);}
.newprodmenu.similar li a:hover{color:var(--rubric);}
.newprodmenu.similar li span{margin-top:5px;}

/* Product detail: white main area, parchment band behind the bottom "more products" blocks */
body.pg-proddetail{background:#fff;}
.pd-more{background:var(--paper);padding:8px 0 36px;margin-top:30px;}
/* The cross-sell sections use pt-10/pb-10 utility classes that aren't defined (0 padding), so the
   "You might also like / More from this collection / Best Sellers" blocks were cramped. Give them
   consistent breathing room top and bottom. */
.pd-more > section{padding-top:34px;padding-bottom:34px;}

/* ===== Product ratings & reviews (proddetail: reviewstars + reviews tokens) =====
   Shown only when the portal toggle "Customer ratings" (enablecustomerratings) is on. Stars are
   an inline SVG sprite (#review-icon-full/half/empty) inheriting fill, so we tint here. */
.detailreviewstars .icon,.reviewstarsheader .icon,.reviewstars .icon,.smallreviewstars .icon,.largereviewstars .icon,.prodrating .icon,.reviewsavg .icon{fill:var(--rubric);width:15px;height:15px;}
/* Empty stars (partial ratings) render in light grey; the half symbol keeps the rubric fill */
svg.icon:has(use[*|href="#review-icon-empty"]){fill:var(--line);}
/* Star rating on listing cards (.smallreviewstars.prodrating) */
.prodrating,.smallreviewstars{display:inline-flex;align-items:center;gap:7px;margin:5px 0 0;font-size:.82rem;color:var(--muted);}
.prodrating a:not(:has(.icon)),.smallreviewstars a:not(:has(.icon)){color:var(--rubric);}
.prodrating > a,.smallreviewstars > a{display:inline-flex;gap:1px;line-height:0;}
.card .prodrating,.product .prodrating{margin:4px 0 0;}
/* Slim size-availability bar on listing cards (ectcustomfunction1 / inc-product-sizes.php).
   Full size run as small chips, under the name / above the price: in-stock = ink outline,
   sold-out = muted + diagonal slash. An at-a-glance "is my size left?" guide. */
.mw-sizebar{display:flex;flex-wrap:wrap;gap:4px;margin:7px 0 3px;padding:0;list-style:none;}
.mw-sz{font:600 .64rem/1 Inter;letter-spacing:.02em;color:var(--ink);background:#fff;border:1px solid var(--line);border-radius:2px;padding:3px 5px;min-width:1.5em;text-align:center;box-sizing:border-box;}
/* Out-of-stock size pill: crisp diagonal via an SVG line (gradient hard-stops alias on the diagonal).
   preserveAspectRatio='none' stretches corner-to-corner on any pill size; non-scaling-stroke keeps it 1px. */
.mw-sz.is-out{color:var(--muted);background:var(--paper-2);border-color:var(--line);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='none'%3E%3Cline x1='0' y1='100' x2='100' y2='0' stroke='%236E6657' stroke-width='1' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:center;background-size:100% 100%;}
/* Star summary under the product name */
.detailreviewstars{display:inline-flex;align-items:center;margin:4px 0 2px;}
.detailreviewstars a{display:inline-flex;gap:1px;line-height:0;}
.detailratingtext{font-size:.85rem;color:var(--muted);margin-top:2px;}

/* Reviews section (below the product) */
.proddetail-reviews{padding-top:6px;}
.reviews{border-top:1px solid var(--line);padding-top:22px;margin-top:8px;}
.reviews::before{content:"Customer Reviews";display:block;font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.2rem,2.4vw,1.45rem);color:var(--ink);margin-bottom:12px;}
.reviewtotals{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;color:var(--muted);font-size:.88rem;margin-bottom:14px;}
.reviewtotals .count,.reviewtotals .rating.average{color:var(--ink);font-weight:600;}
/* Generic/placeholder reviews headline ("Over 100K Happy Customers…"): match the
   bold-ink emphasis of a real review count for the <strong> portion. */
.reviewtotals .mw-generic-totals strong{color:var(--ink);font-weight:600;}
.showallreview a{color:var(--rubric);text-decoration:underline;text-underline-offset:2px;}
.clickreview{margin:0 0 20px;}
.clickreview .ectbutton{background:transparent;color:var(--ink);border-color:var(--ink);font-size:.68rem;padding:10px 20px;}
.clickreview .ectbutton:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}
/* Individual reviews */
.reviewscontainer{display:flex;flex-direction:column;gap:12px;}
.ecthreview{border:1px solid var(--line);border-radius:3px;padding:13px 16px;background:var(--paper-2);}
.reviewstarsheader{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:5px;}
.reviewstarsheader .rating{display:inline-flex;gap:1px;line-height:0;}
.reviewheader{font-family:Fraunces,serif;font-weight:500;font-size:.98rem;color:var(--ink);}
.reviewname{font-size:.8rem;color:var(--muted);margin-bottom:7px;}
.reviewname .reviewer{font-weight:600;color:var(--ink);}
/* Shopify-style "verified buyer" badge after the reviewer name */
.reviewname .reviewer::after{content:"\2713 Verified Buyer";display:inline-block;margin-left:9px;background:#e6f1e6;color:#2c7a36;font:600 .58rem/1.5 Inter;letter-spacing:.05em;text-transform:uppercase;padding:2px 8px;border-radius:100px;vertical-align:1px;white-space:nowrap;}

/* ----- Relocated reviews block (#reviews-slot, the band after "You Might Also Like") -----
   Sits in a tinted "section band" (--panel, a reusable warm-sand shade) so it reads as its
   own area; cards drop to the lightest paper so they lift off the band; the card list becomes
   a horizontal, swipeable rail (scrolls only when the cards overflow the row); and the
   "write a review" button rides up beside the heading. Scoped to #reviews-slot so the
   stacked all-reviews page is untouched. */
.section-band{background:var(--panel);}                 /* reusable across the site */
.review-band{background:var(--panel);padding:54px 0;}
#reviews-slot .proddetail-reviews{padding:0;}
#reviews-slot .reviews{position:relative;border-top:0;margin:0;padding:0;}
#reviews-slot .reviews::before{margin-bottom:6px;}
#reviews-slot .reviewtotals{margin-bottom:22px;}
/* Button up beside the title, top-right of the block */
#reviews-slot .clickreview{position:absolute;top:0;right:0;margin:0;}
#reviews-slot .clickreview .ectbutton{white-space:nowrap;}
/* Cards → horizontal rail */
#reviews-slot .reviewscontainer{flex-direction:row;gap:18px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;padding-bottom:2px;}
#reviews-slot .reviewscontainer::-webkit-scrollbar{display:none;}
#reviews-slot .ecthreview{flex:0 0 min(380px,84%);scroll-snap-align:start;background:var(--paper);padding:16px 18px;}
@media(max-width:600px){
  #reviews-slot .clickreview{position:static;margin:0 0 16px;}
  #reviews-slot .ecthreview{flex:0 0 86%;}
}

/* All-reviews page (?review=all): ECT prints its own "Reviews for the product - <name>" heading
   plus sort links and a back button. Use that as the heading (drop the duplicate "Customer
   Reviews" label) and theme the back button. */
.reviews:has(.reviewsforprod)::before,.reviews .reviews::before{content:none;}
.reviewsforprod,.reviewprod{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.3rem,3vw,1.7rem);color:var(--ink);line-height:1.2;}
.reviewsforprod{color:var(--muted);}
.ectbutton.reviewback{background:transparent;color:var(--ink);border-color:var(--ink);font-size:.7rem;padding:11px 20px;margin-left:10px;vertical-align:2px;}
.ectbutton.reviewback:hover{background:var(--ink);color:var(--paper);}
/* The all-reviews page prints the full product image; show it as a small thumbnail instead */
.reviews .detailreviewimage{width:120px;height:auto;border-radius:2px;background:var(--paper-2);float:right;margin:0 0 14px 22px;}
.reviewcomments{line-height:1.55;font-size:.92rem;color:var(--ink);}
/* ECT repeats the "click to review" button below the list. We keep the one up
   top (next to the totals — present even when there are zero reviews) and hide
   this trailing duplicate. */
.reviews > .clickreview + .reviewscontainer{margin-top:0;}
.reviewscontainer + .clickreview{display:none;}

/* Write-a-review form (?review=true) */
.reviewing{font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.3rem,3vw,1.6rem);color:var(--ink);margin:0 0 18px;}
.reviewformblock{max-width:520px;}
.reviewimagecontainer img{width:108px;height:auto;border-radius:2px;background:var(--paper-2);margin-bottom:18px;}
.reviewformline{margin:0 0 15px;}
.reviewlabels{font:600 .7rem/1.3 Inter;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;}
.reviewlabels .redstar{color:var(--rubric);margin-right:3px;}
.reviewfields input,.reviewfields select,.reviewfields textarea,.reviewfields .reviewform{width:100%;border:1px solid var(--line);border-radius:2px;padding:11px 13px;font:400 .95rem Inter;background:#fff;color:var(--ink);}
.reviewfields textarea{min-height:120px;resize:vertical;}
.reviewfields input:focus,.reviewfields select:focus,.reviewfields textarea:focus{outline:none;border-color:var(--ink);}
.reviewsubmit{margin-top:10px;}
.reviewsubmit .ectbutton{font-size:.74rem;padding:14px 28px;}
/* Interactive star rating: replaces the ratingstars <select> in the review form.
   JS hides the select (keeps it for the value + ECT's checkratingform validation) and
   drives this widget — hover previews, click commits. */
.mw-starpick{display:inline-flex;gap:7px;font-size:1.85rem;line-height:1;cursor:pointer;}
.mw-starpick .st{color:var(--line);transition:color .12s,transform .12s;}
.mw-starpick .st.on{color:var(--rubric);}
.mw-starpick .st:active{transform:scale(.9);}
.mw-starpick .st:focus-visible{outline:2px solid var(--rubric);outline-offset:2px;border-radius:3px;}
/* ===== Lightweight popup/modal (replaces Magnific Popup) ===== */
.mfp-hide{display:none !important;}
.mw-ov{position:fixed;inset:0;background:rgba(23,20,14,.6);display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;z-index:200;overflow-y:auto;opacity:0;visibility:hidden;transition:opacity .2s;}
.mw-ov.open{opacity:1;visibility:visible;}
.mw-modal{background:var(--paper);max-width:640px;width:100%;padding:40px 34px 34px;position:relative;border-radius:3px;box-shadow:0 30px 70px rgba(23,20,14,.35);}
.mw-modal-x{position:absolute;top:10px;right:14px;background:none;border:0;font-size:1.7rem;line-height:1;cursor:pointer;color:var(--muted);}
.mw-modal-x:hover{color:var(--rubric);}
.mw-modal iframe{width:100%;height:62vh;border:0;display:block;}
.mw-modal-body :first-child{margin-top:0;}

/* ===== Product detail spacing tidy-ups ===== */

/* Breadcrumb — tighter */
/* Breadcrumb — sit it more evenly between the header and the image/title
   (the head section adds ~30px above; balance that with room below + a touch more breathing room up top). */
.catnavdetail{font-size:.82rem;line-height:1.5;margin:.6rem 0 2.2rem;}
.catnavdetail .ectbreadcrumb{display:inline;margin:0;}

/* Description tabs — clean minimal underline tabs */
.nav-tabs,.nav-tabs.tpl-minimal-tabs{border-bottom:1px solid var(--line);margin:1.9rem 0 1rem;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:4px;list-style:none;}
.nav-tabs .nav-item{margin:0;}
.nav-tabs .nav-link{border:0;border-bottom:2px solid transparent;background:none;padding:10px 16px;font:500 .8rem/1 Inter;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border-radius:0;cursor:pointer;display:inline-flex;align-items:center;gap:7px;}
/* Optically center the tab icon on the uppercase cap-height (the caps sit high in the line
   box, so flex-centering alone leaves the icon reading slightly low) */
.nav-tabs .nav-link i[class*="fa-"]{font-size:.95em;transform:translateY(-1px);}
.nav-tabs .nav-link:hover{color:var(--ink);}
.nav-tabs .nav-link.active,.nav-tabs .nav-link.show.active{color:var(--ink);border-bottom-color:var(--rubric);background:none;}
.tab-content{padding-top:0;line-height:1.7;}
.tab-content>.tab-pane>:first-child{margin-top:0;}/* no extra gap above the first description line */
.tab-pane h2,.tab-pane h3{font-family:Fraunces,serif;font-weight:500;margin:1.2rem 0 .6rem;}

/* Bundle / quantity-discount card (Bundle tab, content region 34) — clean centered tiers */
.bundle-card{background:#F3EFE6;border-radius:10px;padding:26px 30px;text-align:center;max-width:430px;margin:.5rem auto;}
/* Title carries a highlighter wash behind the lower third; static by default, swept in by mw.js (.hl-anim + .in) when it scrolls into view. */
.bundle-card .bundle-title{display:inline-block;font:700 1.02rem/1.2 Inter;letter-spacing:.05em;text-transform:uppercase;color:var(--ink);margin:0 0 16px;padding:0 3px;background:linear-gradient(transparent 60%, color-mix(in srgb, var(--rubric) 22%, transparent) 60%) left bottom/100% 100% no-repeat;}
.bundle-card .bundle-title.hl-anim{background-size:0% 100%;}
.bundle-card .bundle-title.hl-anim.in{animation:bundleSweep .75s ease-out forwards;}
@keyframes bundleSweep{from{background-size:0% 100%;}to{background-size:100% 100%;}}
.bundle-card .bundle-tier{color:var(--muted);font-size:.98rem;line-height:1.45;margin:9px 0;}
.bundle-card .bundle-tier strong{color:var(--ink);font-weight:700;}
.bundle-card .bundle-tier .bundle-each{color:var(--muted);font-weight:400;font-size:.86em;}
.bundle-card .bundle-note{font-size:.8rem;color:var(--muted);margin:15px 0 0;line-height:1.5;}
.bundle-card .bundle-note .bundle-mix{display:inline-block;color:var(--ink);font-weight:600;font-size:.92rem;margin-bottom:2px;}
/* Left-aligned variant (sticker under-price card, region 11) — sits flush with the price/title above it */
.bundle-card.bundle-card--left{text-align:left;margin-left:0;margin-right:0;width:fit-content;padding:22px 24px;}
/* Mobile: drop the shrink-wrap; stretch and center with a gutter on each side. */
@media (max-width:560px){.bundle-card.bundle-card--left{width:auto;text-align:center;margin:.5rem 14px;}}
.tab-content table{margin:.5rem 0;}

/* "More" products tab — small wrapped thumbnails, no bullets (like the Other Styles grid) */
ul.moreproductstabmenu{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:12px;}
ul.moreproductstabmenu>li{list-style:none;margin:0;}
ul.moreproductstabmenu>li>a{display:block;}
ul.moreproductstabmenu img{width:90px;height:auto;border:1px solid var(--line);border-radius:2px;padding:3px;background:#fff;transition:.15s;}
ul.moreproductstabmenu>li>a:hover img{border-color:var(--rubric);}

/* ===== Category / product listing (products.php) ===== */
/* Breadcrumb — match the product-detail breadcrumb: inline crumbs, same size & spacing */
.catnavandcheckout.catnavproducts,.catnavigation.catnavproducts{font-size:.82rem;color:var(--muted);line-height:1.5;margin:0 56px 1rem 0;min-height:40px;display:flex;align-items:center;}
.catnavproducts .ectbreadcrumb{display:inline;margin:0;}
.catnavproducts a.ectlink{color:var(--muted);text-decoration:none;}
.catnavproducts a.ectlink:hover{color:var(--rubric);}
/* (categories.php top-level landing, not yet themed) */
/* Category-landing breadcrumb — inline crumbs, pinned to the top of the content, left-aligned */
.catnavandcheckout.catnavcategories,.catnavigation.catnavcategories{font-size:.82rem;color:var(--muted);line-height:1.5;margin:0;}
.catnavcategories .ectbreadcrumb{display:inline;margin:0;}
.catnavcategories a.ectlink{color:var(--muted);text-decoration:none;}
.catnavcategories a.ectlink:hover{color:var(--rubric);}
/* Reorder the section so the breadcrumb sits above the title (ECT emits it with the grid) */
.cat-landing .wrap{display:flex;flex-direction:column;}
.cat-landing .catnavandcheckout.catnavcategories{order:-2;margin-bottom:26px;}
.cat-landing .cat-landing-head{order:-1;}
.products{display:grid;grid-template-columns:repeat(4,1fr);gap:38px 26px;margin:1.5rem 0;list-style:none;padding:0;}
.product{position:relative;}
.product .prodimg_cont{position:relative;}
/* Corner labels (New / Sale / Popular / Quick Ship / Out of Stock) from inc-product_tags_img.php */
.product-labels-container{position:absolute;top:10px;left:10px;z-index:3;display:flex;flex-direction:column;align-items:flex-start;gap:5px;pointer-events:none;}
.label-pill{display:inline-flex;align-items:center;gap:4px;font:600 .62rem/1 Inter;letter-spacing:.09em;text-transform:uppercase;padding:5px 9px;border-radius:2px;background:var(--ink);color:var(--paper);white-space:nowrap;box-shadow:0 1px 3px rgba(23,20,14,.18);}
.label-pill i{font-size:.9em;}
.label-pill.label-new{background:#2456a6;color:#fff;}
.label-pill.label-sale{background:var(--rubric);color:#fff;}
.label-pill.label-popular{background:var(--paper);color:var(--ink);border:1px solid var(--line);box-shadow:none;}
.label-pill.label-quick-ship{background:#3a5a40;color:#fff;}
.label-pill.label-oos,.label-pill.label-out-of-stock,.label-pill.label-soldout{background:var(--muted);color:#fff;}
/* Hide the ECT "Customize" (configbutton) on product cards for now — the card links to the detail page */
.configbutton{display:none;}
.prodaddtocart:has(.configbutton){display:none;}

/* Out-of-stock cards (Shopify-style): grayed image + centered "Out of Stock" overlay */
.product:has(.prodnotifystock) img.prodimage{filter:grayscale(.55);opacity:.72;transition:.25s;}
.product:has(.prodnotifystock):hover img.prodimage{transform:none;opacity:.6;}
.product:has(.prodnotifystock) .prodaddtocart{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;z-index:3;width:auto;}
.product .notifystock.prodnotifystock{background:rgba(23,20,14,.85);color:#fff;border:0;border-radius:2px;font:600 .68rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;padding:12px 18px;cursor:pointer;transition:.18s;}
.product:hover .notifystock.prodnotifystock{background:var(--rubric);}

/* In-stock "Quick add" — hover overlay at the image's bottom-right (artofhomage/Shopify style).
   Keeps ECT's add-to-cart submit behavior; the label is set to "Quick add" in mw.js. */
.products .prodaddtocart:has(.buybutton){position:absolute;right:0;bottom:0;left:auto;top:auto;margin:0;width:auto;z-index:3;opacity:0;transform:translateY(6px);transition:opacity .2s,transform .2s;pointer-events:none;}
.products .product:hover .prodaddtocart:has(.buybutton),.products .product:focus-within .prodaddtocart:has(.buybutton){opacity:1;transform:none;pointer-events:auto;}
.products .prodaddtocart:has(.buybutton) .ectbutton.buybutton{flex:0 0 auto;background:rgba(23,20,14,.82);border:0;color:#fff;font:600 .74rem/1 Inter;letter-spacing:.02em;text-transform:none;padding:14px 22px;min-height:0;border-radius:0;cursor:pointer;}
.products .prodaddtocart:has(.buybutton) .ectbutton.buybutton:hover{background:var(--rubric);color:#fff;}
@media(hover:none),(max-width:920px){.products .prodaddtocart:has(.buybutton){opacity:1;transform:none;pointer-events:auto;}}
div.prodimage{display:block;background:var(--paper-2);aspect-ratio:1/1;overflow:hidden;margin-bottom:14px;border-radius:2px;}
div.prodimage a{display:block;width:100%;height:100%;}
img.prodimage{width:100%;height:100%;object-fit:cover;transition:transform .5s;}
.product:hover img.prodimage{transform:scale(1.03);}
/* Multi-image hover scrubber: hide ECT's PREV / "1 of 2" / More Images text controls; use dots instead */
.prodimagenavigator{display:none;}
.cardimg-dots{position:absolute;left:0;right:0;bottom:9px;display:flex;justify-content:center;gap:6px;z-index:4;pointer-events:none;}
.cardimg-dot{width:6px;height:6px;border-radius:50%;background:rgba(23,20,14,.3);box-shadow:0 0 0 1px rgba(244,241,233,.5);cursor:pointer;pointer-events:auto;transition:background .18s,transform .18s;}
.cardimg-dot.on{background:var(--ink);transform:scale(1.25);}
.prodname{font-size:.92rem;line-height:1.35;margin-bottom:3px;}
.prodname a{color:var(--ink);}
.product:hover .prodname a{color:var(--rubric);}
/* Pulsing "ready to ship" status dot (Shopify-style): a solid green dot with a ::before clone
   that expands and fades to make the glow ring. Used wherever an item is in stock & shipping now. */
.ship-dot{position:relative;display:inline-block;width:8px;height:8px;border-radius:50%;background:#22b24a;flex:0 0 auto;vertical-align:middle;}
.ship-dot::before{content:"";position:absolute;inset:0;border-radius:50%;background:#22b24a;animation:shipPulse 1.8s ease-out infinite;}
@keyframes shipPulse{0%{transform:scale(1);opacity:.7;}70%{transform:scale(2.8);opacity:0;}100%{transform:scale(2.8);opacity:0;}}
@media(prefers-reduced-motion:reduce){.ship-dot::before{animation:none;}}

/* Quick-ship marker (inc-product-shipnow.php): a pulsing dot at the image's top-right
   that, on card hover, expands into a discrete "Quick Ship" pill. The label slides out
   to the LEFT of the dot (flex row-reverse + right-anchored) so it never runs off the
   card edge. */
.prodimg_cont .ship-corner{position:absolute;top:10px;right:10px;z-index:3;display:inline-flex;flex-direction:row-reverse;align-items:center;background:transparent;border-radius:999px;padding:0;cursor:help;transition:background .2s ease,padding .25s ease,box-shadow .2s ease;}
.prodimg_cont .ship-corner .ship-dot{width:9px;height:9px;flex:none;}
.prodimg_cont .ship-corner .ship-label{max-width:0;overflow:hidden;white-space:nowrap;opacity:0;font:600 .6rem/1 Inter;letter-spacing:.07em;text-transform:uppercase;color:var(--ink);transition:max-width .35s ease,opacity .25s ease,margin .35s ease;}
/* Expand the "Quick Ship" explainer only when the dot itself is hovered — not the whole card */
.prodimg_cont .ship-corner:hover{background:rgba(244,241,233,.94);padding:5px 9px;box-shadow:0 3px 10px rgba(23,20,14,.14);}
.prodimg_cont .ship-corner:hover .ship-label{max-width:90px;opacity:1;margin-right:7px;}

/* Product-detail / content-region ship label (.shiptime) uses a truck <i> stored in a content
   region; render it as the pulsing green dot instead, so it matches everywhere (deploys with CSS). */
.shiptime i[class*="fa-truck"]{-webkit-mask:none !important;mask:none !important;background:transparent !important;display:inline-block;width:.85em;height:.85em;position:relative;vertical-align:-1px;}
.shiptime i[class*="fa-truck"]::after{content:"";position:absolute;left:50%;top:50%;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:currentColor;}
.shiptime i[class*="fa-truck"]::before{content:"";position:absolute;left:50%;top:50%;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:currentColor;animation:shipPulse 1.8s ease-out infinite;}
@media(prefers-reduced-motion:reduce){.shiptime i[class*="fa-truck"]::before{animation:none;}}
/* The dot + label sit in a bare inline <span>, so the dot aligned to the text
   baseline and rode high. Center it against the text. */
.shiptime span:has(> i[class*="fa-truck"]){display:inline-flex;align-items:center;gap:7px;}
.product br{display:none;}/* drop the hard break between name and price */
/* Price — Shopify-style: drop the "Price" label, show sale + original inline */
.prodpricelabel{display:none;}
.prodprice{display:inline-block;font:600 .95rem/1.4 Inter;color:var(--ink);margin-top:1px;}
.listpricediv.listprice{display:inline-block;margin-left:6px;font:400 .9rem/1.4 Inter;}
.listpricediv.listprice del{color:var(--muted);}
/* Turn the price rubric ONLY on a real discount: ECT renders the list-price div for every
   product that has a list price, but hides it (style="display:none") when list == price.
   Match only the visible (truly discounted) list price so non-discounted prices stay ink. */
.product:has(.listpricediv.listprice:not([style*="display:none"])) .price{color:var(--rubric);}
.prodaddtocart{margin-top:10px;}
.prodaddtocart .ectbutton{font-size:.7rem;padding:10px 16px;}

/* ===== ECT softform modals (.ectopaque > .ectsoftwrapper) =====
   Covers notify-when-in-stock (#notifyinstockcover), login / create-account / contact (#softopaquediv),
   and quick-buy (#opaquediv). ECT toggles each overlay's inline display (none <-> '') in JS; the inline
   display:none keeps it hidden until opened, then it falls back to this flex overlay instead of rendering
   as a plain block at the bottom of the page. */
.ectopaque{position:fixed;inset:0;background:rgba(23,20,14,.6);z-index:200;display:flex;align-items:flex-start;justify-content:center;padding:8vh 16px;overflow-y:auto;}
.ectopaque .ectsoftwrapper{position:relative;background:var(--paper);max-width:440px;width:100%;padding:38px 34px 30px;border-radius:3px;box-shadow:0 30px 70px rgba(23,20,14,.35);text-align:center;animation:nis-pop .22s ease;}
@keyframes nis-pop{from{opacity:0;transform:translateY(12px);}to{opacity:1;transform:none;}}
.ectopaque .scclose{position:absolute;top:8px;right:12px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--muted);font-size:0;z-index:2;}
.ectopaque .scclose::before{content:"\00d7";font-size:1.8rem;line-height:1;}
.ectopaque .scclose:hover{color:var(--rubric);}
.ectopaque .softformheader{font-family:Fraunces,serif;font-size:1.5rem;font-weight:500;color:var(--ink);margin:.1rem 0 1.1rem;line-height:1.12;}
/* Shared softform fields: stacked label + full-width input */
.ectsoftwrapper .ectsf2col{display:block;text-align:left;margin:0 0 14px;}
.ectsoftwrapper .ectsf2col>div:first-child{margin-bottom:6px;}
.ectsoftwrapper .ectsf2col label.ectlabel{display:block;font:600 .7rem/1 Inter;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.ectsoftwrapper .redstar label.ectlabel::after{content:" *";color:var(--rubric);}
.ectsoftwrapper input[type=text],.ectsoftwrapper input[type=email],.ectsoftwrapper input[type=password],.ectsoftwrapper input.ectinput,.ectsoftwrapper .ectselectinput,.ectsoftwrapper textarea{width:100%;border:1px solid var(--line);border-radius:2px;padding:12px 14px;font:400 .95rem Inter;background:#fff;}
.ectsoftwrapper input:focus,.ectsoftwrapper select:focus,.ectsoftwrapper textarea:focus{outline:none;border-color:var(--ink);}
/* Checkbox rows (e.g. "Remember login") stay inline */
.ectsoftwrapper .ectsf2col:has(.ectcheckbox){display:flex;align-items:center;gap:8px;}
.ectsoftwrapper .ectsf2col:has(.ectcheckbox)>div{margin:0;}
.ectsoftwrapper .ectsf2col:has(.ectcheckbox) label.ectlabel{text-transform:none;letter-spacing:0;font-weight:400;font-size:.9rem;color:var(--ink);}
.ectsoftwrapper .softformsend{margin-top:16px;}
.ectsoftwrapper .softformsend .ectbutton{width:100%;}
.ectsoftwrapper .ectwarning{color:var(--rubric);}
.ectsoftwrapper .ectsfsuccess:not(:empty){padding:10px 0;color:var(--ink);}
/* notify-in-stock form has two inline-styled blurb divs — tidy them */
#notifyinstockcover .ectsoftwrapper>div[style*="margin:20px"]{margin:6px 0 0 !important;}
#notifyinstockcover .ectsoftwrapper>div[style*="font-weight:bold"]{font-weight:400 !important;color:var(--muted);font-size:.92rem;line-height:1.55;padding:0 !important;margin:14px 0 4px !important;}
#notifyinstockcover h2{font-family:Fraunces,serif;font-weight:500;font-size:1.12rem;color:var(--ink);margin:6px 0 0 !important;}

/* ===== Quick Buy (option products) =====
   ECT emits BOTH an inline add-to-cart and a Quick Buy popup for every product. We surface only
   one per card: products WITH options can't pick a size from the inline button, so hide it and
   show Quick Buy; products WITHOUT options keep the one-click add and don't need the popup.
   Options render only inside the popup, so `.qbopaque .prodoption` is the reliable per-card flag.
   Hide the inline add-to-cart whatever its runtime state — NOT only while it carries `.buybutton`:
   picking an out-of-stock variant in the popup makes ectcart.js reclass this same (shared-class)
   card button buybutton -> notifystock, which would otherwise un-hide it behind the modal. The
   exception is a server-rendered fully-OOS product, whose button carries `.prodnotifystock` (the JS
   swap only ever adds `notifystock`); that one keeps its centered "join the waitlist" overlay. */
.products .product:has(.qbopaque .prodoption) .prodaddtocart:not(:has(.prodnotifystock)){display:none;}
.products .product:not(:has(.qbopaque .prodoption)) .qbuybutton{display:none;}
/* Quick Buy trigger: same hover-overlay treatment as the in-stock "Quick add" button */
.products .qbuybutton{position:absolute;right:0;bottom:0;z-index:3;margin:0;opacity:0;transform:translateY(6px);transition:opacity .2s,transform .2s;pointer-events:none;}
.products .product:hover .qbuybutton,.products .product:focus-within .qbuybutton{opacity:1;transform:none;pointer-events:auto;}
.products .qbuybutton .ectbutton.qbuybutton{background:rgba(23,20,14,.82);border:0;color:#fff;font:600 .74rem/1 Inter;letter-spacing:.02em;text-transform:none;white-space:nowrap;padding:14px 22px;min-height:0;border-radius:0;cursor:pointer;}
.products .qbuybutton .ectbutton.qbuybutton:hover{background:var(--rubric);color:#fff;}
@media(hover:none),(max-width:920px){.products .qbuybutton{opacity:1;transform:none;pointer-events:auto;}}
/* Mobile: drop the dark text pill for a discrete white basket-icon chip (applies to BOTH the
   Quick Buy trigger and the simple-product "Quick add"). Reuses the cart mask from mw-icons.css. */
@media(max-width:920px){
  /* Lower-LEFT on mobile: product photos often carry info (e.g. view labels) in the lower-right. */
  .products .qbuybutton,.products .prodaddtocart:has(.buybutton){left:8px;right:auto;bottom:8px;}
  .products .qbuybutton .ectbutton.qbuybutton,
  .products .prodaddtocart:has(.buybutton) .ectbutton.buybutton{
    width:36px;height:36px;min-width:0;padding:0;font-size:0;border-radius:50%;
    background:rgba(255,255,255,.9);color:var(--ink);box-shadow:0 1px 4px rgba(23,20,14,.22);
    display:flex;align-items:center;justify-content:center;}
  .products .qbuybutton .ectbutton.qbuybutton:hover,
  .products .prodaddtocart:has(.buybutton) .ectbutton.buybutton:hover{background:#fff;color:var(--rubric);}
  .products .qbuybutton .ectbutton.qbuybutton::before,
  .products .prodaddtocart:has(.buybutton) .ectbutton.buybutton::before{
    content:"";width:20px;height:20px;background-color:currentColor;
    -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 7h16l-1.5 9h-13z'/%3E%3Ccircle cx='9' cy='20' r='1.4'/%3E%3Ccircle cx='18' cy='20' r='1.4'/%3E%3Cpath d='M5 7 4 4H2'/%3E%3C/svg%3E") center/contain no-repeat;
    mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 7h16l-1.5 9h-13z'/%3E%3Ccircle cx='9' cy='20' r='1.4'/%3E%3Ccircle cx='18' cy='20' r='1.4'/%3E%3Cpath d='M5 7 4 4H2'/%3E%3C/svg%3E") center/contain no-repeat;}
}
/* Quick Buy pop-up shell (div.qbopaque > div.qbuywrapper) — ectcart.css isn't loaded on themed
   pages, so mirror the softform modal look. Inner options/quantity reuse the global .optioncontainer
   / .quantity2div styling automatically. */
.qbopaque{position:fixed;inset:0;background:rgba(23,20,14,.6);z-index:200;display:flex;align-items:flex-start;justify-content:center;padding:8vh 16px;overflow-y:auto;}
/* Layout: photo on the left, product name + price stacked beside it (header row); every other
   element (options, add-to-cart) spans the full width below. */
.qbopaque .qbuywrapper{position:relative;background:var(--paper);max-width:560px;width:100%;padding:34px 30px 30px;border-radius:3px;box-shadow:0 30px 70px rgba(23,20,14,.35);animation:nis-pop .22s ease;box-sizing:border-box;display:grid;grid-template-columns:auto 1fr;column-gap:20px;row-gap:2px;align-items:center;}
.qbopaque .qbuywrapper > *{grid-column:1 / -1;min-width:0;}
.qbopaque .scclose{position:absolute;top:8px;right:12px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--muted);z-index:2;}
.qbopaque .scclose::before{content:"\00d7";font-size:1.8rem;line-height:1;}
.qbopaque .scclose:hover{color:var(--rubric);}
/* Product photo: small fixed width at natural proportions, spanning the two header rows */
.qbopaque .qbuywrapper div.prodimage{grid-column:1;grid-row:1 / span 2;align-self:center;width:96px;max-width:96px;height:auto;aspect-ratio:auto;background:none;overflow:visible;margin:0;border-radius:2px;}
.qbopaque .qbuywrapper img.prodimage{display:block;width:100%;height:auto;object-fit:contain;}
.qbopaque .qbuywrapper .prodname{grid-column:2;grid-row:1;align-self:end;font-family:Fraunces,serif;font-weight:500;font-size:1.2rem;line-height:1.15;margin:0 36px 0 0;}
.qbopaque .qbuywrapper .prodname a{color:var(--ink);}
.qbopaque .qbuywrapper .prodprice{grid-column:2;grid-row:2;align-self:start;font:600 1.05rem/1.3 Inter;color:var(--ink);margin:2px 0 0;}
.qbopaque .qbuywrapper .prodpricelabel{display:none;}
/* Size / colour pickers: centered label + centered wrapping pills, below the header */
.qbopaque .qbuywrapper .prodoptions{margin-top:18px;}
.qbopaque .qbuywrapper .optiontext{text-align:center;}
.qbopaque .optioncontainer .option{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:center;}
.qbopaque .optioncontainer .rcoption{margin:0;}
.qbopaque .qb-c9{display:none;}/* hidden pCustom9 token carrier read by mw.js to filter options */
.qbopaque .qbaddtocart{margin-top:12px;}
.qbopaque .qbaddtocart .ectbutton.buybutton{width:100%;}
@media(max-width:1024px){.products{grid-template-columns:repeat(3,1fr);gap:34px 20px;}}
@media(max-width:600px){.products{grid-template-columns:repeat(2,1fr);gap:28px 16px;}}

/* Category title + pagination */
h1.h3{font-family:Fraunces,serif;font-weight:500;letter-spacing:-.015em;}
.pagenumbers{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px;margin:2.5rem 0 1rem;font:500 .9rem/1 Inter;}
.pagebarnum,.pagebarprevnext{display:inline-flex;align-items:center;justify-content:center;min-width:38px;height:38px;padding:0 10px;border:1px solid var(--line);color:var(--ink);border-radius:2px;text-decoration:none;}
.pagebarnum:hover,.pagebarprevnext:hover{border-color:var(--ink);color:var(--rubric);}
.pagebarnum.currpage{background:var(--ink);color:var(--paper);border-color:var(--ink);}
.pagebarsep,.pagebarquo{border:0;min-width:auto;height:auto;padding:0 2px;color:var(--muted);}

/* ===== Category landing (categories.php) — ECT category grid styled as overlay plates ===== */
.cat-landing{padding-top:34px;}/* match the leaner top spacing of the other migrated pages (the homepage .section 84px is too much here) */
.cat-landing-head{text-align:center;margin-bottom:42px;}
.cat-landing-head .rubric{justify-content:center;margin-bottom:14px;}
.cat-landing-title{font-family:Fraunces,serif;font-weight:500;font-size:clamp(2rem,4vw,3.1rem);line-height:1.04;letter-spacing:-.015em;color:var(--ink);margin:0;}
.pg-categories .categories{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;}
.pg-categories .category{position:relative;overflow:hidden;aspect-ratio:3/4;background:var(--paper-2);border-radius:2px;}
.pg-categories .category::after{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(to top,rgba(23,20,14,.74),rgba(23,20,14,.08) 58%,rgba(23,20,14,0));pointer-events:none;transition:.25s;}
.pg-categories .category:hover::after{background:linear-gradient(to top,rgba(23,20,14,.82),rgba(23,20,14,.2) 60%,rgba(23,20,14,.05));}
.pg-categories div.catimage{position:absolute;inset:0;margin:0;}
.pg-categories div.catimage a{display:block;width:100%;height:100%;}
.pg-categories img.catimage{width:100%;height:100%;object-fit:cover;transition:transform .6s ease;}
.pg-categories .category:hover img.catimage{transform:scale(1.05);}
.pg-categories .catname{position:absolute;left:16px;right:16px;bottom:16px;z-index:2;text-align:center;margin:0;}
.pg-categories .catname a{font-family:Fraunces,serif;font-weight:500;font-size:1.4rem;line-height:1.08;color:var(--paper);}
.pg-categories .category:hover .catname a{color:#fff;}
@media(max-width:780px){.pg-categories .categories{grid-template-columns:1fr 1fr;gap:12px;}.pg-categories .catname a{font-size:1.15rem;}}

/* Announcement / countdown bar (managed in vsadmin/mw-admin.php) */
.mw-annc{position:relative;background:var(--rubric);color:var(--paper);font:500 .74rem/1.2 Inter;letter-spacing:.04em;display:flex;align-items:center;justify-content:center;padding:8px 40px;overflow:hidden;}
.mw-annc a{color:inherit;text-decoration:none;}
.mw-annc a:hover{text-decoration:underline;}
.mw-annc-viewport{overflow:hidden;width:100%;max-width:960px;}
.mw-annc-track{display:flex;transition:transform .4s ease;will-change:transform;}
.mw-annc-slide{flex:0 0 100%;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mw-annc-inner{display:inline-flex;align-items:center;gap:.6em;}
.mw-countdown{display:inline-flex;align-items:center;gap:.4em;}
.mw-countdown strong{font-weight:600;}
.mw-countdown small{font-size:.72em;opacity:.85;margin-left:1px;text-transform:uppercase;}
.mw-cd-prefix{opacity:.95;}
.mw-annc-arrow{position:absolute;top:50%;transform:translateY(-50%);border:0;background:transparent;color:currentColor;font-size:18px;line-height:1;cursor:pointer;padding:0 10px;opacity:.7;}
.mw-annc-arrow:hover{opacity:1;}
.mw-annc-prev{left:6px;}
.mw-annc-next{right:6px;}
@media(max-width:600px){.mw-annc{font-size:.7rem;padding:8px 32px;}}

/* ===== Cart page (cart.php) ===== */
/* (sticky footer now handled globally near the top of this file) */
/* Empty-cart message */
.emptycart{text-align:center;padding:64px 0 48px;}
.sorrycartempty{font-family:Fraunces,serif;font-weight:500;font-size:1.55rem;color:var(--ink);margin-bottom:.5rem;}
.cartemptyclickhere{color:var(--muted);}
.cartemptyclickhere a{color:var(--rubric);}
.emptycartcontinue{margin-top:18px;}
/* Login / create-account prompt buttons (shown on the cart when not signed in) */
.loginprompt{display:flex;flex-wrap:wrap;gap:12px;margin:14px 0;}
.loginprompt .ectbutton{flex:0 1 auto;}

/* ----- Cart stage: header, line items, totals, estimator, coupon ----- */
/* Cart header ("Shopping Cart (n)") */
.cartlisthead .ectdivhead,.cartlistshop .ectdivhead.cartlistcart{display:flex;align-items:center;gap:12px;padding:0 0 14px;border-bottom:1px solid var(--line);margin-bottom:4px;}
.cartlistcart .cartname{font-family:Fraunces,serif;font-weight:500;font-size:1.5rem;color:var(--ink);flex:1;}
/* Collapse toggle: ECT emits an arrow-up/down.png that its JS swaps on click. Hide the PNG and
   draw a modern chevron (mask) that flips via :has() on the swapped src — no markup change. */
.cartlistcart .cartlistimg,.cartlistgiftreg .cartlistimg{margin-left:auto;position:relative;flex:0 0 auto;width:18px;height:18px;color:var(--muted);transition:color .15s;}
.cartlistimg img{display:none;}
.cartlistcart .cartlistimg::after,.cartlistgiftreg .cartlistimg::after{content:"";position:absolute;inset:0;background-color:currentColor;transition:transform .2s;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/contain no-repeat;}
.cartlistcart .cartlistimg:has(img[src*="arrow-up"])::after,.cartlistgiftreg .cartlistimg:has(img[src*="arrow-up"])::after{transform:rotate(180deg);}
.ectdivhead.cartlistname:hover .cartlistimg{color:var(--ink);}
.checkoutstep{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;border-radius:50%;background:var(--ink);color:var(--paper);font:600 .8rem/1 Inter;margin-right:10px;}
/* Show only the numbered checkout-step badge; hide the cart header's blank bullet */
.checkoutstep:not(.checkoutstepof3){display:none;}

/* ----- Saved lists / gift-registry view (cart.php, signed in: "My Wish List", named lists) ----- */
/* Each list = a collapsible .cartlistgiftreg header above themed cart lines; the per-line action
   is a "Move to Cart" button (.cartaddtolist). Mirror the cart header; quieten the move button. */
.cartlistdiv.cartlistwish,.cartlistdiv.cartlistgift{margin-bottom:30px;}
.ectdivhead.cartlistgiftreg{display:flex;align-items:center;gap:12px;padding:0 0 14px;margin:16px 0 4px;border-bottom:1px solid var(--line);}
.cartlistgiftreg .cartname{font-family:Fraunces,serif;font-weight:500;font-size:1.35rem;color:var(--ink);flex:1;}
div.cartaddtolist{margin:0;display:inline-flex;}
.ectbutton.cartaddtolist{font:500 .68rem/1 Inter;letter-spacing:.1em;padding:10px 18px;min-height:0;border-radius:2px;background:transparent;color:var(--ink);border:1px solid var(--ink);white-space:nowrap;}
.ectbutton.cartaddtolist:hover{background:var(--rubric);border-color:var(--rubric);color:var(--paper);}

/* Hide the column-label header row; each line is self-describing */
.cartdetails_cntnr{display:none;}

/* Line items */
.cartlineitems{margin:0;}
.cartandoptsline{border-bottom:1px solid var(--line);}
.cartline{display:grid;grid-template-columns:84px 1fr auto;align-items:center;gap:18px;padding:20px 0;}
.cartlineid{margin:0;}
/* Quick-ship "ship now" dot in the top-right corner of the cart line image (added by cart.php JS) */
.cartlineid.has-shipdot{position:relative;}
.cartlineid .cart-shipdot{position:absolute;top:5px;right:5px;width:9px;height:9px;}
.cartlineid a{display:block;}
img.cartimage{width:84px;height:84px;object-fit:cover;border-radius:2px;background:var(--paper-2);}
.cartlinename a{font-family:Fraunces,serif;font-weight:500;font-size:1.05rem;line-height:1.25;color:var(--ink);}
.cartlinename a:hover{color:var(--rubric);}
.cartlineprice{margin-top:4px;color:var(--muted);font-size:.9rem;}
.cartlinepricelabel{display:none;}
.cartlinequanttotal{display:flex;align-items:center;gap:20px;}
.cartlinequant{order:1;margin:0;}
.cartlinetotal{order:2;font:600 1rem/1 Inter;color:var(--ink);min-width:72px;text-align:right;}
.cartlinecheck{order:3;margin:0;}
input.cartquant,input.ecttextinput.cartquant{width:54px;text-align:center;border:1px solid var(--line);border-radius:2px;padding:9px 4px;font:500 .95rem Inter;background:#fff;}
.cartdelete{cursor:pointer;display:inline-flex;}
img.cartdelete{width:15px;height:15px;opacity:.45;transition:opacity .15s;}
.cartdelete:hover img.cartdelete{opacity:1;}

/* Shipping estimator + totals, side by side */
/* Ship-time banner (relocated above the estimator by cart.php). Accent color comes from
   the Store Setting via the inline --mwc custom property; a small dot reuses the site's
   ready-to-ship visual language. No dismissible X. */
.mw-shiptime-msg{margin:8px 0 22px;}
.mw-cart-alert{display:flex;align-items:center;gap:10px;border:1px solid var(--mwc,#999);border-left-width:4px;background:#f7f6f2;background:color-mix(in srgb, var(--mwc,#999) 9%, #fff);color:var(--ink);padding:13px 16px;border-radius:3px;font-size:.92rem;line-height:1.5;}
.mw-cart-alert::before{content:"";flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:var(--mwc,#999);}
.cartshippingandtotals{display:grid;grid-template-columns:1fr 340px;gap:44px;align-items:start;margin-top:30px;}
@media(max-width:760px){.cartshippingandtotals{grid-template-columns:1fr;gap:26px;}}
.cartshippingdetails .ectlabel{display:block;font:600 .68rem/1 Inter;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;}
.cartstateselector_cntnr,.cartcountryselector_cntnr{margin-bottom:12px;}
.cartshippingdetails select.ectselectinput{width:100%;border:1px solid var(--line);border-radius:2px;padding:11px 12px;background:#fff;font:400 .92rem Inter;}
.cartstateselectortext.ectwarning,.estimatorerror.ectwarning{color:var(--rubric);}
.updateestimator{margin-top:4px;}

/* Totals block */
.cartsubtotal_cntnr,.shippingtotal_cntnr,.cartgrandtotal_cntnr,.cartdiscounts_cntnr,.cartloyaltypoint_cntnr,.cartgiftcert_cntnr{display:flex;justify-content:space-between;align-items:baseline;gap:16px;padding:7px 0;}
.cartsubtotaltext,.shippingtotaltext,.cartdiscountstext,.cartloyaltypointmenu,.cartgiftcerttext{color:var(--muted);font-size:.92rem;}
.cartsubtotal,.shippingtotal{font:500 .95rem/1 Inter;color:var(--ink);}
/* Discount / loyalty / gift-cert deductions — savings shown in rubric with a leading minus */
.cartdiscounts,.cartloyaltypoints,.cartgiftcert{font:500 .95rem/1 Inter;color:var(--rubric);white-space:nowrap;}
.cartdiscounts::before,.cartloyaltypoints::before,.cartgiftcert::before{content:"\2212";margin-right:1px;}
.cartgrandtotal_cntnr{border-top:1px solid var(--line);margin-top:6px;padding-top:14px;}
.cartgrandtotaltext{font-family:Fraunces,serif;font-size:1.12rem;color:var(--ink);}
.cartgrandtotal{font:600 1.25rem/1 Inter;color:var(--ink);}

/* Coupon */
.cartcoupon_cntnr{margin-top:18px;padding-top:16px;border-top:1px solid var(--line);}
.cartcoupontext .ectlabel{display:block;font:600 .68rem/1 Inter;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;}
.cartcoupon{display:flex;gap:8px;}
.cartcoupon input.cpncart1{flex:1;min-width:0;border:1px solid var(--line);border-radius:2px;padding:11px 12px;background:#fff;font:400 .92rem Inter;}
.cartcoupon .applycoupon{white-space:nowrap;font-size:.72rem;padding:0 16px;}

/* Checkout button */
.cartcheckoutbuttons{margin-top:26px;display:flex;justify-content:flex-end;}
.checkoutopts{display:flex;justify-content:flex-end;}
input.checkoutbutton,input.checkoutbutton1{min-width:260px;font-size:.9rem;padding:16px 36px;}
@media(max-width:760px){.cartcheckoutbuttons,.checkoutopts{justify-content:stretch;}input.checkoutbutton1{width:100%;}}

/* Cart-line options (e.g. "Size: Small", "Color: Solid Black") — compact, indented under the name.
   ECT prints a price + total column per option (a literal "-" when there's no upcharge); hide those,
   since any upcharge is already folded into the line total. */
.cartandoptsline .cartoptionsline{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 6px;padding-left:102px;font-size:.82rem;line-height:1.45;color:var(--muted);}
.cartandoptsline .cartoptionsline:first-of-type{margin-top:-8px;}
.cartandoptsline .cartoptionsline:last-of-type{padding-bottom:18px;}
.cartoptiongroup{font-weight:500;color:var(--muted);}
.cartoptiongroup::after{content:":";}
.cartoptiongroupspacer{display:none;}
/* Selected option values get a subtle "filled" chip so the eye lands on them at a scan. */
.cartoption{color:var(--ink);font-weight:500;background:var(--paper-2);border-radius:5px;padding:1.5px 8px;}
.cartoptionprice,.cartoptiontotal{display:none;}
.cartoptionsline.ectwarning .cartoption{color:var(--rubric);background:rgba(var(--rubric-rgb),.07);}
@media(max-width:760px){.cartandoptsline .cartoptionsline{padding-left:0;}}

/* ===== Checkout steps (cart.php: address -> shipping -> payment -> review) =====
   ECT loads these on POST mode=checkout; they share a label-cell (.cobhl) + field-cell (.cobll)
   pattern across all steps, plus an order-summary "resume" that reuses the cart-line styles. */
/* Constrain the whole checkout (any step) to a clean, centered single column */
.pg-cart .col-md-9:has(.cart2details),.pg-cart .col-md-9:has(.cart3details){max-width:600px;margin-left:auto;margin-right:auto;}
.cart2details{margin:0 auto 32px;}
.cartresumecontents .cartdetails_cntnr{display:none;}

/* Section / sub-section headers */
.cart2subheader,.cobhl.cart2subheader{font-family:Fraunces,serif;font-weight:500;font-size:1.18rem;color:var(--ink);margin:28px 0 16px;padding-bottom:10px;border-bottom:1px solid var(--line);}
.cartlistcart .cartname i{font-size:.82em;margin-right:8px;color:var(--rubric);}

/* Form rows: stacked uppercase label + full-width field (covers bill/ship/additional/payment) */
.billformrow,.shipformrow,.checkoutadditionals,.cart3row,.cart4row{margin:0 0 15px;}
.cobhl{margin-bottom:6px;}
.cobhl label.ectlabel,.cobhl .ectlabel{font:600 .68rem/1.3 Inter;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);}
.redstar{color:var(--rubric);}
.cobll .ecttextinput,.cobll .cdform2fixw,.cobll select,.cobll .ectselectinput,.cobll textarea,.cobll .form-control{width:100%;border:1px solid var(--line);border-radius:2px;padding:12px 14px;font:400 .95rem Inter;background:#fff;color:var(--ink);}
.cobll input:focus,.cobll select:focus,.cobll textarea:focus{outline:none;border-color:var(--ink);}
.cobll textarea,textarea.addinfo{min-height:92px;resize:vertical;}

/* Wide action buttons (Ship to different / Enter payment / Place order) */
input.widecheckout2,input.widecheckout3,.ectbutton.widecheckout2,.ectbutton.widecheckout3{width:100%;margin-top:10px;font-size:.86rem;padding:15px 28px;}
.ectbutton.shipdiff{background:transparent;color:var(--ink);border-color:var(--ink);}
.ectbutton.shipdiff:hover{background:var(--ink);color:var(--paper);}

/* Shipping-method options */
.shipoptionstable,.shipoptionstable2{margin:4px 0;}
.shiprateline,.shipline,.shiptableline,.shiptableline2{margin:0 0 8px;}
label.ectlabel.shipradio{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:2px;padding:12px 14px;cursor:pointer;font:400 .92rem/1.3 Inter;letter-spacing:0;text-transform:none;color:var(--ink);transition:border-color .15s;}
label.ectlabel.shipradio:hover{border-color:var(--ink);}
input.ectradio.shipradio{accent-color:var(--rubric);margin:0;flex:0 0 auto;}
.shipratemethod{flex:1;}
.shipratemethod.shipratemethodselected{font-weight:600;}
.cart3servicecommitment{font-size:.8rem;color:var(--muted);margin:3px 0 0 34px;}
.shiplogo img,.shiplogo2 img,.cart3shippingt img[alt="Logo"]{max-height:26px;width:auto;}
/* Pickup option (an ECT "ship flag" checkbox, rendered below the method radios) — box it to
   match the shipping radios above so the whole shipping choice reads as one tidy stack. The
   :has() scope keeps OTHER ship flags (insurance, T&Cs, etc.) on their plain rows. */
.coshipflagscontainer{margin-top:0;}
.billformrowflags:has(.cdformwillpickup){display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:2px;padding:12px 14px;margin:0 0 8px;transition:border-color .15s;}
.billformrowflags:has(.cdformwillpickup):hover{border-color:var(--ink);}
.billformrowflags:has(.cdformwillpickup) .cdshipftflag{margin:0;flex:0 0 auto;display:flex;align-items:center;}
.billformrowflags:has(.cdformwillpickup) .ectcheckbox{width:16px;height:16px;margin:0;accent-color:var(--rubric);cursor:pointer;}
.billformrowflags:has(.cdformwillpickup) .cdshipflag{flex:1;margin:0;font:400 .92rem/1.3 Inter;color:var(--ink);}
.billformrowflags:has(.cdformwillpickup) .cdshipflag label{cursor:pointer;}
.tofreeshipping{background:var(--paper-2);border-radius:2px;padding:10px 14px;font-size:.86rem;color:var(--ink);margin:10px 0;}
.cart3shiphead{font:600 .68rem/1 Inter;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin-left:8px;}

/* City / State / Zip grouped onto one row (wrapper built in cart.php JS) */
.addr-3col{display:grid;grid-template-columns:1.6fr 1.2fr 1fr;gap:0 12px;}
.addr-3col>*{margin-bottom:0;}
@media(max-width:560px){.addr-3col{grid-template-columns:1fr;gap:0;}.addr-3col>*{margin-bottom:15px;}}

/* ----- Checkout: payment method as button-cards + compact coupon ----- */
/* Compact, single-line coupon (label hidden; placeholder describes it) */
.cdformtcoupon{display:none;}
.cobll.cdformcoupon{max-width:380px;}
.cobll.cdformcoupon>div:first-child{display:flex;gap:8px;}
.cobll.cdformcoupon input.cdformcoupon{flex:1;min-width:0;}
.cobll.cdformcoupon .applycoupon{flex:0 0 auto;white-space:nowrap;font-size:.72rem;padding:0 18px;}
#cpncodespan:empty{display:none;}

/* Payment method: two selectable button-cards with brand icons */
.cdformpayment .payprovider{display:flex;flex-wrap:wrap;gap:12px;}
.payprovider label.cdformradio{flex:1 1 220px;display:flex;align-items:center;gap:10px;margin:0;border:1px solid var(--line);border-radius:3px;padding:14px 16px;cursor:pointer;font:500 .92rem/1.2 Inter;letter-spacing:0;text-transform:none;color:var(--ink);transition:border-color .15s,background .15s;}
.payprovider label.cdformradio:hover{border-color:var(--ink);}
.payprovider input.cdformradio{accent-color:var(--rubric);margin:0;flex:0 0 auto;}
.payprovider label.cdformradio:has(input:checked){border-color:var(--ink);background:var(--paper-2);}
.payprovider .payicons{margin-left:auto;display:inline-flex;align-items:center;gap:7px;}
.payicon{display:inline-block;width:32px;height:22px;background-color:var(--muted);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;}
.pi-visa{-webkit-mask-image:url(../images/pay/visa.svg);mask-image:url(../images/pay/visa.svg);}
.pi-mastercard{-webkit-mask-image:url(../images/pay/mastercard.svg);mask-image:url(../images/pay/mastercard.svg);}
.pi-amex{-webkit-mask-image:url(../images/pay/amex.svg);mask-image:url(../images/pay/amex.svg);}
.pi-discover{-webkit-mask-image:url(../images/pay/discover.svg);mask-image:url(../images/pay/discover.svg);}
.pi-paypal{-webkit-mask-image:url(../images/pay/paypal.svg);mask-image:url(../images/pay/paypal.svg);}
.pi-applepay{-webkit-mask-image:url(../images/pay/applepay.svg);mask-image:url(../images/pay/applepay.svg);}
.pi-googlepay{-webkit-mask-image:url(../images/pay/googlepay.svg);mask-image:url(../images/pay/googlepay.svg);}
/* Apple Pay / Google Pay marks read smaller than the card logos — bump their size */
.pi-applepay,.pi-googlepay{width:52px;height:32px;}
@media(max-width:560px){.payprovider label.cdformradio{flex:1 1 100%;}}

/* ===== Checkout step 3 (Payment Details): order review + card form ===== */
/* Contact / billing / shipping review summary */
.custdetsresumehead{font:600 .68rem/1.2 Inter;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin:16px 0 3px;}
.custdetsresumehead:first-child{margin-top:0;}
.custdetsresumeline{font-size:.95rem;color:var(--ink);line-height:1.5;}
input.ectbutton[value="Change"]{background:transparent;color:var(--ink);border-color:var(--ink);font-size:.72rem;padding:9px 18px;margin-top:14px;}
input.ectbutton[value="Change"]:hover{background:var(--ink);color:var(--paper);}

/* Order totals: label left / value right (leave the shipping-selector row full width) */
.cart3row:not(.cart3shipselrow){display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin:0;padding:6px 0;}
.cart3row:not(.cart3shipselrow) .cobhl3{margin:0;color:var(--muted);font:400 .92rem/1.4 Inter;text-transform:none;letter-spacing:0;}
.cart3row:not(.cart3shipselrow) .cobll3{text-align:right;font:500 .95rem/1.4 Inter;color:var(--ink);}
.cart3gndtotcntnr{border-top:1px solid var(--line);margin-top:8px !important;padding-top:14px !important;}
.cart3gndtotcntnr .cobhl3{font-family:Fraunces,serif !important;font-size:1.1rem !important;color:var(--ink) !important;}
.cart3gndtotcntnr .cobll3{font:600 1.22rem/1 Inter !important;}

/* "Credit Card Details" / "ECheck Details" sub-headers */
.cobhl.cart4header{font-family:Fraunces,serif;font-weight:500;font-size:1.18rem;color:var(--ink);margin:26px 0 14px;padding-bottom:10px;border-bottom:1px solid var(--line);}
/* "this site may not be secure" notice */
.cobhl.cart2column.ectwarning{color:var(--rubric);font-size:.85rem;margin-bottom:10px;}

/* Credit-card fields */
.cart4row{margin:0 0 15px;}
.cobll4 .cdform3fixw{width:100%;border:1px solid var(--line);border-radius:2px;padding:12px 14px;font:400 .95rem Inter;background:#fff;color:var(--ink);min-height:46px;}
.cobll4 .cdform3fixw:focus{outline:none;border-color:var(--ink);}
.cobll4 input.ecttextinput.nofixw{border:1px solid var(--line);border-radius:2px;padding:12px 14px;font:400 .95rem Inter;background:#fff;}
/* Expires Month / Year inline + compact instead of two full-width selects */
.cobll4 select,.cobll4 .ectselectinput{width:auto;min-width:104px;display:inline-block;}
/* Expires (Month/Year) and the security code share one row (wrapper built in cart.php JS) */
.cc-exp-cvv{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap;}
.cc-exp-cvv .cart4row{margin:0 0 15px;}
.cc-exp-cvv .cart4row:first-child{flex:1 1 auto;}
.cc-exp-cvv .cart4row:last-child{flex:0 0 auto;}

/* Logged-in saved-address selector (Billing / Shipping address book on checkout) */
.cartcheckoutsavedaddr{margin-bottom:22px;}
.cdformtitle{font:600 .68rem/1.2 Inter !important;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin:0 0 6px;padding:0;border:0;background:none;}
.cartcheckoutsavedaddr select.ectselectinput{display:block;width:100%;max-width:430px;border:1px solid var(--line);border-radius:2px;padding:12px 14px;font:400 .95rem Inter;background:#fff;color:var(--ink);}
.cartcheckoutsavedaddr select.ectselectinput:focus{outline:none;border-color:var(--ink);}
.editaddressbuttons{display:flex;gap:8px;margin-top:8px;}
.editaddressbuttons .ectbutton{background:transparent;color:var(--ink);border-color:var(--line);font-size:.72rem;padding:9px 18px;}
.editaddressbuttons .ectbutton:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}

/* Address-edit "Cancel" button -> small secondary (was caught by the field styling as a full-width white box) */
.nohidebillrow .cdformtextra2{display:none;}
.cobll.cdformextra2{margin-top:4px;}
.cobll.cdformextra2 .ectbutton{width:auto;background:transparent;color:var(--ink);border:1px solid var(--line);border-radius:2px;font:600 .72rem/1 Inter;letter-spacing:.08em;text-transform:uppercase;padding:11px 22px;min-height:0;}
.cobll.cdformextra2 .ectbutton:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}

/* ===== Account page (clientlogin.php — body.pg-account) =====
   ECT emits a logged-out stub (trigger buttons + a "must be logged in" card; the login
   itself is a styled .ectopaque modal) and, when signed in, a #clientlogindiv with collapsible
   sections (Account Details / Address Mgmt / Order History), each a label/value list built from
   .ectdivcontainer > .ectdivleft + .ectdivright. The modal is styled globally above; everything
   here is the inline page chrome, scoped to .pg-account so it can't leak into cart/checkout. */
/* Target the container divs only (.ectdiv.ectclientlogin) — ECT also reuses the bare
   .ectclientlogin class on inline "click here" buttons, which must NOT get card styling. */
.pg-account .ectdiv.ectclientlogin{max-width:760px;margin:0 auto;}

/* --- Logged-out stub: trigger buttons + prompt card (the logged-in dashboard shares
   .ectdiv.ectclientlogin but carries id="clientlogindiv", so exclude it from the card styling) --- */
.pg-account .clientloginbuttons{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin:0 0 26px;}
.pg-account .ectdiv.ectclientlogin:not(#clientlogindiv){border:1px solid var(--line);border-radius:3px;background:var(--paper-2);text-align:center;padding:0 0 30px;overflow:hidden;}
.pg-account .ectdiv.ectclientlogin:not(#clientlogindiv) .ectdivhead{font-family:Fraunces,serif;font-weight:500;font-size:1.25rem;color:var(--ink);background:transparent;border:0;padding:24px 24px 0;cursor:default;}
.pg-account .clientloginmessage{color:var(--muted);padding:14px 24px 6px;line-height:1.6;}
/* Inline "click here" action buttons (in ectdiv2column) -> clean rubric text-links */
.pg-account .ectdiv2column .ectbutton.ectclientlogin{background:transparent;border:0;border-radius:0;color:var(--rubric);padding:0;font:inherit;letter-spacing:0;text-transform:none;text-decoration:underline;text-underline-offset:2px;vertical-align:baseline;}
.pg-account .ectdiv2column .ectbutton.ectclientlogin:hover{background:transparent;color:var(--rubric-dark);}

/* --- Logged-in dashboard --- */
/* Collapsible section headers (Account Details / Addresses / Orders) */
.pg-account .ectdivhead.clientloginmainheader{font-family:Fraunces,serif;font-weight:500;font-size:1.18rem;color:var(--ink);background:var(--paper-2);border:1px solid var(--line);border-radius:3px;padding:16px 20px;margin:14px 0 0;cursor:pointer;user-select:none;transition:background .15s;}
.pg-account .ectdivhead.clientloginmainheader:hover{background:#e4ddcd;}
.pg-account .ectdivhead.clientloginmainheader img{margin-top:6px;width:13px;height:auto;opacity:.45;}
.pg-account .ectdivhead.clientloginmainheader i{color:var(--rubric);margin-right:9px;font-size:.95em;}
/* Section bodies */
.pg-account .adformrow,.pg-account .amformrow,.pg-account .grformrow,.pg-account .omformrow{border:1px solid var(--line);border-top:0;border-radius:0 0 3px 3px;padding:8px 20px 22px;margin-bottom:4px;}

/* Label / value rows (shared by account details, address list, edit forms) */
.pg-account .ectdivcontainer{display:grid;grid-template-columns:200px 1fr;gap:8px 22px;align-items:start;padding:12px 0;border-bottom:1px solid var(--line);}
.pg-account .ectdivcontainer:last-of-type{border-bottom:0;}
/* Left cell holds short labels (Full Name, Email) but ECT also drops a full consent
   sentence here, so keep it readable rather than tiny-uppercase. */
.pg-account .ectdivleft{font:500 .9rem/1.5 Inter;color:var(--ink);padding-top:9px;}
.pg-account .ectdivleft div{font-weight:400;color:var(--muted);}
.pg-account .ectdivright{color:var(--ink);line-height:1.6;}

/* Email-subscription consent row: ECT drops the whole opt-in question into the label
   column with a lone checkbox in the value column. Re-flow it as one compact "checkbox +
   question" line. Handles both the read-only view (checkbox in .ectdivright) and the edit
   form (checkbox in .ectdivleft); these are the only checkbox rows in the account section. */
.pg-account .ectdivcontainer:has(input[type=checkbox]){display:flex;align-items:flex-start;gap:12px;}
.pg-account .ectdivcontainer:has(input[type=checkbox])>div{padding-top:0;}
.pg-account .ectdivcontainer:has(input[type=checkbox]) .ectcheckbox{flex:0 0 auto;order:0;margin-top:2px;width:16px;height:16px;accent-color:var(--rubric);}
/* the text cell (whichever side it's on) becomes secondary, full-width body copy */
.pg-account .ectdivcontainer:has(.ectdivright input[type=checkbox]) .ectdivright{order:0;flex:0 0 auto;}
.pg-account .ectdivcontainer:has(.ectdivright input[type=checkbox]) .ectdivleft{order:1;}
.pg-account .ectdivcontainer:has(input[type=checkbox]) .ectdivleft,
.pg-account .ectdivcontainer:has(input[type=checkbox]) .ectdivright:not(:has(input)){flex:1;font:400 .85rem/1.5 Inter;color:var(--muted);}
.pg-account .ectdivcontainer:has(input[type=checkbox]) .ectdivleft div,
.pg-account .ectdivcontainer:has(input[type=checkbox]) .ectdivright div{font-size:.92em;}
/* Inline section sub-head inside a body (e.g. "Change Password") */
.pg-account .adformrow .ectdivhead,.pg-account .amformrow .ectdivhead{font-family:Fraunces,serif;font-weight:500;font-size:1.05rem;color:var(--ink);background:transparent;border:0;padding:18px 0 4px;margin:6px 0 0;border-top:1px solid var(--line);cursor:default;}
/* Full-width action row */
.pg-account .ectdiv2column{padding:16px 0 4px;color:var(--muted);font-size:.92rem;}
.pg-account .ectdiv2column .ectbutton{margin-left:6px;}

/* Account-edit + address-edit form fields */
.pg-account .ectdivright input[type=text],.pg-account .ectdivright input[type=email],.pg-account .ectdivright input[type=password],.pg-account .ectdivright select,.pg-account .ectdivright textarea,.pg-account input.ectinputhalf,.pg-account input.ecttextinput,.pg-account select.ectselectinput{border:1px solid var(--line);border-radius:2px;padding:11px 13px;font:400 .95rem Inter;background:#fff;color:var(--ink);max-width:340px;width:100%;}
.pg-account input.ectinputhalf{width:calc(50% - 5px);max-width:none;}
.pg-account .ectdivright input:focus,.pg-account .ectdivright select:focus,.pg-account input.ectinputhalf:focus,.pg-account input.ecttextinput:focus{outline:none;border-color:var(--ink);}

/* Address cards: value block left, edit/delete buttons right */
/* Address row: value + edit/delete buttons. Flex-wrap (not grid) so a narrow column drops
   the buttons below the address instead of crushing the text to one word per line. */
.pg-account .ectclientloginaddress .ectdivcontainer{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:14px 20px;}
.pg-account .ectclientloginaddress .ectdivleft{flex:1 1 200px;min-width:180px;}
.pg-account .ectclientloginaddress .ectdivright{flex:0 0 auto;}
.pg-account .ectcladdressbutton{display:inline-block;margin:0 0 6px 8px;}

/* Gift registry / wish lists (List Management section). Each list: name+count heading,
   a shareable public-access URL, and Copy/View/Delete actions; then a Create-New-List row. */
.pg-account .ectclientlogingiftreg{display:flex;flex-direction:column;}
.pg-account .ectgiftregname{font-family:Fraunces,serif;font-weight:500;font-size:1.05rem;color:var(--ink);padding:18px 0 6px;border-top:1px solid var(--line);margin-top:6px;}
.pg-account .ectclientlogingiftreg > .ectgiftregname:first-child{border-top:0;margin-top:0;}
.pg-account .ectclientlogingiftreg .ectdiv2column{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:4px 0 10px;}
.pg-account .ectpublicaccesstext{font:500 .72rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);flex:0 0 auto;}
.pg-account .ectpublicaccessinput{flex:1 1 280px;}
.pg-account input.giftregistrycopy{width:100%;border:1px solid var(--line);border-radius:2px;padding:9px 11px;font:400 .82rem Inter;background:#fff;color:var(--muted);}
.pg-account .ectgiftregistrybuttons{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:2px 0 16px;}
.pg-account .ectgiftregistrybuttons > div{margin:0;}
.pg-account .ectgiftregistrybuttons .ectbutton{font-size:.72rem;padding:11px 18px;}
/* Copy / View = quiet outline; Create New List + Delete keep the rubric fill. */
.pg-account .ectgiftregcopy .ectbutton,.pg-account .ectgiftregview .ectbutton{background:transparent;color:var(--ink);border-color:var(--ink);}
.pg-account .ectgiftregcopy .ectbutton:hover,.pg-account .ectgiftregview .ectbutton:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}
.pg-account input.createlistinput{flex:1 1 220px;max-width:300px;border:1px solid var(--line);border-radius:2px;padding:11px 13px;font:400 .95rem Inter;background:#fff;color:var(--ink);}
.pg-account .ectclientlogingiftreg .nosearchresults{color:var(--muted);padding:14px 0;font-style:italic;}
.pg-account .ectcladdressbutton .ectbutton{display:inline-flex;align-items:center;gap:7px;background:transparent;color:var(--ink);border-color:var(--line);padding:9px 16px;font-size:.7rem;}
.pg-account .ectcladdressbutton .ectbutton:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}
/* Pencil / trash glyphs before the Edit / Delete address buttons (CSS-mask, tinted by currentColor) */
.pg-account .ectcladdressbutton .ectbutton::before{content:"";width:13px;height:13px;flex:0 0 auto;background-color:currentColor;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;}
.pg-account .ectcladdressbutton .editaddress::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h9'/%3E%3Cpath d='M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h9'/%3E%3Cpath d='M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z'/%3E%3C/svg%3E");}
.pg-account .ectcladdressbutton .deleteaddress::before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18M8 6V4h8v2M19 6l-1 14H6L5 6'/%3E%3Cpath d='M10 11v6M14 11v6'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18M8 6V4h8v2M19 6l-1 14H6L5 6'/%3E%3Cpath d='M10 11v6M14 11v6'/%3E%3C/svg%3E");}
.pg-account .nosearchresults{color:var(--muted);padding:16px 0;}

/* Order history: controls bar */
.pg-account .ordhistorycontrols form{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:6px 0 16px;border-bottom:1px solid var(--line);}
.pg-account .ectclordcount{font-weight:600;color:var(--ink);}
.pg-account .ordhistorycontrols select.ectselectinput{width:auto;min-width:130px;}
.pg-account .ectclordsearchtxt{flex:1;min-width:140px;max-width:240px;}
/* Order cards */
.pg-account .ectclientlogorder{border:1px solid var(--line);border-radius:3px;padding:16px 18px;margin:16px 0;}
.pg-account .ectclordrow1{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 24px;padding-bottom:10px;border-bottom:1px solid var(--line);}
.pg-account .ectclordrow2{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:10px 0;}
.pg-account .ectclordlabel{font:600 .72rem/1.4 Inter;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-right:4px;}
.pg-account .ectclordarticle{color:var(--ink);}
/* Track button: compact secondary button with a tracking-pin glyph (was a heavy solid block) */
.pg-account .ectclordrow1 .ectbutton{display:inline-flex;align-items:center;gap:7px;margin-top:8px;background:transparent;color:var(--ink);border-color:var(--line);padding:8px 16px;font-size:.66rem;}
.pg-account .ectclordrow1 .ectbutton:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}
.pg-account .ectclordrow1 .ectbutton[disabled]{opacity:.5;cursor:default;}
.pg-account .ectclordrow1 .ectbutton::before{content:"";width:13px;height:13px;flex:0 0 auto;background-color:currentColor;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0z'/%3E%3Ccircle cx='12' cy='10' r='2.6'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0z'/%3E%3Ccircle cx='12' cy='10' r='2.6'/%3E%3C/svg%3E");}
.pg-account .orderhistorydetails .ectbutton{background:transparent;color:var(--ink);border-color:var(--ink);padding:9px 18px;font-size:.7rem;}
.pg-account .orderhistorydetails .ectbutton:hover{background:var(--ink);color:var(--paper);}
/* Per-product rows within an order: image | id+name (roomy) | action button group.
   Flex (not grid) so the name keeps a usable min-width and the buttons wrap below when tight.
   The id/name and actions cells are unclassed divs, so they're targeted via :has(). */
.pg-account .ectclordrow3{display:flex;flex-wrap:wrap;align-items:center;gap:12px 18px;padding:14px 0;border-top:1px solid var(--line);}
.pg-account .ectclprodimg{flex:0 0 auto;}
.pg-account .ectclprodimg img{width:64px;height:64px;object-fit:cover;border-radius:2px;background:var(--paper-2);}
.pg-account .ectclordrow3 > div:has(.ectclordprodname){flex:1 1 220px;min-width:170px;}
.pg-account .ectclordprodid{font:600 .68rem/1.4 Inter;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);}
.pg-account .ectclordprodname{font-family:Fraunces,serif;font-weight:500;font-size:1rem;line-height:1.3;color:var(--ink);margin-top:2px;}
/* Action group: View Product / Quick Buy / Review Product as one tidy, even row of secondary
   buttons. display:contents on the quickbuy <form> lifts its button into the same flex group. */
.pg-account .ectclordrow3 > div:has(.ectclordviewprod){flex:0 0 auto;margin-left:auto;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;align-items:center;}
.pg-account .ectclordrow3 > div:has(.ectclordviewprod) form{display:contents;}
.pg-account .ectclordviewprod,.pg-account .ectclordqbuybutton,.pg-account .ectclordreview{margin:0;}
.pg-account .ectclordrow3 .ectbutton{margin:0;padding:9px 14px;font-size:.66rem;background:transparent;color:var(--ink);border-color:var(--line);white-space:nowrap;}
.pg-account .ectclordrow3 .ectbutton:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}
/* Hide secondary/redundant buttons the quickbuy may still emit (duplicate details link, stock notices) */
.pg-account .ectclordrow3 .ectbutton.detaillink,.pg-account .ectclordrow3 .prodoutofstock,.pg-account .ectclordrow3 .prodnotifystock,.pg-account .ectclordrow3 .outofstock{display:none;}

/* Order-detail popup (vieworder AJAX) reuses the modal shell */
#vieworderdiv .opaqueinner{position:relative;background:var(--paper);max-width:680px;width:100%;padding:34px;border-radius:3px;box-shadow:0 30px 70px rgba(23,20,14,.35);}

/* ===== Order receipt (do_order_success → receipt* classes) =====
   Shared markup: the "Details" order popup (#vieworderdiv), the thanks page, the order-status
   page, and confirmation pages all render this. Styled globally so it themes wherever it appears
   on-site (emails ship their own inline styles and don't load this sheet). */
.receiptbody{color:var(--ink);}
/* Prominent order id (left) + email (right) row at the top of the receipt */
.receipttopmeta{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:12px 24px;margin:2px 0 26px;padding-bottom:18px;border-bottom:1px solid var(--line);}
.rmetaemail{text-align:right;}
.receiptmetaval{font-family:Fraunces,serif;font-weight:500;font-size:1.3rem;line-height:1;color:var(--ink);}
.receiptextra:empty{display:none;}
/* Billing + shipping addresses, side by side */
.receiptaddresses{display:grid;grid-template-columns:1fr 1fr;gap:30px 44px;margin:6px 0 30px;}
.receiptsectionhead{font-family:Fraunces,serif;font-weight:500;font-size:1.05rem;color:var(--ink);margin:0 0 13px;padding-bottom:9px;border-bottom:1px solid var(--line);}
/* Stacked fields: a small uppercase label above its value (addresses + order meta:
   order id, email, ship method…). Sleeker than a label/value grid and never wraps
   the address into a too-narrow column. */
.receiptcontainer{display:block;padding:0;margin:0 0 13px;font-size:.92rem;line-height:1.5;}
.receiptcontainer:last-child{margin-bottom:0;}
.receiptleft{display:block;font:600 .6rem/1.3 Inter;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:0 0 1px;}
.receiptright{display:block;color:var(--ink);}
/* Line-item list: 5-col grid (id/image · name · unit price · qty · line total) */
.receiptlist{margin:6px 0 4px;}
.receiptheadrow,.receiptitemrow{display:grid;grid-template-columns:84px minmax(0,1fr) 82px 66px 84px;gap:16px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line);}
.receiptheadrow{font:600 .64rem/1.3 Inter;letter-spacing:.035em;text-transform:uppercase;color:var(--muted);white-space:nowrap;}
.receiptprodid{font-size:.6rem;color:var(--muted);word-break:break-word;line-height:1.3;}
.receiptprodname{font-family:Fraunces,serif;font-weight:500;font-size:.98rem;line-height:1.3;color:var(--ink);}
/* Every header cell reuses a data-cell class (.receiptprodid .78rem, .receiptunitprice
   etc. .9rem) — force them all to the header font so the labels are one size. */
.receiptheadrow > div{font:inherit;}
.receiptunitprice,.receipttotal{text-align:right;font-size:.9rem;white-space:nowrap;}
.receiptquantity{text-align:center;font-size:.9rem;}
.thankspageimg img{width:56px;height:56px;object-fit:cover;border-radius:4px;background:var(--paper-2);border:1px solid var(--line);margin-bottom:6px;}
.giftwrap{font-size:.78rem;color:var(--muted);margin-top:2px;}
/* Option sub-rows: indented under the name column, muted; the dash-filled price cells are hidden */
/* Options as a tidy sub-list indented under the product name: "Size - Small".
   The price cells are hidden; a divider closes the last option of each item. */
.receiptoptionrow{display:block;padding:0 0 12px 100px;font-size:.82rem;color:var(--muted);line-height:1.55;border-bottom:1px solid var(--line);}
.receiptoptionrow:has(+ .receiptoptionrow){border-bottom:0;padding-bottom:2px;}
.receiptoptgroup{display:inline;font-weight:600;color:var(--muted);text-align:left;}
.receiptoptname{display:inline;color:var(--ink);}
.receiptoptunitprice,.receiptoptquantity,.receiptopttotal{display:none;}
.receiptitemrow:has(+ .receiptoptionrow){border-bottom:0;}
/* Package / tracking sub-rows */
.receiptpackagerow{display:flex;gap:12px;font-size:.84rem;color:var(--muted);padding:2px 0;}
/* Totals: compact right-aligned stack */
.receipttotalstable{max-width:320px;margin:20px 0 4px auto;}
.receipttotalsrow{display:flex;justify-content:space-between;align-items:baseline;gap:18px;padding:5px 0;font-size:.92rem;}
.receipttotalsrow .ectleft{color:var(--muted);}
.receipttotalsrow .ectright{color:var(--ink);font-weight:500;white-space:nowrap;}
.rectotgrandtotal{border-top:2px solid var(--ink);margin-top:10px;padding-top:15px;}
.rectotgrandtotal .ectleft{font-family:Fraunces,serif;font-size:1.18rem;color:var(--ink);}
.rectotgrandtotal .ectright{font:600 1.5rem/1 Inter;color:var(--ink);}
/* Digital-download section + footer buttons (Back / Print) */
.receiptdownload{margin-top:2px;margin-bottom:6px;}
.receiptdownloadhead{margin-top:0;}
.recptthanks{margin-top:26px;display:flex;gap:10px;flex-wrap:wrap;}
.receiptbuttons .receiptcontinueshopping,.receiptbuttons .receiptprintversion{margin:0;}
.recptthanks .ectbutton,.receiptprintversion .ectbutton,.receiptdownload .ectbutton{background:transparent;color:var(--ink);border-color:var(--ink);padding:11px 22px;font-size:.72rem;}
.recptthanks .ectbutton:hover,.receiptprintversion .ectbutton:hover,.receiptdownload .ectbutton:hover{background:var(--ink);color:var(--paper);}
/* ----- Order-confirmation polish (thanks.php) -------------------------------
   Receipt body (#printcontent, fed by the emailmessages.receiptheaders template)
   rendered as a centered card; the digital-download block gridded; core's inline
   red download link re-themed; footer buttons laid out. Scoped to .pg-content so
   the in-modal "Details" receipt (pg-account) is untouched. */
.pg-content #printcontent{max-width:680px;margin:0 auto;background:#fff;border:1px solid var(--line);border-radius:8px;padding:34px 40px;box-shadow:0 1px 3px rgba(23,20,14,.05);}
.pg-content #printcontent .receiptaddresses{margin-top:22px;}
/* Hide the receipt logo on the website only (it stays in the emailed copy, which
   ignores this stylesheet). The logo is the <p> wrapping mw-receipt-logo.png. */
.pg-content #printcontent p:has(img[src*="mw-receipt-logo"]){display:none;}
/* Digital downloads: bare divs -> tidy 3-column table */
.downloadlist{margin-top:8px;}
.downloadheadrow,.downloadlistrow{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1fr) minmax(0,1.2fr);gap:14px;align-items:baseline;padding:11px 0;border-bottom:1px solid var(--line);}
.downloadheadrow{font:600 .66rem/1.3 Inter;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.downloadlistrow > div:first-child{font-size:.8rem;color:var(--muted);word-break:break-word;}
.downloadlistrow > div:nth-child(2){font-family:Fraunces,serif;font-weight:500;color:var(--ink);}
.downloadlistrow .downloadbtn{transition:.18s;}
/* Whiten the inner span + icon directly (the <a>'s inline color can't be overridden),
   on a solid rubric fill — avoids Bootstrap's default blue link colour on hover. */
.downloadlistrow .downloadbtn:hover{background:var(--rubric);}
.downloadlistrow .downloadbtn:hover span{color:#fff;}
.downloadlistrow .downloadbtn:hover svg{stroke:#fff;}
.receiptnodownloadtext{color:var(--muted);font-size:.9rem;}
/* Footer buttons */
.receiptbuttons{display:flex;flex-wrap:wrap;align-items:center;gap:12px;max-width:680px;margin:24px auto 6px;}
.receiptrecemail{flex-basis:100%;color:var(--muted);font-size:.9rem;margin:0 0 6px;}
/* One identical box for both buttons (they're an <a> + an <input> with different
   padding/font). line-height centering (not flex) keeps the labels vertically
   aligned across both element types. */
.receiptbuttons .ectbutton{box-sizing:border-box;display:inline-block;height:48px;line-height:46px;padding:0 26px;font-size:.74rem;text-align:center;vertical-align:top;}
.receiptcontinueshopping .ectbutton{background:var(--rubric);border-color:var(--rubric);color:var(--paper);}
.receiptcontinueshopping .ectbutton:hover{background:var(--rubric-dark);border-color:var(--rubric-dark);color:var(--paper);}
.receiptprintversion .ectbutton{background:transparent;color:var(--ink);border-color:var(--ink);margin-top:0;}
.receiptprintversion .ectbutton:hover{background:var(--ink);color:var(--paper);}
@media(max-width:600px){
  .pg-content #printcontent{padding:24px 20px;}
  .downloadheadrow{display:none;}
  .downloadlistrow{grid-template-columns:1fr;gap:6px;padding:12px 0;}
  .downloadlistrow > div:nth-child(2){font-size:1.02rem;}
  /* Full-width tap target (override the helper's inline display:inline-block) */
  .downloadlistrow .downloadbtn{display:block!important;text-align:center;margin-top:2px;}
  .receiptaddresses{grid-template-columns:1fr;gap:18px;}
  .receiptheadrow{display:none;}
  /* Line items as a media object: thumbnail (+sku) floated left, details column to
     the right. The column headers are hidden on mobile, so each value carries an
     explicit label instead of bare "$0.00 / 1 / $0.00" numbers. overflow:hidden on
     the text rows makes them sit beside the float rather than wrap under it. */
  .receiptitemrow{display:block;padding:15px 0;overflow:hidden;}
  .receiptitemrow > div{text-align:left;}
  .receiptitemrow .receiptprodid{float:left;margin:0 14px 0 0;max-width:88px;text-align:center;font-size:.6rem;color:var(--muted);}
  .receiptitemrow .receiptprodname{font-size:1.02rem;overflow:hidden;}
  .receiptitemrow .receiptunitprice,.receiptitemrow .receiptquantity,.receiptitemrow .receipttotal{overflow:hidden;font-size:.85rem;color:var(--muted);margin-top:3px;}
  .receiptitemrow .receiptunitprice::before{content:"Unit price: ";}
  .receiptitemrow .receiptquantity::before{content:"Qty: ";}
  .receiptitemrow .receipttotal{color:var(--ink);font-weight:500;}
  .receiptitemrow .receipttotal::before{content:"Line total: ";}
  .receiptoptionrow{padding-left:16px;}
  /* Order id / email stack so a long email never overflows the card */
  .receipttopmeta{flex-direction:column;align-items:stretch;gap:13px;}
  .rmetaemail{text-align:left;}
  .receipttopmeta .receiptright{word-break:break-word;}
  /* Footer buttons: full-width stacked tap targets */
  .receiptbuttons{flex-direction:column;align-items:stretch;}
  .receiptbuttons .ectbutton{width:100%;}
}

/* ----- Printable receipt (the "Printable Version" button opens a .printbody
   window that pulls in this stylesheet and auto-prints; also covers Ctrl+P).
   Shrinks everything so a typical receipt fits on one page. ------------------ */
@media print{
  @page{margin:1.2cm;}
  .mw-annc,.head,.utility,.page-hero,.foot,.foot-signup,.receiptbuttons,.mega,.mw-drawer{display:none!important;}
  /* Drop the receipt footer/colophon on the printed copy: every trailing <p> that
     follows the message-body <div> (Please-check note, Missional Wear block,
     Soli Deo Gloria, url, address) + the thank-you line. */
  .printbody > div ~ p, #printcontent > div ~ p, .recptthanks{display:none!important;}
  /* Digital-download block is a screen-only affordance — omit it from the printout. */
  .receiptdownload{display:none!important;}
  body{background:#fff!important;}
  .page,main,#main,section{margin:0!important;padding:0!important;}
  #printcontent,.printbody{max-width:none!important;margin:0!important;padding:0!important;border:0!important;box-shadow:none!important;font-size:10px;color:#000;}
  /* show the logo when printing the website page (it's hidden on-screen); the
     .printbody print window already shows it. Resize globally for both. */
  #printcontent p:has(img[src*="mw-receipt-logo"]){display:block!important;text-align:center!important;margin:0 0 6px!important;}
  img[src*="mw-receipt-logo"]{width:128px!important;height:auto!important;}
  .receipttopmeta{margin:0 0 7px!important;padding-bottom:6px!important;}
  .receiptmetaval{font-size:.95rem!important;}
  .receiptaddresses{gap:6px 26px!important;margin:3px 0 8px!important;}
  .receiptsectionhead{font-size:.84rem!important;margin:0 0 5px!important;padding-bottom:3px!important;}
  /* Print only: address fields go label-left (paper has the width); saves height. */
  .receiptcontainer{display:grid!important;grid-template-columns:72px 1fr!important;gap:0 10px!important;font-size:9px!important;margin-bottom:2px!important;line-height:1.3!important;}
  .receiptleft{font-size:9px!important;text-transform:none!important;letter-spacing:0!important;font-weight:600!important;color:#555!important;margin:0!important;}
  .receiptheadrow,.receiptitemrow{padding:3px 0!important;font-size:9px!important;}
  /* Options on one comma-separated line (e.g. "Size - Small, Color - Heather Red")
     indented under the name — saves a row per option on paper. */
  .receiptoptionrow{display:inline!important;border:0!important;padding:0!important;margin:0!important;font-size:8.5px!important;color:#555!important;line-height:1.3!important;}
  .receiptitemrow + .receiptoptionrow{margin-left:100px!important;}
  .receiptoptionrow + .receiptoptionrow::before{content:", "!important;}
  .receiptoptionrow + .receiptitemrow{border-top:1px solid var(--line)!important;}
  .receiptoptgroup,.receiptoptname{display:inline!important;}
  .receiptprodname{font-size:.8rem!important;}
  .thankspageimg img{width:26px!important;height:26px!important;margin-bottom:0!important;}
  .receipttotalsrow{font-size:9.5px!important;padding:2px 0!important;}
  .rectotgrandtotal{margin-top:6px!important;padding-top:8px!important;}
  .rectotgrandtotal .ectleft{font-size:.95rem!important;}
  .rectotgrandtotal .ectright{font-size:1.1rem!important;}
  .recptthanks,.receiptrecemail,.downloadlistrow,.receiptnodownloadtext{font-size:9px!important;}
  .downloadbtn{font-size:9px!important;padding:5px 9px!important;}
}

@media(max-width:620px){
  .pg-account .ectdivcontainer{grid-template-columns:1fr;gap:4px;}
  .pg-account .ectdivleft{padding-top:0;}
  .pg-account input.ectinputhalf{width:100%;}
  .pg-account .ectclordrow3 > div:has(.ectclordviewprod){margin-left:0;justify-content:flex-start;width:100%;}
  .pg-account .ectcladdressbutton{margin:0 8px 0 0;}
}

/* --- Gift-certificate / donation purchase form (ECT incspecials.php, rendered through
   proddetail.php on the gift-certificate-email/-physical + donation pages). Same bare
   .ectdiv* markup as the account section, but unscoped there — give it a centred card
   that matches the account treatment. .ectbutton submit is already themed globally. --- */
.pg-proddetail .ectgiftcerts,.pg-proddetail .ectdonations{max-width:560px;margin:0 auto;border:1px solid var(--line);border-radius:3px;background:var(--paper-2);overflow:hidden;}
.pg-proddetail .ectgiftcerts .ectdivhead,.pg-proddetail .ectdonations .ectdivhead{font-family:Fraunces,serif;font-weight:500;font-size:1.25rem;color:var(--ink);background:transparent;border-bottom:1px solid var(--line);padding:22px 26px;margin:0;}
.pg-proddetail .ectgiftcerts .ectdiv2column,.pg-proddetail .ectdonations .ectdiv2column{padding:14px 26px 0;color:var(--muted);font-size:.92rem;}
.pg-proddetail .ectgiftcerts .ectdiv2column.ectwarning,.pg-proddetail .ectdonations .ectdiv2column.ectwarning{color:var(--rubric);}
.pg-proddetail .ectgiftcerts .ectdivcontainer,.pg-proddetail .ectdonations .ectdivcontainer{display:grid;grid-template-columns:150px 1fr;gap:8px 22px;align-items:center;padding:14px 26px;border-bottom:1px solid var(--line);}
.pg-proddetail .ectgiftcerts .ectdivcontainer:last-child,.pg-proddetail .ectdonations .ectdivcontainer:last-child{border-bottom:0;}
.pg-proddetail .ectgiftcerts .ectdivleft,.pg-proddetail .ectdonations .ectdivleft{font:500 .9rem/1.5 Inter;color:var(--ink);}
.pg-proddetail .ectgiftcerts .ectdivleft label,.pg-proddetail .ectdonations .ectdivleft label{cursor:pointer;}
.pg-proddetail .ectgiftcerts .ectdivcontainer:has(textarea){align-items:start;}
.pg-proddetail .ectgiftcerts .ectdivright input[type=text],.pg-proddetail .ectgiftcerts .ectdivright textarea,.pg-proddetail .ectdonations .ectdivright input[type=text],.pg-proddetail .ectdonations .ectdivright textarea{width:100%;max-width:320px;border:1px solid var(--line);border-radius:2px;padding:11px 13px;font:400 .95rem Inter;background:#fff;color:var(--ink);box-sizing:border-box;}
.pg-proddetail .ectgiftcerts .ectdivright textarea,.pg-proddetail .ectdonations .ectdivright textarea{max-width:none;min-height:110px;resize:vertical;}
.pg-proddetail .ectgiftcerts #amount,.pg-proddetail .ectdonations #amount{max-width:140px;}
.pg-proddetail .ectgiftcerts .ectdivright input:focus,.pg-proddetail .ectgiftcerts .ectdivright textarea:focus,.pg-proddetail .ectdonations .ectdivright input:focus,.pg-proddetail .ectdonations .ectdivright textarea:focus{outline:none;border-color:var(--ink);}
.pg-proddetail .ectgiftcerts .gcsubmit,.pg-proddetail .ectdonations .donationsubmit{margin-top:2px;}
@media(max-width:560px){
  .pg-proddetail .ectgiftcerts .ectdivcontainer,.pg-proddetail .ectdonations .ectdivcontainer{grid-template-columns:1fr;gap:6px;padding:14px 20px;}
  .pg-proddetail .ectgiftcerts .ectdivhead,.pg-proddetail .ectdonations .ectdivhead{padding:18px 20px;}
  .pg-proddetail .ectgiftcerts .ectdiv2column,.pg-proddetail .ectdonations .ectdiv2column{padding:12px 20px 0;}
}

/* About — winding story timeline */
.timeline{position:relative;list-style:none;margin:0 auto;padding:6px 0 2px;max-width:880px;}
.timeline-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;z-index:0;}
.timeline-svg .trail-base{fill:none;stroke:rgba(var(--rubric-rgb),.28);stroke-width:2;stroke-linecap:round;stroke-dasharray:1 9;}
.timeline-svg .trail-fill{fill:none;stroke:var(--rubric);stroke-width:2.5;stroke-linecap:round;}
.ms{position:relative;display:flex;box-sizing:border-box;width:50%;min-height:54px;margin-bottom:26px;z-index:1;}
.ms.left{left:0;justify-content:flex-end;padding-right:46px;}
.ms.right{left:50%;justify-content:flex-start;padding-left:46px;}
.ms-dot{position:absolute;top:7px;width:15px;height:15px;border-radius:50%;background:var(--paper);border:2px solid var(--rubric);z-index:2;transform:translateX(-50%);transition:background .3s,box-shadow .3s;}
.ms.left .ms-dot{left:calc(100% - 15px);}
.ms.right .ms-dot{left:15px;}
.ms-dot.on{background:var(--rubric);box-shadow:0 0 0 5px rgba(var(--rubric-rgb),.14);}
.ms-card{max-width:340px;width:100%;}
.ms-figure{margin:0 0 14px;aspect-ratio:16/10;background:var(--paper-2);border:1px solid var(--line);border-radius:8px;overflow:hidden;}
.ms-figure img{width:100%;height:100%;object-fit:cover;display:block;}
.ms-year{display:inline-block;font:500 .72rem/1 Inter;letter-spacing:.16em;text-transform:uppercase;color:var(--rubric);margin-bottom:6px;}
.ms-body h3{font-family:Fraunces,serif;font-weight:500;font-size:1.28rem;letter-spacing:-.01em;line-height:1.15;margin:0 0 .35rem;}
.ms-body p{color:var(--ink-soft);line-height:1.55;margin:0;font-size:.96rem;}
.ms-body em{color:var(--rubric);font-style:italic;}
@media(max-width:820px){
  .timeline{max-width:560px;}
  .ms,.ms.left,.ms.right{width:100%;left:0;justify-content:flex-start;padding:0 0 0 52px;}
  .ms.left .ms-dot,.ms.right .ms-dot{left:14px;transform:none;}
  .ms-card{max-width:none;}
  .ms-figure{max-width:200px;}
}

/* ===== Top search panel (Shopify-style drop-down) ===== */
.search-panel{position:fixed;top:0;left:0;right:0;z-index:61;background:var(--paper);border-bottom:1px solid var(--line);box-shadow:0 26px 46px rgba(23,20,14,.16);transform:translateY(-100%);transition:transform .3s cubic-bezier(.4,0,.2,1);visibility:hidden;}
.search-panel.open{transform:none;visibility:visible;}
.search-panel-inner{max-width:1180px;margin:0 auto;padding:26px 28px 30px;}
.sp-form{display:flex;align-items:center;gap:14px;border-bottom:2px solid var(--ink);padding-bottom:14px;}
.sp-ico{display:inline-flex;color:var(--muted);flex:0 0 auto;}.sp-ico svg{width:24px;height:24px;}
.sp-input{flex:1;min-width:0;border:0;background:none;outline:none;font-family:Fraunces,serif;font-weight:500;font-size:clamp(1.25rem,3vw,1.85rem);letter-spacing:-.01em;color:var(--ink);padding:4px 0;}
.sp-input::placeholder{color:var(--muted);opacity:.65;}
.sp-input::-webkit-search-cancel-button{-webkit-appearance:none;}
.sp-go{flex:0 0 auto;background:var(--rubric);border:1px solid var(--rubric);color:var(--paper);font:500 .8rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;padding:14px 28px;cursor:pointer;transition:.18s;}
.sp-go:hover{background:var(--rubric-dark);border-color:var(--rubric-dark);}
.sp-close{flex:0 0 auto;background:none;border:0;color:var(--ink);cursor:pointer;display:inline-flex;padding:6px;transition:color .15s;}
.sp-close:hover{color:var(--rubric);}
.sp-quick{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:18px;}
.sp-quick-label{font:500 .7rem/1 Inter;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-right:4px;}
.sp-quick a{font:400 .88rem/1 Inter;color:var(--ink-soft);border:1px solid var(--line);border-radius:999px;padding:8px 16px;transition:.15s;}
.sp-quick a:hover{border-color:var(--ink);color:var(--ink);background:var(--paper-2);}
@media(max-width:920px){
  .search-panel-inner{padding:18px 18px 22px;}
  .sp-go{display:none;}
  .sp-quick-label{width:100%;margin-bottom:2px;}
}

/* ===== Search page — refine form + results ===== */
.searchform{display:grid;gap:18px 22px;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));align-items:end;background:var(--paper-2);border:1px solid var(--line);border-radius:6px;padding:26px;margin:0 0 6px;}
.searchheader{grid-column:1/-1;font:500 .72rem/1 Inter;letter-spacing:.16em;text-transform:uppercase;color:var(--rubric);}
.searchcntnr{display:flex;flex-direction:column;gap:7px;min-width:0;}
.searchform .ectlabel{font:600 .68rem/1 Inter;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);}
.searchform .ecttextinput,.searchform .ectselectinput{width:100%;border:1px solid var(--line);border-radius:2px;padding:12px 14px;font:400 .95rem Inter;background:#fff;color:var(--ink);}
.searchform .ecttextinput:focus,.searchform .ectselectinput:focus{outline:none;border-color:var(--ink);}
.searchform .searchcontrol>div[style]{position:relative;}
.searchform .ectsearchsubmit .searchcontrol{display:flex;}
.searchform .ectsearchsubmit input,.searchform .ectsearchsubmit button{width:100%;background:var(--rubric);border:1px solid var(--rubric);color:var(--paper);font:500 .8rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;padding:14px 26px;cursor:pointer;transition:.18s;}
.searchform .ectsearchsubmit input:hover,.searchform .ectsearchsubmit button:hover{background:var(--rubric-dark);border-color:var(--rubric-dark);}
/* autosearch suggestions dropdown */
.searchform .autosearch{position:absolute;top:100%;left:0;right:0;z-index:5;background:#fff;border:1px solid var(--line);border-top:0;box-shadow:0 14px 28px rgba(23,20,14,.14);max-height:320px;overflow-y:auto;}
.searchform .autosearch>*{display:block;padding:10px 14px;font:400 .9rem Inter;color:var(--ink-soft);cursor:pointer;border-top:1px solid var(--line);}
.searchform .autosearch>*:first-child{border-top:0;}
.searchform .autosearch>*:hover,.searchform .autosearch .autosearchselected{background:var(--paper-2);color:var(--rubric);}
.searchresults{margin-top:34px;}
.nosearchresults{text-align:center;color:var(--muted);font-family:Fraunces,serif;font-size:1.35rem;padding:64px 0;}
@media(max-width:560px){.searchform{padding:20px;grid-template-columns:1fr;}
/* On phones the stacked form eats the screen; hide it once a search has run (header search icon still re-searches). The bare /search page keeps the form so users can search. */
.has-query .searchform{display:none;}
.has-query .searchresults{margin-top:0;}}

/* ============================================================
   Product filter drawer (ECT incsidefilter output)
   The "Filter & Sort" trigger on product listings opens a
   right-side drawer that reuses the shared #scrim. ECT emits
   .ectpatgrp / .ectpat / .ectpacount / .sidefilter inputs etc.;
   we theme them here. Price-slider behaviour (#sliderdiv +
   the two range inputs) is driven by ectcart.js — we only
   supply the look. Filters are enabled in admin (sideFilter).
   ============================================================ */
/* Filter control pinned to the breadcrumb row (Shopify-style): title, then
   breadcrumb-left / filter-icon-right, then the grid. Absolute-positioned so it
   shares the breadcrumb's line instead of taking its own row. */
.col-sm-12:has(> .listing-toolbar){position:relative;}
.listing-toolbar{position:absolute;top:0;right:0;margin:0;z-index:2;}
.filter-trigger{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;color:var(--ink);background:transparent;border:1px solid var(--line);border-radius:6px;padding:0;cursor:pointer;transition:.18s;}
.filter-trigger:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}
.filter-trigger svg{flex:none;}

.filter-drawer{position:fixed;top:0;right:0;bottom:0;width:90%;max-width:380px;background:var(--paper);z-index:60;transform:translateX(100%);transition:transform .25s ease;overflow-y:auto;display:flex;flex-direction:column;}
.filter-drawer.open{transform:none;}
.filter-drawer .fd-top{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;padding:20px 24px;background:var(--paper);border-bottom:1px solid var(--line);z-index:2;}
.filter-drawer .fd-title{font-size:1.2rem;font-weight:600;}
.filter-drawer .fd-close{background:none;border:0;cursor:pointer;color:var(--ink);line-height:0;padding:4px;}
.filter-drawer .fd-close:hover{color:var(--rubric);}
.filter-drawer .fd-body{padding:10px 24px 36px;}

/* group wrapper + title */
.fd-body .ectpatgrp{border-bottom:1px solid var(--line);margin-bottom:18px;padding-bottom:16px;max-height:none !important;overflow:visible !important;}
.fd-body .ectpatgrp:last-child{border-bottom:0;}
.fd-body .ectpattitle{font:600 .72rem/1 Inter !important;letter-spacing:.14em;text-transform:uppercase;color:var(--rubric);margin:0 0 12px !important;}
.fd-body .ectpattitle a{color:var(--ink);text-decoration:underline;}
.fd-body .ectpatfilters{display:flex;flex-direction:column;gap:2px;}

/* clickable attribute links (default $sidefilterstyle) */
.fd-body .ectpat{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;font-size:.95rem;color:var(--ink-soft);cursor:pointer;border-radius:2px;transition:.15s;}
.fd-body .ectpat:hover{background:var(--paper-2);color:var(--rubric);}
.fd-body .ectpatset{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;font-size:.95rem;font-weight:600;color:var(--rubric);background:var(--paper-2);border-radius:2px;}
.fd-body .ectpacount{font-size:.82em;color:var(--muted);font-weight:400;}
.fd-body .zeroatt{color:var(--muted);opacity:.6;}

/* checkbox style ($sidefilterstyle='multiple') */
.fd-body .ectpatcb,.fd-body .ectpatcbset{display:flex;align-items:center;gap:8px;padding:6px 2px;font-size:.95rem;}
.fd-body .ectpatcb label{display:flex;align-items:center;gap:8px;cursor:pointer;width:100%;}
.fd-body .ectpatcb .ectpacount{margin-left:auto;}

/* "More" expander (button / link / mouseover bar) */
.fd-body .moreattributes,.fd-body .grpMoreDiv,.fd-body div[id^="grpMoreLnk"]{font:600 .72rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;color:var(--rubric);cursor:pointer;padding-top:10px;}
.fd-body .sidefiltermore{background:none;border:0;color:var(--rubric);font:600 .72rem/1 Inter;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;padding:8px 0;}

/* inputs / selects */
.fd-body .ecttextinput,.fd-body .ectselectinput,.fd-body select.sidefilter,.fd-body input.sidefilter{width:100%;border:1px solid var(--line);border-radius:2px;padding:11px 13px;font:400 .92rem Inter;background:#fff;color:var(--ink);}
.fd-body .ecttextinput:focus,.fd-body .ectselectinput:focus,.fd-body select.sidefilter:focus,.fd-body input.sidefilter:focus{outline:none;border-color:var(--ink);}

/* price band: min/max inputs, slider, Go button */
.fd-body .sfpriceinputs{display:flex;gap:10px;margin-bottom:16px;}
.fd-body .sfpriceinputs>div{flex:1;}
.fd-body .sfslidercontainer{position:relative;height:4px;background:var(--line);border-radius:2px;margin:8px 8px 0;}
.fd-body #sliderdiv{position:absolute;top:0;bottom:0;background:var(--rubric);border-radius:2px;}
.fd-body .sfrangesliders{position:relative;height:24px;margin:0 8px;}
.fd-body .sfrangesliders input[type=range]{position:absolute;top:0;left:0;width:100%;height:24px;margin:0;background:none;pointer-events:none;-webkit-appearance:none;appearance:none;}
.fd-body .sfrangesliders input[type=range]::-webkit-slider-thumb{pointer-events:auto;-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--rubric);border:2px solid var(--paper);box-shadow:0 1px 3px rgba(0,0,0,.3);cursor:pointer;}
.fd-body .sfrangesliders input[type=range]::-moz-range-thumb{pointer-events:auto;width:16px;height:16px;border-radius:50%;background:var(--rubric);border:2px solid var(--paper);box-shadow:0 1px 3px rgba(0,0,0,.3);cursor:pointer;}
.fd-body .sfprice{text-align:center;}
.fd-body .ectbutton.sidefiltergo{width:100%;}
