@charset "UTF-8";
#capture-dialog{max-width:min(90vw,700px)}#capture-image{display:block;max-width:100%;max-height:65vh;margin:15px auto;object-fit:contain}.capture-actions{display:flex;align-items:center;justify-content:flex-end;gap:15px}.capture-actions button{float:none}
.zoom-presets{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0}.zoom-presets button,.camera-actions button{border:1px solid #d7e0d0;background:#f8faf4;color:#4b6944;border-radius:7px;font-size:11px;padding:6px 10px}.camera-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:16px}.camera-actions button:last-child{background:#416649;color:#fff;border-color:#416649}
.stage-selection{position:absolute;left:50%;top:15px;transform:translateX(-50%);pointer-events:none;background:#327ccce8;color:white;border:1px solid #ffffffbb;border-radius:8px;padding:5px 17px;font-size:11px;box-shadow:0 2px 7px #244a4530;max-width:65%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:2}
.position-unavailable{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;background:#edf1e8f5;z-index:2;text-align:center;padding:50px 30px;color:#496344}.position-unavailable strong{font-size:17px}.position-unavailable p{font-size:12px;color:#87987c}.position-unavailable button{border:1px solid #bccfb0;background:#fff;border-radius:9px;padding:9px 18px;color:#45643c}#concert-map{touch-action:none}
:root{color-scheme:light;--concert-bg:#f5f6f0;--concert-ink:#25493c;--concert-muted:#858d81;--concert-line:#dee2d7;--concert-blue:#307bd4;--concert-accent:#345c49}*{box-sizing:border-box}body.concert-body{margin:0;background:var(--concert-bg);color:#243d32;font:14px/1.6 system-ui,-apple-system,"Segoe UI","Microsoft YaHei",sans-serif}button,input,select{font:inherit}button,a,input,select{touch-action:manipulation}button{cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #9abdb1;outline-offset:3px}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.concert-header{display:flex;justify-content:space-between;align-items:center;padding:17px 32px;border-bottom:1px solid var(--concert-line);gap:20px;background:#fafbf6}.concert-brand{display:flex;gap:10px;align-items:center;font-size:22px;font-weight:750;white-space:nowrap}.concert-brand img{width:37px;height:37px}.concert-brand small{display:block;font-size:10px;font-weight:400;color:var(--concert-muted);letter-spacing:1px}.concert-header nav{display:flex;gap:25px;font-size:12px}.concert-header nav span{color:var(--concert-muted);font-size:10px}.concert-header nav a:hover{color:var(--concert-blue)}#concert-app{max-width:1800px;margin:0 auto}.concert-finder{position:relative;display:flex;gap:12px;align-items:center;padding:16px 26px;background:#f6f7f2}.venue-search-label{display:flex;flex:1;align-items:center;gap:10px;border:1px solid var(--concert-line);border-radius:12px;padding:9px 14px;background:#fff}.venue-search-label>span:first-child{font-size:23px;line-height:1}.venue-search-label input{flex:1;min-width:0;border:0;outline:none;background:transparent;font-size:13px}.venue-search-label>span:last-child{color:var(--concert-muted);font-size:10px;white-space:nowrap}.venue-select-label{max-width:430px;width:34%}.venue-select-label select{width:100%;background:#fff;border:1px solid var(--concert-line);border-radius:12px;color:var(--concert-ink);padding:11px;font-size:12px}.venue-results{position:absolute;top:66px;left:26px;right:26px;max-width:800px;max-height:360px;overflow:auto;z-index:12;background:#fff;border:1px solid var(--concert-line);border-radius:12px;box-shadow:0 18px 40px #23443120;padding:8px}.venue-results button{width:100%;text-align:left;border:0;background:transparent;color:var(--concert-ink);padding:10px 13px;border-radius:8px;display:block}.venue-results button:hover{background:#edf2eb}.venue-results button small{display:block;color:var(--concert-muted);font-size:10px}.venue-results p{padding:12px;color:var(--concert-muted)}.concert-title{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:4px 28px 18px}.concert-title h1{font-size:24px;margin:0 0 3px;line-height:1.4}.concert-title p{font-size:11px;margin:0;color:var(--concert-muted)}#venue-city{font-size:10px;letter-spacing:1px}.concert-text-button{border:0;background:transparent;color:var(--concert-muted);font-size:11px;white-space:nowrap}.view-tabs{display:grid;grid-template-columns:1fr 1fr;padding:0 26px;background:#fafbf6}.view-tabs button{border:0;border-bottom:3px solid transparent;padding:12px;color:#8f968a;background:transparent;font-size:12px}.view-tabs button.active{border-color:var(--concert-accent);color:var(--concert-ink);font-weight:700}.concert-stage{position:relative;height:clamp(370px,58vh,720px);min-height:370px;overflow:hidden;background:linear-gradient(#e3e9e1,#d7dcd2)}#concert-scene,#concert-map{position:absolute;inset:0;width:100%;height:100%}#concert-scene canvas{display:block;touch-action:none}#concert-map{background:#eff2e8;touch-action:pan-y}#concert-map g[role=button]{cursor:pointer;outline:none}#concert-map g:focus-visible path{stroke:#2a7cd8;stroke-width:2}#concert-map text{pointer-events:none;fill:#415943;font-size:2.2px;text-anchor:middle;dominant-baseline:middle}#concert-map .selected path{fill:#3b83cf!important;stroke:#1765b1}#concert-map .selected text{fill:white}.concert-loading{position:absolute;inset:0;display:flex;flex-direction:column;gap:13px;align-items:center;justify-content:center;z-index:6;background:#e6ece2f2;color:#48634e}.concert-loading span{width:32px;height:32px;border:2px solid #c7d6c4;border-top-color:#42694d;border-radius:50%;animation:concert-spin 1s linear infinite}.concert-loading strong{font-size:13px;font-weight:500}.concert-loading small{font-size:10px;color:#84927f}[hidden]{display:none!important}.stage-tools{position:absolute;right:18px;top:18px;display:grid;background:#fafbf2e8;border:1px solid #d4ddca;border-radius:16px;padding:4px;z-index:3;backdrop-filter:blur(8px)}.stage-tools button{border:0;background:transparent;width:34px;height:35px;color:#657b5e;font-size:22px;border-radius:8px}.stage-tools button:hover,.stage-tools button[aria-pressed=true]{background:#e0eadb;color:#264d35}.stage-mode{position:absolute;left:21px;bottom:18px;display:flex;background:#fafcf1ed;border:1px solid #d7e1cf;border-radius:10px;padding:4px;z-index:3}.stage-mode button{padding:7px 12px;font-size:11px;color:#7e8d75;border:0;background:transparent;border-radius:6px}.stage-mode button.active{background:#3a6145;color:#fff}.scene-hint{position:absolute;right:24px;bottom:24px;color:#8b987f;font-size:10px;pointer-events:none}.phone-frame{position:absolute;inset:9% 20%;border:1px solid #ffffff8c;border-radius:18px;box-shadow:0 0 0 1500px #0008;pointer-events:none;color:white}.phone-frame>span{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);background:#0007;border-radius:20px;padding:4px 15px;font-size:11px;white-space:nowrap}.phone-frame i,.phone-frame b{position:absolute;inset:33.33% 0 auto;border-top:1px solid #ffffff30;transform:none}.phone-frame b{inset:66.66% 0 auto}.phone-frame.portrait{inset:4% 35%}.selection-bar{display:flex;justify-content:space-between;align-items:center;padding:15px 28px;gap:20px;border-bottom:1px solid var(--concert-line);background:#fafbf6}.selection-bar h2{font-size:14px;margin:0}.selection-bar p{margin:2px 0 0;font-size:10px;color:var(--concert-muted)}.selection-actions{display:flex;gap:8px}.selection-actions button{font-size:11px;border:1px solid var(--concert-line);padding:10px 14px;border-radius:11px;background:#f5f6ee;color:#38563e;white-space:nowrap}.selection-actions button.active,.selection-actions button:hover{background:#e6eddf;border-color:#b4c5ac}.concert-controls{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;padding:0 26px}.control-panel{border:1px solid var(--concert-line);border-radius:14px;padding:18px;background:#fff;margin:18px 0 0;min-width:0;grid-column:span 2}.control-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.control-heading h2{font-size:14px;margin:0}.control-heading button{border:0;background:none;font-size:24px;color:#99a38d}.control-panel label{display:block;font-size:11px;margin-top:12px}.control-panel select,.control-panel input:not([type=checkbox]):not([type=range]){width:100%;background:#fbfcf8;border:1px solid var(--concert-line);border-radius:8px;padding:9px 10px;color:#2b4735;font-size:12px;margin-top:5px}.control-panel input[type=range]{width:100%;accent-color:#456b48;display:block;margin:10px 0 0}.control-panel output{float:right;color:#64825c}.control-panel .control-check{display:flex;gap:8px;align-items:center}.control-check input{accent-color:#3c6546}.control-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.range-captions{display:flex;justify-content:space-between;color:#9ba693;font-size:9px}.control-help{font-size:10px;color:#8a9681;line-height:1.8;margin:14px 0 0}.control-panel>a{display:inline-block;color:#5f8458;font-size:11px;margin-top:14px}.concert-community{padding:34px 28px 22px}.community-heading{display:flex;justify-content:space-between;gap:18px;align-items:center}.community-heading p{font-size:11px;color:#939c89;margin:0}.community-heading h2{font-size:21px;margin:3px 0}.concert-primary{background:#355e43;color:#fff;border:0;border-radius:10px;padding:10px 19px;font-size:12px;white-space:nowrap}.photo-actions{display:flex;gap:9px;margin:20px 0;flex-wrap:wrap}.photo-actions a{border:1px solid var(--concert-line);padding:7px 16px;border-radius:8px;font-size:11px;background:#fbfcf6}.photo-actions a:hover{color:#2f79bc;border-color:#a4bcc7}.photo-preview{border:1px dashed #d8e0d0;border-radius:13px;padding:30px;text-align:center;color:#98a28d;font-size:12px;background:#fbfcf5}.photo-preview .photo-grid{text-align:left}.photo-preview .photo-card img{max-height:220px}.concert-sources{margin:8px 28px 25px;padding:17px 19px;border:1px solid var(--concert-line);border-radius:12px;background:#fbfcf6;color:#83917b;font-size:11px}.concert-sources summary{cursor:pointer;font-size:12px;color:#466243}.concert-sources p{line-height:1.9}.concert-sources ul{padding-left:18px}.concert-sources li{margin:6px 0;overflow-wrap:anywhere}.concert-sources a{color:#4c7850;text-decoration:underline}.source-release{font-size:10px}.concert-return{padding:24px 28px;border-top:1px solid var(--concert-line);display:flex;justify-content:space-between;color:#87977d;font-size:12px}.concert-return a{color:#476c43}.concert-footer{padding:20px 28px;border-top:1px solid var(--concert-line);display:flex;gap:24px;font-size:11px;color:#97a08b}.concert-footer span{flex:1}.concert-bottom{display:none}.concert-notice{padding:12px 18px;margin:10px 26px;background:#f3eee0;border:1px solid #e7dfc5;border-radius:10px;color:#7b6947;font-size:12px}.concert-notice.error{color:#97523e;background:#fff1e9;border-color:#efd4c4}.concert-toast{position:fixed;bottom:35px;left:50%;transform:translateX(-50%);background:#294932ee;color:#fff;padding:11px 24px;font-size:12px;border-radius:10px;z-index:50;max-width:90vw}dialog{border:1px solid #d6decd;border-radius:16px;background:#fbfcf6;color:#3a5540;max-width:450px;padding:27px}dialog::backdrop{background:#1c2b2466}dialog h2{font-size:18px}dialog p{font-size:12px;line-height:1.9}dialog button{border:0;background:#3c6349;color:white;padding:9px 20px;border-radius:8px;float:right}.concert-stage:fullscreen{height:100vh;max-height:none}.concert-stage:fullscreen .stage-tools{top:30px}.concert-stage:fullscreen .stage-mode{bottom:30px}@keyframes concert-spin{to{transform:rotate(360deg)}}
@media(max-width:900px){.concert-header{padding:13px 20px}.concert-header nav{gap:15px}.concert-finder{padding:13px 18px;flex-wrap:wrap;gap:9px}.venue-search-label{flex-basis:100%}.venue-select-label{width:100%;max-width:none}.venue-results{top:63px;left:18px;right:18px}.concert-title{padding:3px 20px 15px}.concert-title h1{font-size:22px}.concert-stage{height:55vh;min-height:340px}.selection-bar{padding:13px 18px;align-items:flex-start;flex-direction:column;gap:10px}.selection-actions{width:100%;justify-content:space-between}.selection-actions button{padding:9px 12px;flex:1}.concert-controls{padding:0 18px;grid-template-columns:1fr 1fr}.control-panel{grid-column:span 1}.concert-community{padding:25px 20px 18px}}
@media(max-width:600px){.concert-header{padding:11px 15px;gap:10px}.concert-brand{font-size:18px;gap:7px}.concert-brand img{width:30px;height:30px}.concert-brand small{font-size:8px;letter-spacing:0}.concert-header nav{gap:12px;font-size:10px}.concert-header nav>a:first-child{display:none}.concert-finder{padding:11px 14px}.venue-search-label{padding:8px 12px}.venue-select-label select{padding:9px}.concert-title{padding:3px 16px 14px}.concert-title h1{font-size:20px}.concert-text-button{font-size:10px}.view-tabs{padding:0 14px}.view-tabs button{padding:10px}.concert-stage{height:48vh;min-height:310px}.stage-tools{right:10px;top:10px;border-radius:12px}.stage-tools button{width:30px;height:32px;font-size:20px}.stage-mode{left:11px;bottom:12px}.stage-mode button{font-size:10px;padding:6px 8px}.scene-hint{bottom:54px;left:14px;right:auto;font-size:9px}.selection-bar{padding:13px 14px}.selection-bar p{font-size:9px}.selection-actions{gap:5px}.selection-actions button{font-size:10px;padding:9px 4px;border-radius:8px}.concert-controls{padding:0 14px;grid-template-columns:1fr}.control-panel{grid-column:auto;margin-top:12px;padding:15px}.concert-community{padding:25px 15px 17px}.community-heading h2{font-size:18px}.community-heading p{font-size:9px}.concert-primary{font-size:11px;padding:9px 12px}.photo-actions{gap:7px;margin:16px 0}.photo-actions a{padding:6px 11px;font-size:10px}.photo-preview{padding:24px 15px;font-size:11px}.concert-sources{margin:5px 14px 20px;padding:14px}.concert-sources summary{font-size:11px}.concert-return{padding:20px 15px;font-size:11px;gap:12px;flex-wrap:wrap}.concert-footer{padding:18px 15px 86px;font-size:10px;gap:16px}.concert-bottom{display:flex;position:fixed;bottom:0;left:0;right:0;background:#fafbf2ed;border-top:1px solid var(--concert-line);z-index:20;backdrop-filter:blur(10px);justify-content:space-around;padding:8px 0 max(8px,env(safe-area-inset-bottom))}.concert-bottom a{display:flex;flex-direction:column;align-items:center;font-size:21px;color:#a0aa95;min-width:60px;line-height:1.4}.concert-bottom a span{font-size:10px}.concert-bottom a.active{color:#3b6748}.concert-toast{bottom:83px;white-space:normal;width:max-content;text-align:center}.phone-frame{inset:18% 8%}.phone-frame.portrait{inset:5% 23%}.concert-notice{margin:9px 14px;font-size:11px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}}

/* App-style settings: native top-layer dialogs, with a separately scrolling
   body and always-visible confirmation bar. These never expand the page. */
.concert-controls{display:block;padding:0;margin:0;height:0}
dialog.control-panel{position:fixed;inset:auto;margin:0;left:auto;right:24px;top:80px;bottom:24px;transform:none;display:flex;flex-direction:column;width:380px;max-width:calc(100vw - 36px);max-height:calc(var(--panel-viewport-height,100dvh) - 104px);padding:0;border:1px solid #d9e0d2;border-radius:20px;background:#fbfcf6;color:#35533d;overflow:hidden;box-shadow:0 24px 90px #122e2850;overscroll-behavior:contain}
dialog.control-panel:not([open]){display:none!important}
dialog.control-panel::backdrop{background:#142b2366;backdrop-filter:blur(3px)}
dialog.control-panel button{float:none}
dialog.control-panel .control-heading{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;margin:0;padding:19px 22px 16px;border-bottom:1px solid #e5e9df;background:#fbfcf6}
dialog.control-panel .control-heading h2{font-size:17px;font-weight:650;margin:0}
dialog.control-panel .control-heading [data-close-panel]{display:grid;place-items:center;width:32px;height:32px;margin:-3px -6px -3px 10px;padding:0;border:0;border-radius:50%;background:transparent;font-size:25px;line-height:1;color:#8d9c82}
dialog.control-panel .control-heading [data-close-panel]:hover{background:#ecf1e6;color:#3f6246}
.control-content{flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain;padding:2px 22px 22px;scrollbar-width:thin;scrollbar-color:#ccd8c3 transparent}
.control-panel .control-content label{font-size:13px;line-height:1.6;margin-top:18px;color:#4a6449}
.control-panel .control-content input:not([type=checkbox]):not([type=range]),.control-panel .control-content select{min-height:44px;padding:11px 12px;font-size:14px;background:#fff;border-color:#dbe2d3;border-radius:10px}
.control-panel .control-content input[type=range]{min-height:28px;margin:7px 0 0;cursor:pointer}
.control-content .control-help{font-size:12px;line-height:1.85;color:#8c9882;margin-top:16px}
.control-content .range-captions{font-size:11px;margin-top:0}
.control-content .control-check{padding:7px 0;min-height:34px}
.control-content .control-check input{width:17px;height:17px}
.control-content .zoom-presets button,.control-content .camera-actions button{font-size:12px;padding:8px 11px;min-height:36px}
.control-content>a{display:inline-block;margin-top:18px;font-size:12px;text-decoration:underline;color:#587d50}
.panel-error{padding:11px 13px;margin:16px 0 0;border:1px solid #e8cabb;border-radius:10px;background:#fff3ec;color:#956344;font-size:12px;line-height:1.7}
.control-content .control-secondary{display:inline-block;min-height:36px;margin-top:12px;padding:7px 12px;border:1px solid #dbe3d1;border-radius:8px;background:#f4f7ed;color:#63805a;font-size:12px;font-weight:400}
.control-panel .control-footer{display:flex;flex:0 0 auto;gap:10px;margin:0;padding:14px 22px;border-top:1px solid #e0e6d8;background:#fbfcf6}
.control-footer button{flex:1;min-height:44px;padding:10px 16px;border:1px solid #d7e0d0;border-radius:10px;background:#f6f8f0;color:#6e8261;font-size:13px;line-height:1.5;font-weight:550}
.control-footer [data-apply-panel]{flex:2;background:#315f46;color:#fff;border-color:#315f46}
.control-footer [data-apply-panel]:hover{background:#244f38}
.control-footer [data-apply-panel]:disabled{opacity:.65;cursor:wait}
#position-panel .seat-entry-grid{display:grid;grid-template-columns:1.35fr 1fr 1fr;gap:8px;align-items:end}
#position-panel .seat-entry-grid label{min-width:0}
.position-levels{display:flex;gap:4px;overflow:auto;margin:18px 0 10px;padding:4px;border-radius:10px;background:#eef2e7}
.position-levels button{flex:1;min-width:45px;min-height:36px;padding:7px 5px;border:0;border-radius:7px;background:transparent;color:#91a084;font-size:11px;white-space:nowrap}
.position-levels button.active,.position-levels button[aria-pressed=true]{background:white;color:#416848;box-shadow:0 1px 5px #32462a12;font-weight:600}
#position-map{display:block;width:100%;height:240px;border:1px solid #e4eadc;border-radius:12px;background:#f2f5eb}
#position-map g[role=button]{cursor:pointer;outline:none}
#position-map text{pointer-events:none;fill:#68815d;font-size:2.2px;text-anchor:middle;dominant-baseline:middle}
#position-map g:focus-visible path{stroke:#3282c7;stroke-width:2}
#position-map .selected path{fill:#3b83cd!important;stroke:#1768af}
#position-map .selected text{fill:white}
.position-map-hint{text-align:center;color:#96a389;font-size:10px;margin:6px 0 15px}
@media(max-width:900px){dialog.control-panel{right:18px;top:64px;bottom:18px;max-height:calc(var(--panel-viewport-height,100dvh) - 82px)}}
@media(max-width:600px){
  .concert-controls{padding:0}
  dialog.control-panel,#position-panel,#venue-panel,#stage-panel{left:0;right:0;top:auto;bottom:var(--panel-keyboard-offset,0px);transform:none;width:100%;max-width:none;max-height:calc(var(--panel-viewport-height,100dvh) - 12px);margin:0;border:0;border-top:1px solid #e0e6d8;border-radius:22px 22px 0 0;box-shadow:0 -12px 60px #1d382b35}
  dialog.control-panel .control-heading{padding:18px 20px 15px}
  dialog.control-panel .control-heading h2{font-size:17px}
  .control-content{padding:0 20px 20px}
  .control-panel .control-content input:not([type=checkbox]):not([type=range]),.control-panel .control-content select{font-size:16px}
  .control-panel .control-content label{font-size:13px;margin-top:17px}
  .control-panel .control-footer{padding:13px 20px max(13px,env(safe-area-inset-bottom));gap:10px}
  .control-footer button{min-height:46px;font-size:14px}
  .control-content .control-help{font-size:11px}
}

.venue-browser{width:min(1100px,96vw);max-width:1100px;padding:0;overflow:hidden}.venue-browser header{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid #dce4d6}.venue-browser header button{float:none;background:none;color:#6b8060}.venue-browser>input{width:calc(100% - 32px);margin:0 16px 12px;padding:12px;border:1px solid #d8e2cf;border-radius:10px;font:inherit}.venue-browser>p{margin:10px 16px;color:#819279;font-size:12px}.venue-browser-grid{display:grid;grid-template-columns:20% 23% 57%;height:60vh;border-top:1px solid #dce4d6}.venue-browser-grid section{overflow:auto;border-right:1px solid #dce4d6;padding:8px}.venue-browser-grid h3{font-size:12px;margin:0;padding:8px;background:#f0f4e9}.venue-browser-grid button{display:block;width:100%;float:none;text-align:left;background:transparent;color:#36513d;border-radius:8px;padding:12px;font-size:12px;border-bottom:1px solid #edf1e8}.venue-browser-grid button.active,.venue-browser-grid button:hover{background:#e5eedb}.venue-browser::backdrop{background:#173c3055}@media(max-width:600px){.venue-browser-grid{grid-template-columns:24% 28% 48%;height:65vh}.venue-browser-grid section{padding:3px}.venue-browser-grid button{font-size:11px;padding:10px 5px}.venue-browser{border-radius:15px}.venue-browser>input{font-size:16px}}
/* Live phone viewfinder: one existing WebGL canvas, temporarily hosted here. */
dialog#camera-panel{left:50%;right:auto;top:50%;bottom:auto;transform:translate(-50%,-50%);width:1080px;max-width:calc(100vw - 40px);height:min(900px,92dvh);max-height:calc(var(--panel-viewport-height,100dvh) - 32px)}
#camera-panel .camera-preview-content{padding:20px 24px;scroll-behavior:auto}
.camera-preview-summary{display:flex;justify-content:space-between;align-items:center;gap:15px;margin:0 0 16px;font-size:14px}.camera-preview-summary span{font-size:10px;color:#829078}
.camera-preview-grid{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:24px;align-items:start}
.camera-preview-column{position:sticky;top:0;min-width:0;background:#edf2e7;border-radius:15px;padding:14px}
.camera-preview-host{position:relative;height:min(48dvh,480px);min-height:240px;overflow:hidden;border-radius:12px;background:#e7ede2;isolation:isolate}
.camera-preview-host #concert-scene{position:absolute;inset:0;width:100%;height:100%}.camera-preview-host #phone-frame{border:5px solid #3b544a;outline:1px solid #ffffff55;box-shadow:0 4px 20px #203b2830;pointer-events:none}
.camera-preview-host #phone-frame span{top:12px;left:10px;right:auto;bottom:auto;font-size:10px;background:#284238b8;border-radius:5px;padding:5px 8px;white-space:nowrap}
.camera-preview-host #camera-preview-status{position:absolute;inset:0;z-index:5;display:grid;place-content:center;padding:30px;text-align:center;color:#5c7155;background:#edf2e7;font-size:13px}.camera-preview-host #camera-preview-status[hidden]{display:none}
.camera-unavailable #concert-scene,.camera-unavailable #phone-frame{visibility:hidden}
.camera-gesture-hint{text-align:center;font-size:10px!important;color:#85967e;margin:8px 0!important}.camera-preview-column .camera-zoom-label{margin-top:8px!important;display:block}.camera-zoom-label output{float:right;font-weight:700;font-size:15px;color:#2c654a}
#camera-panel .zoom-presets{display:flex;flex-wrap:nowrap;margin:7px 0;gap:6px}#camera-panel .zoom-presets button{flex:1;padding:7px 2px;min-width:0;border-radius:18px;font-size:12px}
#camera-panel .zoom-presets button.active,#camera-panel .camera-actions button.active,#camera-panel .camera-orientation button.active{background:#e2ecd7;border-color:#a3b68c;color:#365e3c}
.camera-effective-focal{text-align:center;margin:7px 0 0;font-size:11px;color:#69815d}
.camera-preview-settings>label:first-child{margin-top:0!important}.camera-orientation{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:20px}
.camera-orientation button,#camera-panel .camera-actions button,.camera-reset{border:1px solid #d8e2cf;background:#fff;color:#56714e;border-radius:9px;padding:10px 8px;font-size:12px;min-height:42px}
#camera-panel .camera-actions{display:grid;grid-template-columns:1fr 1fr;margin-top:12px}#camera-panel .camera-actions button:last-child{background:#fff;color:#56714e;border-color:#d8e2cf}.camera-reset{width:100%;margin:12px 0}
.camera-advanced{padding:12px;background:#f0f4e9;border-radius:9px;margin:10px 0 16px}.camera-advanced summary{cursor:pointer;font-size:12px;color:#6b805e}
#camera-panel .camera-capture{width:100%;padding:13px;border-radius:10px;background:#315b45;color:#fff;font-size:14px;font-weight:600}#camera-panel .camera-capture:disabled{opacity:.5;cursor:not-allowed}
#camera-panel .control-help{font-size:11px;margin:12px 0}.camera-live-footer span{font-size:11px;color:#8a9a80;flex:1}.camera-live-footer button{flex:0 0 auto;min-width:100px}
@media(max-width:700px){dialog#camera-panel{left:0;right:0;top:0;bottom:0;transform:none;width:100%;height:100dvh;max-width:none;max-height:var(--panel-viewport-height,100dvh);border-radius:0;margin:0}#camera-panel .control-heading{padding:13px 16px}#camera-panel .camera-preview-content{padding:12px}.camera-preview-grid{grid-template-columns:1fr;gap:16px}.camera-preview-column{top:-12px;z-index:2;padding:8px;border-radius:10px;box-shadow:0 5px 8px #28472e08}.camera-preview-host{height:34dvh;min-height:200px;max-height:330px}.camera-preview-summary{margin-bottom:10px;font-size:12px}.camera-preview-summary span{max-width:130px;font-size:9px;text-align:right}.camera-preview-settings{padding:0 4px}.camera-gesture-hint{margin:4px 0!important}#camera-panel .zoom-presets{margin:3px 0}#camera-panel .zoom-presets button{min-height:32px;padding:4px 2px}.camera-effective-focal{font-size:10px;margin-top:4px}#camera-panel .camera-zoom-label{font-size:11px;margin-top:4px!important}.camera-live-footer{padding:9px 16px max(9px,env(safe-area-inset-bottom))!important}.camera-live-footer button{min-height:38px!important}}

.camera-preview-host #phone-frame span{transform:none;position:absolute;margin:0}.camera-preview-host #phone-frame::after{content:"估算场景 · 非实拍";position:absolute;bottom:10px;left:50%;transform:translateX(-50%);background:#203b2fb8;color:#fff;font-size:9px;padding:3px 7px;border-radius:4px;white-space:nowrap}
