@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap');
:root{--bg:#070b10;--panel:#0d131a;--panel-2:#111922;--line:#7b8794;--text:#f4f5f6;--muted:#89939f;--green:#18c66b;--blue:#286be0;--purple:#6940c8;--yellow:#f5c542}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-height:100vh;background:#080b0f;color:var(--text);font-family:'Press Start 2P',monospace;image-rendering:pixelated}button,a,input,select{font:inherit}a{color:inherit;text-decoration:none}.pixel-wall{position:fixed;inset:0;z-index:0;overflow:hidden;background:radial-gradient(circle at 12% 20%,#173a52 0 3%,transparent 3.2%),radial-gradient(circle at 84% 72%,#3b213d 0 4%,transparent 4.2%),#10161c}.pixel-wall:before{content:'';position:absolute;inset:0;opacity:.75;background-image:linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px),linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px);background-size:12px 12px}.pixel-wall i{position:absolute;display:block;box-shadow:2px 2px 0 rgba(0,0,0,.35)}.site-shell{position:relative;z-index:1;width:min(1180px,calc(100% - 18px));margin:0 auto;background:#0a0e13;border-left:2px solid #222c36;border-right:2px solid #222c36;box-shadow:0 0 0 4px #05070a,0 0 50px rgba(0,0,0,.75)}.topbar{min-height:66px;display:grid;grid-template-columns:150px 1fr 210px;align-items:center;gap:20px;padding:0 22px;background:#090d12;border-bottom:3px solid #56616c}.brand{font-size:28px;letter-spacing:1px;text-shadow:4px 4px 0 #202731}.nav{display:none}.profile-area{position:relative;justify-self:end}.player-area{position:relative;justify-self:center}.player-button{border:0;background:transparent;color:#f2f2f2;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:9px;font-size:9px;padding:10px}.player-button:focus-visible,.country-button:focus-visible{outline:1px solid #7b8794;outline-offset:2px}.country-button{border:0;background:transparent;color:#f2f2f2;cursor:pointer;display:flex;align-items:center;gap:9px;font-size:9px;padding:10px}.country-button:disabled{cursor:default;opacity:1}.chevron{color:#aeb7c0;font-size:8px}.player-menu,.country-menu{display:none;position:absolute;background:#0b1117;border:2px solid #7a858f;z-index:20;box-shadow:5px 5px 0 #020407}.player-menu{left:50%;transform:translateX(-50%);top:calc(100% + 3px);width:220px;padding:7px}.country-menu{right:0;top:calc(100% + 3px);width:250px;max-height:430px;overflow:auto;padding:7px}.player-menu.open,.country-menu.open{display:block}.player-option,.country-option{width:100%;border:0;color:#fff;background:transparent;padding:10px 8px;text-align:left;cursor:pointer;font-size:7px}.player-option:hover,.country-option:hover{background:#1b252e}
main{padding:18px 24px 24px}.hero{max-width:920px;margin:0 auto}.game-frame{position:relative;height:410px;overflow:hidden;border:3px solid #65717d;outline:3px solid #151c23;background:#080d12;box-shadow:inset 0 0 0 2px #202a33}.game-frame:before{content:'';position:absolute;left:0;right:0;top:50%;height:1px;background:#69747e;opacity:.9;pointer-events:none}#gameCanvas{display:block;width:100%;height:100%;touch-action:manipulation;cursor:crosshair}.score{position:absolute;top:55px;left:50%;transform:translateX(-50%);z-index:3;font-size:34px;line-height:1;text-shadow:4px 4px 0 #29313a;pointer-events:none}.game-message{position:absolute;left:50%;bottom:44px;transform:translateX(-50%);width:max-content;max-width:calc(100% - 30px);text-align:center;font-size:8px;color:#7e8994;pointer-events:none}.game-feedback{position:absolute;left:50%;top:47%;transform:translate(-50%,-50%);font-size:26px;opacity:0;pointer-events:none;white-space:nowrap}.game-feedback.show{animation:feedback .65s steps(5,end) forwards}.game-feedback.good{color:#35dc75;text-shadow:3px 3px 0 #073c20}.game-feedback.ok{color:#fff;text-shadow:3px 3px 0 #414950}.game-feedback.miss{color:#ff5360;text-shadow:3px 3px 0 #4b1017}@keyframes feedback{0%{opacity:0;transform:translate(-50%,-40%) scale(.75)}25%{opacity:1;transform:translate(-50%,-55%) scale(1.08)}100%{opacity:0;transform:translate(-50%,-100%) scale(1)}}
.game-actions{display:grid;grid-template-columns:1fr 1fr;gap:15px;margin-top:20px}.action{min-height:54px;border:0;display:flex;justify-content:center;align-items:center;gap:10px;color:#fff;cursor:pointer;box-shadow:inset 0 -5px 0 rgba(0,0,0,.2),4px 4px 0 #080b0e;font-size:11px}.action.blue{background:var(--blue)}.action.purple{background:var(--purple)}.action:hover{filter:brightness(1.12);transform:translateY(-1px)}.action:active{transform:translate(2px,2px);box-shadow:inset 0 -3px 0 rgba(0,0,0,.2),2px 2px 0 #080b0e}
.boards{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:22px auto 0;max-width:920px}.board{border:3px solid #626e79;background:#0c1218;box-shadow:inset 0 0 0 2px #171f27,4px 4px 0 #05070a;padding:15px}.board-title{display:flex;gap:9px;align-items:center;font-size:10px;margin-bottom:13px}.board-my-rank{margin-left:auto;color:#68737e;font-size:7px;line-height:1.2;text-align:right;white-space:nowrap;opacity:.9}.board ol{list-style:none;padding:0;margin:0}.board li{display:grid;grid-template-columns:30px 1fr auto;gap:8px;align-items:center;padding:10px 2px;border-top:1px solid #2c353e;font-size:8px;color:#d6dbe0}.board li:first-child{border-top:0}.rank-number{color:#e9c33d}.rank-score{color:#f3f5f6}.loading-row,.empty-row{display:block!important;text-align:center!important;color:#68737e!important;padding:18px 4px!important}.board-more{display:block;width:max-content;margin:15px auto 2px;border:2px solid #5e6974;padding:9px 12px;font-size:7px;color:#cbd1d7;background:transparent;cursor:pointer}.board-more:hover{background:#172029}
.hidden{display:none!important}.modal-backdrop{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:18px;background:rgba(2,5,8,.86);backdrop-filter:blur(2px)}.modal-card{position:relative;width:min(560px,100%);background:#0b1117;border:3px solid #68747f;outline:3px solid #151c23;box-shadow:8px 8px 0 #020407, inset 0 0 0 2px #202a33;padding:30px}.onboarding-card{text-align:center}.modal-pixel-corner{position:absolute;left:10px;top:7px;color:#2fc875;font-size:12px}.modal-card h2{margin:0 0 20px;font-size:16px;line-height:1.7}.modal-card p{margin:0 auto 24px;color:#9aa4ad;font-size:8px;line-height:2;max-width:460px}.field-label{display:block;text-align:left;color:#cbd2d8;font-size:8px;margin-bottom:8px}.pixel-input{width:100%;height:52px;border:2px solid #626e79;background:#070c11;color:#fff;padding:0 12px;outline:none;font-size:9px}.pixel-input:focus{border-color:#35dc75;box-shadow:4px 4px 0 #071e13}.modal-button{width:100%;min-height:52px;border:0;color:#fff;cursor:pointer;margin-top:18px;box-shadow:inset 0 -5px 0 rgba(0,0,0,.2),4px 4px 0 #05070a;font-size:9px}.modal-button.primary{background:var(--green)}.modal-button:disabled{opacity:.55;cursor:wait}.name-rules{margin-top:9px;color:#68737e;font-size:6px;line-height:1.8}.form-error{min-height:20px;margin-top:12px;color:#ff5965;font-size:7px;line-height:1.7}.ranking-modal{width:min(720px,100%);padding:24px}.ranking-modal h2{margin-right:30px}.modal-close{position:absolute;right:13px;top:10px;border:0;background:transparent;color:#9da7b0;font-size:12px;cursor:pointer}.modal-close:hover{color:#fff}.ranking-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:14px}.ranking-tab{border:2px solid #4e5a65;background:#0a1016;color:#aeb7c0;min-height:42px;font-size:7px;cursor:pointer}.ranking-tab.active{background:#18232d;border-color:#7c8791;color:#fff}.full-ranking-table-wrap{border:2px solid #414c56;background:#080d12;min-height:420px}.full-ranking-list{list-style:none;margin:0;padding:0}.full-ranking-list li{display:grid;grid-template-columns:55px 1fr 90px;align-items:center;min-height:60px;padding:8px 14px;border-bottom:1px solid #28323b;font-size:8px}.full-ranking-list li:last-child{border-bottom:0}.full-rank-number{color:#e9c33d}.full-player{display:flex;flex-direction:column;gap:7px}.full-player small{color:#68737e;font-size:6px}.full-score{text-align:right;color:#fff}.empty-full{display:block!important;text-align:center!important;color:#68737e;padding:70px 10px!important}.pagination{display:flex;align-items:center;justify-content:center;gap:20px;margin-top:16px}.pagination button{width:44px;height:38px;border:2px solid #596570;background:#0b1117;color:#fff;cursor:pointer}.pagination button:hover:not(:disabled){background:#1a2630}.pagination button:disabled{opacity:.3;cursor:default}.pagination span{min-width:70px;text-align:center;color:#b9c1c8;font-size:7px}
@media(max-width:820px){.topbar{grid-template-columns:1fr auto 1fr;grid-template-areas:'brand player profile';gap:5px 10px;padding:10px 14px}.brand{grid-area:brand}.player-area{grid-area:player}.profile-area{grid-area:profile}.player-button{font-size:8px}.country-button{font-size:7px}.main{padding:14px 10px}main{padding:14px 10px}.game-frame{height:min(400px,72vw);min-height:300px}.score{top:30px;font-size:28px}.game-message{bottom:28px;font-size:6px}.game-actions{gap:8px}.action{min-height:48px;font-size:8px}.boards{grid-template-columns:1fr}.footer{flex-direction:column;text-align:center}.country-menu{width:230px}.player-menu{width:220px}.modal-card{padding:25px 18px}.modal-card h2{font-size:12px}.ranking-modal{padding:20px 12px}.full-ranking-table-wrap{min-height:390px}.full-ranking-list li{grid-template-columns:42px 1fr 65px;min-height:55px;padding:7px 9px;font-size:7px}}
@media(max-width:480px){.site-shell{width:100%;border:0}.brand{font-size:22px}.player-button{font-size:7px}.country-button{font-size:7px}.game-actions{grid-template-columns:1fr 1fr}.game-feedback{font-size:21px}.modal-card p{font-size:7px}.pixel-input{height:48px}.ranking-tabs{grid-template-columns:1fr}.full-ranking-table-wrap{min-height:350px}.full-ranking-list li{min-height:52px}.full-player small{font-size:5px}}

/* EIXO global/national chat — desktop side panel */
.chat-sidebar{position:fixed;z-index:30;top:92px;left:calc(50% + 500px);right:auto;width:330px;height:690px;display:flex;flex-direction:column;background:#0b1117;border:3px solid #596671;outline:2px solid #151c23;box-shadow:7px 7px 0 #05070a,inset 0 0 0 2px #202a33}
.chat-header{padding:14px 12px 10px;border-bottom:2px solid #303a44;background:#090e14}
.chat-header-title{font-size:10px;color:#cbd3d9;margin-bottom:10px}
.chat-tabs{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.chat-tab{min-height:38px;border:2px solid #404c57;background:#0c131a;color:#7f8a94;cursor:pointer;font-size:7px;padding:6px}
.chat-tab:hover{background:#172029;color:#fff}
.chat-tab.active{background:#18232d;border-color:#7a8792;color:#fff}
.chat-status{min-height:20px;padding:7px 10px 0;color:#68737e;font-size:6px}
.chat-messages{flex:1;min-height:0;overflow-y:auto;padding:7px 9px 9px;scrollbar-width:thin;scrollbar-color:#44515c #090e13}
.chat-message{display:grid;grid-template-columns:30px 1fr;gap:8px;padding:10px 3px;border-bottom:1px solid #232d35}
.chat-message:last-child{border-bottom:0}
.chat-avatar{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:1px solid #46535f;background:#101820;color:#7d8a95;font-size:8px;line-height:1;flex:0 0 auto}
.chat-content{min-width:0}
.chat-author{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin-bottom:5px;line-height:1.5;min-width:0}
.chat-name{display:inline-block;min-width:0;font-size:8px;color:#f4f5f6!important;white-space:normal;overflow:visible;line-height:1.5}
.chat-name.name-rainbow{background:linear-gradient(90deg,#ff3b30,#ffcc00,#34c759,#0a84ff,#bf5af2,#ff2d55,#ff3b30);background-size:400% 100%;-webkit-background-clip:text;background-clip:text;color:transparent!important;animation:name-rainbow 2.4s linear infinite}
.chat-name .name-letter{display:inline-block}
.chat-text{font-size:7px;color:#c3cbd1;line-height:1.8;overflow-wrap:anywhere;word-break:break-word}
.chat-time{font-family:Arial,sans-serif;font-size:9px;color:#5f6a74;margin-left:auto}
.chat-empty{height:100%;display:flex;align-items:center;justify-content:center;text-align:center;padding:25px;color:#5e6973;font-size:6px;line-height:1.9}
.chat-loading{padding:25px;text-align:center;color:#68737e;font-size:6px}
.chat-form{display:grid;grid-template-columns:1fr 44px;gap:7px;padding:9px;border-top:2px solid #303a44;background:#090e14}
.chat-input{width:100%;height:42px;border:2px solid #4d5a65;background:#070c11;color:#fff;padding:0 9px;outline:none;font-size:7px}
.chat-input:focus{border-color:#35dc75;box-shadow:3px 3px 0 #071e13}
.chat-input:disabled{opacity:.5;cursor:not-allowed}
.chat-send{height:42px;border:0;background:#18c66b;color:#fff;cursor:pointer;font-size:10px;box-shadow:inset 0 -4px 0 rgba(0,0,0,.2)}
.chat-send:hover{filter:brightness(1.1)}
.chat-send:disabled{opacity:.45;cursor:wait}
.chat-hint{padding:7px 10px 9px;color:#56626c;background:#090e14;font-size:6px;text-align:center}
.rank-tag{display:inline-flex;align-items:center;justify-content:center;padding:3px 5px;font-size:5px;line-height:1.2;vertical-align:middle}
.vip-rank-tag{display:inline-flex;align-items:center;justify-content:center;padding:3px 5px;font-size:5px;line-height:1.2;vertical-align:middle}
.name-letter{display:inline-block}

/* Chat-specific letter animations. The ranking already has the keyframes; these classes make them usable here too. */
.chat-name .name-letter{display:inline-block}
.chat-name .name-letter.effect-bounce{animation:name-bounce .55s steps(2,end) infinite alternate}
.chat-name .name-letter.effect-glow{animation:name-glow .8s ease-in-out infinite alternate}
.chat-name .name-letter.effect-wave{animation:name-wave .8s ease-in-out infinite}
.chat-name .name-letter.effect-shake{animation:name-shake .28s steps(2,end) infinite}
.chat-name .name-letter.effect-float{animation:name-float 1.2s ease-in-out infinite}
.chat-name .name-letter.effect-pulse{animation:name-pulse .9s ease-in-out infinite}
.chat-name .name-letter.effect-jelly{animation:name-jelly .8s ease-in-out infinite}
.chat-name .name-letter.effect-twist{animation:name-wave .7s ease-in-out infinite}
.chat-name .name-letter.effect-flicker{animation:name-pulse .45s steps(2,end) infinite}
.chat-name .name-letter.effect-stretch{animation:name-jelly 1s ease-in-out infinite}
.chat-name .name-letter.effect-sparkle{animation:name-glow .7s ease-in-out infinite alternate}
.chat-name .name-letter.effect-shimmer{animation:name-wave .9s ease-in-out infinite}
.chat-name .name-letter.effect-glitch{animation:name-shake .22s steps(2,end) infinite}
.chat-name .name-letter.effect-tilt{animation:name-wave .75s ease-in-out infinite}
.chat-name .name-letter.effect-pop{animation:name-jelly .65s ease-in-out infinite}
.chat-name .name-letter.effect-scanline{animation:name-pulse .65s steps(2,end) infinite}
.chat-name .name-letter.name-rainbow{background:linear-gradient(90deg,#ff3b30,#ffcc00,#34c759,#0a84ff,#bf5af2,#ff2d55,#ff3b30);background-size:400% 100%;-webkit-background-clip:text;background-clip:text;color:transparent!important;animation-name:name-rainbow;animation-duration:2.4s;animation-timing-function:linear;animation-iteration-count:infinite}
@keyframes name-rainbow{to{background-position:400% 0}}
@keyframes name-bounce{to{transform:translateY(-3px)}}
@keyframes name-glow{to{text-shadow:0 0 8px currentColor}}
@keyframes name-wave{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@keyframes name-shake{25%{transform:translateX(-1px)}75%{transform:translateX(1px)}}
@keyframes name-float{50%{transform:translateY(-2px)}}
@keyframes name-pulse{50%{opacity:.55}}
@keyframes name-jelly{0%,100%{transform:scaleX(1)}50%{transform:scaleX(1.06) scaleY(.94)}}

@media(max-width:1500px){
  .chat-sidebar{position:relative;top:auto;left:auto;right:auto;width:min(920px,calc(100% - 20px));height:430px;margin:18px auto 24px}
}
@media(max-width:820px){
  .chat-sidebar{width:calc(100% - 20px);height:420px;margin:16px auto 22px}
  .chat-tab{font-size:5px}
  .chat-name{font-size:7px!important}
  .chat-text{font-size:6px}
}

/* Portugal landmark pixel art: preserve the source pixels and enlarge them with nearest-neighbor rendering. */
.pixel-sponsor{
  position:fixed;
  left:22px;
  top:220px;
  width:min(430px,30vw);
  display:block;
  z-index:2;
  pointer-events:none;
}
.pixel-sponsor-canvas{
  display:block;
  width:100%;
  height:auto;
  margin:0;
  padding:0;
  border:0;
  image-rendering:pixelated;
  image-rendering:crisp-edges;
}
@media(max-width:1100px){
  .pixel-sponsor{left:12px;width:320px}
}
@media(max-width:820px){
  .pixel-sponsor{
    left:12px;
    top:auto;
    bottom:20px;
    width:230px;
    opacity:.88;
  }
}
