@font-face{font-family:Ubuntu;src:url('assets/fonts/ubuntu-300.woff2') format('woff2');font-weight:300;font-display:swap}
@font-face{font-family:Ubuntu;src:url('assets/fonts/ubuntu-400.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:Ubuntu;src:url('assets/fonts/ubuntu-500.woff2') format('woff2');font-weight:500;font-display:swap}

:root{
  color-scheme:dark;
  --welcome-bg:#0a1217;
  --welcome-ink:#edf3f4;
  --welcome-muted:#9cabb3;
  --welcome-pale:#65c8d0;
  --welcome-turquoise:#00a99d;
  --welcome-blue:#0071bc;
  --welcome-line:#a9c4ce24;
  font-family:Ubuntu,ui-sans-serif,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  background:var(--welcome-bg);
  color:var(--welcome-ink);
  -webkit-font-smoothing:antialiased;
}
*{box-sizing:border-box}
body{margin:0}
button,a{-webkit-tap-highlight-color:transparent}
button{font:inherit}
[hidden]{display:none!important}
.welcome{min-width:320px;min-height:100svh;display:grid;grid-template-rows:96px 1fr;background:radial-gradient(ellipse at 50% 38%,#00a99d06,transparent 52%),var(--welcome-bg)}
.welcome-header{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-inline:48px}
.welcome-brand{display:flex;align-items:center;gap:22px}
.welcome-brand img{display:block;width:108px;height:auto}
.welcome-main{display:flex;flex-direction:column;align-items:center;align-self:center;text-align:center;padding:0 24px 40px}
.perception{position:relative;width:min(400px,100%);height:320px;flex:none;color:var(--welcome-pale)}
.perception-halo{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 49%,#00a99d0d,transparent 63%);pointer-events:none}
.perception canvas,.perception-fallback{position:absolute;inset:0;display:block;width:100%;height:100%}
.perception.is-rendered .perception-fallback{visibility:hidden}
.welcome-main .welcome-title{max-width:960px;margin:0;font-size:clamp(36px,4.1vw,60px);font-weight:300;line-height:1.15;letter-spacing:-.045em}
.welcome-main .welcome-title span{display:block;color:var(--welcome-pale)}
.welcome-start{margin-top:32px;display:inline-flex;align-items:center;justify-content:center;gap:32px;min-height:48px;padding:0 25px;border:1px solid #d9e8eb;border-radius:9px;background:#e2edef;color:#15262d;text-decoration:none;font-size:13px;font-weight:500;transition:background .18s,border-color .18s,transform .18s}
.welcome-start svg{width:18px;height:18px;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;transition:transform .18s}
.welcome-start:hover{background:var(--welcome-pale);border-color:var(--welcome-pale);transform:translateY(-2px)}
.welcome-start:hover svg{transform:translateX(3px)}
.welcome-start:active{transform:translateY(0)}
.welcome-start:focus-visible{outline:2px solid var(--welcome-pale);outline-offset:6px}

@media(min-width:721px) and (max-height:800px){
  .welcome{grid-template-rows:76px 1fr}
  .perception{height:250px;width:330px}
  .welcome-main{padding-bottom:20px}
}
@media(max-width:720px){
  .welcome{grid-template-rows:76px 1fr}
  .welcome-header{padding-inline:24px;gap:16px}
  .welcome-brand{gap:16px}
  .welcome-brand img{width:92px}
  .welcome-main{padding:0 20px 32px}
  .perception{height:270px;width:330px;max-width:100%}
  .welcome-main .welcome-title{max-width:640px;font-size:clamp(32px,5.5vw,40px)}
  .welcome-start{min-height:48px;min-width:156px}
}
@media(max-width:720px) and (max-height:740px){
  .welcome{grid-template-rows:64px 1fr}
  .perception{height:210px;width:270px}
  .welcome-main{padding-bottom:24px}
}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important}}

/* Access stays quiet; light and movement follow the user's intent. */
.welcome-access{width:min(360px,100%);margin-top:32px;text-align:left;display:grid;grid-template-columns:minmax(0,1fr) 132px;column-gap:8px}
.welcome-access>label{grid-column:1/-1;display:block;margin:0 0 9px;color:var(--welcome-muted);font-size:11px;letter-spacing:.03em}
.access-field{grid-column:1;grid-row:2;min-width:0;position:relative;isolation:isolate;display:flex;align-items:center;min-height:52px;border:1px solid #536b75;border-radius:9px;background:#111e25;transition:border-color .35s,box-shadow .5s,background .4s}
.access-field::after{content:'';position:absolute;z-index:-1;inset:-1px;border-radius:inherit;pointer-events:none;background:radial-gradient(ellipse at 50% 100%,#65c8d016,transparent 70%);opacity:0;transform:scaleX(.6);transition:opacity .5s,transform .7s cubic-bezier(.16,1,.3,1)}
.access-field:focus-within{border-color:#65c8d0;background:#111e25;box-shadow:0 0 0 3px #65c8d00a,0 8px 30px #00a99d08}
.access-field:focus-within::after{opacity:1;transform:scaleX(1)}
.access-field input{width:100%;min-width:0;min-height:50px;padding:0 52px 0 16px;border:0;border-radius:inherit;outline:0;background:transparent;color:var(--welcome-ink);font:400 16px Ubuntu,ui-sans-serif,sans-serif;letter-spacing:.06em;caret-color:var(--welcome-pale)}
.access-field input:disabled{opacity:.65}
.access-field input:-webkit-autofill{-webkit-text-fill-color:var(--welcome-ink);box-shadow:0 0 0 100px var(--welcome-bg) inset}
.access-eye{position:absolute;right:2px;top:2px;display:grid;place-items:center;width:48px;height:48px;border:0;border-radius:7px;background:transparent;color:#c9d6db;cursor:pointer;transition:color .25s,background .25s}
.access-eye:hover{color:var(--welcome-pale);background:#65c8d008}
.access-eye:focus-visible{outline:2px solid var(--welcome-pale);outline-offset:-5px}
.access-eye svg{height:19px;width:19px;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
.eye-slash{opacity:0;transition:opacity .2s}
.access-eye[aria-pressed=true] .eye-slash{opacity:1}
.access-error{grid-column:1/-1;grid-row:3;min-height:18px;margin:8px 0 0;color:#efa6a1;font-size:11px;line-height:1.6}
.welcome-access .welcome-start{grid-column:2;grid-row:2;align-self:center;width:132px;min-width:0;margin:0;min-height:48px;padding:0 12px;gap:8px;justify-content:space-between;cursor:pointer;font-family:inherit;font-size:12px;letter-spacing:.01em;white-space:nowrap}
.welcome-access .welcome-start:disabled{cursor:wait;transform:none;opacity:.65}
.welcome-access[aria-busy=true] .access-field::after{opacity:1;transform:scaleX(1)}
.has-error .access-field{border-color:#efa6a199;animation:access-ripple .65s cubic-bezier(.22,.8,.2,1)}
.access-noscript{color:var(--welcome-muted);font-size:12px}
@keyframes access-ripple{0%{box-shadow:0 0 0 0 #efa6a11f}65%{box-shadow:0 0 0 8px #efa6a100}100%{box-shadow:0 0 0 0 #efa6a100}}
@keyframes welcome-arrive{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:translateY(0);}}
.welcome .perception{animation:welcome-arrive .9s cubic-bezier(.16,1,.3,1) both}
.welcome-title{animation:welcome-arrive .75s .12s cubic-bezier(.16,1,.3,1) both}
.welcome-access{animation:welcome-arrive .65s .24s cubic-bezier(.16,1,.3,1) both}
@media(max-width:720px){.welcome-access{margin-top:28px}}
@media(max-height:740px){.welcome .perception{height:210px;width:270px}}
@media(prefers-reduced-motion:reduce){
  .welcome .perception,.welcome-title,.welcome-access,.has-error .access-field{animation:none}
}

/* The access confirmation stays inside the button; its layout never changes. */
.access-symbol{position:relative;display:block;flex:none;width:18px;height:18px}
.access-symbol svg{position:absolute;inset:0}
.access-check{opacity:0}
.access-check path{stroke-dasharray:1;stroke-dashoffset:1}
.welcome-access .welcome-start .access-symbol svg{transform:none}
.welcome-access[data-state=verifying] .welcome-start{animation:access-press .1s ease-out;opacity:1;transform:none}
.welcome-access[data-state=verifying] .access-arrow{opacity:0;transition:opacity .1s}
.welcome-access[data-state=success] .welcome-start{opacity:1;transform:none;background:var(--welcome-pale);border-color:var(--welcome-pale);cursor:wait}
.welcome-access[data-state=success] .access-arrow{opacity:0}
.welcome-access[data-state=success] .access-check{opacity:1}
.welcome-access[data-state=success] .access-check path{stroke-dashoffset:0;animation:access-check .2s ease-out both}
.access-status{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
@keyframes access-press{0%{transform:scale(.985)}100%{transform:scale(1)}}
@keyframes access-check{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.welcome-access[data-still=true] .welcome-start,.welcome-access[data-still=true] .access-check path{animation:none}
@media(prefers-reduced-motion:reduce){
  .welcome-access .welcome-start,.welcome-access .access-check path{animation:none}
}

/* Exit fades only the page content; the dark canvas remains continuous. */
.welcome[data-access-exit=true]{background:var(--welcome-bg)}
.welcome[data-access-exit=true]>.welcome-header,
.welcome[data-access-exit=true]>.welcome-main{opacity:0;pointer-events:none;transition:opacity .32s cubic-bezier(.22,1,.36,1)}
.welcome[data-access-still=true]>.welcome-header,
.welcome[data-access-still=true]>.welcome-main{transition-duration:.12s}
@media(prefers-reduced-motion:reduce){
 .welcome[data-access-exit=true]>.welcome-header,.welcome[data-access-exit=true]>.welcome-main{transition:opacity .12s linear!important}
}

/* Reversible ambient-halo experiment; remove welcome--ambient for the centred layout. */
.welcome--ambient{position:relative;isolation:isolate;overflow-x:clip}
.welcome--ambient .perception{
  position:fixed;z-index:-1;pointer-events:none;
  width:min(1120px,94vw);height:min(900px,80vw);max-width:none;
  top:9vh;right:17vw;opacity:1;
  filter:brightness(2.4);
  transform:translate(50%,-50%) rotate(-18deg);
  mask-image:linear-gradient(125deg,transparent 16%,#000 48%,#000 76%,transparent 96%),linear-gradient(to bottom,#000 50%,transparent 86%);
  mask-composite:intersect;
  animation:none;
}
@media(max-width:720px){
  .welcome--ambient .perception{width:720px;height:560px;top:15vh;right:-18vw;opacity:.9}
}
@media(max-height:600px) and (min-width:721px){
  .welcome--ambient .perception{top:2vh;opacity:.7}
}
