/* Remarketly Life — product-section layer for "Stone & Light".
   Pairs with /assets/shell.css and uses ONLY its tokens (ink / paper / gold).
   Layout, the phone mocks and the module cards live here; type, buttons,
   headings, sections, cards and the nav/footer all come from the shell.
   Everything with an edge here is cut, not rounded — the only round things
   left are the pill, the icon-free seal and the phone itself, which is a
   physical object rather than a surface of the page. */

/* live-preview pill */
.lf-pill{display:inline-flex;align-items:center;gap:8px;font-size:11px;font-weight:600;letter-spacing:.5px;line-height:1.3;
  text-transform:uppercase;color:var(--gold);border:1px solid var(--gold);background:var(--gold-soft);border-radius:999px;padding:5px 13px}
.lf-pill .dot{width:7px;height:7px;border-radius:50%;background:var(--gold);box-shadow:0 0 8px var(--gold);animation:lfblink 2.4s infinite}
@keyframes lfblink{0%,100%{opacity:1}50%{opacity:.3}}
@media(prefers-reduced-motion:reduce){.lf-pill .dot{animation:none}}

/* a row of buttons outside .pagehead */
.lf-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.lf-trust{margin-top:20px;font-size:13px;color:var(--mut)}
.lf-trust b{color:var(--paper2);font-weight:600}

/* phone — live animated mock (iframe). A device, so it keeps its real radius.
   Every mock is a fixed 600×1266 canvas. The iframe has to be scaled to the
   SCREEN, i.e. the frame width minus its two 9px bezels — scaling to the frame
   (300/600 = .5) pushed the right 18px and the bottom 18px of all thirteen
   demos behind the bezel. The frame height then follows from the scaled canvas
   (1266 × scale + the two bezels) so nothing is cut and no bare screen shows. */
.lf-phone{position:relative;width:300px;flex:none;margin:0 auto}
.lf-phone .frame{position:relative;width:300px;height:613px;background:var(--ink);border-radius:40px;padding:9px;
  box-shadow:var(--shadow),0 0 0 1px var(--line2),inset 0 1px 0 var(--lip)}
.lf-phone .screen{width:100%;height:100%;border-radius:32px;overflow:hidden;position:relative;background:var(--ink2)}
.lf-phone iframe{width:600px;height:1266px;border:0;transform:scale(.47);transform-origin:top left;display:block} /* 282/600 */
.lf-phone.big{width:340px}
.lf-phone.big .frame{width:340px;height:697px}
.lf-phone.big iframe{transform:scale(.5367)} /* 322/600 */

/* phone — static screenshot (for grids and strips) */
.lf-shot{position:relative;width:100%;border-radius:22px;overflow:hidden;background:var(--ink2);
  border:1px solid var(--line);box-shadow:var(--shadow)}
.lf-shot img{width:100%;display:block}
.lf-strip{display:flex;gap:14px;overflow-x:auto;padding:8px 2px 14px;scrollbar-width:none}
.lf-strip::-webkit-scrollbar{display:none}
.lf-strip .lf-shot{width:150px;flex:none}

/* hero / feature split */
.lf-split{display:grid;grid-template-columns:1fr 340px;gap:clamp(28px,4vw,52px);align-items:center}
/* a grid item's min-content floor would otherwise be the strip's full width */
.lf-split>*{min-width:0}
/* the "Compare both options" link sits in a muted line — give it a real tap area */
.lf-split .muted a{display:inline-block;padding:10px 0;min-height:40px}
.lf-feat-list{list-style:none;padding:0;margin:0;max-width:60ch}
.lf-feat-list li{position:relative;padding:12px 0 12px 30px;font-size:15.5px;line-height:1.6;color:var(--paper2);border-bottom:1px solid var(--line)}
.lf-feat-list li:last-child{border-bottom:0}
.lf-feat-list li b{color:var(--paper);font-weight:600}
/* a chisel mark, not a bullet — the same gesture as .eyebrow and .rule */
.lf-feat-list li::before{content:"";position:absolute;left:0;top:21px;width:14px;height:2px;
  background:linear-gradient(90deg,var(--gold),transparent)}

/* the 12-module grid — each card a slab set into the wall */
.lf-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:28px}
.lf-card{position:relative;display:flex;flex-direction:column;border-radius:var(--r-lg);overflow:hidden;color:var(--paper);text-decoration:none;
  background:linear-gradient(180deg,rgba(241,232,214,.035),rgba(241,232,214,.015));border:1px solid var(--line);
  box-shadow:inset 0 1px 0 var(--lip),inset 0 -1px 0 var(--groove);
  transition:transform .18s,border-color .18s,box-shadow .18s,background .18s}
.lf-card:hover{transform:translateY(-3px);border-color:var(--gold);
  box-shadow:0 0 34px var(--glow-2),inset 0 1px 0 var(--lip);
  background:linear-gradient(180deg,var(--gold-soft),rgba(241,232,214,.02))}
.lf-card .shotwrap{height:190px;padding:16px 16px 0;overflow:hidden;background:linear-gradient(180deg,var(--gold-soft),transparent)}
.lf-card .shotwrap img{width:100%;border-radius:14px 14px 0 0;box-shadow:0 14px 30px rgba(0,0,0,.4)}
.lf-card .cap{position:relative;padding:16px 16px 18px}
.lf-card .cat{font-family:var(--carved);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);font-weight:600}
.lf-card h3{margin:7px 0 4px;font-size:17px}
.lf-card p{margin:0;color:var(--paper2);font-size:13.5px;line-height:1.5;padding-right:22px}
/* one arrow instead of the words "See it" twelve times */
.lf-card .go{position:absolute;right:16px;bottom:17px;font-size:15px;line-height:1;color:var(--gold);
  opacity:.55;transition:opacity .18s,transform .18s}
