:root{--bg:#07110e;--bg-elevated:#0d1a16;--bg-panel:#0d1a16c7;--bg-panel-solid:#10221c;--line:#7ec8c42e;--line-strong:#e8a54b73;--text:#e8f2ee;--text-muted:#8aa399;--accent:#e8a54b;--accent-soft:#e8a54b24;--teal:#7ec8c4;--teal-soft:#7ec8c41f;--danger:#ef6b5c;--success:#6dce8a;--radius:18px;--radius-sm:12px;--shadow:0 24px 80px #00000073;--font-display:"Bricolage Grotesque", system-ui, sans-serif;--font-body:"Figtree", system-ui, sans-serif;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;min-height:100%;margin:0}body{font-family:var(--font-body);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;overflow:hidden}button,input,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}.app-shell{background:radial-gradient(1200px 700px at 12% -10%,#e8a54b29,#0000 55%),radial-gradient(900px 600px at 90% 10%,#7ec8c41f,#0000 50%),linear-gradient(165deg,#0a1612 0%,#07110e 45%,#0b1518 100%);width:100%;height:100%;position:relative;overflow:hidden}.map-stage{position:absolute;inset:0}.map-stage .mapboxgl-map,.map-stage .mapboxgl-canvas{width:100%!important;height:100%!important}.map-stage:after{content:"";pointer-events:none;z-index:1;background:linear-gradient(#07110e8c 0%,#0000 18% 72%,#07110eb8 100%),linear-gradient(90deg,#07110e80 0%,#0000 22% 78%,#07110e59 100%);position:absolute;inset:0}.ui-layer{z-index:2;pointer-events:none;grid-template-rows:auto 1fr auto;gap:16px;padding:20px;display:grid;position:absolute;inset:0}.top-bar,.side-rail,.transport{pointer-events:auto}.top-bar{justify-content:space-between;align-items:center;gap:16px;display:flex}.brand{align-items:center;gap:12px;display:flex}.brand-mark{background:linear-gradient(145deg,#e8a54bf2,#e8a54b8c),#10221c;border-radius:12px;place-items:center;width:42px;height:42px;display:grid;box-shadow:0 10px 30px #e8a54b40}.brand-mark svg{width:22px;height:22px}.brand-copy h1{font-family:var(--font-display);letter-spacing:-.03em;margin:0;font-size:1.35rem;font-weight:700;line-height:1}.brand-copy p{color:var(--text-muted);letter-spacing:.04em;text-transform:uppercase;margin:4px 0 0;font-size:.78rem}.glass{background:var(--bg-panel);-webkit-backdrop-filter:blur(18px)saturate(1.2);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.panel{padding:16px}.side-rail{scrollbar-width:thin;scrollbar-color:#7ec8c44d transparent;flex-direction:column;gap:12px;width:min(360px,100vw - 40px);max-height:calc(100vh - 200px);transition:transform .32s cubic-bezier(.22,1,.36,1),opacity .28s,visibility .32s;display:flex;overflow:auto}.mid-row{justify-content:space-between;align-items:flex-start;gap:16px;min-height:0;display:flex;position:relative}.sidebar-toggle.active{background:var(--accent-soft);color:var(--accent);border-color:#e8a54b73}.sidebar-backdrop{display:none}.btn{border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:11px 16px;font-size:.92rem;font-weight:600;transition:transform .2s,background .2s,border-color .2s,box-shadow .2s;display:inline-flex}.btn:active{transform:scale(.97)}.btn-primary{color:#1a1208;background:linear-gradient(135deg,#f0b45d,#d8892e);box-shadow:0 10px 28px #e8a54b47}.btn-primary:hover{box-shadow:0 14px 36px #e8a54b66}.btn-ghost{border-color:var(--line);color:var(--text);background:#ffffff0a}.btn-ghost:hover{background:var(--teal-soft);border-color:#7ec8c466}.btn-teal{background:var(--teal-soft);color:var(--teal);border-color:#7ec8c459}.btn-teal:hover{background:#7ec8c433}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.top-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.section-title{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 10px;font-size:.95rem}.muted{color:var(--text-muted);margin:0;font-size:.85rem;line-height:1.45}.dropzone{border-radius:var(--radius-sm);text-align:center;cursor:pointer;background:linear-gradient(160deg,#7ec8c40f,#0000 60%),#00000026;border:1.5px dashed #7ec8c459;padding:22px 16px;transition:border-color .2s,background .2s,transform .2s;position:relative}.dropzone:hover,.dropzone.active{border-color:var(--accent);background:var(--accent-soft);transform:translateY(-1px)}.dropzone strong{font-family:var(--font-display);margin-bottom:4px;display:block}.dropzone input{opacity:0;cursor:pointer;position:absolute;inset:0}.stats-grid{grid-template-columns:repeat(2,1fr);gap:8px;margin-top:12px;display:grid}.stat{border:1px solid var(--line);background:#ffffff08;border-radius:12px;padding:10px 12px}.stat span{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin-bottom:4px;font-size:.7rem;display:block}.stat strong{font-family:var(--font-display);letter-spacing:-.02em;font-size:1.05rem;font-weight:700}.chip-row{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.chip{border:1px solid var(--line);color:var(--text-muted);background:#ffffff08;border-radius:999px;padding:7px 12px;font-size:.78rem;font-weight:600;transition:all .2s}.chip.active{color:var(--bg);background:var(--teal);border-color:var(--teal)}.chip:hover:not(.active){color:var(--text);border-color:#7ec8c473}.transport{align-items:center;gap:14px;width:min(920px,100%);margin:0 auto;padding:14px 18px;display:flex}.transport-btn{color:#1a1208;background:linear-gradient(135deg,#f0b45d,#d8892e);border-radius:50%;flex-shrink:0;place-items:center;width:48px;height:48px;display:grid;box-shadow:0 10px 28px #e8a54b4d}.transport-btn:disabled{opacity:.4}.scrubber{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.scrubber input[type=range]{width:100%;accent-color:var(--accent);height:4px}.scrubber-meta{color:var(--text-muted);font-variant-numeric:tabular-nums;justify-content:space-between;font-size:.75rem;display:flex}.marker-list{flex-direction:column;gap:8px;margin-top:10px;display:flex}.marker-item{border:1px solid var(--line);background:#ffffff08;border-radius:12px;align-items:center;gap:10px;padding:8px 10px;display:flex}.marker-thumb{object-fit:cover;background:#1a2e28;border-radius:8px;flex-shrink:0;width:40px;height:40px}.marker-item input{background:0 0;border:none;outline:none;flex:1;min-width:0;padding:4px 0}.marker-item .remove{color:var(--text-muted);border-radius:8px;padding:4px 8px}.marker-item .remove:hover{color:var(--danger);background:#ef6b5c1f}.mode-banner{z-index:3;color:#1a1208;pointer-events:none;background:#e8a54beb;border-radius:999px;padding:10px 16px;font-size:.85rem;font-weight:600;position:absolute;top:96px;left:50%;transform:translate(-50%);box-shadow:0 12px 40px #00000059}.token-gate{z-index:10;background:radial-gradient(800px 500px at 50% 20%, #e8a54b2e, transparent 60%), var(--bg);place-items:center;padding:24px;display:grid;position:absolute;inset:0}.token-card{width:min(480px,100%);padding:28px}.token-card h2{font-family:var(--font-display);letter-spacing:-.03em;margin:0 0 8px;font-size:1.8rem}.token-card label{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin:18px 0 8px;font-size:.8rem;display:block}.token-card input{border:1px solid var(--line);background:#00000040;border-radius:12px;outline:none;width:100%;padding:12px 14px}.token-card input:focus{border-color:var(--accent)}.hero-empty{z-index:1;pointer-events:none;text-align:center;place-items:center;padding:24px;display:grid;position:absolute;inset:0}.hero-empty h2{font-family:var(--font-display);letter-spacing:-.04em;max-width:14ch;margin:0;font-size:clamp(2rem,5vw,3.4rem);line-height:1.05}.hero-empty p{max-width:36ch;color:var(--text-muted);margin:14px auto 0;font-size:1.05rem}.export-progress{z-index:4;text-align:center;min-width:240px;padding:12px 18px;position:absolute;bottom:110px;left:50%;transform:translate(-50%)}.export-bar{background:#ffffff14;border-radius:999px;height:4px;margin-top:8px;overflow:hidden}.export-bar>span{background:linear-gradient(90deg, var(--teal), var(--accent));height:100%;transition:width .15s linear;display:block}.strava-note{color:var(--text-muted);background:#fc4c0214;border:1px solid #fc4c0240;border-radius:12px;margin-top:10px;padding:10px 12px;font-size:.8rem;line-height:1.4}.strava-note strong{color:#ff6a33}.share-box{border:1px solid var(--line);background:#7ec8c40f;border-radius:12px;flex-direction:column;gap:6px;margin-top:12px;padding:10px 12px;display:flex}.share-url{word-break:break-all;color:var(--teal);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem}.save-pill{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);align-self:flex-start;font-size:.72rem}.photo-grid{grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px;display:grid}.photo-grid-item{aspect-ratio:1;border:1px solid var(--line);background:#0a1512;border-radius:10px;padding:0;overflow:hidden}.photo-grid-item img{object-fit:cover;width:100%;height:100%;display:block}.photo-grid-item:hover{border-color:#e8a54b8c}.timeline-photos{height:36px;margin-bottom:4px;position:relative}.timeline-photo{z-index:2;background:#10221c;border:2px solid #e8a54b;border-radius:8px;width:32px;height:32px;padding:0;position:absolute;top:0;overflow:hidden;transform:translate(-50%);box-shadow:0 6px 16px #00000059}.timeline-photo img{object-fit:cover;width:100%;height:100%;display:block}.map-photo-marker{cursor:pointer;filter:drop-shadow(0 8px 16px #00000073);background:0 0;border:none;width:48px;height:56px;padding:0}.map-photo-marker img{object-fit:cover;background:#1a1208;border:2px solid #ff9a3d;border-radius:10px;width:44px;height:44px;display:block}.map-photo-marker:after{content:"";border-top:9px solid #ff9a3d;border-left:7px solid #0000;border-right:7px solid #0000;width:0;height:0;margin:-1px auto 0;display:block}.photo-lightbox{z-index:20;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#040a08b8;place-items:center;padding:24px;display:grid;position:absolute;inset:0}.photo-lightbox-card{flex-direction:column;gap:12px;width:min(720px,100%);padding:14px;display:flex}.photo-lightbox-card img{object-fit:contain;background:#000;border-radius:12px;width:100%;max-height:min(70vh,640px)}.photo-lightbox-actions{flex-wrap:wrap;gap:8px;display:flex}.upload-jobs{flex-direction:column;gap:8px;max-height:220px;margin-top:12px;display:flex;overflow:auto}.upload-job{border:1px solid var(--line);background:#ffffff08;border-radius:12px;align-items:center;gap:10px;padding:8px;display:flex}.upload-job-thumb{object-fit:cover;background:#1a2e28;border-radius:8px;flex-shrink:0;width:40px;height:40px}.upload-job-meta{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.upload-job-meta strong{white-space:nowrap;text-overflow:ellipsis;font-size:.82rem;overflow:hidden}.upload-job-meta span{color:var(--text-muted);font-size:.75rem}.upload-job-error .upload-job-meta span{color:var(--danger)}.upload-job-done .upload-job-meta span{color:var(--success)}.upload-job-skipped .upload-job-meta span{color:var(--accent)}.upload-job-bar{background:#ffffff14;border-radius:999px;height:3px;margin-top:4px;overflow:hidden}.upload-job-bar>span{background:linear-gradient(90deg, var(--teal), var(--accent));width:40%;height:100%;animation:1s ease-in-out infinite upload-slide;display:block}@keyframes upload-slide{0%{transform:translate(-120%)}to{transform:translate(280%)}}@media (width<=860px){.ui-layer{padding:12px}.mid-row{flex-direction:column;justify-content:flex-start;height:0;overflow:visible}.sidebar-backdrop{z-index:15;-webkit-backdrop-filter:blur(2px);cursor:pointer;background:#040a0894;border:none;margin:0;padding:0;display:block;position:fixed;inset:0}.side-rail{top:max(68px, calc(env(safe-area-inset-top,0px) + 56px));left:12px;right:12px;bottom:calc(118px + env(safe-area-inset-bottom,0px));z-index:20;opacity:0;pointer-events:none;visibility:hidden;width:auto;max-height:none;position:fixed;transform:translateY(10px)scale(.985)}.side-rail.open{opacity:1;pointer-events:auto;visibility:visible;transform:translateY(0)scale(1)}.top-bar{flex-direction:column;align-items:stretch}.top-actions{flex-wrap:wrap;justify-content:stretch}.top-actions .btn{flex:calc(50% - 4px)}.sidebar-toggle{flex:100%}.sidebar-toggle-label{display:inline}}@media (width>=861px){.side-rail:not(.open){opacity:0;pointer-events:none;visibility:hidden;position:absolute;top:0;left:0;transform:translate(calc(-100% - 24px))}}
