*{margin:0;padding:0;box-sizing:border-box}:root{--bg-dark: #0d1117;--bg-card: #161b22;--bg-input: #21262d;--border: #30363d;--accent: #58a6ff;--accent-hover: #79b8ff;--success: #3fb950;--warning: #d29922;--danger: #f85149;--text-primary: #f0f6fc;--text-secondary: #8b949e;--text-muted: #6e7681}html,body{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif;background:var(--bg-dark);color:var(--text-primary);min-height:100vh;line-height:1.5}#root{height:100%}.loading-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:1rem}.spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.navbar{display:flex;justify-content:center;align-items:center;background:var(--bg-card);border-bottom:1px solid var(--border)}.nav-tabs{display:flex;width:100%}.nav-tab{flex:1;display:flex;align-items:center;justify-content:center;padding:1rem;color:var(--text-secondary);text-decoration:none;font-weight:500;font-size:1rem;transition:all .2s;border-bottom:3px solid transparent}.nav-tab:hover{color:var(--text-primary);background:var(--bg-input)}.nav-tab.active{color:var(--accent);border-bottom-color:var(--accent);background:transparent}main{padding:2rem;max-width:1200px;margin:0 auto}.container{width:100%}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:1.5rem;margin-bottom:1.5rem}.card h2{margin-bottom:1rem;color:var(--text-primary)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.6rem 1.2rem;font-size:.9rem;font-weight:500;text-decoration:none;border:1px solid var(--border);border-radius:6px;background:var(--bg-input);color:var(--text-primary);cursor:pointer;transition:all .2s}.btn:hover{background:var(--border)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-danger{background:transparent;border-color:var(--danger);color:var(--danger)}.btn-danger:hover{background:var(--danger);color:#fff}.btn-secondary{background:transparent;border-color:var(--border);color:var(--text-secondary)}.btn-secondary:hover{background:var(--bg-input);color:var(--text-primary)}.btn-danger-outline{border-color:var(--danger);color:var(--danger)}.btn-danger-outline:hover{background:var(--danger);color:#fff}.btn-large{padding:1rem 2rem;font-size:1.1rem}.action-buttons{display:flex;flex-direction:column;gap:.75rem;margin-top:2rem;padding-top:2rem;border-top:1px solid var(--border)}.action-buttons .btn{width:100%;justify-content:center}.btn-small{padding:.3rem .6rem;font-size:.8rem}.btn-block{width:100%}.btn-oauth{background:var(--bg-card);border:1px solid var(--border);padding:.8rem 1.2rem;font-size:1rem}.btn-oauth:hover{background:var(--bg-input);border-color:var(--text-muted)}.btn-oauth svg{width:20px;height:20px}.input-field{width:100%;padding:.75rem 1rem;font-size:1rem;background:var(--bg-input);border:1px solid var(--border);border-radius:6px;color:var(--text-primary);transition:border-color .2s}.input-field:focus{outline:none;border-color:var(--accent)}.input-field::placeholder{color:var(--text-muted)}.form-group{margin-bottom:1rem}.form-group label{display:block;margin-bottom:.5rem;color:var(--text-secondary);font-weight:500}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.auth-container{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem}.auth-card{background:var(--bg-card);border:1px solid var(--border);border-radius:16px;padding:2.5rem;width:100%;max-width:400px}.auth-logo{display:block;margin:0 auto;height:200px;width:auto;object-fit:contain}.auth-card h1{text-align:center;margin-bottom:.5rem;font-size:2rem}.auth-card .subtitle{text-align:center;color:var(--text-secondary);margin-bottom:2rem}.auth-divider{display:flex;align-items:center;margin:1.5rem 0;color:var(--text-muted);font-size:.9rem}.auth-divider:before,.auth-divider:after{content:"";flex:1;height:1px;background:var(--border)}.auth-divider span{padding:0 1rem}.oauth-buttons{display:flex;flex-direction:column;gap:.75rem;margin-bottom:1rem}.otp-input-group{display:flex;gap:.5rem}.otp-input-group .input-field{flex:1}.otp-sent-message{text-align:center;color:var(--success);margin-bottom:1rem;padding:.75rem;background:#3fb9501a;border-radius:6px}.auth-error{text-align:center;color:var(--danger);margin-bottom:1rem;padding:.75rem;background:#f851491a;border-radius:6px}.home-container{max-width:600px;margin:0 auto}.start-screen{text-align:center;padding:2rem 0}.start-screen h1{font-size:2.5rem;margin-bottom:1rem}.start-screen p{color:var(--text-secondary);margin-bottom:2rem;font-size:1.1rem}.start-form{display:flex;flex-direction:column;gap:1rem;max-width:300px;margin:0 auto 2rem}.checkpoint-preview{margin-top:2rem;padding:1rem;background:var(--bg-card);border-radius:8px;border:1px solid var(--border)}.checkpoint-preview h3{color:var(--text-secondary);font-weight:500}.game-active{text-align:center}.game-active h1{margin-bottom:1.5rem}.timer-display{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:1.5rem;margin-bottom:2rem}.timer-label{display:block;color:var(--text-secondary);margin-bottom:.5rem}.timer{font-size:3rem;font-weight:700;font-family:SF Mono,Fira Code,monospace;color:var(--success)}.progress-section{margin-bottom:2rem}.progress-bar{height:12px;background:var(--bg-input);border-radius:6px;overflow:hidden;margin:1rem 0}.progress-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--success));transition:width .5s ease}.progress-text{color:var(--text-secondary)}.checkpoints-list{text-align:left;background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:1.5rem;margin-bottom:2rem}.checkpoints-list h3{margin-bottom:1rem;color:var(--text-secondary)}.checkpoint-item{display:flex;align-items:center;gap:1rem;padding:.75rem;border-radius:6px;margin-bottom:.5rem;background:var(--bg-input)}.checkpoint-item.visited{background:#3fb9501a;border:1px solid rgba(63,185,80,.3)}.checkpoint-item.next{background:#58a6ff26;border:1px solid var(--accent)}.checkpoint-order{background:var(--bg-dark);width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:700}.checkpoint-status{font-size:1.2rem}.checkpoint-name{flex:1}.checkpoint-time{font-family:monospace;color:var(--success)}.reset-form{margin-top:2rem}.waiting-screen{text-align:center;padding:2rem;background:var(--bg-card);border:2px dashed var(--accent);border-radius:16px;margin-bottom:2rem}.waiting-screen h2{color:var(--accent);margin-bottom:.5rem}.waiting-screen p{margin-bottom:1.5rem}.pulse-icon{font-size:4rem;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.2);opacity:.8}}.next-checkpoint-hint,.next-checkpoint-card{background:#58a6ff26;border:1px solid var(--accent);border-radius:12px;padding:1rem 1.5rem;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.next-checkpoint-card{margin-bottom:2rem}.next-checkpoint-hint .label,.next-checkpoint-card .label{color:var(--text-secondary)}.next-checkpoint-hint .value,.next-checkpoint-card .value{font-weight:700;color:var(--accent);font-size:1.2rem}.finish-screen{text-align:center;padding:2rem;background:linear-gradient(135deg,#3fb95026,#58a6ff1a);border:2px solid var(--success);border-radius:20px;margin-bottom:2rem}.trophy-icon{font-size:5rem;animation:bounce 1s ease infinite}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.finish-screen h2{color:var(--success);font-size:1.8rem;margin:1rem 0}.final-time-display{background:var(--bg-dark);border-radius:16px;padding:1.5rem 2rem;margin:1.5rem 0;display:inline-block}.final-time-label{display:block;color:var(--text-secondary);font-size:.9rem;margin-bottom:.5rem}.final-time{font-size:4rem;font-weight:700;font-family:SF Mono,Fira Code,Consolas,monospace;background:linear-gradient(90deg,var(--success),#7ee787);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:2px}.finish-congrats{color:var(--text-secondary);font-size:1rem;margin-top:1rem}.checkpoint-container{max-width:500px;margin:0 auto;text-align:center}.celebration h1{font-size:2.5rem;color:var(--success);animation:pulse .5s ease}.checkpoint-card{background:var(--bg-card);border:2px solid var(--accent);border-radius:16px;padding:2rem;margin:2rem 0}.checkpoint-card.complete{border-color:var(--success);background:#3fb9501a}.checkpoint-card h2{font-size:2rem;margin-bottom:.5rem}.coords{color:var(--text-muted);font-family:monospace}.visit-info{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:1.5rem;margin-bottom:2rem}.info-item{display:flex;justify-content:space-between;padding:.5rem 0;border-bottom:1px solid var(--border)}.info-item:last-child{border-bottom:none}.info-item .label{color:var(--text-secondary)}.info-item .value{font-weight:600}.wrong-order-screen{text-align:center}.wrong-order-screen h1{color:var(--danger);margin-bottom:.5rem}.error-icon{font-size:5rem;margin-bottom:1rem}.wrong-checkpoint-card,.expected-checkpoint-card{background:var(--bg-card);border-radius:12px;padding:1rem 1.5rem;display:flex;justify-content:space-between;align-items:center;margin:1rem 0}.wrong-checkpoint-card{border:2px solid var(--danger)}.expected-checkpoint-card{border:2px solid var(--success)}.wrong-checkpoint-card .value.wrong{color:var(--danger);font-weight:700}.expected-checkpoint-card .value.correct{color:var(--success);font-weight:700}.alert{padding:1rem;border-radius:8px;margin-bottom:1.5rem}.alert-warning{background:#d2992226;border:1px solid var(--warning);color:var(--warning)}.status-badge{padding:.25rem .5rem;border-radius:4px;font-size:.85rem;font-weight:500}.status-complete{background:#3fb95033;color:var(--success)}.status-active{background:#58a6ff33;color:var(--accent)}.status-waiting{background:#d2992233;color:var(--warning)}.admin-container h1{margin-bottom:1.5rem}.admin-nav{display:flex;gap:.5rem;margin-bottom:1.5rem}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.stat-item{text-align:center;padding:1rem;background:var(--bg-input);border-radius:8px}.stat-value{display:block;font-size:2rem;font-weight:700;color:var(--accent)}.stat-label{color:var(--text-secondary);font-size:.9rem}.table-responsive{overflow-x:auto}.data-table{width:100%;border-collapse:collapse}.data-table th,.data-table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--border)}.data-table th{color:var(--text-secondary);font-weight:500;font-size:.9rem}.data-table tr:hover{background:var(--bg-input)}.data-table tr.complete{background:#3fb9501a}.nfc-url{background:var(--bg-input);padding:.25rem .5rem;border-radius:4px;font-size:.85rem;color:var(--accent)}.badge{margin-left:.5rem}.mini-progress{height:6px;background:var(--bg-input);border-radius:3px;overflow:hidden;width:60px;display:inline-block;margin-right:.5rem;vertical-align:middle}.mini-progress-fill{height:100%;background:var(--accent)}.empty-state{text-align:center;color:var(--text-muted);padding:2rem}.game-select-header{text-align:center;margin-bottom:2rem}.game-select-header h1{margin-bottom:.5rem}.game-select-header p{color:var(--text-secondary)}.games-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1.25rem;margin-bottom:2rem}@media(max-width:600px){.games-grid{grid-template-columns:1fr;gap:1rem}}.game-select-card{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;overflow:hidden;cursor:pointer;transition:all .2s;display:flex;flex-direction:column;text-align:left}.game-select-card:hover{border-color:var(--accent);transform:translateY(-2px);box-shadow:0 8px 24px #0000004d}.game-select-icon{font-size:3rem;text-align:center;padding:2rem 1.5rem 1rem}.game-select-content{padding:1rem 1.25rem 1.25rem;display:flex;flex-direction:column;gap:.5rem;flex:1}.game-select-card h2{font-size:1.1rem;margin:0;color:var(--text-primary);line-height:1.3}.game-select-description{color:var(--text-secondary);font-size:.85rem;margin:0;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.game-select-info{color:var(--text-muted);font-size:.8rem;margin-top:.25rem}.game-select-action{margin-top:auto;padding-top:.75rem;color:var(--accent);font-weight:600;font-size:.9rem}.empty-state-card{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:3rem 2rem;text-align:center}.empty-state-card .empty-icon{font-size:4rem;margin-bottom:1rem}.empty-state-card h2{margin-bottom:.5rem}.empty-state-card p{color:var(--text-secondary)}.games-list{display:flex;flex-direction:column;gap:1rem}.game-card{background:var(--bg-input);border:1px solid var(--border);border-radius:8px;padding:1rem}.game-card.published{border-color:var(--success)}.game-card.draft{border-color:var(--warning)}.game-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.game-header h3{margin:0;font-size:1.1rem}.game-description{color:var(--text-secondary);font-size:.9rem;margin:.5rem 0}.game-stats{display:flex;gap:1rem;color:var(--text-muted);font-size:.85rem;margin:.75rem 0}.game-actions{display:flex;gap:.5rem;flex-wrap:wrap}.page-header{display:flex;align-items:center;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap}.page-header h1{margin:0;flex:1}.back-link{color:var(--text-secondary);text-decoration:none}.back-link:hover{color:var(--text-primary)}.game-actions-bar{margin-bottom:1.5rem}.tabs{display:flex;border-bottom:1px solid var(--border);margin-bottom:1.5rem}.tab{padding:.75rem 1.5rem;background:transparent;border:none;color:var(--text-secondary);cursor:pointer;border-bottom:2px solid transparent;transition:all .2s}.tab:hover{color:var(--text-primary)}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.card-header-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.card-header-row h2{margin:0}.back-to-games{display:inline-block;color:var(--text-secondary);text-decoration:none;margin-bottom:1rem}.back-to-games:hover{color:var(--text-primary)}.game-desc{color:var(--text-secondary);margin-bottom:1rem}.player-greeting{color:var(--text-secondary);margin-bottom:1.5rem}.code-entry-section{margin-top:1.5rem;padding:1.25rem;background:var(--bg-input);border-radius:12px;border:1px solid var(--border)}.code-entry-section h3{margin:0 0 .5rem;font-size:1rem}.code-entry-form{display:flex;gap:.75rem;margin-top:.75rem}.code-input{flex:1;text-align:center;font-size:1.5rem;font-weight:600;letter-spacing:.3em;font-family:monospace}.code-error{color:var(--danger);margin-top:.75rem;font-size:.9rem}.code-success{color:var(--success);margin-top:.75rem;font-size:.9rem}.checkpoint-code{font-family:monospace;font-size:1rem;font-weight:600;background:var(--bg-input);padding:.25rem .5rem;border-radius:4px;letter-spacing:.1em}.gpx-status{display:flex;flex-direction:column;gap:1rem;padding:1rem;background:var(--bg-input);border-radius:8px}.gpx-info{display:flex;align-items:center;gap:.5rem;font-weight:500}.gpx-icon{font-size:1.25rem}.gpx-actions{display:flex;gap:.5rem;flex-wrap:wrap}.gpx-upload{margin-top:1rem}.gpx-upload-area{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:2rem;border:2px dashed var(--border);border-radius:8px;cursor:pointer;transition:all .2s;text-align:center}.gpx-upload-area:hover{border-color:var(--accent);background:var(--bg-input)}.gpx-upload-area.uploading{pointer-events:none;opacity:.7}.gpx-upload-area input{display:none}.gpx-upload-area .upload-icon{font-size:2.5rem}.gpx-upload-area .upload-hint{color:var(--text-muted);font-size:.85rem}.image-status{display:flex;flex-direction:column;gap:1rem}.image-preview{width:100%;max-width:320px;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;border:1px solid var(--border);background:var(--bg-input)}.image-preview img{width:100%;height:100%;object-fit:cover;display:block}.image-actions{display:flex;gap:.5rem}.image-upload{margin-top:1rem}.image-upload-area{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:2rem;border:2px dashed var(--border);border-radius:8px;cursor:pointer;transition:all .2s;text-align:center}.image-upload-area:hover{border-color:var(--accent);background:var(--bg-input)}.image-upload-area.uploading{pointer-events:none;opacity:.7}.image-upload-area input{display:none}.image-upload-area .upload-icon{font-size:2.5rem}.image-upload-area .upload-hint{color:var(--text-muted);font-size:.85rem}.game-select-image{width:100%;aspect-ratio:16 / 9;overflow:hidden;background:var(--bg-input)}.game-select-image img{width:100%;height:100%;object-fit:cover;transition:transform .3s}.game-select-card:hover .game-select-image img{transform:scale(1.05)}.hint{color:var(--text-muted);font-size:.9rem;margin-bottom:1rem}html:has(.map-container),body:has(.map-container){overflow:hidden;height:100%}.map-container{position:fixed;inset:0;display:flex;flex-direction:column;overflow:hidden}.map-container .navbar{flex-shrink:0}.map-container .nav-tab{padding:.75rem .5rem}.map-info-bar{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;background:var(--bg-card);border-bottom:1px solid var(--border);z-index:1000;flex-shrink:0;min-height:44px}.map-container #map{flex:1;width:100%;min-height:0;position:relative}.map-header{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;background:var(--bg-card);border-bottom:1px solid var(--border);z-index:10}.map-timer .timer{font-size:1.5rem}.map-next-checkpoint{display:flex;align-items:center;gap:.5rem}.map-next-checkpoint .next-label{color:var(--text-secondary);font-size:.9rem}.map-next-checkpoint .next-name{font-weight:700;color:var(--danger)}.map-complete{font-weight:700;color:var(--success)}.map-controls{position:absolute;bottom:1rem;right:1rem;display:flex;flex-direction:column;gap:.5rem;z-index:1000}.map-btn{width:48px;height:48px;border-radius:50%;background:var(--bg-card);border:1px solid var(--border);color:var(--text-primary);font-size:1.3rem;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;text-decoration:none;box-shadow:0 2px 8px #0000004d}.map-btn:hover{background:var(--accent);border-color:var(--accent)}.map-legend{position:absolute;bottom:1rem;left:1rem;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:.5rem .75rem;font-size:.75rem;z-index:1000}@media(max-width:480px){.map-legend{bottom:calc(.5rem + env(safe-area-inset-bottom,0px));left:.5rem;padding:.3rem .5rem;font-size:.65rem;max-width:45%}.map-legend .legend-item{gap:.3rem}.map-controls{bottom:calc(.5rem + env(safe-area-inset-bottom,0px));right:.5rem}.map-btn{width:36px;height:36px;font-size:1rem}.map-info-bar{padding:.3rem .5rem;flex-wrap:nowrap;gap:.5rem;min-height:36px}.map-timer .timer{font-size:1rem}.map-next-checkpoint .next-label{font-size:.7rem}.map-next-checkpoint .next-name{font-size:.85rem}.map-timer .timer{font-size:1.2rem}.map-next-checkpoint .next-name{font-size:.9rem}}.legend-item{display:flex;align-items:center;gap:.5rem;margin-bottom:.25rem;color:var(--text-secondary)}.legend-dot{width:12px;height:12px;border-radius:50%;border:2px solid white}.legend-dot.current{background:var(--accent)}.legend-dot.next{background:var(--danger)}.legend-dot.visited{background:var(--success)}.legend-dot.pending{background:var(--text-muted)}.map-link-btn{display:flex;align-items:center;justify-content:center;gap:.5rem;background:linear-gradient(135deg,#1a73e8,#58a6ff);border:none;padding:1rem 2rem;border-radius:12px;color:#fff;font-weight:600;text-decoration:none;font-size:1.1rem;margin-bottom:1.5rem;transition:all .3s;box-shadow:0 4px 15px #58a6ff4d;cursor:pointer}.map-link-btn:hover{transform:translateY(-2px);box-shadow:0 6px 20px #58a6ff66}@media(max-width:768px){.nav-tab{padding:.75rem .5rem;font-size:.9rem}main{padding:1rem}.form-row,.stats-grid{grid-template-columns:1fr}.timer{font-size:2rem}.final-time{font-size:2.5rem}.auth-card{padding:1.5rem}}