.lf-card:hover .go{opacity:1;transform:translateX(3px)}

/* the two ways to own it */
.lf-two{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:26px}
.lf-price{position:relative;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--ink2);padding:30px 28px;
  box-shadow:inset 0 1px 0 var(--lip),inset 0 -1px 0 var(--groove),var(--shadow)}
.lf-price.flag{border-color:var(--gold);background:linear-gradient(180deg,var(--gold-soft),var(--ink2))}
.lf-price .k{font-family:var(--carved);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);font-weight:600;line-height:1.5}
.lf-price h3{margin:11px 0 4px;font-size:19px}
/* "Free" is a word you read, so it stays in the reading face — size carries it, not a second typeface */
.lf-price .amt{font-family:var(--sans);font-weight:600;font-size:clamp(30px,3.4vw,38px);letter-spacing:-.022em;
  line-height:1.15;color:var(--gold);margin:6px 0 0}
.lf-price .amt small{font-family:var(--sans);font-size:14px;font-weight:500;letter-spacing:0;color:var(--paper2)}
.lf-price .d{color:var(--paper2);font-size:14px;line-height:1.62;margin:12px 0 18px;max-width:46ch}
.lf-price ul{list-style:none;padding:0;margin:0 0 22px;flex:1}
.lf-price li{position:relative;padding:9px 0 9px 26px;font-size:14px;line-height:1.5;color:var(--paper);border-bottom:1px solid var(--line)}
.lf-price li:last-child{border-bottom:0}
.lf-price li::before{content:"✓";position:absolute;left:0;top:9px;color:var(--gold);font-weight:600}
/* the button sits on the floor of the card whether or not there is a list above it */
.lf-price .btn{width:100%;justify-content:center;margin-top:auto}
.lf-ribbon{position:absolute;top:0;right:20px;background:var(--gold);color:var(--lume-ink);font-size:10px;font-weight:600;letter-spacing:.1em;
  text-transform:uppercase;padding:5px 11px;border-radius:0 0 2px 2px;box-shadow:0 0 18px var(--glow-2)}

/* module cross-links */
.lf-modgroup+.lf-modgroup{margin-top:26px}
.lf-modgroup .eyebrow{margin-bottom:12px}
.lf-mods{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:24px}
.lf-modgroup .lf-mods{margin-top:0}
/* a group of one shouldn't leave an empty cell beside it */
.lf-modgroup .lf-mods:has(> :only-child){grid-template-columns:1fr}
.lf-mod{display:flex;align-items:center;gap:14px;padding:14px 18px;min-height:56px;border-radius:var(--r);background:var(--ink2);border:1px solid var(--line);
  color:var(--paper);text-decoration:none;box-shadow:inset 0 1px 0 var(--lip);
  transition:border-color .18s,transform .18s,box-shadow .18s}
.lf-mod:hover{border-color:var(--gold);transform:translateX(3px);box-shadow:0 0 24px var(--glow-2),inset 0 1px 0 var(--lip)}
.lf-mod .mi{width:38px;height:38px;border-radius:var(--r);background:var(--gold-soft);border:1px solid var(--line2);
  display:grid;place-items:center;flex:none;color:var(--gold);font-size:13px;line-height:1}
.lf-mod .mt{flex:1;min-width:0}
.lf-mod .mt b{display:block;font-size:14.5px;font-weight:600;line-height:1.3}
.lf-mod .mt span{font-size:12px;color:var(--mut)}
.lf-mod .mp{font-size:12.5px;font-weight:600;color:var(--gold);white-space:nowrap}

/* a statement that is not a CTA: centred, ruled, no buttons pretending to exist */
.lf-statement{max-width:62ch;margin:0 auto;text-align:center}
.lf-statement .eyebrow{justify-content:center;margin-bottom:14px}
.lf-statement h2{margin-bottom:14px}
.lf-statement p{color:var(--paper2);font-size:15.5px;line-height:1.7;margin:0 auto;max-width:56ch}

@media(max-width:900px){
  .lf-grid{grid-template-columns:repeat(2,1fr)}
  .lf-two,.lf-mods{grid-template-columns:1fr}
  .lf-split{grid-template-columns:1fr;gap:28px}
  .lf-split .lf-phone{order:-1}
}
@media(max-width:520px){
  .lf-grid{grid-template-columns:1fr}
  .lf-price{padding:26px 20px}
  .lf-phone.big{width:300px}
  .lf-phone.big .frame{width:300px;height:613px}
  .lf-phone.big iframe{transform:scale(.47)}
}

/* The phone mock is a fixed 300px (340px for .big), which is wider than the
   276px content column at a 320px viewport, so /life and every module page
   scrolled sideways. Shrink the whole assembly together: the iframe inside is
   a real 600px page scaled to fit the screen, so its scale has to move with
   the frame or the mock would show only part of itself. 250/600 = .4167. */
@media(max-width:380px){
  .lf-phone,.lf-phone.big{width:268px}
  .lf-phone .frame,.lf-phone.big .frame{width:268px;height:547px}
  .lf-phone iframe{transform:scale(.4167)}
}
