:root{--ff-bg:#f7f7f5;--ff-ink:#1f2529;--ff-muted:#6f7478;--ff-primary:#d5a900;--duxster-gold:#ffcc00;--duxster-gold-dark:#d5a900;--duxster-black:#111;--ff-field:#76a77b;--ff-field-dark:#5f9067;--ff-line:rgba(255,255,255,.86);--ff-danger:#c94b58}
body{background:var(--ff-bg);color:var(--ff-ink)}.navbar-brand{letter-spacing:-.02em}.brand-mark{width:56px;height:56px;border-radius:18px;display:grid;place-items:center;background:#e8f1fb;color:var(--ff-primary);font-size:1.5rem}.auth-shell{min-height:100vh;display:grid;place-items:center;padding:2rem}.auth-card{width:min(440px,100%);border-radius:1.25rem}.card{border-radius:1rem}.empty-state{background:linear-gradient(135deg,#fff,#edf5ff)}
.field-wrap{background:#e7edf2;border-radius:.9rem;overflow:auto;padding:.45rem}.field-wrap svg{width:100%;min-width:760px;height:auto;display:block;border-radius:.65rem;touch-action:none;box-shadow:inset 0 0 0 1px rgba(20,40,50,.08)}
.performer-dot{cursor:grab}.performer-dot:active{cursor:grabbing}.performer-dot .dot-ring{transition:.12s ease}.performer-dot:hover .dot-ring{stroke-width:3}.field-label{font-size:12px;font-weight:700;fill:rgba(255,255,255,.88);user-select:none}.field-small-label{font-size:9px;font-weight:600;fill:rgba(255,255,255,.68);user-select:none}.performer-label{font-size:9px;font-weight:800;fill:#17212b;text-anchor:middle;dominant-baseline:central;pointer-events:none}.performer-tag{font-size:8px;font-weight:700;fill:#fff;text-anchor:middle;pointer-events:none;text-shadow:0 1px 2px rgba(0,0,0,.7)}
.path-arrow{stroke:#163953;stroke-width:1.6;stroke-opacity:.68;fill:none;pointer-events:none}.path-arrow.warn{stroke:#a56500}.path-arrow.danger{stroke:#b42336;stroke-width:2.4}.collision-ring{fill:none;stroke:#e43d52;stroke-width:3;stroke-dasharray:4 3;pointer-events:none}.hash-tick{stroke:rgba(255,255,255,.64);stroke-width:1}.sideline{stroke:#fff;stroke-width:3}.yard-line{stroke:rgba(255,255,255,.82);stroke-width:1.4}.yard-line.midfield{stroke-width:2.6}.minor-line{stroke:rgba(255,255,255,.22);stroke-width:.7}.end-zone-shade{fill:rgba(255,255,255,.055)}
.legend-dot{display:inline-block;width:.78rem;height:.78rem;border-radius:50%;border:1px solid #43515d;margin-right:.35rem;vertical-align:-.05rem}.legend-musician{background:#fff}.legend-percussion{background:#ffd166}.legend-guard{background:#f7a8c4}.designer-toolbar .form-control,.designer-toolbar .form-select{min-height:31px}.set-list{max-height:420px;overflow:auto}.set-loader.active small{color:rgba(255,255,255,.72)!important}.movement-table{max-height:280px;overflow:auto}.move-row{display:grid;grid-template-columns:52px 1fr auto;gap:.6rem;align-items:center;padding:.55rem .85rem;border-top:1px solid #edf0f2;font-size:.78rem}.move-row .meter{height:5px;background:#e9eef2;border-radius:4px;overflow:hidden;margin-top:.22rem}.move-row .meter span{display:block;height:100%;background:#73a57c}.move-row.warn .meter span{background:#d29a38}.move-row.danger .meter span{background:#c94b58}.move-row strong{font-size:.78rem}.roster-group-title{text-transform:uppercase;letter-spacing:.08em;font-size:.68rem;font-weight:800;color:#7d8993;margin-top:1rem}.music-now{min-width:180px}.form-lock{opacity:.68}.field-toast{position:absolute;right:1rem;top:1rem;z-index:3}.field-wrap{position:relative}
@media(max-width:1199px){.set-list{max-height:300px}.field-wrap svg{min-width:680px}}
.performer-dot.selected .dot-ring{stroke:#245fa4;stroke-width:4}.waypoint-dot{fill:#fff;stroke:#245fa4;stroke-width:2;pointer-events:all;cursor:grab}.waypoint-dot:active{cursor:grabbing}.lasso-rect{fill:rgba(36,95,164,.12);stroke:#245fa4;stroke-width:1.5;stroke-dasharray:6 4;pointer-events:none}.path-arrow{stroke-linejoin:round;stroke-linecap:round}.field-mini-toast{position:fixed;right:1.25rem;bottom:1.25rem;z-index:2000;max-width:360px}.waypoint-help{min-height:30px}

/* Milestone 6 music timeline */
.waveform-shell{border:1px solid var(--bs-border-color);border-radius:.65rem;padding:.65rem;background:#f8fafb}
#waveformCanvas{display:block;width:100%;height:110px;border-radius:.4rem;cursor:crosshair;background:#f5f8fa}
.show-timeline{border-top:1px solid var(--bs-border-color);padding-top:.75rem}
.timeline-lane{display:grid;grid-template-columns:minmax(120px,180px) 1fr;gap:.65rem;align-items:center}
.timeline-label{font-size:.78rem;color:#52616b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.timeline-track{height:28px;position:relative;background:#eef3f6;border-radius:999px;border:1px solid #dbe3e8}
.timeline-marker{position:absolute;top:50%;transform:translate(-50%,-50%);width:24px;height:24px;border:0;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.18);font-size:.68rem;font-weight:700;color:#274c68;padding:0}
.timeline-marker:hover{background:#e9f2f8}
@media (max-width:768px){.timeline-lane{grid-template-columns:1fr}.timeline-label{margin-bottom:-.35rem}}
.waveform-shell{position:relative}
.waveform-playhead{position:absolute;top:.65rem;bottom:2rem;width:2px;background:rgba(180,35,55,.75);left:.65rem;pointer-events:none;z-index:2;display:none}
.smart-preview-dot{pointer-events:none}.smart-preview-label{font-size:8px;font-weight:700;fill:#0d6efd}.smart-preview-dot circle{filter:drop-shadow(0 1px 1px rgba(13,110,253,.18))}#candidatePanel .badge{min-width:46px}.solver-section-limit{font-variant-numeric:tabular-nums}

/* Milestone 8 performer and rehearsal experience */
.performer-shell{max-width:980px}.coordinate-callout{font-size:clamp(1.05rem,4vw,1.55rem);font-weight:800;background:#eef5ff;border-radius:.85rem;padding:1rem;color:#24496d}.personal-field{width:100%;height:auto;display:block;border-radius:.7rem;box-shadow:inset 0 0 0 1px rgba(20,40,50,.08)}.personal-key{display:inline-block;width:.72rem;height:.72rem;border-radius:50%;margin-right:.3rem}.personal-key.prev{background:#6c757d}.personal-key.current{background:#0d6efd}.personal-key.next{background:#fd7e14}.performer-set-list{max-height:520px;overflow:auto}.performer-set-row{padding:.85rem 1rem}.performer-set-row.active .badge{background:rgba(255,255,255,.18)!important;color:#fff!important}.tab-pane>.card,.tab-pane .card{border-radius:1rem}@media(max-width:576px){.performer-shell{padding-top:.75rem!important}.coordinate-callout{padding:.8rem}.performer-set-list{max-height:none}}

/* Milestone 9 Duxster brand system */
.duxster-navbar-brand{display:flex;align-items:center;gap:.5rem;font-weight:800;color:#111!important;letter-spacing:-.025em}.duxster-header-icon{width:36px;height:36px;object-fit:contain}.duxster-auth-shell{background:radial-gradient(circle at 20% 10%,#fff6bf 0,rgba(255,246,191,0) 38%),linear-gradient(135deg,#f7f7f5,#fff)}.auth-layout{width:min(1080px,100%);display:grid;grid-template-columns:minmax(0,1.15fr) minmax(360px,.85fr);gap:2rem;align-items:center}.duxster-login-hero{padding:2rem 1rem}.duxster-login-logo{display:block;width:min(650px,100%);height:auto;margin-bottom:1.25rem}.duxster-login-hero h1{font-size:clamp(2rem,4vw,3.4rem);line-height:1.02;max-width:760px;font-weight:900;letter-spacing:-.045em;color:#111}.duxster-login-hero p{font-size:1.08rem;max-width:650px;color:#5c6063}.duxster-hero-pills{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.4rem}.duxster-hero-pills span{background:#111;color:#fff;border:2px solid var(--duxster-gold);border-radius:999px;padding:.48rem .8rem;font-size:.84rem;font-weight:700}.duxster-hero-pills i{color:var(--duxster-gold);margin-right:.35rem}.duxster-login-mark{width:82px;height:82px;object-fit:contain}.btn-primary{--bs-btn-bg:#111;--bs-btn-border-color:#111;--bs-btn-hover-bg:#292929;--bs-btn-hover-border-color:#292929;--bs-btn-active-bg:#000;--bs-btn-active-border-color:#000}.text-primary{color:var(--duxster-gold-dark)!important}.auth-card{border-top:5px solid var(--duxster-gold)!important}@media(max-width:900px){.auth-layout{grid-template-columns:1fr;max-width:520px}.duxster-login-hero{text-align:center;padding:.5rem}.duxster-login-logo{margin-inline:auto}.duxster-login-hero h1{font-size:2rem}.duxster-login-hero p{margin-inline:auto}.duxster-hero-pills{justify-content:center}}

/* Milestone 9.2 field interaction hardening */
#field{touch-action:none;-webkit-user-select:none;user-select:none}.performer-dot{cursor:grab;pointer-events:all}.performer-dot:active{cursor:grabbing}.performer-dot text{pointer-events:none}
