/* Stas Lomanosov — portfolio. Design system: cantry.ai dark + lime. */
:root{
  --bg:#0a0a0b; --panel:#101013; --plate:#161619;
  --lime:#cdff2e; --lime-soft:rgba(205,255,46,.16);
  --ink:#f5f5f6; --mut:#9a9aa3; --dim:#66666e;
  --hair:rgba(255,255,255,.09); --hair2:rgba(255,255,255,.055);
  --mono:"JetBrains Mono",ui-monospace,monospace;
  --grot:"Space Grotesk",system-ui,sans-serif;
  --serif:"Playfair Display",Georgia,serif;
  --sans:"Inter",system-ui,-apple-system,sans-serif;
  --wrap:1180px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth; scroll-padding-top:78px}
body{margin:0; background:var(--bg); color:var(--ink); font-family:var(--sans);
  font-size:16px; line-height:1.62; -webkit-font-smoothing:antialiased;
  font-variant-ligatures:none; font-feature-settings:"liga" 0,"clig" 0,"dlig" 0;
  overflow-x:hidden}
img,video{max-width:100%; height:auto}
a{color:inherit}
h1,h2,h3{margin:0; font-family:var(--grot); line-height:1.15; font-weight:700}
p{margin:0 0 14px}

/* фон страницы */
.bg-glow{position:fixed; top:-30%; left:50%; width:90vw; height:90vw; transform:translateX(-50%); z-index:-2; pointer-events:none; background:radial-gradient(circle,rgba(205,255,46,.06),transparent 60%); animation:drift 18s ease-in-out infinite}
@keyframes drift{0%,100%{transform:translateX(-50%) translateY(0)}50%{transform:translateX(-46%) translateY(4%)}}
.bg-grid{position:fixed; inset:0; z-index:-1; pointer-events:none; opacity:.35; background-image:linear-gradient(var(--hair2) 1px,transparent 1px),linear-gradient(90deg,var(--hair2) 1px,transparent 1px); background-size:64px 64px; -webkit-mask-image:radial-gradient(circle at 50% 30%,#000 30%,transparent 75%); mask-image:radial-gradient(circle at 50% 30%,#000 30%,transparent 75%)}

.wrap{max-width:var(--wrap); margin:0 auto; padding:0 22px}

/* топбар */
.topbar{position:sticky; top:0; z-index:50; backdrop-filter:blur(14px);
  background:rgba(10,10,11,.82); border-bottom:1px solid var(--hair)}
.topbar .wrap{display:flex; align-items:center; gap:18px; height:64px}
.brand{font-family:var(--grot); font-weight:700; letter-spacing:.02em; text-decoration:none; white-space:nowrap}
.brand i{color:var(--lime); font-style:normal}
.tnav{display:flex; gap:20px; margin-left:auto; font-size:14px; color:var(--mut)}
.tnav a{text-decoration:none; transition:color .2s}
.tnav a:hover{color:var(--lime)}
.lang{display:flex; gap:2px; align-items:center; font-family:var(--mono); font-size:12px;
  border:1px solid var(--hair); border-radius:999px; padding:4px 6px}
.lang a{text-decoration:none; padding:2px 7px; border-radius:999px; color:var(--dim); transition:.2s}
.lang a.on{background:var(--lime); color:#0a0a0b; font-weight:600}
.lang a:hover:not(.on){color:var(--ink)}
@media(max-width:900px){ .tnav{display:none} }

/* херо */
.hero{position:relative; min-height:min(88vh,760px); display:flex; align-items:center;
  padding:70px 0 56px; overflow:hidden; border-bottom:1px solid var(--hair)}
.hero-media{position:absolute; inset:0; z-index:0}
.hero-media video,.hero-media img{width:100%; height:100%; object-fit:cover}
.hero-scrim{position:absolute; inset:0; z-index:1;
  background:radial-gradient(70% 70% at 30% 40%,rgba(10,10,11,.72),rgba(10,10,11,.94) 70%),linear-gradient(180deg,transparent 40%,var(--bg) 98%)}
.hero .wrap{position:relative; z-index:2}
.hero-grid{display:grid; grid-template-columns:minmax(0,1fr) 300px; gap:40px; align-items:center}
@media(max-width:900px){ .hero-grid{grid-template-columns:1fr} }
.kicker{font-family:var(--mono); font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:var(--lime); margin-bottom:14px}
.hero h1{font-size:clamp(38px,6.4vw,74px); letter-spacing:-.02em}
.hero .lead{font-family:var(--serif); font-style:italic; font-size:clamp(19px,2.5vw,28px);
  color:var(--ink); margin:16px 0 12px; line-height:1.32; max-width:22ch}
.hero .sub{color:var(--mut); font-size:16px; max-width:56ch}
.hero-cta{display:flex; flex-wrap:wrap; gap:12px; margin-top:26px}
.btn{display:inline-flex; align-items:center; gap:8px; padding:12px 22px; border-radius:999px;
  text-decoration:none; font-weight:600; font-size:15px; border:1px solid var(--hair); transition:.2s}
.btn.pri{background:var(--lime); color:#0a0a0b; border-color:var(--lime)}
.btn.pri:hover{filter:brightness(1.08)}
.btn:hover{border-color:var(--lime); color:var(--lime)}
.btn.pri:hover{color:#0a0a0b}

/* статы */
.stats{display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-top:40px}
@media(max-width:820px){ .stats{grid-template-columns:repeat(2,1fr)} }
.stat{background:var(--panel); border:1px solid var(--hair); border-radius:14px; padding:18px 16px}
.stat b{display:block; font-family:var(--grot); font-size:clamp(22px,3vw,30px); color:var(--lime); line-height:1.1}
.stat.t b{color:var(--ink)}
.stat span{display:block; margin-top:6px; font-size:13px; color:var(--mut); line-height:1.4}

/* секции */
.section{padding:74px 0; border-bottom:1px solid var(--hair2)}
.sec-head{display:flex; align-items:baseline; gap:16px; margin-bottom:10px}
.sec-no{font-family:var(--grot); font-size:clamp(40px,7vw,80px); font-weight:700;
  color:rgba(205,255,46,.22); line-height:.9; letter-spacing:-.03em}
.sec-name{font-family:var(--mono); font-size:12px; letter-spacing:.2em; text-transform:uppercase; color:var(--mut)}
.section h2{font-size:clamp(24px,3.4vw,38px); letter-spacing:-.01em; margin-bottom:12px}
.section-sub,.rlead{color:var(--mut); font-size:16px; max-width:72ch; margin-bottom:26px}
.block{margin-top:52px}
.block h2{margin-bottom:10px}

/* сетка каналов */
.netgrid{display:grid; grid-template-columns:repeat(4,1fr); gap:14px}
@media(max-width:980px){ .netgrid{grid-template-columns:repeat(2,1fr)} }
@media(max-width:560px){ .netgrid{grid-template-columns:1fr} }
.net{display:block; background:var(--panel); border:1px solid var(--hair); border-radius:16px;
  padding:20px 18px; text-decoration:none; transition:.22s}
.net:hover{border-color:var(--lime); transform:translateY(-2px)}
.net .np{font-family:var(--mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--lime)}
.net b{display:block; font-family:var(--grot); font-size:30px; margin-top:10px; line-height:1}
.net .u{display:block; font-size:12px; color:var(--dim); margin-top:4px}
.net p{margin:12px 0 0; font-size:13.5px; color:var(--mut); line-height:1.5}
.net.tot{background:linear-gradient(180deg,rgba(205,255,46,.09),transparent); border-color:rgba(205,255,46,.32)}

/* сертификат */
.certwrap{display:grid; grid-template-columns:minmax(0,1fr) 340px; gap:34px; align-items:center;
  background:var(--panel); border:1px solid var(--hair); border-radius:18px; padding:28px}
@media(max-width:900px){ .certwrap{grid-template-columns:1fr} }
.chips{display:flex; flex-wrap:wrap; gap:8px; margin-top:16px}
.chip{font-family:var(--mono); font-size:12px; padding:6px 12px; border-radius:999px;
  border:1px solid var(--hair); color:var(--mut); background:var(--plate)}
.chip.on{border-color:rgba(205,255,46,.4); color:var(--lime)}
.cert-link{display:block; max-width:340px; margin:0 auto; text-decoration:none}
.cert-shell{position:relative; display:block; line-height:0; filter:drop-shadow(0 22px 40px rgba(0,0,0,.6)); transition:filter .4s}
.cert-wood{display:block; width:100%; height:auto}
.cert-mat{position:absolute; top:5%; left:3.6%; right:3.6%; bottom:5%; overflow:hidden}
.cert-mat img{display:block; width:100%; height:100%; object-fit:cover; mix-blend-mode:overlay; opacity:.54}
.cert-doc{position:absolute; top:12.2%; left:9.3%; right:9.3%; bottom:12.2%; border:1px solid rgba(255,255,255,.05)}
.cert-doc img{display:block; width:100%; height:100%; object-fit:cover}
.cert-glare{position:absolute; top:-4%; left:-6%; right:-6%; bottom:-4%; pointer-events:none;
  background:url(cert/cert-glare.svg) center/100% 100% no-repeat}
.cert-cap{margin-top:12px; display:flex; align-items:center; justify-content:center; gap:9px;
  font-family:var(--mono); font-size:12px; color:var(--mut); line-height:1.2}
.cert-cap .tick{flex:0 0 auto; width:17px; height:17px; border-radius:50%; background:var(--lime); color:#0a0a0b;
  display:inline-grid; place-items:center; font-size:10px; font-weight:700}
.cert-link:hover .cert-shell{filter:drop-shadow(0 30px 52px rgba(0,0,0,.72))}

/* спойлер «как я работаю» */
.howto{border:1px solid var(--hair); border-radius:16px; background:var(--panel); overflow:hidden}
.howto>summary{list-style:none; cursor:pointer; padding:20px 24px; display:flex; align-items:center; gap:14px}
.howto>summary::-webkit-details-marker{display:none}
.howto>summary b{font-family:var(--grot); font-size:18px}
.howto>summary i{display:block; font-style:normal; font-size:13.5px; color:var(--mut); margin-top:3px}
.howto>summary .arw{margin-left:auto; width:30px; height:30px; border-radius:50%; border:1px solid var(--hair);
  display:grid; place-items:center; color:var(--lime); font-size:18px; flex:0 0 auto}
.howto[open]>summary .arw{transform:rotate(45deg)}
.howto-body{padding:4px 24px 26px}

/* рабочие материалы */
.ex-cap{display:block; font-family:var(--mono); font-size:11px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--dim); margin-bottom:10px}
.exrow{display:flex; gap:12px; flex-wrap:wrap}
.ex{margin:0; flex:1 1 220px; background:var(--plate); border:1px solid var(--hair2); border-radius:12px; overflow:hidden}
.ex.s{flex:1 1 150px}
.ex img{display:block; width:100%; height:auto}
.ex figcaption{padding:10px 12px; font-size:13px; color:var(--mut); line-height:1.45}
.exgrid+.exgrid{margin-top:26px}

/* карта задач */
.map{display:grid; gap:12px}
.map-row{display:grid; grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr); gap:12px}
@media(max-width:820px){ .map-row{grid-template-columns:1fr} }
.their,.mine{background:var(--panel); border:1px solid var(--hair); border-radius:14px; padding:16px 18px}
.mine{border-color:rgba(205,255,46,.26); background:linear-gradient(180deg,rgba(205,255,46,.05),transparent)}
.lbl{display:block; font-family:var(--mono); font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--dim); margin-bottom:7px}
.mine .lbl{color:var(--lime)}
.their p,.mine p{margin:0; font-size:15px; line-height:1.55}

/* карточки */
.cards{display:grid; grid-template-columns:repeat(auto-fit,minmax(255px,1fr)); gap:14px}
.card{background:var(--panel); border:1px solid var(--hair); border-radius:16px; padding:20px}
.card .kx{display:block; font-family:var(--mono); font-size:11px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--lime); margin-bottom:9px}
.card h3{font-size:18px; margin-bottom:8px}
.card p{margin:0; font-size:14.5px; color:var(--mut); line-height:1.55}

/* проекты: категории */
.cats{display:flex; flex-wrap:wrap; gap:8px; margin-bottom:26px}
.cat{font-family:var(--grot); font-size:14px; font-weight:600; padding:9px 16px; border-radius:999px;
  border:1px solid var(--hair); background:var(--panel); color:var(--mut); cursor:pointer; transition:.2s}
.cat:hover{color:var(--ink); border-color:var(--lime)}
.cat[aria-selected="true"]{background:var(--lime); border-color:var(--lime); color:#0a0a0b}
.catgroup{scroll-margin-top:90px}
.catgroup+.catgroup{margin-top:54px}
.cat-head{display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; margin-bottom:6px;
  padding-bottom:10px; border-bottom:1px solid var(--hair)}
.cat-head h3{font-size:22px}
.cat-head .cnt{font-family:var(--mono); font-size:12px; color:var(--dim)}
.cat-lead{color:var(--mut); font-size:15px; margin:10px 0 18px; max-width:70ch}

.work{display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:16px}
.item{background:var(--panel); border:1px solid var(--hair); border-radius:16px; overflow:hidden;
  display:flex; flex-direction:column; transition:.22s; text-decoration:none}
.item:hover{border-color:var(--lime); transform:translateY(-3px)}
.item .thumb{position:relative; aspect-ratio:16/9; background:var(--plate); overflow:hidden}
.item .thumb.v{aspect-ratio:9/16}
.item .thumb img,.item .thumb video{width:100%; height:100%; object-fit:cover; display:block}
.item .tag{position:absolute; top:10px; left:10px; z-index:2; font-family:var(--mono); font-size:10.5px;
  letter-spacing:.1em; text-transform:uppercase; padding:5px 10px; border-radius:999px;
  background:rgba(10,10,11,.78); color:var(--lime); border:1px solid rgba(205,255,46,.3)}
.item .body{padding:16px 18px; display:flex; flex-direction:column; gap:7px; flex:1}
.item h4{margin:0; font-family:var(--grot); font-size:17px; line-height:1.25}
.item .role{font-family:var(--mono); font-size:11.5px; color:var(--lime); letter-spacing:.04em}
.item p{margin:0; font-size:14px; color:var(--mut); line-height:1.5}
.item .res{margin-top:auto; padding-top:10px; font-size:13px; color:var(--ink); font-weight:600}

/* слот под наполнение */
.slot{border:1px dashed rgba(205,255,46,.34); border-radius:16px; padding:24px;
  background:rgba(205,255,46,.03); color:var(--mut); font-size:14.5px}
.slot b{display:block; font-family:var(--mono); font-size:11px; letter-spacing:.15em;
  text-transform:uppercase; color:var(--lime); margin-bottom:8px}
.slot p:last-child{margin-bottom:0}

/* FAQ */
.faq{border-top:1px solid var(--hair)}
.faq details{border-bottom:1px solid var(--hair)}
.faq summary{list-style:none; cursor:pointer; padding:18px 40px 18px 0; position:relative;
  font-family:var(--grot); font-size:17px; font-weight:600}
.faq summary::-webkit-details-marker{display:none}
.faq summary:after{content:"+"; position:absolute; right:8px; top:16px; color:var(--lime); font-size:20px}
.faq details[open] summary:after{content:"\2212"}
.faq .a{padding:0 40px 20px 0; color:var(--mut); font-size:15px; max-width:80ch}

/* контакты */
.contacts{display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:14px; margin-top:8px}
.ct{display:flex; align-items:center; gap:14px; background:var(--panel); border:1px solid var(--hair);
  border-radius:14px; padding:16px 18px; text-decoration:none; transition:.2s}
.ct:hover{border-color:var(--lime); transform:translateY(-2px)}
.ct .n{font-family:var(--mono); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--dim)}
.ct .v{font-family:var(--grot); font-weight:600; font-size:15px; margin-top:2px}

footer{padding:38px 0 56px; color:var(--dim); font-size:13.5px}
footer .wrap{display:flex; flex-wrap:wrap; gap:14px; align-items:center; justify-content:space-between}

/* появление */
.reveal{opacity:0; transform:translateY(16px); transition:opacity .6s ease,transform .6s ease}
.reveal.in{opacity:1; transform:none}
@media(prefers-reduced-motion:reduce){
  .reveal{opacity:1; transform:none; transition:none}
  html{scroll-behavior:auto}
}

/* ===== херо: фон как на мастер-CV, только имя ===== */
.hero.bare{min-height:calc(100svh - 65px); display:flex; flex-direction:column; align-items:stretch; padding:22px 0 18px; border-bottom:none}
.hero-img{position:absolute; inset:0; z-index:0;
  background:
    linear-gradient(180deg,rgba(10,10,11,.42) 0%,rgba(10,10,11,.26) 28%,rgba(10,10,11,.72) 66%,rgba(10,10,11,.97) 100%),
    radial-gradient(130% 95% at 50% 100%,rgba(10,10,11,.72),transparent 62%),
    url(hero.jpg) center/cover no-repeat}
.hero.bare>*{min-width:0}
.hero.bare .wrap{position:relative; z-index:2; text-align:center; flex:0 0 auto; margin-top:0}
.hero.bare h1{font-size:clamp(46px,10vw,120px); letter-spacing:-.03em; line-height:1}

/* таблетка с разделами, как на united */
.pillnav{display:inline-flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:1px; margin:22px auto 0; padding:5px 6px; border-radius:999px; border:1px solid var(--hair); background:rgba(10,10,11,.72); box-shadow:0 10px 30px rgba(0,0,0,.45); backdrop-filter:blur(10px)}
.pillnav a{font-family:var(--mono); font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--mut); text-decoration:none; padding:5px 11px; border-radius:999px; transition:.2s; white-space:nowrap}
.pillnav a:hover{color:var(--lime); background:rgba(205,255,46,.08)}
.pillnav i{width:3px; height:3px; border-radius:50%; background:var(--dim); flex:none}
@media(max-width:640px){ .pillnav a{font-size:9.5px; padding:4px 8px; letter-spacing:.08em} }

