html{scroll-behavior:smooth}
body{margin:0;font-family:var(--font-body);background:var(--surface-page);color:var(--text-primary);width:100%;overflow-x:hidden}
*,*::before,*::after{box-sizing:border-box}
img{max-width:100%;display:block}
a{color:var(--text-link);text-decoration:none}
a:hover{color:var(--text-link-hover)}
::selection{background:var(--brand-blue-100);color:var(--ink-900)}
h1,h2,h3,h4,p{margin:0}
input,textarea,select,button{font-family:var(--font-body);outline:none}
input:focus,textarea:focus,select:focus{border-color:var(--accent-primary) !important}
button{cursor:pointer}

.em-shell{display:flex;flex-direction:column;min-height:100vh}
.em-main{flex:1;display:flex;flex-direction:column;position:relative}

[id]{scroll-margin-top:100px}

.em-container{max-width:var(--container-max);margin:0 auto;padding:0 var(--gutter-page)}
.em-section{padding:var(--space-9) var(--gutter-page)}
.em-section--tight{padding:var(--space-8) var(--gutter-page)}

@keyframes em-fade-slide-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
@keyframes em-marquee-scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes em-grid-drift{from{background-position:0 0}to{background-position:64px 64px}}
@keyframes em-blink-caret{50%{opacity:0}}
@keyframes em-chalk-draw{to{stroke-dashoffset:0}}

[data-reveal]{opacity:0;transform:translateY(28px);transition:opacity 700ms var(--ease-out),transform 700ms var(--ease-out)}
[data-reveal].is-visible{opacity:1;transform:translateY(0)}
[data-reveal-delay="1"]{transition-delay:80ms}
[data-reveal-delay="2"]{transition-delay:160ms}
[data-reveal-delay="3"]{transition-delay:240ms}
[data-reveal-delay="4"]{transition-delay:320ms}
