/* PROJET CORP. — projetcorp.com
   Branding is typography only: Montserrat, no mark, no ornament.
   The design commits to one look on purpose — it is a brand statement, not a theme. */

:root{
  --ink:#0E1116;
  --paper:#FAFAF8;
  --blue:#1F3A5F;
  --muted:#6B7684;
  --line:#E2E2DE;
  --sans:"Montserrat","Segoe UI",system-ui,-apple-system,sans-serif;
  /* curvas propias — las integradas de CSS son demasiado suaves */
  --ease-out:cubic-bezier(0.23,1,0.32,1);
  --wrap:1080px;
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:17px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
}

.wrap{width:100%;max-width:var(--wrap);margin:0 auto;padding:0 32px}

.skip{position:absolute;left:-9999px}
.skip:focus{left:12px;top:12px;background:var(--blue);color:#fff;padding:10px 16px;z-index:99}
:focus-visible{outline:2px solid var(--blue);outline-offset:3px}

/* ---------- hero ---------- */

.hero{
  background:var(--ink);color:var(--paper);
  min-height:88vh;display:flex;align-items:center;
  padding:96px 0 88px;
}

.mark{
  font-size:13px;font-weight:600;letter-spacing:.42em;
  color:var(--paper);opacity:.55;margin:0 0 clamp(28px,6vh,64px);
}

h1{
  font-size:clamp(38px,8.4vw,104px);
  font-weight:800;line-height:1.02;letter-spacing:-.035em;
  margin:0 0 clamp(24px,4vh,40px);
}
h1 em{font-style:normal;color:#8FB4DE}

.lede{
  font-size:clamp(16px,2vw,20px);font-weight:400;line-height:1.55;
  color:#A8B2BE;max-width:38ch;margin:0 0 clamp(32px,5vh,52px);
}

.cta{
  display:inline-block;
  font-size:15px;font-weight:600;letter-spacing:.01em;
  color:var(--ink);background:var(--paper);
  padding:16px 30px;border-radius:2px;text-decoration:none;
  transition:transform 160ms var(--ease-out);
}
.cta .arrow{display:inline-block;transition:transform 160ms var(--ease-out)}
@media (hover:hover) and (pointer:fine){
  .cta:hover .arrow{transform:translateX(4px)}
}
.cta:active{transform:scale(.97)}

/* ---------- work ---------- */

.work{padding:clamp(72px,12vh,128px) 0}
.work ol{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(2,1fr);
  gap:clamp(40px,6vw,72px) clamp(40px,7vw,88px);
}
.work .n{
  display:block;font-size:12px;font-weight:600;letter-spacing:.22em;
  color:var(--blue);margin-bottom:14px;
}
.work h2{
  font-size:clamp(21px,2.4vw,27px);font-weight:800;letter-spacing:-.02em;
  line-height:1.15;margin:0 0 10px;
}
.work p{margin:0;color:var(--muted);font-size:16px;max-width:34ch}

/* ---------- creed ---------- */

.creed{background:var(--blue);color:#fff;padding:clamp(64px,10vh,104px) 0}
.creed p{
  margin:0;font-size:clamp(22px,3.6vw,42px);font-weight:800;
  line-height:1.2;letter-spacing:-.025em;max-width:20ch;
}
.creed em{font-style:normal;color:#9DC2EA}

/* ---------- contact ---------- */

.contact{padding:clamp(72px,12vh,128px) 0}
.contact h2{
  font-size:clamp(28px,4.4vw,52px);font-weight:800;
  letter-spacing:-.03em;line-height:1.08;margin:0 0 14px;
}
.contact > .wrap > p{color:var(--muted);margin:0 0 40px;max-width:42ch;font-size:17px}

form{max-width:620px}
.row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.field{position:relative;margin:0 0 14px}
.field::after{
  content:'';position:absolute;left:0;right:0;bottom:0;height:1.5px;
  background:var(--blue);transform:scaleX(0);transform-origin:left;
  transition:transform 200ms var(--ease-out);
}
.field:focus-within::after{transform:scaleX(1)}
input[type=text],textarea{
  width:100%;display:block;font-family:var(--sans);font-size:16px;color:var(--ink);
  background:transparent;border:0;border-bottom:1.5px solid var(--line);
  padding:14px 2px;margin:0;
}
input::placeholder,textarea::placeholder{color:#A3ABB5}
input:focus,textarea:focus{outline:none}
textarea{resize:vertical}
button{
  font-family:var(--sans);font-size:15px;font-weight:600;
  background:var(--ink);color:var(--paper);
  border:0;border-radius:2px;padding:16px 40px;margin-top:12px;cursor:pointer;
  transition:transform 160ms var(--ease-out),opacity 160ms ease;
}
@media (hover:hover) and (pointer:fine){ button:hover{opacity:.85} }
button:active{transform:scale(.97)}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* ---------- footer ---------- */

footer{border-top:1px solid var(--line);padding:44px 0 40px}
.foot-mark{font-size:13px;font-weight:600;letter-spacing:.3em;margin:0 0 6px}
.foot-meta{font-size:13px;color:var(--muted);margin:0 0 28px}
.disclaimer{border-top:1px solid var(--line);padding-top:20px}
.disclaimer p{font-size:11px;line-height:1.5;color:#8C949E;margin:0 0 10px}
.disclaimer p:last-child{margin:0}
.copyright{font-size:11px;color:#8C949E;margin:20px 0 0}

/* ---------- responsive ---------- */

@media (max-width:760px){
  .wrap{padding:0 22px}
  .hero{min-height:0;padding:72px 0 64px}
  .work ol{grid-template-columns:1fr;gap:38px}
  .row{grid-template-columns:1fr;gap:0}
  .creed p,.work p,.lede{max-width:none}
}

/* ---------- movimiento ----------
   Marco de decision de Emil Kowalski: solo transform y opacity, curvas propias,
   escalonado de 70 ms, y el movimiento se retira con prefers-reduced-motion
   pero la opacidad se queda (reducido es MENOS, no CERO). */

@keyframes rise{to{opacity:1;transform:none}}

.hero .mark,.hero h1,.hero .lede,.hero .cta{
  opacity:0;transform:translateY(10px);
  animation:rise 500ms var(--ease-out) forwards;
}
.hero .mark{animation-delay:0ms}
.hero h1   {animation-delay:70ms}
.hero .lede{animation-delay:140ms}
.hero .cta {animation-delay:210ms}

/* Revelado al entrar en pantalla. Bajo `.js` a proposito: si el script falla,
   nunca se esconde contenido. */
[data-reveal]{transition:opacity 450ms var(--ease-out),transform 450ms var(--ease-out)}
.js [data-reveal]{opacity:0;transform:translateY(12px)}
.js [data-reveal][data-in]{opacity:1;transform:none}
.js .work li:nth-child(2){transition-delay:70ms}
.js .work li:nth-child(3){transition-delay:140ms}
.js .work li:nth-child(4){transition-delay:210ms}

@media (prefers-reduced-motion:reduce){
  .hero .mark,.hero h1,.hero .lede,.hero .cta{
    transform:none;animation-duration:250ms;animation-delay:0ms;
  }
  .js [data-reveal]{transform:none}
  [data-reveal]{transition:opacity 250ms ease}
  .js .work li:nth-child(n){transition-delay:0ms}
  .cta .arrow,.cta:active,button:active{transition:none;transform:none}
  .field::after{transition:none}
}
