*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0d0d0d;--surface:#161616;--surface-2:#202020;--surface-3:#2a2a2a;--border:#2e2e2e;--text:#f0f0f0;--text-muted:gray;--accent:#e8a020;--accent-hover:#f0b535;--danger:#e84040;--font:system-ui, -apple-system, "Segoe UI", sans-serif}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}.app-layout{flex-direction:column;height:100dvh;display:flex;overflow:hidden}.app-body{flex:1;display:flex;position:relative;overflow:hidden}.app-body.sidebar-closed .gig-list,.sidebar-backdrop{display:none}.sidebar-toggle{padding:4px 8px;font-size:18px}.app-main{flex:1;padding:28px 32px;overflow-y:auto}.app-header{background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;height:50px;padding:0 20px;display:flex}.header-brand{align-items:center;gap:10px;display:flex}.header-logo{font-size:18px}.app-title{letter-spacing:.3px;color:var(--accent);font-size:15px;font-weight:700}.dirty-badge{color:var(--accent);background:#e8a02026;border:1px solid #e8a0204d;border-radius:10px;padding:1px 8px;font-size:11px}.header-actions{align-items:center;gap:8px;display:flex}.loading-spinner{color:var(--text-muted);font-size:12px}.error-bar{background:var(--danger);color:#fff;cursor:pointer;flex-shrink:0;padding:8px 20px;font-size:13px}.gig-list{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;width:286px;display:flex;overflow-y:auto}.gig-list-header{text-transform:uppercase;letter-spacing:1px;color:var(--text-muted);border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 14px;font-size:11px;font-weight:600;display:flex}.gig-items{padding:6px 0;list-style:none}.gig-item{cursor:pointer;border-radius:6px;align-items:center;height:34px;margin:2px 6px;padding:0 8px 0 14px;transition:background .1s;display:flex}.gig-item:hover{background:var(--surface-2)}.gig-item:hover .gig-clone-btn{opacity:1}.gig-item.active{background:var(--surface-3)}.gig-item.active .gig-item-name{color:var(--accent)}.gig-item-name{text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.gig-clone-btn{opacity:0;font-size:14px;transition:opacity .15s}.gig-empty{color:var(--text-muted);padding:16px 14px;font-size:12px}.btn{cursor:pointer;border:none;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:6px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:background .12s,opacity .12s;display:inline-flex}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--accent);color:#000}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-destructive{background:var(--danger);color:#fff}.btn-destructive:hover:not(:disabled){background:#f05555}.btn-secondary{background:var(--surface-3);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover:not(:disabled){background:#333}.btn-ghost{color:var(--text-muted);background:0 0}.btn-ghost:hover{color:var(--text);background:var(--surface-2)}.btn-icon{color:var(--text-muted);background:0 0;border-radius:4px;padding:3px 7px;font-size:16px;line-height:1}.btn-icon:hover{background:var(--surface-3);color:var(--text)}.btn-danger:hover{color:var(--danger);background:#e840401a}.btn-sm{padding:3px 10px;font-size:12px}.btn-lg{padding:10px 24px;font-size:15px}.login-screen{background:var(--bg);justify-content:center;align-items:center;height:100dvh;display:flex}.login-card{background:var(--surface);border:1px solid var(--border);text-align:center;border-radius:14px;width:380px;max-width:90vw;padding:48px 40px}.login-logo{margin-bottom:12px;font-size:40px}.login-card h1{color:var(--accent);margin-bottom:4px;font-size:26px;font-weight:700}.login-subtitle{color:var(--text-muted);margin-bottom:32px;font-size:14px}.login-note{color:var(--text-muted);margin-top:14px;font-size:12px}.login-error{color:var(--danger);margin-bottom:14px;font-size:13px}.workbook-chooser{text-align:left}.workbook-options{flex-direction:column;gap:10px;margin-bottom:14px;display:flex}.workbook-drive-hint{margin-bottom:14px}.workbook-signout{font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:none;margin:18px auto 0;padding:4px;font-size:12px;text-decoration:underline;display:block}.workbook-recent-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:6px;font-size:11px;font-weight:600}.workbook-recent{border:1px solid var(--border);border-radius:8px;margin:0 0 18px;padding:0;list-style:none;overflow:hidden}.workbook-recent li{align-items:center;display:flex}.workbook-recent li+li{border-top:1px solid var(--border)}.workbook-recent-open{text-align:left;min-width:0;font:inherit;color:var(--text);cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;flex:1;padding:10px 12px;font-size:14px;overflow:hidden}.workbook-recent-open:hover:not(:disabled){background:var(--surface-2)}.workbook-recent-forget{color:var(--text-muted);margin-right:4px}.workbook-current{color:var(--text-muted);word-break:break-all;margin-bottom:18px;font-size:13px}.workbook-current a{color:var(--accent)}.setup-warning{background:var(--surface-2);border:1px solid var(--border);text-align:left;border-radius:8px;padding:16px;font-size:13px}.setup-warning p{color:var(--text-muted);margin-bottom:10px}.setup-warning pre{background:var(--bg);border:1px solid var(--border);color:var(--accent);border-radius:4px;margin-bottom:10px;padding:8px;font-family:monospace;font-size:12px}.setup-warning a{color:var(--accent)}.setlist-editor{max-width:860px}.editor-empty{height:60vh;color:var(--text-muted);justify-content:center;align-items:center;font-size:15px;display:flex}.editor-header{justify-content:space-between;align-items:flex-start;margin-bottom:24px;display:flex}.editor-title{color:var(--text);font-size:22px;font-weight:700}.editor-title-editable{cursor:text;border-bottom:1px dashed #0000}.editor-title-editable:hover{border-bottom-color:var(--text-muted)}.editor-title-input{border:none;border-bottom:1px solid var(--accent);width:min(420px,100%);font-family:inherit;line-height:inherit;background:0 0;outline:none;padding:0;display:block}.editor-meta{color:var(--text-muted);margin-top:2px;font-size:12px;display:block}.editor-actions{flex-shrink:0;align-items:center;gap:10px;display:flex}.singer-stats{background:var(--surface-2);border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;align-items:stretch;gap:2px;display:flex;overflow:hidden}.singer-stat{border-right:1px solid var(--border);flex-direction:column;align-items:center;gap:1px;padding:5px 10px;display:flex}.singer-stat:last-child{border-right:none}.singer-stat-name{color:var(--accent);text-transform:uppercase;letter-spacing:.4px;font-size:11px;font-weight:600}.singer-stat-count{color:var(--text);font-size:16px;font-weight:700;line-height:1}.singer-stat-pct{color:var(--text-muted);font-size:10px}.sets-container{flex-direction:column;gap:18px;display:flex}.add-set-btn{margin-top:18px}.set-block{background:var(--surface);border:1px solid var(--border);border-radius:10px}.set-block-over{border-color:var(--accent)}.set-header{background:var(--surface-2);border-bottom:1px solid var(--border);border-radius:10px 10px 0 0;align-items:center;gap:10px;padding:10px 14px;display:flex}.set-header h3{text-transform:uppercase;letter-spacing:1px;color:var(--accent);font-size:12px;font-weight:700}.set-name{text-transform:uppercase;letter-spacing:1px;color:var(--accent);cursor:pointer;font-size:12px;font-weight:700}.set-name:hover{opacity:.8}.set-name-input{border:none;border-bottom:1px solid var(--accent);color:var(--accent);text-transform:uppercase;letter-spacing:1px;background:0 0;outline:none;width:120px;font-family:inherit;font-size:12px;font-weight:700}.set-count{color:var(--text-muted);flex:1;font-size:12px}.set-songs{min-height:44px}.set-empty{color:var(--text-muted);padding:14px 16px;font-size:12px;font-style:italic}.set-songs,.sets-container{container-type:inline-size}.song-row{border-bottom:1px solid var(--border);grid-template-columns:28px 32px minmax(0,1fr) clamp(60px,24cqi,150px) clamp(44px,12cqi,70px) clamp(30px,7cqi,50px) 28px;grid-template-areas:"drag index title artist singer key remove";align-items:center;gap:8px;padding:7px 14px;transition:background 80ms;display:grid}.song-drag{grid-area:drag}.song-index{grid-area:index}.song-title{grid-area:title}.song-artist{grid-area:artist}.song-singer{grid-area:singer}.song-key{grid-area:key}.song-remove{grid-area:remove}@container (width<=520px){.song-row{grid-template-columns:22px 22px minmax(0,1fr) auto 28px;grid-template-areas:"drag index title key remove""drag index artist singer remove";gap:1px 8px;padding:8px 10px}}.song-row:last-of-type{border-bottom:none}.song-row:hover{background:var(--surface-2)}.song-drag{color:var(--text-muted);cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none;font-size:15px}.song-drag:active{cursor:grabbing}.song-index{color:var(--text-muted);text-align:right;font-variant-numeric:tabular-nums;font-size:12px}.song-title{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:600;overflow:hidden}.song-artist,.song-singer{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.song-key{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-family:monospace;font-size:12px;overflow:hidden}a.song-title{text-decoration:none}a.song-title:hover{color:var(--accent);text-decoration:underline}.song-remove{opacity:0;color:var(--text-muted);font-size:18px;transition:opacity .1s}.song-row:hover .song-remove{opacity:1}.song-row-overlay{background:var(--surface-3);border:1px solid var(--accent);border-radius:6px;box-shadow:0 8px 30px #00000080}.song-search{border-top:1px solid var(--border);padding:8px 14px;position:relative}.song-search-input{background:var(--surface-2);border:1px solid var(--border);width:100%;color:var(--text);border-radius:6px;outline:none;padding:7px 12px;font-family:inherit;font-size:13px;transition:border-color .12s}.song-search-input:focus{border-color:var(--accent)}.song-search-input::placeholder{color:var(--text-muted)}.song-search-results{z-index:100;background:var(--surface-3);border:1px solid var(--border);border-radius:8px;list-style:none;position:absolute;bottom:calc(100% - 8px);left:14px;right:14px;overflow:hidden;box-shadow:0 -8px 24px #00000080}.song-search-item{cursor:pointer;grid-template-columns:minmax(0,1fr) clamp(60px,30cqi,130px) clamp(40px,14cqi,65px);align-items:center;gap:8px;padding:9px 12px;transition:background 80ms;display:grid}.song-search-item:hover{background:var(--surface-2)}.sr-title{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;overflow:hidden}.sr-artist,.sr-singer{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.song-search-add{cursor:pointer;border-top:1px solid var(--border);flex-direction:column;gap:2px;padding:9px 12px;transition:background 80ms;display:flex}.song-search-add:first-child{border-top:none}.song-search-add:hover{background:var(--surface-2)}.song-search-add-note{color:var(--text-muted);font-size:11px;font-style:italic}.song-search-add-label{color:var(--accent);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.song-search-add-title{color:var(--text);font-weight:500}.venue-view{max-width:900px}.venue-grid{grid-template-columns:repeat(auto-fill,minmax(min(380px,100%),1fr));gap:16px;display:grid}.venue-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden}.venue-card-header{background:var(--surface-2);border-bottom:1px solid var(--border);padding:12px 16px}.venue-name{color:var(--text);margin-bottom:6px;font-size:14px;font-weight:700}.venue-meta{align-items:center;gap:8px;display:flex}.venue-contact{color:var(--text-muted);font-size:12px}.venue-status{text-transform:uppercase;letter-spacing:.5px;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600}.status-confirmed{color:#40c060;background:#40c06026;border:1px solid #40c0604d}.status-contacted{color:var(--accent);background:#e8a02026;border:1px solid #e8a0204d}.status-default{background:var(--surface-3);color:var(--text-muted);border:1px solid var(--border)}.venue-details{flex-direction:column;gap:4px;padding:10px 16px;display:flex}.venue-detail-row{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.venue-cell{color:var(--text-muted);font-size:12px}.venue-link{color:var(--accent);word-break:break-all;font-size:12px;text-decoration:none}.venue-link:hover{text-decoration:underline}.migrate-banner{background:var(--surface-2);border:1px solid var(--accent);border-radius:8px;align-items:center;gap:16px;margin-bottom:20px;padding:12px 16px;display:flex}.migrate-banner-text{color:var(--text-muted);flex:1;font-size:13px}.migrate-banner-text strong{color:var(--text);margin-bottom:2px;display:block}.gig-migrate-dot{background:var(--accent);border-radius:50%;flex-shrink:0;width:7px;height:7px;margin-left:auto;margin-right:4px}.modal-overlay{z-index:200;background:#000000a6;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);border-radius:12px;width:440px;max-width:92vw;padding:28px}.modal h2{margin-bottom:20px;font-size:16px;font-weight:700}.field-label{color:var(--text-muted);flex-direction:column;gap:6px;margin-bottom:22px;font-size:13px;display:flex}.field-label input[type=text]{background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:6px;outline:none;padding:8px 12px;font-family:inherit;font-size:13px;transition:border-color .12s}.field-label input[type=text]:focus{border-color:var(--accent)}.field-hint{color:var(--text-muted);font-size:11px;line-height:1.6}.field-hint code{background:var(--surface-3);color:var(--accent);border-radius:3px;padding:1px 4px;font-family:monospace;font-size:11px}.new-song-form .field-label{margin-bottom:14px}.new-song-row{grid-template-columns:minmax(0,1fr) 90px;gap:12px;display:grid}.new-song-hint{margin-bottom:16px}.new-song-error{color:var(--danger);margin-bottom:12px;font-size:12px}.modal-body{color:var(--text-muted);margin-bottom:24px}.modal-body strong{color:var(--text)}.modal-actions{justify-content:flex-end;gap:8px;display:flex}.master-tunes{max-width:1100px}.master-toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;display:flex}.master-filter{flex:200px;max-width:360px}.master-table-scroll{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow-x:auto}.master-table{border-collapse:collapse;width:100%}.master-table th{z-index:1;background:var(--surface-2);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:8px 10px;font-size:11px;font-weight:600;position:sticky;top:0}.master-sort{color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;background:0 0;border:none;align-items:center;gap:4px;padding:0;display:inline-flex}.master-sort:hover,th[aria-sort] .master-sort{color:var(--text)}.master-sort-arrow{color:var(--accent);min-width:9px;font-size:9px}.master-table td{border-bottom:1px solid var(--border);min-width:110px;padding:0}.master-table tbody tr:last-child td{border-bottom:none}.master-table tr:hover .song-remove{opacity:1}.master-row-new td{background:#e8a0200f}.master-cell{width:100%;color:var(--text);font:inherit;background:0 0;border:1px solid #0000;border-radius:4px;outline:none;padding:6px 9px;font-size:13px}.master-cell:hover{border-color:var(--border)}.master-cell:focus{border-color:var(--accent);background:var(--surface-2)}.master-table .master-check-cell{text-align:center;width:1%;min-width:0;padding:0 12px}.master-check{width:18px;height:18px;accent-color:var(--accent);cursor:pointer;vertical-align:middle}.master-table td.master-remove-cell{text-align:center;width:36px;min-width:0}.master-empty{text-align:center;color:var(--text-muted);padding:20px}@media (hover:none){.song-remove,.gig-clone-btn{opacity:1}.song-search-input,.set-name-input,.master-cell,.field-label input[type=text]{font-size:16px}}@media (width<=768px){.gig-list{z-index:150;width:min(286px,85vw);position:absolute;top:0;bottom:0;left:0;box-shadow:8px 0 30px #00000080}.app-body.sidebar-open .sidebar-backdrop{z-index:140;background:#00000080;display:block;position:absolute;inset:0}.app-header{padding:0 10px}.app-main{padding:14px 10px}.editor-header{flex-wrap:wrap;gap:12px}.editor-actions{flex-wrap:wrap}.gig-item{height:42px}.song-remove{font-size:20px}}@media (width<=420px){.header-logo{display:none}}
