*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{min-height:100dvh}#root{min-height:100dvh;display:flex;flex-direction:column}@font-face{font-family:Geist;src:url(/fonts/Geist-Variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Mono;src:url(/fonts/GeistMono-Variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}:root{--color-bg: #fafaf9;--color-surface: #ffffff;--color-surface-raised: #ffffff;--color-border: #e8e5e1;--color-border-light: #f0eeeb;--color-text: #1a1a1a;--color-text-secondary: #5c5c5c;--color-text-muted: #8a8a8a;--color-accent: #2d6a4f;--color-accent-light: #d8f3dc;--color-accent-dark: #1b4332;--color-danger: #d63031;--color-danger-bg: rgba(214, 48, 49, .08);--header-bg: rgba(255, 255, 255, .92);--font-sans: "Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-full: 9999px;--shadow-card: 0 1px 3px rgba(0,0,0,.06), 0 0 0 1px rgba(0,0,0,.04);--shadow-btn: 0 1px 2px rgba(0,0,0,.05)}@media(prefers-color-scheme:dark){:root{--color-bg: #121210;--color-surface: #1a1918;--color-surface-raised: #222120;--color-border: #2e2c29;--color-border-light: #232220;--color-text: #e8e5e1;--color-text-secondary: #a8a4a0;--color-text-muted: #6e6a66;--color-accent: #52b788;--color-accent-light: #1b3a2a;--color-accent-dark: #95d5b2;--color-danger: #ff6b6b;--color-danger-bg: rgba(255, 107, 107, .1);--header-bg: rgba(18, 18, 16, .92);--shadow-card: 0 1px 3px rgba(0,0,0,.2), 0 0 0 1px rgba(255,255,255,.04);--shadow-btn: 0 1px 2px rgba(0,0,0,.15)}}body{font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--color-accent);text-decoration:none}a:hover{color:var(--color-accent-dark)}.container{width:100%;max-width:540px;margin:0 auto;padding:0 20px}@media(min-width:768px){.container,.header-inner{max-width:720px}}@media(min-width:1200px){.container,.header-inner{max-width:860px}}.app-header{position:sticky;top:0;z-index:100;background:var(--header-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--color-border-light)}.header-inner{max-width:540px;margin:0 auto;padding:0 20px;height:52px;display:flex;align-items:center;justify-content:space-between}.header-logo{display:flex;align-items:center;gap:6px;text-decoration:none;color:var(--color-text);font-weight:700;font-size:1rem}.header-logo-icon{width:22px;height:22px;border-radius:4px}.header-nav{display:flex;gap:2px;align-items:center}.nav-link{padding:6px 12px;border-radius:var(--radius-full);text-decoration:none;color:var(--color-text-secondary);font-size:.875rem;font-weight:500;transition:all .15s;background:none;border:none;cursor:pointer;font-family:inherit}.nav-link:hover,.nav-link.active{color:var(--color-text);background:var(--color-border-light)}.nav-logout{color:var(--color-danger);padding:6px}.nav-logout:hover{color:var(--color-danger);background:var(--color-danger-bg)}.main{padding:24px 0 40px;padding-bottom:calc(40px + env(safe-area-inset-bottom,0px));flex:1}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:11px 20px;border-radius:var(--radius-md);font-size:.938rem;font-weight:600;cursor:pointer;border:1.5px solid transparent;text-decoration:none;transition:all .15s;width:100%;font-family:inherit;box-shadow:var(--shadow-btn)}.btn-primary{background:var(--color-text);color:var(--color-surface);border-color:var(--color-text)}.btn-primary:hover{opacity:.88}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{background:transparent;color:var(--color-text);border-color:var(--color-border);box-shadow:none}.btn-secondary:hover{border-color:var(--color-text-muted)}.btn-google{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border)}.btn-google:hover{background:var(--color-border-light)}.btn-email{background:transparent;color:var(--color-text);border-color:var(--color-border);box-shadow:none}.btn-email:hover{border-color:var(--color-text-muted)}.btn-text{background:none;color:var(--color-text-muted);padding:8px;box-shadow:none;border:none}.btn-text:hover{color:var(--color-text)}.btn-lichess{background:#629924;color:#fff;border-color:#629924}.btn-lichess:hover{background:#557e20;border-color:#557e20}.btn-lichess-editor{background:#4a7919;color:#fff;border-color:#4a7919}.btn-lichess-editor:hover{background:#3d6414;border-color:#3d6414}.btn-chesscom{background:#312e2b;color:#fff;border-color:#312e2b}.btn-chesscom:hover{background:#48453f;border-color:#48453f}.btn-flip{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border)}.btn-flip:hover{border-color:var(--color-text-muted)}.btn-save{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.btn-save:hover{opacity:.9}.btn-save.saved{background:var(--color-accent);opacity:.6;cursor:default}.btn-danger{background:transparent;color:var(--color-danger);border-color:var(--color-border);box-shadow:none}.btn-danger:hover{background:var(--color-danger-bg);border-color:var(--color-danger)}.btn-sm{padding:6px 12px;font-size:.813rem;width:auto;border-radius:var(--radius-sm)}.loading{display:flex;justify-content:center;align-items:center;padding:60px;color:var(--color-text-muted);font-size:.938rem}.spinner{width:28px;height:28px;border:2.5px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:spin .7s linear infinite}.spinner.large{width:40px;height:40px}.error-banner{display:flex;align-items:flex-start;gap:10px;background:var(--color-danger-bg);border:1px solid color-mix(in srgb,var(--color-danger) 20%,transparent);color:var(--color-danger);padding:12px 14px;border-radius:var(--radius-md);margin:16px 0;font-size:.875rem;line-height:1.5;animation:errorSlideIn .25s ease-out}.error-banner svg{flex-shrink:0;margin-top:1px}.error-banner-body{flex:1;min-width:0}.error-banner-title{font-weight:600;margin-bottom:2px}.error-banner-message{opacity:.85}.error-banner-dismiss{flex-shrink:0;background:none;border:none;color:var(--color-danger);opacity:.5;cursor:pointer;padding:0;font-size:1.125rem;line-height:1}.error-banner-dismiss:hover{opacity:1}@keyframes errorSlideIn{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.error-msg{background:var(--color-danger-bg);color:var(--color-danger);padding:12px 16px;border-radius:var(--radius-sm);margin:12px 0;font-size:.875rem;line-height:1.5}.login-page{display:flex;align-items:center;justify-content:center;min-height:calc(100dvh - 20px);padding:20px}.login-card{width:100%;max-width:360px;background:var(--color-surface);border-radius:var(--radius-lg);padding:40px 32px;text-align:center;box-shadow:var(--shadow-card)}.login-logo{margin-bottom:12px}.login-logo img{border-radius:12px}.login-card h1{font-size:1.375rem;font-weight:700;letter-spacing:-.01em;margin-bottom:4px}.login-subtitle{color:var(--color-text-secondary);font-size:.938rem;margin-bottom:28px}.login-choices{display:flex;flex-direction:column;gap:10px}.login-divider{display:flex;align-items:center;gap:16px;margin:6px 0;color:var(--color-text-muted);font-size:.813rem}.login-divider:before,.login-divider:after{content:"";flex:1;height:1px;background:var(--color-border)}.login-form{display:flex;flex-direction:column;gap:10px}.login-form input{width:100%;padding:11px 14px;border-radius:var(--radius-sm);border:1.5px solid var(--color-border);background:var(--color-bg);color:var(--color-text);font-size:1rem;font-family:inherit;outline:none;transition:border-color .15s}.login-form input:focus{border-color:var(--color-accent)}.login-form input::placeholder{color:var(--color-text-muted)}.otp-input{text-align:center;font-size:1.5rem!important;letter-spacing:8px;font-family:var(--font-mono)}.otp-hint{color:var(--color-text-secondary);font-size:.875rem}.otp-actions{display:flex;gap:8px;justify-content:center}.otp-actions .btn-text{font-size:.813rem}.scan-section h2{font-size:1.25rem;font-weight:700;letter-spacing:-.01em;margin-bottom:6px}.scan-hint{color:var(--color-text-secondary);margin-bottom:20px;font-size:.938rem}.upload-zone{border:1px solid var(--color-border);border-radius:var(--radius-lg);aspect-ratio:2 / 1;max-width:400px;margin:0 auto;cursor:pointer;transition:all .15s;text-align:center;background:var(--color-surface);box-shadow:0 1px 3px #0000000f,0 1px 2px #0000000a;display:flex;align-items:center;justify-content:center}.upload-zone:hover,.upload-zone.drag-over{border-color:var(--color-accent);background:var(--color-accent-light);box-shadow:0 2px 8px #00000014}.upload-zone.disabled{cursor:not-allowed}.upload-icon{margin-bottom:12px;color:var(--color-text-muted);display:flex;justify-content:center}.upload-title{font-size:1rem;font-weight:600;margin-bottom:4px}.upload-hint{color:var(--color-text-muted);font-size:.875rem}.upload-spinner{margin-bottom:12px;display:flex;justify-content:center}.sticky-upload-bar{position:fixed;top:0;left:0;right:0;z-index:90;transform:translateY(-100%);transition:transform .25s ease;background:var(--color-surface);border-bottom:1px solid var(--color-border);box-shadow:0 2px 8px #00000014}.sticky-upload-bar.visible{transform:translateY(0)}.sticky-upload-inner{max-width:640px;margin:0 auto;padding:8px 16px;display:flex;align-items:center;justify-content:center}.sticky-upload-btn{display:flex;align-items:center;gap:8px;padding:8px 20px;font-size:.875rem}.positions-section{margin-top:36px;padding-top:20px;border-top:1px solid var(--color-border)}.jobs-section{margin-top:28px}.positions-heading{font-size:1.1rem;font-weight:700;letter-spacing:-.01em;margin-bottom:16px}.job-list{display:flex;flex-direction:column;gap:8px}.job-card{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--color-surface);border-radius:var(--radius-md);box-shadow:var(--shadow-card)}.job-card-completed{cursor:pointer;transition:background .15s;position:relative}.job-card-completed:hover{background:var(--color-border-light)}.job-card-content{display:flex;align-items:center;gap:12px;flex:1;min-width:0;cursor:pointer}.job-card-spinner{color:var(--color-accent);flex-shrink:0}.job-card-icon{color:var(--color-danger);flex-shrink:0}.job-card-board{flex-shrink:0;width:80px;height:80px;border-radius:var(--radius-sm);overflow:hidden}.job-card-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.job-card-status{font-size:.875rem;font-weight:500;color:var(--color-text)}.job-card-failed .job-card-status{color:var(--color-danger)}.job-card-meta{font-size:.75rem;color:var(--color-text-secondary)}.job-card-time{font-size:.75rem;color:var(--color-text-muted)}.job-card-arrow{flex-shrink:0;font-size:.813rem;font-weight:600;color:var(--color-accent)}.job-card-actions{display:flex;flex-direction:column;align-items:center;gap:6px;flex-shrink:0}.job-card-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;color:var(--color-text-muted);padding:4px;border-radius:4px;opacity:.5;transition:opacity .15s,color .15s}.job-card-dismiss:hover{opacity:1;color:var(--color-danger, #e53e3e)}@keyframes spin{to{transform:rotate(360deg)}}.spin{animation:spin 1s linear infinite}.result-page{padding-top:4px}.processing-status{display:flex;flex-direction:column;align-items:center;gap:16px;padding-top:80px}.processing-status h2{font-size:1.125rem;font-weight:600}.processing-hint{color:var(--color-text-secondary);font-size:.938rem}.result-warped-preview{display:block;max-width:260px;margin:16px auto;border-radius:var(--radius-md);box-shadow:var(--shadow-card);opacity:.8}.result-board{display:flex;justify-content:center;margin-bottom:16px}.chess-board{border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-card)}.result-fen{display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:12px;position:relative}.fen-text{background:var(--color-surface);border:1px solid var(--color-border);padding:8px 14px;border-radius:var(--radius-sm);font-size:.75rem;font-family:var(--font-mono);word-break:break-all;cursor:pointer;transition:background .15s;color:var(--color-text-secondary)}.fen-text:hover{background:var(--color-border-light)}.copied-badge{position:absolute;top:-8px;right:0;background:var(--color-accent);color:#fff;padding:3px 8px;border-radius:var(--radius-full);font-size:.688rem;font-weight:600;white-space:nowrap;opacity:0;transform:translateY(4px);transition:opacity .2s,transform .2s;pointer-events:none}.copied-badge.visible{opacity:1;transform:translateY(0)}.result-meta{display:flex;gap:8px;justify-content:center;margin-bottom:16px;flex-wrap:wrap}.meta-chip{background:var(--color-surface);border:1px solid var(--color-border);padding:4px 12px;border-radius:var(--radius-full);font-size:.813rem;color:var(--color-text-secondary)}.result-actions{display:flex;gap:8px;margin-bottom:12px}.result-actions .btn{flex:1}.result-links{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.result-links-row{display:flex;gap:8px}.result-links-row .btn{flex:1}.result-links .btn{padding:10px 16px;font-size:.875rem}.btn-back{display:inline-flex;align-items:center;gap:4px;background:none;border:none;color:var(--color-text-secondary);font-size:.875rem;font-weight:500;padding:8px 0;cursor:pointer;width:auto;box-shadow:none}.btn-back:hover{color:var(--color-text-primary)}.result-top-bar{display:flex;justify-content:flex-start;margin-bottom:8px}.empty-state{text-align:center;color:var(--color-text-muted);padding:60px 0;font-size:.938rem}.position-grid{display:flex;flex-direction:column;gap:12px}.position-card{background:var(--color-surface);border-radius:var(--radius-md);padding:16px;display:flex;flex-direction:column;gap:12px;box-shadow:var(--shadow-card)}.position-board-mini{display:flex;justify-content:center}.position-info{display:flex;flex-direction:column;gap:4px}.fen-text-sm{font-size:.688rem;font-family:var(--font-mono);color:var(--color-text-muted);word-break:break-all}.position-date{font-size:.813rem;color:var(--color-text-muted)}.position-actions{display:flex;gap:8px;flex-wrap:wrap}@media(min-width:769px){.position-grid{display:grid;grid-template-columns:repeat(2,1fr)}}@media(min-width:1200px){.position-grid{grid-template-columns:repeat(3,1fr)}}@media(min-width:769px){.result-board .chess-board{width:min(480px,calc(100vw - 60px))!important;height:min(480px,calc(100vw - 60px))!important}}@media(max-width:768px){.result-board .chess-board{width:min(400px,calc(100vw - 40px))!important;height:min(400px,calc(100vw - 40px))!important}}@media(max-width:480px){.result-board .chess-board{width:min(320px,calc(100vw - 40px))!important;height:min(320px,calc(100vw - 40px))!important}.position-board-mini .chess-board{width:160px!important;height:160px!important}.login-card{padding:32px 20px}.header-logo-text{display:none}.container,.header-inner{padding:0 16px}}.consent-overlay{position:fixed;inset:0;z-index:200;background:#00000073;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:20px;animation:consent-fade-in .2s ease-out}@keyframes consent-fade-in{0%{opacity:0}to{opacity:1}}.consent-modal{width:100%;max-width:400px;background:var(--color-surface);border-radius:var(--radius-lg);padding:32px 28px 28px;box-shadow:0 8px 32px #0000002e,0 0 0 1px #0000000f;animation:consent-slide-up .25s ease-out;text-align:center}@media(prefers-color-scheme:dark){.consent-modal{box-shadow:0 8px 32px #00000080,0 0 0 1px #ffffff0f}}@keyframes consent-slide-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.consent-icon{margin-bottom:12px;color:var(--color-accent);display:flex;justify-content:center}.consent-modal h2{font-size:1.25rem;font-weight:700;letter-spacing:-.01em;margin-bottom:8px}.consent-body{color:var(--color-text-secondary);font-size:.938rem;line-height:1.55;margin-bottom:20px}.consent-links{display:flex;justify-content:center;gap:20px;margin-bottom:20px}.consent-links a{display:inline-flex;align-items:center;gap:4px;font-size:.875rem;font-weight:500;color:var(--color-accent);text-decoration:none;padding:6px 12px;border-radius:var(--radius-sm);border:1px solid var(--color-border);transition:all .15s}.consent-links a:hover{background:var(--color-accent-light);border-color:var(--color-accent)}.consent-checkbox{display:flex;align-items:flex-start;gap:10px;text-align:left;font-size:.875rem;color:var(--color-text);cursor:pointer;margin-bottom:20px;line-height:1.45}.consent-checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px;height:20px;min-width:20px;border:1.5px solid var(--color-border);border-radius:5px;background:var(--color-bg);cursor:pointer;margin-top:1px;transition:all .15s;position:relative}.consent-checkbox input[type=checkbox]:checked{background:var(--color-accent);border-color:var(--color-accent)}.consent-checkbox input[type=checkbox]:checked:after{content:"";position:absolute;left:6px;top:2px;width:5px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}.consent-btn{border-radius:var(--radius-md)}
