/* Scalus concept wrapper.
   Deliberately Scalus branded so it reads as the frame around the client's
   work: their website is the custom part, this is who built it.
   Namespaced under .sf- so it can never collide with a concept's own styles. */

.sf-scope{
  --sf-ink:#080C0A;
  --sf-ink-2:#0E1512;
  --sf-ink-3:#131B17;
  --sf-fg:#EAF3EE;
  --sf-fg-2:rgba(234,243,238,.78);
  --sf-fg-3:rgba(234,243,238,.58);
  --sf-line:rgba(234,243,238,.13);
  --sf-line-2:rgba(234,243,238,.26);
  --sf-orange:#FF4D00;
  --sf-green:#32CF75;
  --sf-green-2:#5FE39A;
  --sf-card:rgba(255,255,255,.04);
  --sf-s:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --sf-r:20px;
  --sf-e:cubic-bezier(.16,1,.3,1);

  all:initial;
  display:block;
  font-family:var(--sf-s);
  color:var(--sf-fg);
  background:var(--sf-ink);
  -webkit-font-smoothing:antialiased;
  text-align:left;
  line-height:1.65;
  position:relative;
  z-index:1;
}
.sf-scope *,.sf-scope *::before,.sf-scope *::after{box-sizing:border-box}
/* :where() keeps the reset at zero specificity so every .sf- rule below still
   wins. Without it the reset out-specifies the classes and strips their
   padding and margins, which is what jammed the text against the cards. */
.sf-scope :where(p,h2,h3,h4,ul,ol,li,figure,figcaption,blockquote,fieldset){margin:0;padding:0}
.sf-scope :where(ul,ol){list-style:none}
.sf-scope img{max-width:100%;height:auto;display:block;border:0}
.sf-scope a{color:inherit;text-decoration:none}
.sf-scope button{font:inherit}

.sf-wrap{width:min(100% - 40px,1180px);margin-inline:auto}
/* 20px minimum gutter on mobile too. At 28px total (14px a side) the wrapper sat tighter
   than every client site it is injected into, and copy read flush to the edge at 320 to
   360px. Never go below 40px total here. */
@media(max-width:640px){.sf-wrap{width:min(100% - 40px,1180px)}}

.sf-eyebrow{
  font:600 10.5px/1.5 var(--sf-s);letter-spacing:.2em;text-transform:uppercase;
  color:var(--sf-green);margin-bottom:14px;
}
.sf-h2{
  font:600 clamp(27px,4vw,42px)/1.12 var(--sf-s);letter-spacing:-.02em;color:var(--sf-fg);
}
.sf-h2 em{font-style:normal;color:var(--sf-green)}
.sf-lede{font-size:16.5px;line-height:1.72;color:var(--sf-fg-2);max-width:60ch;margin-top:14px}

