/* ===== Jorge Martes — Portfolio v2 (studio-grade) ===== */
:root{
  --bg:#0a0a0b;
  --bg-soft:#101012;
  --ink:#f3f0e9;          /* warm white */
  --muted:#8d8a82;
  --faint:#56544e;
  --line:rgba(243,240,233,.12);
  --accent:#c6f23e;       /* electric lime */
  --accent-2:#5b6bff;     /* cobalt */
  --maxw:1280px;
  --ease:cubic-bezier(.19,1,.22,1);
  --serif:'Fraunces',Georgia,serif;
  --sans:'Space Grotesk',system-ui,sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
@media(hover:hover){html{cursor:none}}
body{
  background:var(--bg);color:var(--ink);font-family:var(--sans);
  line-height:1.5;overflow-x:hidden;-webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
::selection{background:var(--accent);color:#0a0a0b}
img{max-width:100%;display:block}
.serif-it{font-family:var(--serif);font-style:italic;font-weight:400}
.accent{color:var(--accent)}
.muted{color:var(--muted)}

/* ===== Backgrounds ===== */
#scene{position:fixed;inset:0;z-index:0;pointer-events:none}
body::before{content:"";position:fixed;inset:0;z-index:-1;background:
  radial-gradient(70% 55% at 80% -5%, rgba(91,107,255,.14), transparent 60%),
  radial-gradient(50% 45% at 5% 25%, rgba(198,242,62,.07), transparent 60%);}
.grain{position:fixed;inset:0;z-index:1;pointer-events:none;opacity:.05;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");}
main,.nav,.footer,.marquee{position:relative;z-index:2}

/* ===== Interactive intro ===== */
.intro{position:fixed;inset:0;z-index:1000;background:radial-gradient(80% 80% at 50% 45%,#101013 0%,#070708 70%);
  display:flex;flex-direction:column;justify-content:space-between;padding:clamp(24px,5vw,52px);
  transition:opacity .9s var(--ease),visibility .9s;overflow:hidden}
.intro.done{opacity:0;visibility:hidden}
html.intro-active,html.intro-active body{overflow:hidden}
/* lift the 3D canvas above the intro backdrop while intro is open */
html.intro-active #scene{z-index:1001}
.intro__tag{font-size:.78rem;letter-spacing:.22em;text-transform:uppercase;color:var(--muted);position:relative;z-index:1002}
.intro__bottom{position:relative;z-index:1002;max-width:640px}
.intro__name{font-family:var(--serif);font-weight:340;font-size:clamp(2.6rem,9vw,6.5rem);line-height:.9;letter-spacing:-.02em;display:flex;gap:.3em;flex-wrap:wrap}
.intro__name span{display:inline-block}
.intro__name [data-il]{overflow:hidden}
.intro__role{color:var(--accent);font-size:clamp(.95rem,2vw,1.2rem);margin:14px 0 26px;letter-spacing:.04em}
.intro__hint{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:.9rem;margin-bottom:22px}
.intro__hint i{width:8px;height:8px;border-radius:50%;background:var(--accent);animation:pulse 2s infinite}
.intro__hint b{color:var(--ink);font-weight:500}
.intro__enter{display:inline-flex;align-items:center;gap:12px;background:var(--accent);color:#0a0a0b;border:0;
  border-radius:99px;padding:16px 30px;font-family:var(--sans);font-size:1rem;font-weight:600;cursor:pointer;
  transition:transform .3s var(--ease),box-shadow .3s}
.intro__enter:hover{box-shadow:0 16px 50px -12px var(--accent)}
.intro__enter svg{transition:transform .3s var(--ease)}
.intro__enter:hover svg{transform:translateX(5px)}
.intro__count{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1002;pointer-events:none;
  font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:var(--faint);opacity:.7;
  margin-top:130px;transition:opacity .4s}
/* CSS fallback shapes (visible even without WebGL) */
.intro__shapes{position:absolute;inset:0;z-index:1000;pointer-events:none}
.intro__shapes span{position:absolute;border:1px solid var(--line);border-radius:50%;left:50%;top:45%;transform:translate(-50%,-50%)}
.intro__shapes span:nth-child(1){width:240px;height:240px;animation:spin 22s linear infinite}
.intro__shapes span:nth-child(2){width:380px;height:380px;border-style:dashed;animation:spin 34s linear infinite reverse}
.intro__shapes span:nth-child(3){width:520px;height:520px;opacity:.5;animation:spin 46s linear infinite}
html:not(.no-webgl) .intro__shapes{opacity:.25}
@keyframes spin{to{transform:translate(-50%,-50%) rotate(360deg)}}
.intro__enter.charge{position:relative;overflow:hidden}

/* ===== Custom cursor ===== */
.cursor{position:fixed;top:0;left:0;width:38px;height:38px;border:1px solid var(--ink);border-radius:50%;
  z-index:999;pointer-events:none;transform:translate(-50%,-50%);transition:width .3s var(--ease),height .3s var(--ease),background .3s,border-color .3s;mix-blend-mode:difference}
.cursor-dot{position:fixed;top:0;left:0;width:5px;height:5px;background:var(--accent);border-radius:50%;
  z-index:999;pointer-events:none;transform:translate(-50%,-50%)}
.cursor.hover{width:64px;height:64px;background:var(--ink);border-color:transparent}
.cursor.text{width:84px;height:84px;background:var(--accent);border-color:transparent}
.cursor.text::after{content:attr(data-label);color:#0a0a0b;font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}
@media(hover:none){.cursor,.cursor-dot{display:none}html{cursor:auto}}

/* ===== Scroll progress ===== */
.scroll-progress{position:fixed;top:0;left:0;height:2px;width:0;z-index:80;background:var(--accent)}

/* ===== Nav ===== */
.nav{position:fixed;top:0;left:0;right:0;z-index:60;display:flex;align-items:center;justify-content:space-between;
  padding:26px clamp(20px,5vw,56px);mix-blend-mode:difference;transition:padding .4s var(--ease)}
.nav.shrink{padding:16px clamp(20px,5vw,56px)}
.nav__logo{font-family:var(--serif);font-size:1.3rem;font-weight:500}
.nav__logo em{color:var(--accent);font-style:normal}
.nav__links{display:flex;align-items:center;gap:34px}
.nav__links a{font-size:.9rem;font-weight:500;color:var(--ink);display:flex;align-items:center;gap:6px;transition:opacity .3s}
.nav__links a span{font-size:.66rem;color:var(--accent);font-variant-numeric:tabular-nums}
.nav__links a:hover{opacity:.55}
.nav__cta{border:1px solid var(--ink);border-radius:99px;padding:9px 20px}
.nav__cta span{display:none}
.nav__burger{display:none;flex-direction:column;gap:6px;background:none;border:0}
.nav__burger span{width:26px;height:2px;background:var(--ink);transition:.3s}

/* ===== Reveal ===== */
.reveal-up{opacity:0;transform:translateY(40px);transition:opacity 1s var(--ease),transform 1s var(--ease)}
.reveal-up.in{opacity:1;transform:none}

/* ===== Hero ===== */
.hero{min-height:100svh;display:flex;flex-direction:column;justify-content:center;
  max-width:var(--maxw);margin:0 auto;padding:140px clamp(20px,5vw,56px) 60px}
.hero__meta{display:flex;justify-content:space-between;font-size:.82rem;color:var(--muted);
  text-transform:uppercase;letter-spacing:.12em;margin-bottom:38px;border-bottom:1px solid var(--line);padding-bottom:18px}
.hero__meta .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent);margin-right:7px;animation:pulse 2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(198,242,62,.5)}70%{box-shadow:0 0 0 8px rgba(198,242,62,0)}100%{box-shadow:0 0 0 0 transparent}}
.hero__title{font-family:var(--serif);font-weight:340;font-size:clamp(2.9rem,11vw,9.5rem);line-height:.95;letter-spacing:-.02em;margin-bottom:50px}
.hero__title .row{display:block;overflow:hidden}
.hero__title .w{display:inline-block;transform:translateY(110%);will-change:transform}
.hero__title .w.accent{color:var(--accent)}
.hero__foot{display:grid;grid-template-columns:1fr auto;gap:40px;align-items:end}
.hero__intro{max-width:480px;color:var(--muted);font-size:1.02rem;line-height:1.65}
.hero__intro strong{color:var(--ink);font-weight:500}
.hero__cta{display:inline-flex;align-items:center;gap:14px;border:1px solid var(--ink);border-radius:99px;
  padding:16px 26px;font-weight:500;white-space:nowrap;transition:background .35s var(--ease),color .35s var(--ease)}
.hero__cta:hover{background:var(--accent);border-color:var(--accent);color:#0a0a0b}

/* ===== Marquee ===== */
.marquee{overflow:hidden;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:22px 0}
.marquee__track{display:flex;gap:40px;align-items:center;width:max-content;animation:marq 38s linear infinite;font-family:var(--serif);font-size:clamp(1.4rem,3vw,2.4rem)}
.marquee__track i{color:var(--accent);font-style:normal;font-size:.8em}
.marquee:hover .marquee__track{animation-play-state:paused}
@keyframes marq{to{transform:translateX(-50%)}}

/* ===== Sections ===== */
.section{max-width:var(--maxw);margin:0 auto;padding:clamp(80px,12vw,160px) clamp(20px,5vw,56px)}
.section__head{margin-bottom:72px}
.kicker{display:inline-block;font-size:.8rem;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);margin-bottom:26px}
.section__title{font-family:var(--serif);font-weight:340;font-size:clamp(2.2rem,6vw,4.6rem);line-height:1;letter-spacing:-.02em}

/* ===== Work / cases ===== */
.case{display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(30px,5vw,70px);align-items:center;margin-bottom:clamp(70px,9vw,130px)}
.case--rev .case__media{order:2}
.case__no{font-family:var(--serif);font-size:1.1rem;color:var(--accent);margin-bottom:16px}
.case__info h3{font-family:var(--serif);font-weight:400;font-size:clamp(1.6rem,3.5vw,2.6rem);line-height:1.05;margin-bottom:18px;letter-spacing:-.01em}
.case__info p{color:var(--muted);font-size:1.02rem;line-height:1.65;margin-bottom:24px;max-width:46ch}
.case__info p strong{color:var(--ink)}
.case__stack{list-style:none;display:flex;flex-wrap:wrap;gap:9px;margin-bottom:22px}
.case__stack li{font-size:.78rem;border:1px solid var(--line);border-radius:99px;padding:6px 14px;color:var(--muted)}
.case__metrics{display:flex;gap:30px;flex-wrap:wrap}
.case__metrics span{font-size:.82rem;color:var(--faint)}
.case__metrics b{display:block;font-family:var(--serif);font-size:1.5rem;color:var(--ink)}

/* Browser frame */
.browser{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--bg-soft);
  box-shadow:0 50px 90px -50px rgba(0,0,0,.9);transition:transform .6s var(--ease)}
.browser:hover{transform:translateY(-8px)}
.browser__bar{display:flex;align-items:center;gap:7px;padding:12px 16px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.02)}
.browser__bar i{width:11px;height:11px;border-radius:50%;background:var(--faint)}
.browser__bar b{margin-left:14px;font-size:.78rem;color:var(--muted);font-weight:400}
.browser img{width:100%;height:auto;display:block}

/* Card grid (projects without screenshots) */
.case-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.card{border:1px solid var(--line);border-radius:18px;padding:26px;background:linear-gradient(180deg,rgba(255,255,255,.025),transparent);transition:transform .5s var(--ease),border-color .5s}
.card:hover{transform:translateY(-6px);border-color:rgba(198,242,62,.4)}
.card h3{font-family:var(--serif);font-weight:400;font-size:1.5rem;margin:18px 0 12px}
.card p{color:var(--muted);font-size:.96rem;line-height:1.6;margin-bottom:20px}
.card p strong{color:var(--accent)}
.card__art{height:180px;border-radius:12px;overflow:hidden;position:relative;display:flex;align-items:flex-end;padding:16px;border:1px solid var(--line)}
.card__art code{font-size:.78rem;color:var(--ink);background:rgba(0,0,0,.45);padding:5px 10px;border-radius:6px;position:relative;z-index:2}
.card__art--ai{background:radial-gradient(circle at 30% 30%,rgba(91,107,255,.4),#0c0c14)}
.card__art--infra{background:radial-gradient(circle at 70% 40%,rgba(198,242,62,.18),#0c0c0c)}
.orb{position:absolute;width:140px;height:140px;border-radius:50%;background:radial-gradient(circle,rgba(91,107,255,.8),transparent 70%);top:-30px;left:-20px;filter:blur(8px);animation:float 6s ease-in-out infinite}
.orb2{background:radial-gradient(circle,rgba(198,242,62,.6),transparent 70%);top:40px;right:-30px;left:auto;animation-delay:-3s}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-18px)}}
.grid3d{position:absolute;inset:0;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:26px 26px;transform:perspective(300px) rotateX(55deg) scale(1.6);transform-origin:bottom;opacity:.6;animation:scrollGrid 8s linear infinite}
@keyframes scrollGrid{to{background-position:0 26px}}

/* ===== About ===== */
.about__grid{display:grid;grid-template-columns:1.3fr 1fr;gap:clamp(30px,5vw,80px);margin-bottom:80px}
.about__lead{font-family:var(--serif);font-weight:340;font-size:clamp(1.5rem,3vw,2.4rem);line-height:1.25;letter-spacing:-.01em}
.about__body p{color:var(--muted);margin-bottom:18px;line-height:1.7}
.about__body strong{color:var(--ink);font-weight:500}
.btn-line{display:inline-flex;gap:10px;align-items:center;font-weight:500;border-bottom:1px solid var(--ink);padding-bottom:4px;margin-top:10px;transition:gap .3s}
.btn-line em{font-style:normal;color:var(--accent)}
.btn-line:hover{gap:18px}
.caps{display:grid;grid-template-columns:repeat(4,1fr);gap:30px;border-top:1px solid var(--line);padding-top:46px}
.caps__col h4{font-size:.8rem;text-transform:uppercase;letter-spacing:.1em;color:var(--accent);margin-bottom:12px}
.caps__col p{color:var(--muted);font-size:.95rem;line-height:1.7}

/* ===== Path ===== */
.rows{border-top:1px solid var(--line)}
.row-exp{display:grid;grid-template-columns:140px 1.2fr 1.3fr;gap:30px;align-items:start;padding:34px 14px;border-bottom:1px solid var(--line);transition:background .4s,padding .4s var(--ease)}
.row-exp:hover{background:rgba(255,255,255,.02);padding-left:28px}
.row-exp__yr{font-family:var(--serif);color:var(--accent);font-size:1.1rem}
.row-exp__main h3{font-family:var(--serif);font-weight:400;font-size:clamp(1.3rem,2.6vw,1.9rem)}
.row-exp__main p{color:var(--muted);font-size:.9rem;margin-top:4px}
.row-exp__desc{color:var(--muted);font-size:.96rem;line-height:1.6}

/* ===== AI Lab chat ===== */
.chat{max-width:720px;border:1px solid var(--line);border-radius:20px;overflow:hidden;background:var(--bg-soft)}
.chat__header{padding:18px 22px;border-bottom:1px solid var(--line);font-weight:500;display:flex;align-items:center;gap:10px}
.chat__header small{color:var(--faint);font-weight:400}
.chat__live{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px var(--accent)}
.chat__log{padding:24px;display:flex;flex-direction:column;gap:14px;min-height:220px;max-height:360px;overflow-y:auto}
.msg{max-width:82%;padding:13px 17px;border-radius:16px;font-size:.96rem;line-height:1.5;animation:fadeUp .4s var(--ease)}
.msg--bot{background:rgba(255,255,255,.04);border:1px solid var(--line);border-bottom-left-radius:5px;align-self:flex-start}
.msg--user{background:var(--accent);color:#0a0a0b;font-weight:500;border-bottom-right-radius:5px;align-self:flex-end}
.msg--typing{display:flex;gap:5px}
.msg--typing i{width:7px;height:7px;border-radius:50%;background:var(--muted);animation:blink 1.2s infinite}
.msg--typing i:nth-child(2){animation-delay:.2s}.msg--typing i:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,60%,100%{opacity:.3}30%{opacity:1}}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.chat__suggest{display:flex;gap:9px;flex-wrap:wrap;padding:0 22px 16px}
.chat__suggest button{font-family:inherit;font-size:.82rem;padding:8px 14px;border-radius:99px;background:none;border:1px solid var(--line);color:var(--muted);transition:.25s}
.chat__suggest button:hover{border-color:var(--accent);color:var(--ink)}
.chat__input{display:flex;gap:10px;padding:16px 22px;border-top:1px solid var(--line)}
.chat__input input{flex:1;background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:13px 16px;color:var(--ink);font-family:inherit;font-size:.95rem;outline:none;transition:.25s}
.chat__input input:focus{border-color:var(--accent)}
.chat__input button{width:48px;border:0;border-radius:12px;background:var(--accent);color:#0a0a0b;font-size:1.3rem;font-weight:600;transition:.25s}

/* ===== Contact ===== */
.contact{text-align:center}
.contact__big{margin:10px 0 60px}
.contact__mail{font-family:var(--serif);font-weight:340;font-size:clamp(2.6rem,11vw,8rem);line-height:.95;letter-spacing:-.02em;display:inline-block;transition:opacity .4s}
.contact__mail:hover{opacity:.6}
.contact__row{display:flex;justify-content:center;flex-wrap:wrap;gap:14px;margin-bottom:40px}
.contact__row a{border:1px solid var(--line);border-radius:14px;padding:18px 26px;text-align:left;min-width:200px;transition:.35s var(--ease)}
.contact__row a:hover{border-color:var(--accent);transform:translateY(-4px)}
.contact__row b{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--accent);margin-bottom:6px;font-weight:500}
.contact__note{color:var(--muted)}

/* ===== Footer ===== */
.footer{max-width:var(--maxw);margin:0 auto;padding:40px clamp(20px,5vw,56px);border-top:1px solid var(--line);
  display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;color:var(--faint);font-size:.85rem}
.footer a{color:var(--muted)}

/* ===== Responsive ===== */
@media(max-width:900px){
  .hero__foot{grid-template-columns:1fr}
  .case,.case--rev .case__media{grid-template-columns:1fr;order:0}
  .case-grid,.about__grid,.caps,.contact__row{grid-template-columns:1fr}
  .caps{gap:24px}
  .row-exp{grid-template-columns:80px 1fr;gap:10px 18px}
  .row-exp__desc{grid-column:1/-1}
  .nav__links{position:fixed;inset:0 0 0 auto;width:min(80vw,330px);flex-direction:column;justify-content:center;gap:30px;
    background:var(--bg);transform:translateX(100%);transition:.5s var(--ease);mix-blend-mode:normal;border-left:1px solid var(--line);padding:40px}
  .nav__links.open{transform:none}
  .nav__burger{display:flex;z-index:65}
  .nav.menu-open{mix-blend-mode:normal}
  .nav__burger.open span:nth-child(1){transform:translateY(4px) rotate(45deg)}
  .nav__burger.open span:nth-child(2){transform:translateY(-4px) rotate(-45deg)}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.reveal-up,.hero__title .w{opacity:1!important;transform:none!important}}
