.shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.sidebar{display:flex;flex-direction:column;background:var(--surface);border-right:1px solid var(--border);padding:16px 12px;position:sticky;top:0;height:100vh;overflow-y:auto}.sidebar .brand{display:flex;align-items:center;gap:8px;font-weight:600;font-size:15px;color:var(--text);text-decoration:none;padding:4px 8px;margin-bottom:16px}.sidebar .brand img{width:24px;height:24px;filter:brightness(0)}.sidebar nav{display:flex;flex-direction:column;gap:2px}.sidebar nav a{padding:8px 12px;border-radius:var(--radius);color:var(--text-muted);font-weight:500;text-decoration:none}.sidebar nav a:hover{background:var(--bg);color:var(--text);text-decoration:none}.sidebar nav a.active{background:var(--bg);color:var(--text)}.sidebar .spacer{flex:1}.sidebar .sidebar-launchers{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.sidebar .launch-live{background:#d8dadd;border-color:#d8dadd;color:var(--text);justify-content:center}.sidebar .launch-live:hover{background:#c8cbcf;border-color:#c8cbcf}.sidebar .launch-test{background:var(--accent);border-color:var(--accent);color:#fff;justify-content:center}.sidebar .launch-test:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.sidebar .profile{border-top:1px solid var(--border);padding-top:12px;margin-top:0}.sidebar .profile-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.sidebar .profile-name{font-weight:500}.sidebar .profile-role{font-size:12px;color:var(--text-soft);font-weight:500;text-decoration:none}.sidebar .profile-role-owner{cursor:pointer}.sidebar .profile-role-owner:hover{text-decoration:none}.main{padding:24px 32px;max-width:1200px;width:100%}.auth-shell{min-height:100vh;display:grid;place-items:center;background:var(--bg);padding:32px}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:32px;width:100%;max-width:420px;text-align:center}.auth-logo{width:56px;height:56px;margin-bottom:16px;filter:brightness(0)}.auth-title{font-size:18px;font-weight:600;margin:0 0 24px}.auth-err{color:var(--status-rejected);font-size:13px;margin-top:12px}.auth-form{display:flex;flex-direction:column;gap:12px;text-align:left}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:grid;place-items:center;z-index:200;padding:24px}.dialog-card{background:var(--surface);border-radius:8px;box-shadow:0 16px 48px #00000040;max-width:440px;width:100%;padding:20px 22px}.dialog-title{font-size:16px;font-weight:600;color:var(--text);margin-bottom:8px}.dialog-body{font-size:13px;color:var(--text-muted);margin-bottom:16px;line-height:1.5}.dialog-actions{display:flex;justify-content:flex-end;gap:8px}.dupe-card{max-width:680px}.dupe-list{display:flex;flex-direction:column;gap:8px;max-height:60vh;overflow-y:auto}.dupe-row{display:grid;grid-template-columns:80px 1fr auto;gap:12px;align-items:center;padding:8px 12px 8px 8px;border:1px solid var(--border);border-radius:var(--radius)}.dupe-thumb{width:80px;height:80px;border-radius:4px;overflow:hidden;background:var(--bg);display:grid;place-items:center}.dupe-thumb img{width:100%;height:100%;object-fit:cover;display:block}.dupe-thumb-placeholder{font-size:11px;color:var(--text-muted);font-family:ui-monospace,monospace}.dupe-info{display:flex;flex-direction:column;gap:2px}.dupe-date{font-size:14px;font-weight:600;color:var(--text)}.dupe-id{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;color:var(--text-muted)}.dupe-sim{font-size:12px;color:var(--text-muted)}.dupe-actions{display:flex;flex-direction:row;align-items:stretch;gap:8px}.dupe-action-group{display:flex;flex-direction:row;align-items:stretch;border:1px solid var(--border-strong);border-radius:var(--radius);overflow:hidden}.dupe-action-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:14px;background:var(--surface);color:var(--text);border:none;border-right:1px solid var(--border);border-radius:0;font-family:inherit;font-size:11px;font-weight:500;line-height:1.1;cursor:pointer;text-align:center;white-space:nowrap;box-sizing:border-box}.dupe-action-group .dupe-action-btn:last-child{border-right:none}.dupe-action-btn:hover{background:var(--bg)}.dupe-action-active.dupe-action-rejected{background:var(--text);color:#fff}.dupe-action-active.dupe-action-rejected:hover{background:var(--text)}.dupe-action-active.dupe-action-confirmed{background:var(--status-rejected);color:#fff}.dupe-action-active.dupe-action-confirmed:hover{background:var(--status-rejected)}.dupe-action-emphasis{background:var(--accent);color:#fff}.dupe-action-emphasis:hover{background:var(--accent-hover)}.dupe-action-group:has(.dupe-action-active) .dupe-action-btn:not(.dupe-action-active){color:var(--text-muted);background:var(--surface)}.dupe-compare-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000d9;display:grid;place-items:center;z-index:200;cursor:zoom-out;padding:32px}.dupe-compare-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;max-width:min(1400px,95vw);max-height:90vh}.dupe-compare-cell{margin:0;display:flex;flex-direction:column;gap:8px;align-items:center}.dupe-compare-cell img{max-width:100%;max-height:80vh;width:auto;height:auto;object-fit:contain;border-radius:8px;background:#000}.dupe-compare-cell figcaption{color:#fff;font-size:13px;font-weight:500;text-align:center}.section-header{font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);margin:16px 0 8px}.section-spacer{height:32px}.puzzle-list{display:flex;flex-direction:column;gap:8px}.puzzle-row{display:grid;grid-template-columns:160px 1fr;align-items:center;gap:20px;padding:12px}.puzzle-content{display:flex;flex-direction:column;gap:16px;width:100%}.puzzle-content-top{display:flex;align-items:flex-start;gap:20px;width:100%}.puzzle-content-bottom{display:flex;align-items:center;justify-content:space-between;gap:20px;width:100%}.puzzle-img{width:160px;height:160px;border-radius:6px;overflow:hidden;background:var(--bg);display:grid;place-items:center}.puzzle-img img{width:100%;height:100%;object-fit:cover;display:block}.puzzle-img-placeholder{font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;padding:4px 8px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:6px}.puzzle-img-placeholder-pending{color:var(--status-reviewing)}.puzzle-img-placeholder-blocked{color:var(--status-rejected)}.puzzle-event-tag{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;font-size:11px;font-weight:600;color:var(--text-muted);background:var(--bg);border:1px solid var(--border);border-radius:999px;white-space:nowrap}.puzzle-event-swatch{width:9px;height:9px;border-radius:50%;border:1px solid var(--border-strong);flex-shrink:0}.puzzle-meta{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}.puzzle-uploader-row{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.puzzle-uploader{font-size:12px;font-weight:500;color:var(--text-soft)}.puzzle-uploader-sep{color:#c0c5cb;font-size:12px;font-weight:500}.puzzle-archive-link{background:none;border:none;padding:0;font-size:12px;font-weight:500;color:#b0b6bd;cursor:pointer;font-family:inherit}.puzzle-archive-link:hover{color:var(--status-rejected);text-decoration:underline}.puzzle-archive-link-danger{color:#b0b6bd}.puzzle-archive-link-danger:hover{color:var(--status-rejected)}.puzzle-test-btn{flex-shrink:0}.btn-similar-soft{background:var(--bg);border-color:var(--border-strong);color:var(--text-muted)}.btn-similar-soft:hover{background:var(--surface);color:var(--text)}.btn-dupe-emphasis{background:#fef2f2;border-color:var(--status-rejected);color:var(--status-rejected)}.btn-dupe-emphasis:hover{background:#fee2e2}.puzzle-grade{letter-spacing:.02em}.puzzle-grade-A{color:var(--status-ready)}.puzzle-grade-B{color:var(--status-ready);opacity:.85}.puzzle-grade-C{color:var(--text)}.puzzle-grade-D{color:var(--status-failed)}.puzzle-grade-F{color:var(--status-rejected)}.puzzle-grade-na{color:var(--text-muted)}.puzzle-score-wrap{position:relative;display:flex;align-items:flex-start;gap:16px;padding:0 16px;flex-shrink:0}.puzzle-score-rank,.puzzle-score-stat{text-align:right}.puzzle-score-rank .stat-num,.puzzle-score-stat .stat-num{font-size:13px}.puzzle-score-rank .stat-lbl,.puzzle-score-stat .stat-lbl{font-size:10px;letter-spacing:.05em}.puzzle-rank-num{font-weight:600;color:var(--text)}.puzzle-score-num-row{display:flex;align-items:center;justify-content:flex-end;gap:3px;line-height:1;height:13px}.puzzle-score-info{background:none;border:none;padding:0;cursor:pointer;color:var(--text-muted);display:grid;place-items:center;line-height:0}.puzzle-score-info:hover{color:var(--text)}.puzzle-score-popover{position:absolute;right:16px;top:calc(100% + 6px);z-index:5;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);padding:8px 12px;min-width:200px;box-shadow:0 8px 24px #0000001f;display:flex;flex-direction:column;gap:4px;font-size:12px;font-variant-numeric:tabular-nums}.puzzle-score-row{display:flex;justify-content:space-between;gap:16px}.puzzle-score-lbl{color:var(--text-muted);font-weight:500}.puzzle-score-val{font-weight:600;color:var(--text)}.puzzle-score-val.anlt-good{color:var(--status-ready)}.puzzle-score-val.anlt-bad{color:var(--status-rejected)}.btn-flag-approve{background:var(--status-ready);border-color:var(--status-ready);color:#fff}.btn-flag-approve:hover{filter:brightness(.95)}.puzzle-date{font-size:15px;font-weight:600;color:var(--text);line-height:1}.puzzle-id-row{display:flex;align-items:center;gap:8px}.puzzle-id{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;color:var(--text-muted)}.puzzle-note{font-size:12px;font-weight:500;color:var(--status-rejected)}.puzzle-stats{display:flex;gap:24px;padding:0 16px;flex-shrink:0}.puzzle-countdown{display:flex;flex-direction:column;align-items:flex-end;padding:0 16px;flex-shrink:0;text-align:right}.puzzle-countdown-rel{font-size:18px;font-weight:600;color:var(--text);line-height:1}.puzzle-countdown-sub{font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.stat{text-align:right}.stat-num{font-size:18px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;line-height:1}.stat-lbl{font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.vote-up,.vote-down{display:inline-flex;align-items:center;gap:3px}.vote-up{color:var(--status-ready)}.vote-down{color:var(--status-rejected)}.puzzle-img-clickable{cursor:zoom-in}.puzzle-img-clickable:hover{outline:2px solid var(--accent);outline-offset:-2px}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000d9;display:grid;place-items:center;z-index:100;cursor:zoom-out;padding:32px}.lightbox img{max-width:100%;max-height:calc(100% - 60px);object-fit:contain;border-radius:8px;box-shadow:0 16px 64px #0009}.lightbox-content{display:flex;flex-direction:column;align-items:center;gap:8px;max-width:100%;max-height:100%;cursor:default}.lightbox-content .btn{background:#fffffff2;color:var(--text)}.lightbox-content .btn:hover{background:#fff}.badge-live{background:var(--status-ready)}.crop-shell{width:100%;display:flex;flex-direction:column;align-items:center}.crop-stage{position:relative;max-width:100%;max-height:70vh;border-radius:var(--radius);overflow:hidden;-webkit-user-select:none;user-select:none}.crop-stage img{width:100%;height:100%;display:block;pointer-events:none}.crop-box{position:absolute;border:2px solid white;box-shadow:0 0 0 9999px #00000080;cursor:move}.crop-box .handle{position:absolute;width:12px;height:12px;background:#fff;border:1px solid var(--text);border-radius:2px}.crop-box .handle.tl{top:-6px;left:-6px;cursor:nwse-resize}.crop-box .handle.tr{top:-6px;right:-6px;cursor:nesw-resize}.crop-box .handle.bl{bottom:-6px;left:-6px;cursor:nesw-resize}.crop-box .handle.br{bottom:-6px;right:-6px;cursor:nwse-resize}.pill-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.pill{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 12px;border:1px solid var(--border-strong);border-radius:999px;background:var(--surface);color:var(--text);cursor:pointer;font-size:13px;font-weight:500;white-space:nowrap}.pill:hover{background:var(--bg)}.pill-active{background:var(--accent);border-color:var(--accent);color:#fff}.pill-active:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.pill-sep{color:#c0c5cb;font-weight:500}.pill-count{color:var(--text-muted);font-weight:500;font-variant-numeric:tabular-nums}.pill-active .pill-sep,.pill-active .pill-count{color:#ffffffbf}.batch-header{display:flex;justify-content:space-between;align-items:center;gap:16px}.batch-title{font-size:14px;font-weight:600;color:var(--text)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px}.grid-item{position:relative;display:block;width:100%;aspect-ratio:1;background-size:cover;background-position:center;border:1px solid var(--border);border-radius:var(--radius);padding:0;cursor:pointer;overflow:hidden}.grid-item:hover{outline:2px solid var(--accent)}.grid-item-used{cursor:not-allowed;filter:grayscale(.9) opacity(.35)}.grid-item-used:hover{outline:none}.grid-item-used-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;pointer-events:none}.grid-item-wrap{position:relative}.grid-item-warn{position:absolute;top:4px;right:4px;background:transparent;border:none;padding:2px;border-radius:50%;cursor:pointer;display:grid;place-items:center;filter:drop-shadow(0 1px 2px rgba(0,0,0,.4))}.grid-item-warn:hover{filter:drop-shadow(0 2px 4px rgba(0,0,0,.6))}.grid-item-warn-emphasis svg{width:24px;height:24px}.grid-item-warn-emphasis svg circle{fill:var(--status-rejected)}.grid-item-hide{position:absolute;top:4px;left:4px;background:#0000008c;color:#fff;border:none;padding:0;border-radius:50%;width:22px;height:22px;display:grid;place-items:center;line-height:0;cursor:pointer;opacity:0;transition:opacity .15s ease,background .15s ease}.grid-item-wrap:hover .grid-item-hide{opacity:1}.grid-item-hide:hover{background:#000000d9}.grid-item-hide-active{opacity:1;background:var(--status-rejected)}.grid-item-hide-active:hover{background:var(--status-rejected)}.grid-item-hidden .grid-item{filter:grayscale(.7) opacity(.45)}.show-hidden-toggle{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none}.show-hidden-toggle input{accent-color:var(--accent);cursor:pointer}.event-list{display:flex;flex-direction:column;gap:8px}.event-row{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center;padding:12px 16px}.event-swatches{display:flex;gap:4px}.event-swatch{width:28px;height:28px;border-radius:6px;border:1px solid var(--border-strong)}.event-meta{display:flex;flex-direction:column;gap:4px;min-width:0}.event-title-row{display:flex;align-items:center;gap:8px}.event-name{font-size:15px;font-weight:600;color:var(--text)}.event-sub{font-size:12px;color:var(--text-muted)}.event-puzzles-card{max-width:560px}.event-puzzle-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;max-height:50vh;overflow-y:auto}.event-puzzle-row{display:flex;align-items:center;gap:10px;padding:6px;border:1px solid var(--border);border-radius:var(--radius)}.event-puzzle-row-warn{border-color:var(--status-failed);background:#fff7ed}.event-puzzle-thumb{width:56px;height:56px;border-radius:4px;overflow:hidden;background:var(--bg);flex-shrink:0;display:grid;place-items:center}.event-puzzle-thumb img{width:100%;height:100%;object-fit:cover;display:block}.event-puzzle-thumb-placeholder{font-size:9px;color:var(--text-muted);font-family:ui-monospace,monospace;text-align:center;padding:2px}.event-puzzle-date{font-size:13px;font-weight:600;color:var(--text)}.event-puzzle-id{font-size:11px;font-family:ui-monospace,SF Mono,Menlo,monospace;color:var(--text-muted)}.event-puzzle-warn{font-size:12px;font-weight:500;color:var(--status-failed);margin:12px 0 8px}.admins-table th,.admins-table td{vertical-align:top}.admin-name{font-weight:600;color:var(--text)}.h3-sub{font-size:13px;font-weight:600;margin:0 0 8px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.theme-list{display:flex;flex-direction:column;gap:6px}.theme-row{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius)}.theme-swatches{display:flex;gap:4px}.theme-swatch{width:22px;height:22px;border-radius:5px;border:1px solid var(--border-strong)}.theme-meta{display:flex;flex-direction:column;gap:2px}.theme-name{font-size:14px;font-weight:600;color:var(--text)}.theme-rgb{font-size:11px;color:var(--text-muted);font-variant-numeric:tabular-nums}:root{--bg: #f6f7f8;--surface: #ffffff;--border: #e5e7e9;--border-strong: #c8ccd0;--text: #1a1d1f;--text-muted: #555a60;--text-soft: #6b7177;--accent: #2563eb;--accent-hover: #1d4ed8;--status-uploading: #6b7280;--status-reviewing: #f59e0b;--status-checking: #06b6d4;--status-ready: #10b981;--status-rejected: #ef4444;--status-failed: #f97316;--status-stuck: #f59e0b;--status-discarded: #9aa0a6;--radius: 6px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit}.btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);color:var(--text);cursor:pointer;font-size:13px;font-weight:500;white-space:nowrap;text-decoration:none}.btn:hover{background:#f8f9fa;text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn-danger{background:var(--surface);color:var(--status-rejected);border-color:#f5b3b3}.btn-danger:hover{background:#fef2f2}.input,.select,.textarea{width:100%;height:32px;padding:0 10px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);font:inherit;font-size:13px;color:var(--text)}.textarea{height:auto;padding:8px 10px}.input:focus,.select:focus,.textarea:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:var(--accent)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card-pad{padding:16px}.h1{font-size:20px;font-weight:600;margin:0 0 16px}.h2{font-size:16px;font-weight:600;margin:0 0 12px}.muted{color:var(--text-muted)}.soft{color:var(--text-soft);font-size:12px;font-weight:500}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#fff}.badge-uploading{background:var(--status-uploading)}.badge-reviewing{background:var(--status-reviewing)}.badge-checking{background:var(--status-checking)}.badge-ready{background:var(--status-ready)}.badge-rejected{background:var(--status-rejected)}.badge-failed{background:var(--status-failed)}.badge-stuck{background:var(--status-stuck)}.badge-discarded{background:var(--status-discarded)}.row{display:flex;gap:12px;align-items:center}.col{display:flex;flex-direction:column;gap:8px}.spacer{flex:1}.form-row{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.form-row-double{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-lbl{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}table.list{width:100%;border-collapse:collapse;font-size:13px}table.list th,table.list td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border)}table.list th{background:var(--bg);color:var(--text-muted);font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.04em}
