:root{--bg:#FAFAF7;--ink:#111;--lime:#C6F432;--lilac:#E9E3FF;--coral:#FF6B5B}
*{-webkit-tap-highlight-color:transparent}
body{margin:0;background:var(--bg);color:var(--ink);font-family:'Plus Jakarta Sans',sans-serif;
background-image:radial-gradient(#11111110 1px,transparent 1px);background-size:18px 18px}
.mono{font-family:'JetBrains Mono',monospace}
.brut{border:2px solid #111;box-shadow:4px 4px 0 #111}
.brut-sm{border:2px solid #111;box-shadow:2px 2px 0 #111}
.press:active{transform:translate(2px,2px);box-shadow:0 0 0 #111}
.lime{background:var(--lime)}.lilac{background:var(--lilac)}.coral{background:var(--coral)}
.noscroll::-webkit-scrollbar{display:none}.noscroll{scrollbar-width:none}
@keyframes up{from{transform:translateY(100%)}to{transform:none}}
.sheet{animation:up .28s cubic-bezier(.2,.9,.3,1.2)}
@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.fi{animation:fadeIn .4s both}
@keyframes bounce{0%{transform:translate(-50%,-30px) scale(.8);opacity:0}60%{transform:translate(-50%,6px) scale(1.05);opacity:1}100%{transform:translate(-50%,0)}}
.toast{animation:bounce .5s both}
@keyframes conf{to{transform:translateY(110vh) rotate(720deg)}}
.conf{position:fixed;top:-20px;width:10px;height:14px;z-index:99;animation:conf 2.2s linear forwards}
@keyframes glow{0%,100%{box-shadow:4px 4px 0 #111,0 0 0 0 #C6F432}50%{box-shadow:4px 4px 0 #111,0 0 0 6px #C6F43288}}
.pinned{animation:glow 1.6s infinite}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
.pulse{animation:pulse 1s infinite}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
.shake{animation:shake .15s infinite}
.mapbg{background:#EAF3D9;background-image:linear-gradient(#ffffff 2px,transparent 2px),linear-gradient(90deg,#ffffff 2px,transparent 2px);background-size:40px 40px}
input,select,textarea{outline:none}