.sf-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  padding:15px 26px;border-radius:100px;border:1px solid transparent;cursor:pointer;
  font:600 14.5px/1 var(--sf-s);letter-spacing:.01em;
  transition:transform .7s var(--sf-e),background .4s,color .4s,border-color .4s,box-shadow .6s var(--sf-e);
}
.sf-btn:hover{transform:translateY(-2px)}
.sf-btn:active{transform:translateY(0) scale(.97)}
.sf-btn-p{background:var(--sf-orange);color:#fff;box-shadow:0 10px 30px -10px rgba(255,77,0,.6)}
.sf-btn-p:hover{background:#ff6524;box-shadow:0 16px 40px -12px rgba(255,77,0,.7)}
.sf-btn-g{background:var(--sf-green);color:#04120A;box-shadow:0 10px 30px -10px rgba(50,207,117,.5)}
.sf-btn-g:hover{background:var(--sf-green-2)}
.sf-btn-o{border-color:var(--sf-line-2);color:var(--sf-fg)}
.sf-btn-o:hover{background:rgba(255,255,255,.06);border-color:var(--sf-fg-3)}

/* ---------- the slim bar that tops the page ---------- */
.sf-topbar{
  all:initial;display:block;font-family:var(--sf-s);
  background:#080C0A;color:#EAF3EE;position:relative;z-index:2147483000;
  border-bottom:1px solid rgba(234,243,238,.13);
}
.sf-topbar *{box-sizing:border-box}
.sf-topbar-in{
  /* 20px a side, matching .sf-wrap. At 32px total the bar sat 4px tighter than the body
     beneath it, so the CTA read flush to the edge between 640 and 1180px. */
  width:min(100% - 40px,1180px);margin-inline:auto;
  display:flex;align-items:center;gap:14px;min-height:46px;padding:8px 0;
  font-size:13px;line-height:1.4;flex-wrap:wrap;
}
.sf-topbar img{height:19px;width:auto;display:block;flex:0 0 auto}
.sf-topbar b{font-weight:600;color:#EAF3EE}
.sf-topbar span{color:rgba(234,243,238,.6);flex:1 1 auto;min-width:0}
.sf-topbar a{
  flex:0 0 auto;color:#04120A;background:#32CF75;text-decoration:none;
  padding:8px 15px;border-radius:100px;font-weight:600;font-size:12.5px;
  transition:background .4s,transform .5s cubic-bezier(.16,1,.3,1);
}
.sf-topbar a:hover{background:#5FE39A;transform:translateY(-1px)}
@media(max-width:560px){
  .sf-topbar-in{min-height:42px;padding:7px 0;gap:10px}
  .sf-topbar img{height:16px}
  .sf-topbar a{padding:7px 12px;font-size:11.5px}
  /* the sentence is the part that can go: the logo and the link carry it */
  .sf-topbar span{display:none}
}

/* ---------- handoff ---------- */
.sf-hand{
  padding:64px 0 8px;text-align:center;
  background:linear-gradient(180deg,rgba(50,207,117,.09),transparent 70%);
}
.sf-hand-mark{width:40px;height:40px;margin:0 auto 20px}
.sf-hand h2{font:600 clamp(24px,3.4vw,34px)/1.2 var(--sf-s);letter-spacing:-.02em}
.sf-hand p{margin:14px auto 0;max-width:52ch;color:var(--sf-fg-2);font-size:16px}

/* ---------- sections ---------- */
.sf-sec{padding:76px 0}
.sf-sec-alt{background:var(--sf-ink-2)}
.sf-head{max-width:620px;margin-bottom:44px}

/* who I am */
.sf-me{display:grid;gap:44px;grid-template-columns:300px minmax(0,1fr);align-items:start}
@media(max-width:820px){.sf-me{grid-template-columns:1fr;gap:28px}}
.sf-me-img{border-radius:var(--sf-r);overflow:hidden;aspect-ratio:1/1;background:var(--sf-ink-3)}
.sf-me-img img{width:100%;height:100%;object-fit:cover}
.sf-me p + p{margin-top:15px}
.sf-me p{color:var(--sf-fg-2);font-size:16px;line-height:1.75}
.sf-facts{display:flex;flex-wrap:wrap;gap:9px;margin-top:24px}
.sf-facts li{
  font-size:12.5px;color:var(--sf-fg-2);border:1px solid var(--sf-line);
  padding:8px 14px;border-radius:100px;
}

/* portfolio */
.sf-grid{display:grid;gap:20px;grid-template-columns:repeat(auto-fill,minmax(276px,1fr))}
.sf-site{
  display:block;border-radius:var(--sf-r);overflow:hidden;background:var(--sf-card);
  border:1px solid var(--sf-line);
  transition:transform .8s var(--sf-e),border-color .5s,box-shadow .6s var(--sf-e);
}
.sf-site:hover{transform:translateY(-6px);border-color:var(--sf-line-2);box-shadow:0 26px 50px -26px rgba(0,0,0,.9)}
/* HARD RULE: a website preview always fits its container. The shot box carries
   the same 72/47 ratio the captures are taken at, and it has to be a block or
   the ratio and the overflow clip are both ignored (this is a <span>). contain,
   not cover, so an odd sized capture letterboxes instead of blowing up. */
.sf-shot{display:block;width:100%;aspect-ratio:72/47;overflow:hidden;background:#0B100D}
.sf-shot img{
  display:block;width:100%;height:100%;max-width:100%;max-height:100%;
  object-fit:contain;object-position:center;transition:transform 1.4s var(--sf-e);
}
.sf-site:hover .sf-shot img{transform:scale(1.05)}
.sf-site-b{padding:15px 17px 17px;display:flex;align-items:center;gap:10px}
.sf-site-b span{flex:1 1 auto;min-width:0}
.sf-site-n{display:block;font:600 15px/1.3 var(--sf-s);color:var(--sf-fg)}
.sf-site-t{display:block;font-size:12.5px;color:var(--sf-fg-3);margin-top:3px}
.sf-site-go{
  flex:0 0 auto;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
  background:rgba(50,207,117,.14);color:var(--sf-green);
  transition:background .4s,transform .6s var(--sf-e);
}
.sf-site:hover .sf-site-go{background:var(--sf-green);color:#04120A;transform:translate(2px,-2px)}
.sf-site-go svg{width:14px;height:14px}

/* process */
.sf-steps{display:grid;gap:26px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));margin-top:8px}
.sf-step{border-top:2px solid var(--sf-line);padding-top:26px;position:relative}
.sf-step::before{
  content:"";position:absolute;left:0;top:-2px;height:2px;width:0;background:var(--sf-green);
  transition:width 1.4s var(--sf-e);
}
.sf-scope.sf-in .sf-step::before{width:100%}
.sf-step:nth-child(2)::before{transition-delay:.14s}
.sf-step:nth-child(3)::before{transition-delay:.28s}
.sf-step:nth-child(4)::before{transition-delay:.42s}
.sf-step b{display:block;font:600 11px/1 var(--sf-s);letter-spacing:.18em;color:var(--sf-green);margin-bottom:12px}
.sf-step h4{font:600 18px/1.3 var(--sf-s);letter-spacing:-.01em;margin-bottom:8px}
.sf-step p{font-size:14.5px;line-height:1.7;color:var(--sf-fg-2)}

/* pricing — one plan, $225. Nothing else is promoted. */
.sf-plans{display:grid;gap:18px;grid-template-columns:repeat(auto-fit,minmax(268px,1fr))}
.sf-plans-one{grid-template-columns:minmax(0,560px);justify-content:center}
.sf-plan{
  background:var(--sf-card);border:1px solid var(--sf-line);border-radius:var(--sf-r);
  padding:30px 28px 28px;display:flex;flex-direction:column;
  transition:transform .8s var(--sf-e),border-color .5s;
}
.sf-plans-one .sf-plan{
  border-color:rgba(50,207,117,.42);
  background:linear-gradient(180deg,rgba(50,207,117,.07),rgba(255,255,255,.03));
  padding:34px 32px 32px;
}
.sf-plans-one .sf-price b{font-size:clamp(42px,5.4vw,54px)}
@media(min-width:620px){.sf-plans-one .sf-feat{grid-template-columns:1fr 1fr;column-gap:22px}}
.sf-plan:hover{transform:translateY(-5px);border-color:var(--sf-line-2)}
.sf-plan-best{border-color:rgba(50,207,117,.5);background:rgba(50,207,117,.05)}
.sf-tag{
  display:inline-block;font:600 10px/1 var(--sf-s);letter-spacing:.16em;text-transform:uppercase;
  color:#04120A;background:var(--sf-green);padding:6px 11px;border-radius:100px;margin-bottom:14px;
}
.sf-plan h4{font:600 18px/1.2 var(--sf-s);letter-spacing:-.01em}
.sf-price{display:flex;align-items:baseline;gap:5px;margin:12px 0 4px}
.sf-price b{font:600 38px/1 var(--sf-s);letter-spacing:-.03em;color:var(--sf-fg)}
.sf-price i{font-style:normal;font-size:13.5px;color:var(--sf-fg-3)}
.sf-plan-note{font-size:12.5px;color:var(--sf-fg-3)}
.sf-feat{margin:20px 0 24px;display:grid;gap:10px}
.sf-feat li{display:flex;gap:10px;font-size:14px;line-height:1.55;color:var(--sf-fg-2)}
.sf-feat svg{flex:0 0 auto;width:15px;height:15px;margin-top:3px;color:var(--sf-green)}
.sf-plan .sf-btn{margin-top:auto;width:100%}
.sf-terms{
  margin-top:26px;font-size:13px;line-height:1.75;color:var(--sf-fg-3);
  border:1px dashed var(--sf-line);border-radius:16px;padding:18px 20px;
  max-width:760px;margin-inline:auto;
}

/* testimonials — same shape as scalus.app: two client videos, then the
   Google reviews sliding past underneath. */
.sf-vids{display:grid;grid-template-columns:repeat(2,1fr);gap:34px;max-width:820px;margin:0 auto}
@media(max-width:760px){.sf-vids{grid-template-columns:1fr;gap:40px;max-width:340px}}
.sf-vid-wrap{position:relative;max-width:340px;margin:0 auto;width:100%}
.sf-vid-frame{
  position:relative;aspect-ratio:9/16;border-radius:26px;overflow:hidden;
  border:1px solid var(--sf-line-2);background:#04130a;box-shadow:0 30px 90px rgba(0,0,0,.55);
}
.sf-vid-frame video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;background:#000}
.sf-sound{
  position:absolute;left:50%;bottom:16px;transform:translateX(-50%);z-index:3;
  display:inline-flex;align-items:center;gap:8px;background:rgba(4,19,10,.82);
  border:1px solid rgba(50,207,117,.45);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  color:#eafff2;font:700 12px/1 var(--sf-s);padding:9px 15px;border-radius:100px;cursor:pointer;white-space:nowrap;
}
.sf-sound svg{width:14px;height:14px;color:var(--sf-green)}
.sf-sound[hidden]{display:none}
.sf-vid-tag{display:flex;flex-direction:column;align-items:center;gap:2px;margin-top:15px;font-size:13px;color:var(--sf-fg-3);text-align:center}
.sf-vid-tag b{color:var(--sf-fg);font-weight:600}
.sf-vid-lines{margin:16px 0 0;display:grid;gap:10px}
.sf-vid-lines li{font-size:14.5px;line-height:1.55;color:var(--sf-fg-2);border-left:2px solid var(--sf-green);padding-left:13px}
.sf-vid-lines em{font-style:normal;font-weight:600;color:var(--sf-fg)}

.sf-mq{
  overflow:hidden;position:relative;margin-top:52px;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
}
.sf-mq-track{display:flex;gap:18px;width:max-content;animation:sf-mq 52s linear infinite}
.sf-mq:hover .sf-mq-track{animation-play-state:paused}
@keyframes sf-mq{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media(max-width:760px){.sf-mq-track{animation-duration:70s}}
@media(prefers-reduced-motion:reduce){.sf-mq-track{animation:none}}
.sf-quote{
  width:380px;flex:0 0 380px;
  background:var(--sf-card);border:1px solid var(--sf-line);border-radius:var(--sf-r);padding:24px 22px;
  display:flex;flex-direction:column;
}
@media(max-width:560px){.sf-quote{width:290px;flex:0 0 290px}}
.sf-stars{color:#FFC63D;font-size:13px;letter-spacing:.12em;margin-bottom:13px}
.sf-quote p{font-size:14.5px;line-height:1.7;color:var(--sf-fg-2);flex:1 1 auto}
.sf-by{margin-top:16px;font-size:13px;color:var(--sf-fg);font-weight:600}
.sf-by i{display:block;font-style:normal;font-size:12px;color:var(--sf-fg-3);margin-top:2px;font-weight:400}

/* close */
.sf-close{
  text-align:center;padding:80px 0 84px;
  background:radial-gradient(90% 130% at 50% 0%,rgba(50,207,117,.14),transparent 62%),var(--sf-ink-3);
}
.sf-close h2{font:600 clamp(27px,4vw,42px)/1.14 var(--sf-s);letter-spacing:-.02em}
.sf-close p{margin:15px auto 0;max-width:50ch;color:var(--sf-fg-2);font-size:16.5px}
.sf-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:30px}
.sf-foot{
  border-top:1px solid var(--sf-line);padding:22px 0;
  display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;align-items:center;
  font-size:12.5px;color:var(--sf-fg-3);
}
.sf-foot img{height:17px;width:auto;opacity:.85}
.sf-foot a{color:var(--sf-green)}

/* Reveal. Deliberately quick: a slow fade reads as a greyed out, half broken
   page if you scroll at any speed. Fires early and lands at full strength. */
.sf-rv{opacity:0;transform:translateY(16px);transition:opacity .45s ease-out,transform .55s var(--sf-e)}
.sf-rv.sf-on{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){
  .sf-rv{opacity:1;transform:none;transition:none}
  .sf-scope *{animation:none !important;transition:none !important}
}