/* бегущая лента видео, 1 в 1 с united */
.reel-section{padding:0 24px; margin:auto 0 0; position:relative; z-index:2; width:100%; min-width:0; flex:0 0 auto}
.reel-shell{position:relative; margin:0 auto; max-width:1400px; overflow:hidden;
  border:1px solid rgba(255,255,255,.1); border-radius:16px; background:#0c0c0e; padding:16px 0}
.reel-shell::before,.reel-shell::after{content:""; position:absolute; top:0; bottom:0; width:12%; z-index:3; pointer-events:none}
.reel-shell::before{left:0; background:linear-gradient(90deg,#0c0c0e,transparent)}
.reel-shell::after{right:0; background:linear-gradient(-90deg,#0c0c0e,transparent)}
.reel{display:flex; gap:14px; width:max-content; animation:reel-run 86s linear infinite}
.reel-shell:hover .reel{animation-play-state:paused}
@keyframes reel-run{to{transform:translateX(-50%)}}
.reel-frame{position:relative; flex:none; width:200px; aspect-ratio:9/16; border-radius:12px;
  overflow:hidden; border:1px solid rgba(255,255,255,.1); background:#101013}
.reel-frame.wide{width:340px; aspect-ratio:16/9}
.reel-frame video{width:100%; height:100%; object-fit:cover; display:block}
.reel-frame::before,.reel-frame::after{content:""; position:absolute; left:0; right:0; height:6px; z-index:2; pointer-events:none;
  background:repeating-linear-gradient(90deg,rgba(6,6,7,.92) 0 4px,transparent 4px 10px)}
.reel-frame::before{top:4px}
.reel-frame::after{bottom:4px}
@media(max-width:640px){.reel-frame{width:140px}.reel-frame.wide{width:230px}}
@media(prefers-reduced-motion:reduce){.reel{animation:none}}

/* ===== разделы свёрнуты в полосы, механика united, стилистика CV ===== */
.section.folded{padding:9px 0; border-bottom:none}
.secbox{border:1px solid var(--hair); border-radius:18px; background:var(--panel); overflow:hidden;
  transition:border-color .25s, transform .25s, box-shadow .25s}
.secbox:hover{border-color:rgba(205,255,46,.34); transform:translateY(-1px)}
.secbox[open]{background:transparent; border-color:rgba(205,255,46,.26)}
.secbox>summary{list-style:none; cursor:pointer; display:flex; align-items:center; gap:16px;
  padding:22px 26px; user-select:none}
.secbox>summary::-webkit-details-marker{display:none}
.secbox .sec-no{font-family:var(--grot); font-weight:700; font-size:clamp(34px,5vw,58px);
  line-height:.86; color:rgba(205,255,46,.30); letter-spacing:-.03em}
.secbox[open] .sec-no{color:rgba(205,255,46,.5)}
.secbox .sec-dot{color:var(--dim); font-size:20px; line-height:1}
.secbox .sec-name{font-family:var(--mono); font-size:clamp(13px,1.7vw,17px); letter-spacing:.26em;
  text-transform:uppercase; color:var(--lime)}
.secbox .sec-plus{margin-left:auto; flex:none; width:36px; height:36px; border-radius:50%;
  border:1px solid rgba(205,255,46,.4); color:var(--lime); display:grid; place-items:center;
  font-size:19px; line-height:1; transition:transform .25s}
.secbox[open] .sec-plus{transform:rotate(45deg)}
.secbody{padding:6px 26px 40px}
@media(max-width:640px){
  .secbox>summary{padding:16px 16px; gap:11px}
  .secbox .sec-name{letter-spacing:.16em}
  .secbody{padding:4px 16px 30px}
}

/* затемнение под именем: фон херо яркий в центре, текст обязан читаться */
.hero.bare>*{min-width:0}
.hero.bare .wrap{position:relative; z-index:2; text-align:center; flex:0 0 auto; margin-top:0}
.hero.bare .wrap::before{content:""; position:absolute; left:50%; top:44%; transform:translate(-50%,-50%); width:min(1100px,120%); height:230%; z-index:-1; pointer-events:none; background:radial-gradient(52% 56% at 50% 50%,rgba(10,10,11,.88),rgba(10,10,11,.55) 58%,transparent 80%)}
.hero.bare h1{text-shadow:0 4px 34px rgba(0,0,0,.85), 0 1px 3px rgba(0,0,0,.7)}
.pillnav{background:rgba(10,10,11,.72); box-shadow:0 10px 30px rgba(0,0,0,.45)}
