/* ==========================================================================
   ishrafil.com — white theme (2026-11)
   Layout idea: white gallery wall. Oversized grotesk display, mono labels,
   one cobalt signal colour, hairline rules. Motion lives in aw.js (GSAP).
   ========================================================================== */
:root{
  --paper:#ffffff;
  --mist:#f3f4f8;
  --ink:#0b0d1a;
  --slate:#5b6075;
  --line:#e2e4ec;
  --signal:#1f36ff;
  --signal-soft:#e8ebff;
  --ok:#12b76a;
  --display:"Bricolage Grotesque","Arial Narrow",Arial,sans-serif;
  --body:"Instrument Sans","Helvetica Neue",Arial,sans-serif;
  --mono:"JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;
  --gut:clamp(18px,4vw,56px);
  --r:22px;
  --ease:cubic-bezier(.2,.8,.2,1);
  color-scheme:light;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-padding-top:96px}
body{background:var(--paper);color:var(--ink);font-family:var(--body);font-size:17px;line-height:1.55;overflow-x:hidden;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
img{max-width:100%;height:auto;display:block}
ul,ol{list-style:none}
button,input,textarea,select{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:6px}
::selection{background:var(--signal);color:#fff}
h1,h2,h3,h4{font-family:var(--display);font-weight:700;line-height:1;letter-spacing:-.03em;text-wrap:balance}
.hidden{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.skip{position:absolute;left:16px;top:-60px;z-index:100;background:var(--ink);color:#fff;padding:10px 16px;border-radius:10px;font-weight:600}
.skip:focus{top:16px}
.wrap{padding-inline:var(--gut);max-width:1560px;margin-inline:auto}
.narrow{max-width:900px}
section{position:relative}
.sec{padding-block:clamp(64px,10vw,150px)}
.sec.tight{padding-block:clamp(48px,6vw,90px)}
.sec.flush{padding-top:0}
.bg-mist{background:var(--mist)}
.label{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--slate);display:inline-flex;align-items:center;gap:10px}
.label::before{content:"";flex:0 0 8px;width:8px;height:8px;border-radius:50%;background:var(--signal)}
.sec-head{display:flex;justify-content:space-between;align-items:end;gap:24px;flex-wrap:wrap;margin-bottom:clamp(32px,5vw,72px)}
.sec-head h2{font-size:clamp(36px,6.4vw,100px);max-width:14ch}
.sec-head.sm h2{font-size:clamp(32px,4.6vw,68px);max-width:18ch}
.sec-head p{max-width:40ch;color:var(--slate)}
.sec-head .label{flex-basis:100%;margin-bottom:-6px}
.muted{color:var(--slate)}

/* ---------- progress + cursor ---------- */
.progress{position:fixed;inset:0 0 auto 0;height:3px;background:var(--signal);transform-origin:0 50%;transform:scaleX(0);z-index:80}
.cursor{position:fixed;left:0;top:0;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:var(--signal);pointer-events:none;z-index:90;display:none;align-items:center;justify-content:center;font-family:var(--mono);font-size:11px;color:#fff;letter-spacing:.06em;transition:width .25s,height .25s,margin .25s,background .25s;mix-blend-mode:multiply}
.cursor span{opacity:0;transition:opacity .2s}
.cursor.big{width:86px;height:86px;margin:-43px 0 0 -43px;mix-blend-mode:normal}
.cursor.big span{opacity:1}
.cursor.link{width:44px;height:44px;margin:-22px 0 0 -22px;background:rgba(31,54,255,.18)}
@media (hover:hover) and (pointer:fine){.cursor{display:flex}}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:13px 22px;border-radius:999px;background:var(--ink);color:#fff;font-weight:600;font-size:15px;border:0;cursor:pointer;position:relative;overflow:hidden;isolation:isolate;will-change:transform;white-space:nowrap}
.btn::before{content:"";position:absolute;inset:0;background:var(--signal);border-radius:inherit;transform:translateY(101%);transition:transform .45s var(--ease);z-index:-1}
.btn:hover::before{transform:none}
.btn svg{width:16px;height:16px;flex:0 0 16px;transition:transform .3s}
.btn:hover svg{transform:translate(3px,-3px)}
.btn.ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.btn.ghost:hover{color:#fff}
.btn.lg{padding:18px 30px;font-size:17px}
.btn.block{width:100%}
.btn.signal{background:var(--signal)}
.btn.signal::before{background:var(--ink)}
.btns{display:flex;gap:12px;flex-wrap:wrap}
.arrow-link{display:inline-flex;align-items:center;gap:8px;font-weight:600;border-bottom:1px solid currentColor;padding-bottom:2px}
.arrow-link svg{width:14px;height:14px;transition:transform .3s}
.arrow-link:hover svg{transform:translate(3px,-3px)}
.arrow-link:hover{color:var(--signal)}

/* ---------- nav ---------- */
.nav{position:fixed;inset:0 0 auto 0;z-index:60;transition:transform .45s var(--ease)}
.nav.hide{transform:translateY(-110%)}
.nav-in{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:12px var(--gut);padding:9px 10px 9px 20px;background:rgba(255,255,255,.82);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--line);border-radius:999px}
.brand img{width:150px;height:auto}
.nav-links{display:flex;gap:2px;align-items:center}
.nav-links>li{position:relative}
.nav-links a,.nav-links button{display:flex;align-items:center;gap:6px;padding:8px 14px;border-radius:999px;font-size:15px;font-weight:500;background:none;border:0;cursor:pointer;transition:background .2s}
.nav-links a:hover,.nav-links button:hover,.nav-links .on{background:var(--mist)}
.nav-links button svg{width:10px;height:10px;transition:transform .3s}
.has-drop:hover button svg,.has-drop:focus-within button svg{transform:rotate(180deg)}
.drop{position:absolute;left:50%;top:100%;padding-top:14px;width:330px;transform:translate(-50%,8px);opacity:0;visibility:hidden;transition:opacity .25s,transform .35s var(--ease),visibility .25s}
.has-drop:hover .drop,.has-drop:focus-within .drop{opacity:1;visibility:visible;transform:translate(-50%,0)}
.drop-in{background:var(--paper);border:1px solid var(--line);border-radius:20px;padding:8px;box-shadow:0 30px 60px -30px rgba(11,13,26,.35)}
.drop a{display:block;border-radius:14px;padding:11px 14px}
.drop a b{display:block;font-family:var(--display);font-weight:600;font-size:16px;letter-spacing:-.01em}
.drop a small{color:var(--slate);font-size:13px}
.burger{display:none;width:46px;height:46px;border-radius:50%;border:0;background:var(--ink);cursor:pointer;position:relative}
.burger::before,.burger::after{content:"";position:absolute;left:14px;right:14px;height:2px;background:#fff;transition:transform .3s,top .3s}
.burger::before{top:19px}.burger::after{top:26px}
.burger[aria-expanded="true"]::before{top:22px;transform:rotate(45deg)}
.burger[aria-expanded="true"]::after{top:22px;transform:rotate(-45deg)}
.menu{position:fixed;inset:0;z-index:55;background:var(--paper);padding:100px var(--gut) 28px;display:flex;flex-direction:column;justify-content:space-between;gap:24px;overflow-y:auto;clip-path:circle(0 at calc(100% - 50px) 46px);transition:clip-path .6s cubic-bezier(.7,0,.2,1),visibility .6s;visibility:hidden}
.menu.open{clip-path:circle(150% at calc(100% - 50px) 46px);visibility:visible}
.menu a.m{font-family:var(--display);font-weight:700;font-size:clamp(34px,9.5vw,64px);letter-spacing:-.03em;line-height:1.1;display:flex;justify-content:space-between;align-items:baseline;border-bottom:1px solid var(--line);padding:9px 0}
.menu a.m small{font-family:var(--mono);font-size:12px;color:var(--slate);letter-spacing:.08em}
.menu .sub{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.menu .sub a{font-size:14px;padding:8px 14px;border:1px solid var(--line);border-radius:999px}
.menu p{font-size:15px;color:var(--slate)}
main{display:block}

/* ---------- home hero ---------- */
.hero{padding-top:clamp(88px,10vw,120px);padding-bottom:clamp(26px,3.5vw,44px);overflow:hidden;position:relative}
#field{position:absolute;inset:0;width:100%;height:100%;z-index:0}
.hero .wrap{position:relative;z-index:1}
.hero-top{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;align-items:center;margin-bottom:clamp(16px,2.4vw,28px)}
.avail{font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;display:inline-flex;align-items:center;gap:10px;padding:7px 14px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.85)}
.avail b{width:8px;height:8px;border-radius:50%;background:var(--ok);animation:pulse 2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(18,183,106,.5)}70%{box-shadow:0 0 0 9px rgba(18,183,106,0)}100%{box-shadow:0 0 0 0 rgba(18,183,106,0)}}

/* Hero Main: 2-column organized structure */
.hero-main{display:flex;flex-direction:column;gap:28px;margin-bottom:clamp(24px,3.5vw,44px)}
.hero-content{display:flex;flex-direction:column;gap:clamp(14px,2.2vh,22px);min-width:0}
.hero h1{font-size:clamp(38px,6.8vw,96px);font-weight:800;letter-spacing:-.045em;line-height:.93}
.hero h1 .ln{display:block;overflow:hidden;padding-bottom:.1em;margin-bottom:-.1em}
.hero h1 .ln>span{display:block;will-change:transform}
.hero h1 em{font-style:normal;color:var(--signal)}
.out{color:transparent;-webkit-text-stroke:1.5px var(--ink)}
.hero-content .lead{font-size:clamp(15px,1.25vw,18.5px);line-height:1.52;color:var(--slate);max-width:52ch;margin:0}
.hero-content .lead strong{color:var(--ink);font-weight:600}
.hero-actions{display:flex;align-items:center;gap:clamp(16px,2vw,28px);flex-wrap:wrap;margin-top:clamp(4px,1vh,10px)}
.hero-actions .btns{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.hero .badge{width:clamp(82px,8vw,110px);aspect-ratio:1;position:absolute;right:-9%;top:-7%;z-index:2;background:#fff;border-radius:50%;box-shadow:0 12px 30px -14px rgba(11,13,26,.3)}
.hero .badge svg{width:100%;height:100%;display:block}
.hero .badge text{font-family:var(--mono);font-size:10.4px;letter-spacing:.14em;fill:var(--ink);text-transform:uppercase}
.hero .badge .core{position:absolute;inset:30%;border-radius:50%;background:var(--signal);display:grid;place-items:center;color:#fff}
.hero .badge .core svg{width:42%;height:42%}

/* Hero Visual: Column 2 (Bigger photo) */
.hero-visual{display:flex;justify-content:center;align-items:center}
.stage{position:relative}
.stage::before{content:"";position:absolute;inset:0;border-radius:var(--r);background:var(--signal);transform:rotate(-5deg) translate(-3%,2%);opacity:.92}
.stage::after{content:"";position:absolute;inset:-7% -9%;border:1px dashed #c9cde0;border-radius:calc(var(--r) + 14px);z-index:-1}
.hero-trust{display:flex;flex-wrap:wrap;gap:8px 22px;font-size:13.5px;color:var(--slate)}
.hero-trust li{display:inline-flex;align-items:center;gap:8px}
.hero-trust li::before{content:"";width:15px;height:15px;border-radius:50%;background:var(--signal-soft) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%231f36ff' stroke-width='2.2'%3E%3Cpath d='M4.5 8.2l2.3 2.3 4.7-5'/%3E%3C/svg%3E") center/11px no-repeat;flex:none}
.hero-content .avail{align-self:flex-start}
.portrait{position:relative;border-radius:var(--r);overflow:hidden;aspect-ratio:4/5;background:var(--mist);width:clamp(260px,26vw,380px);box-shadow:0 24px 50px -20px rgba(11,13,26,.18);border:1px solid var(--line)}
.portrait img{width:100%;height:100%;object-fit:cover;object-position:center 15%;will-change:transform}
.portrait .tag{position:absolute;left:12px;bottom:12px;right:12px;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-radius:14px;padding:10px 14px;font-size:13.5px;line-height:1.3;box-shadow:0 8px 24px -6px rgba(11,13,26,.15);border:1px solid rgba(255,255,255,.9)}
.portrait .tag b{font-family:var(--display);font-size:15.5px;display:block;color:var(--ink)}
.portrait .tag small{color:var(--slate);font-size:12.5px}

.fchip{position:absolute;z-index:1;font-family:var(--mono);font-size:12px;padding:8px 13px;border-radius:10px;background:#fff;border:1px solid var(--line);box-shadow:0 12px 30px -14px rgba(11,13,26,.25);white-space:nowrap;will-change:transform}
.fchip b{color:var(--signal);font-weight:500}
.fchip.c1{right:78%;top:12%}.fchip.c2{right:86%;top:62%}
/* parallax slides the photo up to 10%: make it taller than its frame so the bottom never shows through */
.portrait img[data-plx]{height:114%;margin-top:-4px}
/* hero photo + cards: hover life. `translate`/`scale` are used (not `transform`) where GSAP already owns transform. */
.stage{perspective:1000px}
.stage::before{transition:transform .6s var(--ease)}
.portrait{transform:rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transition:transform .35s var(--ease),box-shadow .5s}
.portrait img{transition:scale .8s var(--ease)}
.portrait::after{content:"";position:absolute;inset:0;background:linear-gradient(115deg,transparent 35%,rgba(255,255,255,.28) 50%,transparent 65%);translate:-120% 0;pointer-events:none}
.portrait .tag{z-index:1;transition:translate .5s var(--ease),box-shadow .5s}
.fchip{transition:translate .6s var(--ease),scale .35s var(--ease),border-color .3s,box-shadow .3s}
.hero .badge{transition:scale .5s var(--ease)}
.stat strong{transition:color .3s,translate .4s var(--ease)}
@media (hover:hover){
  .stage:hover::before{transform:rotate(-8deg) translate(-5%,3%)}
  .stage:hover .portrait{box-shadow:0 40px 70px -24px rgba(31,54,255,.35)}
  .stage:hover .portrait img{scale:1.06}
  .stage:hover .portrait::after{translate:120% 0;transition:translate .9s var(--ease)}
  .stage:hover .tag{translate:0 -6px;box-shadow:0 16px 30px -8px rgba(11,13,26,.3)}
  .stage:hover .fchip.c1{translate:-14px -8px}
  .stage:hover .fchip.c2{translate:-18px 8px}
  .stage:hover .badge{scale:1.1}
  .fchip:hover{scale:1.07;border-color:var(--signal);box-shadow:0 18px 34px -14px rgba(31,54,255,.45)}
  .stat:hover strong{color:var(--signal);translate:0 -4px}
}

/* PC/Desktop Hero: 2-column layout completely visible within 100vh with larger photo */
@media (min-width: 900px){
  .hero{
    height:100vh;
    height:100dvh;
    min-height:600px;
    padding-top:clamp(74px,8.5vh,94px);
    padding-bottom:clamp(12px,1.8vh,22px);
    display:flex;
    flex-direction:column;
    justify-content:space-between;
    box-sizing:border-box;
  }
  .hero .wrap{
    width:100%;
    flex:1;
    display:flex;
    flex-direction:column;
    justify-content:space-between;
    min-height:0;
  }
  .hero-top{margin-bottom:0}
  .avail{padding:6px 12px;font-size:11.5px}
  .hero-main{
    display:grid;
    grid-template-columns:minmax(0,1.08fr) minmax(300px,0.92fr);
    gap:clamp(32px,4vw,64px);
    align-items:center;
    flex:1;
    min-height:0;
    margin-bottom:0;
  }
  .hero-content{
    display:flex;
    flex-direction:column;
    justify-content:center;
    gap:clamp(14px,2.2vh,22px);
  }
  .hero h1{
    font-size:clamp(36px,min(4.8vw,7.6vh),72px);
    line-height:1.0;
    letter-spacing:-.035em;
  }
  .hero h1 .ln{
    display:block;
    overflow:hidden;
    padding-block:2px;
  }
  .hero-content .lead{
    font-size:clamp(14.5px,min(1.05vw,1.72vh),17px);
    line-height:1.52;
    max-width:50ch;
  }
  .hero-actions{
    gap:clamp(16px,2vw,28px);
    margin-top:clamp(4px,0.8vh,10px);
  }
  .hero-actions .btns .btn{
    padding:12px 24px;
    font-size:15px;
  }
  .hero .badge{
    width:clamp(76px,10vh,104px);
  }
  .hero-visual{
    display:flex;
    justify-content:center;
    align-items:center;
  }
  .portrait{
    width:clamp(280px,min(27vw,45vh),440px);
    aspect-ratio:4/5;
  }
  .stats{margin-top:0}
  .stat{padding:clamp(6px,1.2vh,12px) 14px 2px 0}
  .stat strong{font-size:clamp(26px,min(3.1vw,4.6vh),44px)}
  .stat span{font-size:clamp(11.5px,1.2vh,13px)}
}

/* ---------- stats ---------- */
.stats{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--ink);margin-top:clamp(28px,3.5vw,56px)}
.stats.three{grid-template-columns:repeat(3,1fr)}
.stat{padding:18px 16px 6px 0;border-right:1px solid var(--line)}
.stat:last-child{border-right:0}
.stat+.stat{padding-left:16px}
.stat strong{font-family:var(--display);font-weight:700;font-size:clamp(32px,4.4vw,64px);letter-spacing:-.04em;line-height:1;display:block;font-variant-numeric:tabular-nums}
.stat span{font-size:13.5px;color:var(--slate)}

/* ---------- marquee ---------- */
.marq{border-block:1px solid var(--line);padding-block:20px;overflow:hidden;white-space:nowrap;background:var(--paper)}
.marq-track{display:inline-flex;will-change:transform;animation:marq 38s linear infinite}
.marq-track span{font-family:var(--display);font-weight:600;font-size:clamp(22px,2.8vw,40px);letter-spacing:-.02em;padding-inline:26px;display:inline-flex;align-items:center;gap:52px}
.marq-track span::after{content:"";width:12px;height:12px;background:var(--signal);transform:rotate(45deg);border-radius:2px}
@keyframes marq{to{transform:translateX(-50%)}}

/* ---------- statement ---------- */
.state-grid{display:grid;align-items:start;grid-template-columns:1fr 3fr;gap:clamp(20px,4vw,64px)}
.state p{font-family:var(--display);font-weight:600;font-size:clamp(28px,4.4vw,68px);line-height:1.08;letter-spacing:-.03em;max-width:22ch}
.state p .w{display:inline-block;will-change:opacity}

/* ---------- service rows ---------- */
.svc{border-top:1px solid var(--ink)}
.svc>a{display:grid;grid-template-columns:80px 1.1fr 1.4fr 56px;gap:20px;align-items:center;padding:clamp(22px,3vw,38px) 0;border-bottom:1px solid var(--line);position:relative;isolation:isolate;transition:padding .45s var(--ease),color .3s}
.svc>a::before{content:"";position:absolute;inset:0 calc(var(--gut)*-1);background:var(--ink);transform:scaleY(0);transform-origin:50% 100%;transition:transform .45s var(--ease);z-index:0;pointer-events:none}
.svc>a:hover{color:#fff;padding-inline:14px}
.svc>a:hover::before{transform:scaleY(1)}
.svc>a>*{position:relative;z-index:1}
.svc .n{font-family:var(--mono);font-size:13px;color:var(--slate);transition:color .3s}
.svc h3,.svc h2{font-size:clamp(26px,3.4vw,52px);transition:color .3s}
.svc p{color:var(--slate);font-size:16px;max-width:48ch;transition:color .3s}
.svc>a:hover p,.svc>a:hover .n{color:#c9cce0}
.svc>a:hover h3,.svc>a:hover h2{color:#fff}
.go{width:56px;height:56px;flex:0 0 56px;border-radius:50%;border:1px solid currentColor;display:grid;place-items:center;transition:transform .45s,background .3s,border-color .3s,color .3s}
.go svg{width:18px;height:18px}
.svc>a:hover .go{transform:rotate(45deg);background:var(--signal);border-color:var(--signal);color:#fff}

/* ---------- work (home, pinned) ---------- */
.work{background:var(--mist)}
.work-pin{padding-block:clamp(72px,9vw,110px) clamp(48px,6vw,72px);overflow:hidden}
.work-head{display:flex;justify-content:space-between;align-items:end;gap:24px;flex-wrap:wrap;margin-bottom:clamp(28px,4vw,44px)}
.work-head h2{font-size:clamp(36px,6.4vw,100px)}
.count{font-family:var(--mono);font-size:13px;color:var(--slate)}
.track{display:flex;gap:clamp(18px,2.4vw,36px);padding-inline:var(--gut);will-change:transform}
.track .pcard{flex:0 0 min(44vw,680px)}
.track .all{flex:0 0 min(30vw,420px);display:flex}
.all .box{flex:1;border-radius:var(--r);background:var(--ink);color:#fff;padding:clamp(24px,3vw,44px);display:flex;flex-direction:column;justify-content:space-between;gap:40px;min-height:300px}
.all strong{font-family:var(--display);font-size:clamp(64px,8vw,128px);letter-spacing:-.05em;line-height:.9;display:block}
.all span{font-size:18px;color:#c9cce0}
.all .label{color:#aab0ff;font-size:12px}
.work-bar{margin:clamp(28px,4vw,44px) var(--gut) 0;height:2px;background:#d5d8e3;position:relative}
.work-bar i{position:absolute;inset:0;background:var(--ink);transform-origin:0 50%;transform:scaleX(0)}
/* pinned gallery must fit one screen: size everything from viewport height, 230px = card text block */
@media (min-width:900px){
  .work-pin{height:100vh;display:flex;flex-direction:column;justify-content:center;padding-block:clamp(64px,10vh,110px) clamp(20px,4vh,72px)}
  .work-head{margin-bottom:clamp(14px,3vh,44px)}
  .work-head h2{font-size:min(6.4vw,9vh,100px)}
  .track .pcard{flex-basis:max(320px,min(44vw,680px,(71vh - 230px)*1.6))}
  .work-bar{margin-top:clamp(14px,3vh,44px)}
}

/* ---------- project card ---------- */
.pcard{display:block}
.thumb{aspect-ratio:16/10;border-radius:var(--r);overflow:hidden;position:relative;background:var(--signal-soft);display:grid;place-items:center;transform:translateZ(0)}
.pcard:nth-child(6n+2) .thumb{background:#dff3ee}.pcard:nth-child(6n+3) .thumb{background:#ffe6ec}
.pcard:nth-child(6n+4) .thumb{background:#ece6ff}.pcard:nth-child(6n+5) .thumb{background:#ffeed6}.pcard:nth-child(6n) .thumb{background:#e2f5dc}
.thumb::after{content:"";position:absolute;inset:0;background:radial-gradient(120% 90% at 80% 0%,rgba(255,255,255,.5),transparent 60%);pointer-events:none}
.bw{width:80%;border-radius:12px;background:#fff;box-shadow:0 40px 70px -30px rgba(11,13,26,.45),0 0 0 1px rgba(11,13,26,.06);overflow:hidden;transform:perspective(1200px) rotateX(6deg) rotateY(-9deg) rotate(1deg);transition:transform .7s var(--ease);will-change:transform}
.pcard:hover .bw{transform:perspective(1200px) rotateX(0) rotateY(0) scale(1.04)}
.bw-bar{display:flex;align-items:center;gap:5px;padding:7px 10px;border-bottom:1px solid #eceef4}
.bw-bar i{width:7px;height:7px;border-radius:50%;background:#d8dbe6}
.bw-bar u{flex:1;margin-left:8px;height:14px;border-radius:7px;background:#f1f2f7;font-family:var(--mono);font-size:8.5px;color:#8a8fa5;text-decoration:none;display:flex;align-items:center;padding-left:8px;overflow:hidden;white-space:nowrap}
.bw img{width:100%;aspect-ratio:16/10;object-fit:cover;object-position:top}
.meta{display:flex;justify-content:space-between;align-items:start;gap:16px;margin-top:18px}
.meta h3{font-size:clamp(22px,2.2vw,34px)}
.cat{font-family:var(--mono);font-size:12px;color:var(--slate);letter-spacing:.06em;text-transform:uppercase;margin-bottom:8px}
.meta p{color:var(--slate);font-size:15.5px;max-width:50ch;margin-top:8px}
.tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
.tags li,.tags span,.tag-pill{font-family:var(--mono);font-size:11.5px;padding:5px 10px;border:1px solid #cfd2de;border-radius:999px;background:transparent}
.meta .go{flex:0 0 46px;width:46px;height:46px;border:0;background:var(--ink);color:#fff}
.meta .go svg{width:16px;height:16px}
.pcard:hover .meta .go{transform:rotate(45deg);background:var(--signal)}
.pgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(28px,3.4vw,56px) clamp(18px,2.2vw,36px)}
.pgrid.two{grid-template-columns:repeat(2,minmax(0,1fr))}

/* ---------- tiles / cards ---------- */
.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.tiles.two{grid-template-columns:repeat(2,1fr)}.tiles.four{grid-template-columns:repeat(4,1fr)}
.tile{background:var(--paper);padding:clamp(22px,2.6vw,36px);display:flex;flex-direction:column;gap:12px;min-height:220px;position:relative;overflow:hidden}
.tile::after{content:"";position:absolute;right:-60px;top:-60px;width:150px;height:150px;border-radius:50%;background:var(--signal-soft);transform:scale(0);transition:transform .6s var(--ease)}
.tile:hover::after{transform:scale(1)}
.tile>*{position:relative;z-index:1}
.tile .n{font-family:var(--mono);font-size:12px;color:var(--signal)}
.tile h3,.tile h2{font-size:clamp(21px,1.9vw,28px);margin-top:auto;line-height:1.05}
.tile p{color:var(--slate);font-size:15.5px}
.tile .arrow-link{margin-top:6px;align-self:flex-start;font-size:14.5px}
a.tile{transition:background .3s}
.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(14px,1.6vw,24px)}
.cards.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.card{border:1px solid var(--line);border-radius:var(--r);padding:clamp(22px,2.4vw,34px);background:var(--paper);display:flex;flex-direction:column;gap:14px;transition:transform .5s var(--ease),box-shadow .5s,border-color .3s}
.card:hover{transform:translateY(-6px);box-shadow:0 40px 60px -40px rgba(11,13,26,.35);border-color:#cfd2de}
.card h2,.card h3{font-size:clamp(22px,2vw,30px);line-height:1.05}
.card h2 a:hover,.card h3 a:hover{color:var(--signal)}
.card p{color:var(--slate);font-size:15.5px}
.card .foot{margin-top:auto;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding-top:8px}
.card .cover{margin:calc(clamp(22px,2.4vw,34px)*-1) calc(clamp(22px,2.4vw,34px)*-1) 4px;border-radius:var(--r) var(--r) 0 0;overflow:hidden;aspect-ratio:16/10;background:var(--mist)}
.card .cover img,.card .cover iframe{width:100%;height:100%;object-fit:cover;border:0;transition:transform .8s var(--ease)}
.card:hover .cover img{transform:scale(1.05)}
.card .cover iframe{pointer-events:none;background:#fff}
.metaline{display:flex;gap:6px 14px;flex-wrap:wrap;font-family:var(--mono);font-size:12px;color:var(--slate);letter-spacing:.03em}
.snip{font-family:var(--mono);font-size:12.5px;line-height:1.6;background:var(--mist);border-radius:14px;padding:14px 16px;color:#3b4058;max-height:132px;overflow:hidden;white-space:pre-wrap;word-break:break-word}

/* ---------- process ---------- */
.proc{display:grid;grid-template-columns:1fr 1.6fr;gap:clamp(24px,5vw,90px)}
.proc-side{position:sticky;top:120px;align-self:start}
.proc-side h2{font-size:clamp(36px,5.6vw,90px);margin-top:18px}
.proc-side p{color:var(--slate);margin-top:20px;max-width:34ch}
.steps{position:relative;padding-left:44px}
.steps::before{content:"";position:absolute;left:11px;top:8px;bottom:8px;width:2px;background:var(--line)}
.steps .fill{position:absolute;left:11px;top:8px;bottom:8px;width:2px;background:var(--signal);transform-origin:50% 0;transform:scaleY(0)}
.step{position:relative;padding:0 0 clamp(34px,4.6vw,64px)}
.step:last-child{padding-bottom:0}
.step::before{content:"";position:absolute;left:-44px;top:4px;width:24px;height:24px;border-radius:50%;background:var(--paper);border:2px solid var(--ink)}
.bg-mist .step::before{background:var(--mist)}
.step .n{font-family:var(--mono);font-size:12px;color:var(--slate);letter-spacing:.08em}
.step h3{font-size:clamp(24px,2.8vw,42px);margin:6px 0 10px}
.step p{color:var(--slate);max-width:52ch}

/* ---------- pricing ---------- */
.price-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,1.6vw,24px)}
.plan{border:1px solid var(--line);border-radius:var(--r);padding:clamp(24px,2.6vw,40px);display:flex;flex-direction:column;gap:20px;background:var(--paper);transition:transform .5s var(--ease),box-shadow .5s}
.plan:hover{transform:translateY(-8px);box-shadow:0 40px 60px -40px rgba(11,13,26,.35)}
.plan.hot{background:var(--ink);color:#fff;border-color:var(--ink)}
.plan .k{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--slate)}
.plan.hot .k{color:#aab0ff}
.plan h3{font-size:clamp(22px,2vw,28px)}
.plan .amt{font-family:var(--display);font-weight:700;font-size:clamp(42px,4.4vw,68px);letter-spacing:-.04em;line-height:1}
.plan .amt small{font-family:var(--body);font-size:16px;font-weight:500;letter-spacing:0;color:var(--slate)}
.plan.hot .amt small,.plan.hot>p{color:#c9cce0}
.plan>p{color:var(--slate);font-size:15.5px}
.plan li{padding:11px 0;border-top:1px solid var(--line);font-size:15.5px;display:flex;gap:10px}
.plan.hot li{border-color:#2a2d42}
.plan li::before,.ticks li::before{content:"";flex:0 0 7px;height:7px;margin-top:9px;background:var(--signal);transform:rotate(45deg)}
.plan.hot li::before{background:#8d98ff}
.plan .btn{margin-top:auto}
.plan.hot .btn{background:#fff;color:var(--ink)}
.plan.hot .btn:hover{color:#fff}
.ticks li{display:flex;gap:12px;padding:12px 0;border-top:1px solid var(--line)}
.ticks li:last-child{border-bottom:1px solid var(--line)}

/* ---------- comparison table ---------- */
.cmp-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r)}
.cmp{width:100%;min-width:760px;border-collapse:collapse;font-size:15.5px}
.cmp th,.cmp td{padding:18px 20px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
.cmp tr:last-child td{border-bottom:0}
.cmp thead th{font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--slate);font-weight:500}
.cmp td:first-child{font-family:var(--display);font-weight:600;font-size:17px}
.cmp th:nth-child(2),.cmp td:nth-child(2){background:var(--ink);color:#fff}
.cmp thead th:nth-child(2){color:#aab0ff}
.cmp td:nth-child(n+3){color:var(--slate)}

/* ---------- testimonials ---------- */
.quotes{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(14px,1.6vw,24px)}
.quote{border:1px solid var(--line);border-radius:var(--r);padding:clamp(24px,3vw,44px);display:flex;flex-direction:column;gap:28px;justify-content:space-between;background:var(--paper)}
.quote blockquote{font-family:var(--display);font-weight:600;font-size:clamp(21px,2.1vw,32px);line-height:1.15;letter-spacing:-.02em}
.quote blockquote::before{content:"“";display:block;font-size:2.4em;line-height:.6;color:var(--signal);margin-bottom:.1em}
.quote figcaption{display:flex;align-items:center;gap:14px}
.quote .av{width:46px;height:46px;border-radius:50%;background:var(--signal-soft);color:var(--signal);display:grid;place-items:center;font-family:var(--display);font-weight:700;font-size:18px}
.quote strong{display:block;font-family:var(--display);font-size:17px}
.quote small{color:var(--slate);font-family:var(--mono);font-size:12px}

/* ---------- faq ---------- */
.faq-grid{display:grid;grid-template-columns:1fr 1.6fr;gap:clamp(24px,5vw,90px)}
.faq-grid h2{font-size:clamp(36px,5.6vw,90px);margin-top:18px}
.faq-grid>div:first-child p{color:var(--slate);margin-top:18px;max-width:34ch}
details{border-bottom:1px solid var(--line)}
details:first-of-type{border-top:1px solid var(--ink)}
summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;gap:20px;align-items:center;padding:22px 0;font-family:var(--display);font-weight:600;font-size:clamp(18px,1.8vw,26px);letter-spacing:-.02em;line-height:1.15}
summary::-webkit-details-marker{display:none}
summary::after{content:"";flex:0 0 38px;height:38px;border-radius:50%;border:1px solid var(--ink);background:linear-gradient(var(--ink),var(--ink)) center/14px 1.5px no-repeat,linear-gradient(var(--ink),var(--ink)) center/1.5px 14px no-repeat;transition:transform .4s,background-color .3s}
details[open] summary::after{transform:rotate(135deg);background-color:var(--signal-soft)}
details>p{padding:0 58px 24px 0;color:var(--slate);max-width:64ch}

/* ---------- contact band + footer ---------- */
.contact{background:var(--ink);color:#fff;border-radius:clamp(24px,4vw,56px) clamp(24px,4vw,56px) 0 0;overflow:hidden;margin-top:clamp(40px,6vw,90px)}
.contact .label{color:#aab0ff}
.contact h2{font-size:clamp(46px,10.5vw,190px);font-weight:800;letter-spacing:-.05em;line-height:.88;margin:26px 0 clamp(18px,3vw,36px)}
.contact h2.md{font-size:clamp(40px,7vw,120px)}
.contact h2 em{font-style:normal;color:transparent;-webkit-text-stroke:1.5px #fff}
.contact .sub{color:#c9cce0;max-width:50ch;font-size:clamp(17px,1.4vw,20px);margin-bottom:clamp(26px,4vw,48px)}
.contact-row{display:grid;grid-template-columns:auto 1fr;gap:clamp(24px,5vw,80px);align-items:end}
.contact .btn{background:var(--signal)}
.contact .btn::before{background:#fff}
.contact .btn:hover{color:var(--ink)}
.contact .btn.ghost{background:transparent;box-shadow:inset 0 0 0 1px #fff;color:#fff}
.contact .btn.ghost:hover{color:var(--ink)}
.reach{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;border-top:1px solid #2a2d42;padding-top:24px}
.reach .k{font-family:var(--mono);font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:#8f94ad;margin-bottom:6px}
.reach a,.reach span{font-size:clamp(16px,1.4vw,20px);font-weight:500;word-break:break-word}
.reach a:hover{color:#aab0ff}
footer.site{background:var(--ink);color:#c9cce0;padding-top:clamp(56px,7vw,100px);overflow:hidden}
.foot{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:32px;font-size:15px;padding-bottom:40px}
.foot h3{font-family:var(--mono);font-weight:500;font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:#8f94ad;margin-bottom:14px}
.foot li{margin-bottom:8px}
.foot a:hover{color:#fff}
.foot p{max-width:38ch}
.wordmark{font-family:var(--display);font-weight:800;font-size:26px;letter-spacing:-.03em;color:#fff;display:inline-block;margin-bottom:14px}
.wordmark i{font-style:normal;color:#8d98ff}
.socials{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}
.socials a{font-family:var(--mono);font-size:12px;padding:7px 12px;border:1px solid #2a2d42;border-radius:999px}
.socials a:hover{border-color:#fff}
.mega{font-family:var(--display);font-weight:800;font-size:25.5vw;line-height:.74;letter-spacing:-.06em;color:#161930;text-align:center;white-space:nowrap;user-select:none;will-change:transform}
.legal{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-family:var(--mono);font-size:11.5px;color:#8f94ad;border-top:1px solid #2a2d42;padding-block:18px}
.wa-fab{position:fixed;right:16px;bottom:16px;z-index:50;width:56px;height:56px;border-radius:50%;background:#25d366;color:#fff;display:none;place-items:center;box-shadow:0 14px 30px -10px rgba(11,13,26,.45)}
.wa-fab svg{width:28px;height:28px}
.totop{position:fixed;right:22px;bottom:22px;z-index:50;width:48px;height:48px;border-radius:50%;background:var(--paper);border:1px solid var(--line);display:grid;place-items:center;opacity:0;transform:translateY(12px);pointer-events:none;transition:opacity .3s,transform .3s,background .3s,color .3s}
.totop.show{opacity:1;transform:none;pointer-events:auto}
.totop:hover{background:var(--ink);color:#fff}
.totop svg{width:16px;height:16px;transform:rotate(-45deg)}

/* ---------- inner page hero ---------- */
.crumbs{font-family:var(--mono);font-size:12px;color:var(--slate);letter-spacing:.04em;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.crumbs a:hover{color:var(--signal)}
.crumbs span[aria-current]{color:var(--ink)}
.phero{padding-top:clamp(116px,12vw,160px);padding-bottom:clamp(40px,6vw,84px);overflow:hidden}
.phero .label{margin:clamp(22px,3vw,40px) 0 18px}
.phero h1{font-size:clamp(42px,7.6vw,128px);font-weight:800;letter-spacing:-.045em;line-height:.92;max-width:16ch}
.phero h1.long{font-size:clamp(36px,5.4vw,88px);max-width:20ch}
.phero h1 .ln{display:block;overflow:hidden;padding-bottom:.1em;margin-bottom:-.1em}
.phero h1 .ln>span{display:block}
.phero h1 em{font-style:normal;color:var(--signal)}
.phero-row{display:grid;grid-template-columns:1.25fr 1fr;gap:clamp(24px,5vw,90px);align-items:end;margin-top:clamp(24px,3.4vw,48px)}
.phero-row.media{grid-template-columns:1.4fr minmax(220px,380px)}
.phero .lead{max-width:56ch}
.phero .btns{margin-top:26px}
.byline{display:flex;gap:6px 18px;flex-wrap:wrap;font-family:var(--mono);font-size:12px;color:var(--slate);margin-top:18px}
.byline a{color:var(--ink);border-bottom:1px solid var(--line)}
.techrow{display:flex;gap:8px;flex-wrap:wrap}
.techrow span{font-family:var(--mono);font-size:12.5px;padding:8px 14px;border:1px solid var(--line);border-radius:999px;background:var(--paper)}
.ghost-word{position:absolute;right:-2vw;top:clamp(70px,8vw,110px);font-family:var(--display);font-weight:800;font-size:clamp(120px,24vw,420px);line-height:.8;letter-spacing:-.06em;color:transparent;-webkit-text-stroke:1px var(--line);white-space:nowrap;pointer-events:none;user-select:none;z-index:0;will-change:transform}
.phero .wrap{position:relative;z-index:1}

/* ---------- city chips ---------- */
.cities{display:flex;flex-wrap:wrap;gap:8px}
.cities a{font-size:14.5px;padding:8px 15px;border:1px solid var(--line);border-radius:999px;background:var(--paper);transition:background .25s,color .25s,border-color .25s,transform .35s var(--ease)}
.cities a:hover{background:var(--ink);color:#fff;border-color:var(--ink);transform:translateY(-3px)}

/* ---------- about ---------- */
.about-grid{display:grid;grid-template-columns:minmax(240px,420px) 1fr;gap:clamp(28px,5vw,90px);align-items:start}
.about-photo{position:sticky;top:110px}
.about-photo .portrait{margin-bottom:16px}
.facts{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;margin-top:34px}
.facts div{background:var(--paper);padding:18px 20px}
.facts span{display:block;font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--slate);margin-bottom:4px}
.facts strong{font-family:var(--display);font-size:18px;font-weight:600}
.prose-lg p{font-size:clamp(18px,1.5vw,22px);margin-bottom:1.1em;max-width:62ch}
.prose-lg p:first-of-type{font-family:var(--display);font-weight:600;font-size:clamp(24px,2.6vw,40px);line-height:1.12;letter-spacing:-.02em}
.skills-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,5vw,90px)}
.bar{margin-bottom:22px}
.bar .t{display:flex;justify-content:space-between;font-weight:500;margin-bottom:8px}
.bar .t span:last-child{font-family:var(--mono);font-size:13px;color:var(--slate)}
.bar .rail{height:6px;border-radius:3px;background:var(--line);overflow:hidden}
.bar .rail i{display:block;height:100%;width:var(--w);background:var(--ink);border-radius:3px;transform-origin:0 50%}
.stack-group{padding:18px 0;border-top:1px solid var(--line)}
.stack-group h4{font-family:var(--mono);font-weight:500;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--slate);margin-bottom:12px}
.sub-h{font-size:clamp(22px,2vw,30px);margin-bottom:24px}

/* ---------- contact page ---------- */
.contact-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:clamp(28px,5vw,90px);align-items:start}
.channels{border-top:1px solid var(--ink)}
.channels a,.channels div.ch{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:24px 0;border-bottom:1px solid var(--line);transition:padding .4s var(--ease)}
.channels a:hover{padding-inline:10px}
.channels a:hover .go{background:var(--signal);border-color:var(--signal);color:#fff;transform:rotate(45deg)}
.channels b{font-family:var(--display);font-size:clamp(22px,2.2vw,34px);font-weight:700;letter-spacing:-.02em;display:block}
.channels small{color:var(--slate);font-size:15px}
.channels .v{font-family:var(--mono);font-size:13.5px;display:block;margin-top:4px}
.form{border:1px solid var(--line);border-radius:var(--r);padding:clamp(22px,3vw,44px);background:var(--paper);display:grid;gap:20px}
.form h2{font-size:clamp(26px,2.6vw,40px)}
.field label{display:block;font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--slate);margin-bottom:8px}
.field input,.field textarea,.search{width:100%;padding:15px 18px;border:1px solid var(--line);border-radius:14px;background:var(--paper);transition:border-color .2s,box-shadow .2s}
.field input:focus,.field textarea:focus,.search:focus{outline:0;border-color:var(--signal);box-shadow:0 0 0 4px var(--signal-soft)}
.field textarea{resize:vertical;min-height:140px}
.form .note{font-size:14px;color:var(--slate)}
.form .note a{border-bottom:1px solid currentColor}

/* ---------- article / detail layouts ---------- */
.layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);gap:clamp(28px,5vw,80px);align-items:start}
.side{display:grid;gap:18px;position:sticky;top:104px}
.side.free{position:static}
.box{border:1px solid var(--line);border-radius:var(--r);padding:24px;background:var(--paper)}
.box.dark{background:var(--ink);color:#fff;border-color:var(--ink)}
.box.dark p{color:#c9cce0}
.box h2,.box h3{font-size:20px;margin-bottom:12px;line-height:1.1}
.box p{font-size:15px;color:var(--slate)}
.box .btn{margin-top:14px}
.box.dark .btn{background:var(--signal)}
.box.dark .btn::before{background:#fff}
.box.dark .btn:hover{color:var(--ink)}
.kv{font-size:14.5px}
.kv div{display:flex;justify-content:space-between;gap:16px;padding:10px 0;border-top:1px solid var(--line)}
.kv div:first-child{border-top:0}
.kv span{color:var(--slate)}
.kv strong{text-align:right;font-weight:600}
.big-num{font-family:var(--display);font-weight:800;font-size:44px;letter-spacing:-.04em;line-height:1}
.mini-stats{display:grid;grid-template-columns:repeat(3,1fr);text-align:center;border-block:1px solid var(--line);margin:16px 0;padding:12px 0}
.mini-stats b{display:block;font-family:var(--display);font-size:20px}
.mini-stats small{font-family:var(--mono);font-size:10.5px;color:var(--slate);text-transform:uppercase;letter-spacing:.06em}
.author{display:flex;gap:14px;align-items:center}
.author img{width:56px;height:56px;border-radius:50%;object-fit:cover;object-position:top}
.author strong{display:block;font-family:var(--display);font-size:18px}
.author small{color:var(--slate);font-size:13.5px}
.list-links li{border-top:1px solid var(--line)}
.list-links li:first-child{border-top:0}
.list-links a{display:flex;justify-content:space-between;gap:12px;padding:10px 0;font-size:15px;align-items:center}
.list-links a:hover{color:var(--signal)}
.list-links a span:last-child{font-family:var(--mono);font-size:12px;color:var(--slate)}
.recent a{justify-content:flex-start}
.recent img{width:64px;height:46px;flex:0 0 64px;object-fit:cover;border-radius:8px}
.recent small{display:block;font-family:var(--mono);font-size:11px;color:var(--slate);margin-top:2px}
.toc li a{display:block;padding:6px 0 6px 12px;border-left:2px solid var(--line);font-size:14.5px;color:var(--slate)}
.toc li.l3 a{padding-left:24px}
.toc a:hover,.toc a.is-active{color:var(--ink);border-color:var(--signal)}
.post-head h1{font-size:clamp(36px,5vw,80px);font-weight:800;letter-spacing:-.04em;line-height:.96;margin:16px 0 18px;max-width:20ch}
.post-head .lead{color:var(--slate);max-width:60ch}
.hero-img{border-radius:var(--r);overflow:hidden;margin:clamp(24px,3vw,40px) 0;aspect-ratio:16/9;background:var(--mist)}
.hero-img img{width:100%;height:115%;object-fit:cover;will-change:transform}
.share{display:flex;gap:8px;flex-wrap:wrap;align-items:center;border-block:1px solid var(--line);padding:18px 0;margin-top:40px}
.share>span{font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--slate);margin-right:8px}
.share a,.share button{font-size:14px;padding:8px 14px;border:1px solid var(--line);border-radius:999px;background:none;cursor:pointer;transition:background .2s,color .2s,border-color .2s}
.share a:hover,.share button:hover{background:var(--ink);color:#fff;border-color:var(--ink)}
.authorbox{display:flex;gap:20px;align-items:center;margin-top:28px;padding:24px;border-radius:var(--r);background:var(--mist)}
.authorbox img{width:80px;height:80px;flex:0 0 80px;border-radius:50%;object-fit:cover;object-position:top}
.authorbox p{color:var(--slate);font-size:15px;margin:4px 0 8px}
.pullquote{font-family:var(--display);font-weight:600;font-size:clamp(22px,2.4vw,34px);line-height:1.15;letter-spacing:-.02em;border-left:3px solid var(--signal);padding-left:22px;margin:28px 0}
.chapters li{display:flex;justify-content:space-between;gap:16px;padding:14px 0;border-top:1px solid var(--line);font-weight:500}
.chapters li:last-child{border-bottom:1px solid var(--line)}
.chapters span{font-family:var(--mono);font-size:12px;color:var(--slate);white-space:nowrap}
.block-h{font-size:clamp(26px,2.6vw,40px);margin:clamp(36px,4vw,56px) 0 18px}

/* prose: DB-authored HTML (posts, ebooks, pens, templates) */
.prose{font-size:18px;line-height:1.7;max-width:72ch}
.prose>*+*{margin-top:1.1em}
.prose h2{font-size:clamp(26px,2.6vw,38px);margin-top:1.8em;line-height:1.08}
.prose h3{font-size:clamp(21px,2vw,27px);margin-top:1.6em;line-height:1.12}
.prose h4{font-size:19px;margin-top:1.4em}
.prose a{color:var(--signal);border-bottom:1px solid currentColor}
.prose ul,.prose ol{padding-left:1.3em}
.prose ul{list-style:none}
.prose ul>li{position:relative}
.prose ul>li::before{content:"";position:absolute;left:-1.15em;top:.68em;width:7px;height:7px;background:var(--signal);transform:rotate(45deg)}
.prose ol{list-style:decimal}
.prose li+li{margin-top:.45em}
.prose img{border-radius:16px;margin-inline:auto}
.prose figure figcaption{font-size:14px;color:var(--slate);text-align:center;margin-top:8px}
.prose blockquote{border-left:3px solid var(--signal);padding-left:20px;font-family:var(--display);font-weight:600;font-size:1.2em;line-height:1.3}
.prose code{font-family:var(--mono);font-size:.86em;background:var(--mist);padding:.15em .4em;border-radius:6px}
.prose pre{background:var(--ink);color:#e7e9f5;border-radius:16px;padding:20px;overflow-x:auto;font-size:14px;line-height:1.6}
.prose pre code{background:none;padding:0;color:inherit}
.prose table{width:100%;border-collapse:collapse;font-size:16px;display:block;overflow-x:auto}
.prose th,.prose td{padding:12px 14px;border-bottom:1px solid var(--line);text-align:left}
.prose th{font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--slate)}
.prose hr{border:0;border-top:1px solid var(--line);margin:2em 0}
.prose strong{font-weight:600}

/* code box */
.codebox{border-radius:var(--r);overflow:hidden;background:var(--ink);color:#e7e9f5;margin-top:22px}
.codebox .bar-top{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px 12px 20px;border-bottom:1px solid #23263b;font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#aab0ff}
.codebox button{font-family:var(--body);text-transform:none;letter-spacing:0;font-size:14px;font-weight:600;padding:8px 16px;border-radius:999px;border:0;background:#fff;color:var(--ink);cursor:pointer;transition:background .2s,color .2s}
.codebox button:hover,.codebox button.copied{background:var(--signal);color:#fff}
.codebox pre{padding:20px;overflow:auto;max-height:560px;font-family:var(--mono);font-size:13.5px;line-height:1.65;white-space:pre-wrap;word-break:break-word}
.preview{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:#fff}
.preview .bw-bar{background:var(--mist)}
.preview iframe{width:100%;height:420px;border:0;display:block;background:#fff}
.preview img{width:100%}

/* playground */
.pg{display:grid;grid-template-columns:220px minmax(0,1fr);gap:clamp(24px,3vw,48px);align-items:start}
.pg aside{position:sticky;top:104px;display:grid;gap:4px}
.pg aside h2{font-family:var(--mono);font-weight:500;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--slate);margin-bottom:8px}
.cat-btn{display:flex;justify-content:space-between;gap:10px;width:100%;padding:10px 14px;border-radius:12px;border:0;background:none;text-align:left;cursor:pointer;font-size:15px;transition:background .2s}
.cat-btn:hover{background:var(--mist)}
.cat-btn .n{font-family:var(--mono);font-size:12px;color:var(--slate)}
.cat-btn.cat-active{background:var(--ink);color:#fff}
.cat-btn.cat-active .n{color:#c9cce0}
.pg-top{display:flex;gap:16px;align-items:center;margin-bottom:22px}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:clamp(24px,3vw,40px)}
.filters a{font-size:14.5px;padding:8px 16px;border:1px solid var(--line);border-radius:999px;display:inline-flex;gap:8px;align-items:center}
.filters a span{font-family:var(--mono);font-size:11.5px;color:var(--slate)}
.filters a:hover{border-color:var(--ink)}
.filters a.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.filters a.on span{color:#c9cce0}
.feature{display:grid;grid-template-columns:1.2fr 1fr;gap:clamp(20px,3vw,48px);align-items:center;margin-bottom:clamp(28px,4vw,56px)}
.feature .cover{border-radius:var(--r);overflow:hidden;aspect-ratio:16/10;background:var(--mist)}
.feature .cover img{width:100%;height:100%;object-fit:cover;transition:transform .8s var(--ease)}
.feature:hover .cover img{transform:scale(1.04)}
.feature h2{font-size:clamp(28px,3.6vw,56px);margin:12px 0 14px}
.feature:hover h2{color:var(--signal)}
.feature p{color:var(--slate);margin-bottom:16px}
.empty{max-width:640px;margin-inline:auto;text-align:center;border:1px dashed #cfd2de;border-radius:var(--r);padding:clamp(36px,6vw,72px) 24px}
.empty h2{font-size:clamp(26px,3vw,40px);margin-bottom:12px}
.empty p{color:var(--slate);margin-bottom:22px}

/* modal */
.modal{position:fixed;inset:0;z-index:95;background:rgba(11,13,26,.6);backdrop-filter:blur(6px);display:grid;place-items:center;padding:16px}
.modal .form{max-width:460px;width:100%;position:relative}
.modal .x{position:absolute;right:14px;top:14px;width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:none;cursor:pointer;font-size:18px;line-height:1}

/* 404 */
.nf{min-height:70vh;display:grid;place-items:center;text-align:center;padding-top:120px}
.nf .big{font-family:var(--display);font-weight:800;font-size:clamp(140px,30vw,460px);line-height:.8;letter-spacing:-.06em;color:transparent;-webkit-text-stroke:2px var(--ink)}
.nf h1{font-size:clamp(28px,4vw,56px);margin:10px 0 14px}
.nf p{color:var(--slate);max-width:44ch;margin:0 auto 26px}
.nf .btns{justify-content:center}

/* ---------- responsive ---------- */
@media (max-width:1100px){
  .nav-links,.nav .nav-cta{display:none}.burger{display:block}
  .hero .badge{display:none}
  .fchip{display:none}
  .tiles,.tiles.four{grid-template-columns:repeat(2,1fr)}
  .price-grid{grid-template-columns:1fr 1fr}.price-grid .plan:last-child{grid-column:1/-1}
  .svc>a{grid-template-columns:44px 1fr 56px}.svc p{grid-column:2/3}
  .foot{grid-template-columns:1fr 1fr}
  .pgrid,.cards{grid-template-columns:repeat(2,minmax(0,1fr))}
  .layout{grid-template-columns:1fr}.side{position:static;grid-template-columns:repeat(2,minmax(0,1fr))}
  .pg{grid-template-columns:1fr}.pg aside{position:static;display:flex;flex-wrap:wrap}.pg aside h2{flex-basis:100%}.cat-btn{width:auto;border:1px solid var(--line);border-radius:999px;padding:8px 14px}
}
@media (max-width:899px){
  /* projects: swipe carousel instead of six tall stacked cards */
  .track{overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-inline:var(--gut);padding-bottom:6px}
  .track::-webkit-scrollbar{display:none}
  .track .pcard{flex:0 0 min(84vw,460px);scroll-snap-align:start}
  .track .all{flex:0 0 min(70vw,360px);scroll-snap-align:start}
  .work-head .count::after{content:" · swipe →"}
  .work-bar{display:none}
  .hero-main{grid-template-columns:1fr;gap:28px}
  .hero-visual{justify-content:center;padding-block:14px 6px}
  .portrait{width:min(76vw,340px);aspect-ratio:4/5}
  .stage::after{inset:-5% -6%}
  .about-grid,.contact-grid,.skills-grid,.feature{grid-template-columns:1fr}
  .about-photo{position:static;max-width:420px}
  .phero-row,.phero-row.media{grid-template-columns:1fr}
  .phero-row.media .portrait{max-width:380px}
}
@media (max-width:720px){
  body{font-size:16px}
  .hero-actions,.hero-actions .btns{flex-direction:column;align-items:stretch;width:100%}
  .hero-actions .btn{width:100%}
  .avail{font-size:10.5px;letter-spacing:.04em;border-radius:16px;line-height:1.5}
  .hero-trust{display:grid;gap:8px}
  /* comparison table: one card per row, no sideways scroll */
  .cmp-wrap{border:0;border-radius:0;overflow:visible}
  .cmp{min-width:0;display:block}
  .cmp thead{display:none}
  .cmp tbody{display:grid;gap:14px}
  .cmp tr{display:block;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--paper)}
  .cmp td{display:block;padding:12px 16px;border-bottom:1px solid var(--line)}
  .cmp td:first-child{font-size:19px;padding-block:14px}
  .cmp td:last-child{border-bottom:0}
  .cmp td:nth-child(n+2)::before{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;margin-bottom:3px;color:var(--slate)}
  .cmp td:nth-child(2)::before{content:"Ishrafil Khan";color:#aab0ff}
  .cmp td:nth-child(3)::before{content:"Software agency"}
  .cmp td:nth-child(4)::before{content:"Cheap marketplaces"}
  .foot>div:last-child{grid-column:1/-1}
  .foot>div:last-child ul{columns:2;column-gap:32px}
  .foot li{break-inside:avoid}
  .legal{flex-direction:column;gap:6px}
  .work-pin{padding-block:56px 48px}
  /* blur behind fixed/overlaid elements repaints on every scroll frame: too costly on phones */
  .nav-in,.portrait .tag{backdrop-filter:none;-webkit-backdrop-filter:none;background:rgba(255,255,255,.96)}
  .stats,.stats.three{grid-template-columns:1fr 1fr}
  .stat:nth-child(2n){border-right:0}
  .stat:nth-child(n+3){border-top:1px solid var(--line)}
  .stat:nth-child(2n+1){padding-left:0}
  .state-grid,.proc,.faq-grid,.contact-row{grid-template-columns:1fr}
  .proc-side{position:static}
  .tiles,.tiles.two,.tiles.four,.price-grid,.quotes,.pgrid,.pgrid.two,.cards,.cards.two,.side{grid-template-columns:1fr}
  .tile{min-height:0}
  .reach,.facts{grid-template-columns:1fr}
  .facts{grid-template-columns:1fr 1fr}
  .svc>a{grid-template-columns:minmax(0,1fr) 48px;gap:8px 14px}.svc .n{display:none}.svc h3,.svc h2{grid-column:1;grid-row:1}.svc p{grid-column:1/-1;grid-row:2}.svc .go{width:48px;height:48px;flex-basis:48px;grid-column:2;grid-row:1}
  .foot{grid-template-columns:1fr 1fr}
  .foot>div:first-child{grid-column:1/-1}
  details>p{padding-right:0}
  .out,.contact h2 em{-webkit-text-stroke-width:1px}
  .wa-fab{display:grid}.totop{display:none}
  .brand img{width:128px}
  .authorbox{flex-direction:column;align-items:flex-start}
  .preview iframe{height:320px}
  .ghost-word{display:none}
}
@media (prefers-reduced-motion:reduce){
  .marq-track,.avail b{animation:none}
  *{transition-duration:.01ms!important}
}

/* ---------- late additions ---------- */
.svc>a>div .tags{margin-top:12px}
.svc>a:hover .tags span{border-color:#3a3e58;color:#c9cce0}
@media (max-width:1100px){.svc>a>div{grid-column:2/3}}
@media (max-width:720px){.svc>a>div{grid-column:1/-1;grid-row:2}}
.box .btn+.btn,.box .btn.block+.btn.block{margin-top:10px}
.cards .card h2 a,.cards .card h3 a{display:block}

/* ---------- buddy: 3D robot walking along the bottom (js/buddy.js) ---------- */
.buddy{position:fixed;left:0;bottom:0;z-index:45;pointer-events:none;will-change:transform}
.buddy canvas{position:relative;display:block;pointer-events:auto;cursor:pointer;touch-action:manipulation}
.buddy-shadow{position:absolute;left:18%;right:18%;bottom:2%;height:9%;border-radius:50%;background:radial-gradient(closest-side,rgba(11,13,26,.26),rgba(11,13,26,0))}
.buddy-note{position:absolute;bottom:88%;left:0;width:max-content;max-width:min(230px,calc(100vw - 16px));padding:9px 14px 10px;background:#fff;border:1.5px solid var(--ink);border-radius:14px 14px 14px 4px;box-shadow:4px 4px 0 var(--signal);font:600 21px/1.15 "Caveat","Bradley Hand","Segoe Print",cursive;color:var(--ink);opacity:0;transform:translateY(8px) scale(.9) rotate(-2deg);transform-origin:30% 100%;transition:opacity .25s,transform .35s var(--ease)}
.buddy-note.on{opacity:1;transform:rotate(-2deg)}
.buddy-note.writing{min-width:64px;min-height:44px;background:#fffbe6 linear-gradient(transparent 27px,#e6dfb8 27px,#e6dfb8 28px,transparent 28px) 0 4px/100% 24px;border-radius:4px}
.buddy-note i{display:none;width:15px;height:15px;margin-left:2px;vertical-align:-1px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M1 15l1-4L11.5 1.5l3 3L5 14z' fill='%231f36ff' stroke='%230b0d1a'/%3E%3C/svg%3E") center/contain no-repeat;animation:scribble .22s infinite alternate}
.buddy-note.writing i{display:inline-block}
@keyframes scribble{to{transform:translate(2px,-3px) rotate(-8deg)}}
@media (max-width:720px){.buddy-note{font-size:18px}}
@media print{.buddy{display:none}}
