.login-container{width:100vw;height:100vh;display:flex;align-items:center;justify-content:center;background-color:#f5f5f5}.login-panel{background:#fff;padding:40px;border-radius:8px;box-shadow:0 2px 10px #0000001a;min-width:400px}.login-header{display:flex;flex-direction:column;align-items:center;gap:15px;margin-bottom:30px}.login-logo{width:64px;height:64px;object-fit:contain}.app-title{font-size:28px;font-weight:600;color:#333;margin:0}.login-form{display:flex;flex-direction:column;gap:16px}.login-instruction{text-align:center;color:#666;font-size:14px;margin:0 0 10px}.login-input{padding:12px 16px;border:1px solid #ddd;border-radius:4px;font-size:14px;transition:border-color .2s}.login-input:focus{outline:none;border-color:#4caf50}.login-input::placeholder{color:#999}.login-input:disabled{background-color:#f5f5f5;cursor:not-allowed}.login-button{padding:12px 24px;background-color:#4caf50;color:#fff;border:none;border-radius:4px;font-size:16px;font-weight:500;cursor:pointer;transition:background-color .2s;text-transform:lowercase}.login-button:hover:not(:disabled){background-color:#45a049}.login-button:disabled{background-color:#ccc;cursor:not-allowed}.error-message{color:#d32f2f;font-size:13px;text-align:center;margin:0;padding:8px;background-color:#ffebee;border-radius:4px}.parameter-input{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.parameter-label{font-size:13px;font-weight:600;color:#2c3e50}.required-mark{color:#e74c3c;margin-left:4px}.parameter-select,.parameter-number,.parameter-text{padding:8px 10px;font-size:14px;border:2px solid #ddd;border-radius:4px;background:#fff;transition:border-color .2s}.parameter-select{cursor:pointer}.parameter-select:hover:not(:disabled),.parameter-number:hover:not(:disabled),.parameter-text:hover:not(:disabled){border-color:#3498db}.parameter-select:focus,.parameter-number:focus,.parameter-text:focus{outline:none;border-color:#3498db}.parameter-select option:disabled{color:#d32f2f;font-style:italic}.parameter-description{font-size:11px;color:#7f8c8d;font-style:italic;margin-top:-2px}.api-call-backdrop{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100000}.api-call-modal{background:#fff;border-radius:8px;box-shadow:0 4px 20px #0000004d;width:90%;max-width:800px;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}.api-call-header{display:flex;justify-content:space-between;align-items:center;padding:15px 20px;border-bottom:1px solid #e0e0e0}.api-call-header h3{margin:0;font-size:18px;font-weight:600;color:#333}.api-call-close{background:none;border:none;font-size:28px;cursor:pointer;color:#666;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;line-height:1}.api-call-close:hover{color:#333}.api-call-content{padding:20px;overflow-y:auto;flex:1}.api-call-section{margin-bottom:25px}.api-call-section:last-child{margin-bottom:0}.api-call-section h4{margin:0 0 10px;font-size:15px;font-weight:600;color:#2c3e50}.api-call-code{background:#f5f5f5;border:1px solid #e0e0e0;border-radius:4px;padding:12px;font-family:Courier New,monospace;font-size:13px;color:#333;overflow-x:auto;word-break:break-all;white-space:pre-wrap}.api-call-code pre{margin:0;white-space:pre-wrap}.api-call-empty{color:#999;font-style:italic}.error-modal-backdrop{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100000}.error-modal{background:#fff;border-radius:8px;box-shadow:0 4px 20px #0000004d;width:90%;max-width:500px;display:flex;flex-direction:column;overflow:hidden}.error-modal-header{display:flex;justify-content:space-between;align-items:center;padding:15px 20px;border-bottom:1px solid #e0e0e0;background-color:#fee}.error-modal-header h3{margin:0;font-size:18px;font-weight:600;color:#c33}.error-modal-close{background:none;border:none;font-size:28px;cursor:pointer;color:#c33;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;line-height:1}.error-modal-close:hover{color:#a22}.error-modal-content{padding:20px;flex:1}.error-modal-message{color:#333;font-size:14px;line-height:1.5;word-wrap:break-word}.error-modal-footer{display:flex;justify-content:flex-end;padding:15px 20px;border-top:1px solid #e0e0e0;background-color:#f9f9f9}.error-modal-ok-button{padding:8px 24px;background-color:#c33;color:#fff;border:none;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;transition:background-color .2s}.error-modal-ok-button:hover{background-color:#a22}.error-modal-ok-button:active{background-color:#911}.control-panel{position:fixed;left:0;top:0;width:320px;height:100vh;background:#fffffff2;box-shadow:2px 0 12px #0000001a;padding:20px;display:flex;flex-direction:column;gap:20px;overflow-y:auto;z-index:100}.panel-header{display:flex;align-items:center;gap:12px;padding-bottom:15px;border-bottom:2px solid #e0e0e0}.panel-logo{width:48px;height:48px;object-fit:contain}.panel-title{margin:0;font-size:22px;font-weight:600;color:#2c3e50}.panel-version-row{display:flex;justify-content:space-between;align-items:center;margin-top:-10px;gap:10px}.panel-version{font-size:12px;color:#7f8c8d}.swagger-link{font-size:12px;color:#3498db;text-decoration:none;transition:color .2s}.swagger-link:hover{color:#2980b9;text-decoration:underline}.user-info{display:flex;flex-direction:column;gap:8px;padding:12px;background:#f8f9fa;border-radius:6px;font-size:13px}.info-row{display:flex;gap:8px}.info-label{font-weight:600;color:#555;min-width:110px}.info-value{color:#333;word-break:break-all;flex:1}.panel-section{display:flex;flex-direction:column;gap:8px}.panel-label{font-size:14px;font-weight:600;color:#2c3e50;transition:color .2s}.panel-label-disabled{color:#95a5a6}.panel-select{padding:10px 12px;font-size:14px;border:2px solid #ddd;border-radius:4px;background:#fff;cursor:pointer;transition:border-color .2s}.panel-select:hover:not(:disabled){border-color:#3498db}.panel-select:focus{outline:none;border-color:#3498db}.panel-select:disabled{background:#f5f5f5;cursor:not-allowed;color:#999}.panel-select option:disabled{color:#d32f2f;font-style:italic}.parameters-container{min-height:100px;padding:15px;background:#f8f9fa;border-radius:6px;border:1px dashed #ddd}.placeholder-text{margin:0;color:#999;font-size:13px;text-align:center}.error-message{padding:12px;background:#fee;border:1px solid #fcc;border-radius:4px;color:#c33;font-size:13px;line-height:1.4}.action-buttons-container{display:flex;flex-direction:column;gap:6px;margin-top:auto}.run-analysis-button{padding:14px 24px;font-size:16px;font-weight:600;color:#fff;background:#27ae60;border:none;border-radius:6px;cursor:pointer;transition:background .2s;margin:0}.run-analysis-button:hover:not(:disabled){background:#229954}.run-analysis-button:disabled{background:#95a5a6;cursor:not-allowed}.get-api-call-button{padding:10px 24px;font-size:14px;font-weight:600;color:#fff;background:#d4915a;border:none;border-radius:6px;cursor:pointer;transition:background .2s;margin:0}.get-api-call-button:hover:not(:disabled){background:#c17a42}.get-api-call-button:disabled{background:#95a5a6;cursor:not-allowed}.camera-controls-notification{position:absolute;bottom:20px;left:50%;transform:translate(-50%);background:#ffffffe6;padding:8px 16px;border-radius:4px;box-shadow:0 2px 8px #00000026;font-size:13px;color:#333;z-index:100;white-space:nowrap;pointer-events:none}.obstruction-toggle-button{position:absolute;bottom:120px;right:20px;width:180px;padding:12px 24px;font-size:14px;font-weight:600;color:#fff;background-color:#2196f3;border:none;border-radius:8px;cursor:pointer;transition:transform .1s,box-shadow .2s,background-color .2s;box-shadow:0 4px 12px #00000026;z-index:100}.obstruction-toggle-button:hover{transform:translateY(-1px);background-color:#1976d2;box-shadow:0 6px 16px #0003}.obstruction-toggle-button:active{transform:translateY(0);box-shadow:0 2px 8px #00000026}.vsc-viewer-container{width:100%;height:100%;position:relative}.acoustic-panels-container{position:fixed;top:20px;right:20px;display:flex;flex-direction:row-reverse;gap:20px;z-index:100;align-items:flex-start}.noise-levels-legend{background-color:#fffffff2;border-radius:8px;box-shadow:0 2px 8px #00000026;min-width:160px;transition:all .3s ease;overflow:hidden}.noise-levels-legend.collapsed{min-width:140px}.noise-levels-legend.expanded .legend-header{border-bottom:1px solid #e0e0e0}.noise-levels-legend.collapsed .legend-header{border-bottom:none}.road-types-legend{background-color:#fffffff2;border-radius:8px;box-shadow:0 2px 8px #00000026;min-width:240px;transition:all .3s ease;overflow:hidden}.road-types-legend.collapsed{min-width:200px}.noise-results-panel{background-color:#fffffff2;border:4px solid #52C4F5;border-radius:8px;box-shadow:0 2px 12px #0000001a;min-width:220px;transition:all .3s ease;overflow:hidden}.noise-results-panel.collapsed{min-width:180px}.noise-results-panel.expanded .legend-header{border-bottom:1px solid #e0e0e0}.noise-results-panel.collapsed .legend-header{border-bottom:none}.noise-results-panel .legend-content{padding:15px;background:none!important;border:none!important;box-shadow:none!important}.results-stats{display:flex;flex-direction:column;gap:10px;border:none!important;background:none!important;padding:0!important;box-shadow:none!important;margin:0}.stat-line{display:flex;flex-direction:column;gap:4px;border:none!important;background:none!important;box-shadow:none!important;padding:0;margin:0}.stat-line:last-child{margin-bottom:0!important;padding-bottom:0!important;border-bottom:none!important}.noise-results-panel .noise-stat-label,span.noise-stat-label{font-size:13px!important;font-weight:400!important;font-style:normal!important;color:#555!important;line-height:1.3!important;text-transform:none!important;text-decoration:none!important;letter-spacing:normal!important;font-variant:normal!important}.noise-results-panel .noise-stat-value,span.noise-stat-value{font-size:13px!important;font-weight:700!important;font-style:normal!important;color:#555!important;line-height:1.3!important;text-transform:none!important;text-decoration:none!important;letter-spacing:normal!important;font-variant:normal!important}.stat-label,.stat-value{font-size:13px;font-weight:400;color:#555;line-height:1.3;text-transform:none}.legend-header{display:flex;justify-content:space-between;align-items:center;padding:15px;cursor:pointer;-webkit-user-select:none;user-select:none}.road-types-legend.expanded .legend-header{border-bottom:1px solid #ddd}.road-types-legend.collapsed .legend-header{border-bottom:none}.legend-title{margin:0;font-size:14px;font-weight:600;color:#333}.legend-toggle{background:none;border:none;font-size:20px;cursor:pointer;color:#666;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;transition:color .2s}.legend-toggle:hover{color:#333}.legend-content{padding:15px}.legend-items{display:flex;flex-direction:column;gap:8px}.legend-item{display:flex;align-items:center;gap:10px}.legend-color-box{width:20px;height:20px;border-radius:3px;border:1px solid rgba(0,0,0,.2);flex-shrink:0}.legend-label{font-size:13px;color:#555;line-height:1.3}.toggle-results-button{position:absolute;bottom:120px;right:20px;width:180px;padding:12px 24px;font-size:14px;font-weight:600;color:#fff;background-color:#4caf50;border:none;border-radius:8px;cursor:pointer;transition:transform .1s,box-shadow .2s;box-shadow:0 4px 12px #00000026;z-index:100;display:flex;flex-direction:column;align-items:center;gap:4px}.toggle-results-button .button-line-1,.toggle-results-button .button-line-2{display:block;line-height:1.2}.toggle-results-button:hover{transform:translateY(-1px);background-color:#45a049;box-shadow:0 6px 16px #0003}.toggle-results-button:active{transform:translateY(0)}.thermal-viewer-container{width:100%;height:100%;background:#ecf0f1;position:relative}.thermal-result-panel{position:fixed;display:flex;flex-direction:column;align-items:center;gap:10px;padding:15px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #00000026;border:4px solid #52C4F5;width:220px;height:220px;z-index:10}.thermal-person-config{display:flex;gap:8px;align-items:center;justify-content:center;font-size:32px}.thermal-emoji{line-height:1}.thermal-person-config-text{font-size:13px;font-weight:500;color:#333;text-align:center;line-height:1.3}.thermal-person-result{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:100%}.thermal-person-grade{font-size:14px;font-weight:600;padding:8px 12px;border-radius:6px;color:#fff;text-align:center;white-space:nowrap;text-shadow:0 1px 2px rgba(0,0,0,.2)}.thermal-person-grade.dark-text{color:#000;text-shadow:none}.thermal-person-description{font-size:12px;color:#666;text-align:center;line-height:1.3;padding:0 8px}.energy-yield-chart-container{width:100%;height:100%;display:flex;align-items:center;justify-content:flex-start;background:#ecf0f1;padding:40px 760px 40px 40px;box-sizing:border-box;overflow:hidden}.energy-yield-plot{width:100%;height:80%;background:#fff;border-radius:8px;border:4px solid #52C4F5;padding:20px;box-sizing:border-box;overflow:hidden}.energy-yield-placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#999;font-size:18px}.energy-yield-placeholder p{margin:0}.solar-gain-chart-container{width:100%;height:100%;display:flex;align-items:flex-start;justify-content:flex-end;background:transparent}.solar-gain-panel{background:#fff;border-radius:8px;border:4px solid #52C4F5;box-shadow:0 2px 10px #00000026;z-index:1000;min-width:800px;max-width:1600px;transition:all .3s ease;overflow:hidden}.solar-gain-panel.collapsed{min-width:200px}.solar-gain-panel-header{display:flex;justify-content:space-between;align-items:center;padding:15px;cursor:pointer;-webkit-user-select:none;user-select:none}.solar-gain-panel.expanded .solar-gain-panel-header{border-bottom:1px solid #e0e0e0}.solar-gain-panel.collapsed .solar-gain-panel-header{border-bottom:none}.solar-gain-panel-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.solar-gain-panel-toggle{background:none;border:none;font-size:20px;cursor:pointer;color:#666;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.solar-gain-panel-toggle:hover{color:#333}.solar-gain-panel-content{padding:15px}.solar-gain-plot{width:100%;height:600px}.solar-gain-viewer-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#ecf0f1}.solar-gain-placeholder{text-align:center;color:#7f8c8d;font-size:16px}.globe-viewer-container{width:300px;flex-shrink:0;background:#fff;border-radius:8px;box-shadow:0 2px 10px #00000026;z-index:1000;transition:all .3s ease;overflow:hidden;display:flex;flex-direction:column}.globe-viewer-container.expanded{height:360px}.globe-viewer-container.collapsed{height:auto;min-width:200px}.globe-viewer-header{padding:15px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}.globe-viewer-container.expanded .globe-viewer-header{border-bottom:1px solid #e0e0e0}.globe-viewer-container.collapsed .globe-viewer-header{border-bottom:none}.globe-viewer-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.globe-viewer-toggle{background:none;border:none;font-size:20px;cursor:pointer;color:#666;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.globe-viewer-toggle:hover{color:#333}.globe-coords{font-size:13px;color:#666;font-family:monospace;padding:10px 15px 0}.globe-canvas-wrapper{flex:1;position:relative;background:#fff;overflow:hidden;padding:15px;display:flex;align-items:center;justify-content:center}.globe-canvas-wrapper canvas{display:block;width:100%!important;height:100%!important}.weather-data-viewer{width:100%;height:100%;background:#ecf0f1;overflow:auto;padding:20px 390px 20px 20px;box-sizing:border-box}.weather-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:minmax(400px,auto);gap:20px;width:100%;margin:0}.weather-grid-item{background:#fff;border-radius:8px;border:4px solid #52C4F5;box-shadow:0 2px 10px #00000026;overflow:hidden;display:flex;flex-direction:column}.weather-location-panel{position:fixed;top:20px;right:20px;z-index:1000}.weather-grid-item-wide{grid-column:span 2}.weather-plot-placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;min-height:350px;color:#999;font-size:18px;font-weight:500}.weather-plot-placeholder p{margin:0}@media(max-width:1400px){.weather-grid{grid-template-columns:repeat(2,1fr)}.weather-grid-item-wide{grid-column:span 2}}@media(max-width:900px){.weather-grid{grid-template-columns:1fr}.weather-grid-item-wide{grid-column:span 1}}.reset-view-button{position:absolute;bottom:20px;right:20px;z-index:100;width:180px;padding:12px 24px;font-size:14px;font-weight:600;color:#2c3e50;background:#fffffff2;border:none;border-radius:8px;cursor:pointer;transition:transform .1s,box-shadow .2s;box-shadow:0 4px 12px #00000026}.reset-view-button:hover{transform:translateY(-1px);box-shadow:0 6px 16px #0003}.reset-view-button:active{transform:translateY(0)}.weather-data-results{position:fixed;right:20px;top:20px;bottom:20px;width:600px;background:#fff;border-radius:8px;box-shadow:0 4px 20px #00000026;display:flex;flex-direction:column;z-index:200;overflow:hidden}.results-header{display:flex;justify-content:space-between;align-items:center;padding:20px;background:#f8f9fa;border-bottom:2px solid #e0e0e0}.results-header h2{margin:0;font-size:20px;font-weight:600;color:#2c3e50}.close-button{width:32px;height:32px;border:none;background:#e74c3c;color:#fff;font-size:24px;line-height:1;border-radius:4px;cursor:pointer;transition:background .2s;display:flex;align-items:center;justify-content:center}.close-button:hover{background:#c0392b}.results-info{padding:15px 20px;background:#f8f9fa;border-bottom:1px solid #e0e0e0;display:flex;flex-direction:column;gap:8px}.info-item{display:flex;gap:10px;font-size:13px}.info-label{font-weight:600;color:#555;min-width:90px}.info-value{color:#333}.results-stats{padding:15px 20px;background:#fff;border-bottom:2px solid #e0e0e0;display:flex;justify-content:space-around}.stat-item{display:flex;flex-direction:column;align-items:center;gap:4px}.stat-label{font-size:12px;font-weight:600;color:#7f8c8d;text-transform:uppercase}.stat-value{font-size:18px;font-weight:700;color:#2c3e50}.chart-container{flex:1;padding:20px;overflow:hidden;min-height:0}.vsc-panels-container{position:fixed;top:20px;right:20px;display:flex;flex-direction:row-reverse;gap:20px;z-index:1000;align-items:flex-start}.vsc-legend{background:#fff;border-radius:8px;box-shadow:0 2px 10px #00000026;z-index:1000;min-width:300px;max-width:400px;transition:all .3s ease;overflow:hidden}.vsc-legend.collapsed{min-width:200px}.vsc-legend-header{display:flex;justify-content:space-between;align-items:center;padding:15px;cursor:pointer;-webkit-user-select:none;user-select:none}.vsc-legend.expanded .vsc-legend-header{border-bottom:1px solid #e0e0e0}.vsc-legend.collapsed .vsc-legend-header{border-bottom:none}.vsc-legend-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.vsc-legend-toggle{background:none;border:none;font-size:20px;cursor:pointer;color:#666;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.vsc-legend-toggle:hover{color:#333}.vsc-legend-content{padding:15px}.vsc-legend-items{display:flex;flex-direction:column;gap:12px}.vsc-legend-item{display:flex;gap:12px;align-items:flex-start}.vsc-legend-color{width:24px;min-width:24px;height:100%;min-height:60px;border-radius:4px;flex-shrink:0}.vsc-legend-item .vsc-legend-content{flex:1;display:flex;flex-direction:column;gap:4px;padding:0;text-align:left;align-items:flex-start}.vsc-legend-item .vsc-legend-header{display:flex;flex-direction:column;gap:2px;padding:0;border:none!important;border-bottom:none!important;cursor:default;text-align:left;align-items:flex-start;width:100%}.vsc-legend-range{font-size:14px;font-weight:600;color:#2c3e50;text-align:left;text-decoration:none!important;border:none!important;border-bottom:none!important}.vsc-legend-grade-title{font-size:15px;font-weight:600;color:#34495e;text-align:left;text-decoration:none!important;border:none!important;border-bottom:none!important;box-shadow:none!important}.vsc-legend-grade-title *{text-decoration:none!important;border:none!important;border-bottom:none!important;box-shadow:none!important}.vsc-legend-description{font-size:13px;color:#7f8c8d;line-height:1.4;text-align:left}.vsc-results{width:320px;background:#fffffff2;box-shadow:0 2px 12px #0000001a;border-radius:8px;border:4px solid #52C4F5;transition:all .3s ease;overflow:hidden}.vsc-results.collapsed{min-width:200px}.vsc-results-header{display:flex;justify-content:space-between;align-items:center;padding:15px;cursor:pointer;-webkit-user-select:none;user-select:none}.vsc-results.expanded .vsc-results-header{border-bottom:1px solid #e0e0e0}.vsc-results.collapsed .vsc-results-header{border-bottom:none}.vsc-results-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.vsc-results-toggle{background:none;border:none;font-size:20px;cursor:pointer;color:#666;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.vsc-results-toggle:hover{color:#333}.vsc-results-content{padding:15px}.vsc-results-items{display:flex;flex-direction:column;gap:10px;margin-bottom:15px}.vsc-results-item{display:flex;gap:12px;align-items:center}.vsc-results-color{width:24px;min-width:24px;height:24px;border-radius:4px;flex-shrink:0}.vsc-results-count{font-size:14px;font-weight:500;color:#2c3e50}.vsc-results-total{font-size:14px;font-weight:600;color:#2c3e50;padding-top:10px;border-top:1px solid #e0e0e0}.thermal-legend{background:#fff;border-radius:8px;box-shadow:0 2px 10px #00000026;z-index:1000;min-width:300px;max-width:400px;transition:all .3s ease;overflow:hidden}.thermal-legend.collapsed{min-width:200px}.thermal-legend-header{display:flex;justify-content:space-between;align-items:center;padding:15px;cursor:pointer;-webkit-user-select:none;user-select:none}.thermal-legend.expanded .thermal-legend-header{border-bottom:1px solid #e0e0e0}.thermal-legend.collapsed .thermal-legend-header{border-bottom:none}.thermal-legend-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.thermal-legend-toggle{background:none;border:none;font-size:20px;cursor:pointer;color:#666;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.thermal-legend-toggle:hover{color:#333}.thermal-legend-content{padding:15px}.thermal-legend-grades{display:flex;flex-direction:column;gap:12px}.thermal-legend-item{display:flex;gap:12px;align-items:flex-start}.thermal-legend-color-box{width:30px;height:30px;border-radius:4px;flex-shrink:0;border:1px solid rgba(0,0,0,.1)}.thermal-legend-text{flex:1}.thermal-legend-name{font-weight:600;font-size:14px;color:#333;margin-bottom:4px}.thermal-legend-description{font-size:12px;color:#666;line-height:1.4}.pv-types-legend{background:#fff;border-radius:8px;box-shadow:0 2px 10px #00000026;z-index:1000;min-width:300px;max-width:400px;transition:all .3s ease;overflow:hidden}.pv-types-legend.collapsed{min-width:200px}.pv-types-header{display:flex;justify-content:space-between;align-items:center;padding:15px;cursor:pointer;-webkit-user-select:none;user-select:none}.pv-types-legend.expanded .pv-types-header{border-bottom:1px solid #e0e0e0}.pv-types-legend.collapsed .pv-types-header{border-bottom:none}.pv-types-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.pv-types-toggle{background:none;border:none;font-size:20px;cursor:pointer;color:#666;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.pv-types-toggle:hover{color:#333}.pv-types-content{padding:15px}.pv-types-list{display:flex;flex-direction:column;gap:15px}.pv-type-item{display:flex;gap:12px}.pv-type-color-bar{width:8px;min-width:8px;border-radius:4px;flex-shrink:0}.pv-type-info{display:flex;flex-direction:column;gap:4px}.pv-type-name{font-size:14px;font-weight:600;color:#333}.pv-type-description{font-size:12px;color:#666;line-height:1.4}.tool-info-panel{position:fixed;top:20px;left:340px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #00000026;z-index:1000;min-width:300px;max-width:500px;transition:all .3s ease;overflow:hidden}.tool-info-panel.collapsed{min-width:320px}.tool-info-header{display:flex;justify-content:space-between;align-items:center;padding:15px;cursor:pointer;-webkit-user-select:none;user-select:none}.tool-info-panel.expanded .tool-info-header{border-bottom:1px solid #e0e0e0}.tool-info-panel.collapsed .tool-info-header{border-bottom:none}.tool-info-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.tool-info-toggle{background:none;border:none;font-size:20px;cursor:pointer;color:#666;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-left:12px}.tool-info-toggle:hover{color:#333}.tool-info-content{padding:15px}.tool-info-description{font-size:14px;line-height:1.6;color:#34495e}.tool-info-description p{margin:0 0 12px}.tool-info-description p:last-child{margin-bottom:0}.tutorial-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:10000}.tutorial-initial-prompt{background:#fff;padding:40px;border-radius:12px;box-shadow:0 8px 32px #0000004d;max-width:500px;text-align:center}.tutorial-initial-prompt h2{margin:0 0 16px;font-size:24px;color:#2c3e50}.tutorial-initial-prompt p{margin:0 0 32px;font-size:14px;color:#7f8c8d}.tutorial-prompt-buttons{display:flex;gap:16px;justify-content:center}.tutorial-dim-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#0000004d;z-index:9998;pointer-events:none}.tutorial-step-box{position:fixed;background:#fff;padding:32px 24px 24px;border-radius:12px;box-shadow:0 8px 32px #0000004d;z-index:9999;min-width:300px;max-width:350px}.tutorial-step-number{position:absolute;top:8px;right:12px;font-size:12px;font-weight:400;color:#7f8c8d}.tutorial-step-box h3{margin:0 0 20px;font-size:18px;color:#2c3e50;white-space:pre-line}.tutorial-step-box h3 .blue-text{color:#52c4f5}.tutorial-step-box h3 .orange-text{color:#d4915a}.tutorial-step-box:has(.tutorial-arrow[data-position=center-screen]){max-width:490px}.tutorial-arrow{position:absolute;width:0;height:0;border-style:solid}.tutorial-arrow[data-position=right]{left:-10px;top:50%;transform:translateY(-50%);border-width:10px 10px 10px 0;border-color:transparent white transparent transparent}.tutorial-arrow[data-position=left]{right:-10px;top:50%;transform:translateY(-50%);border-width:10px 0 10px 10px;border-color:transparent transparent transparent white}.tutorial-arrow[data-position=right-middle-panel]{left:-10px;top:50%;transform:translateY(-50%);border-width:10px 10px 10px 0;border-color:transparent white transparent transparent}.tutorial-arrow[data-position=center-screen]{display:none}.tutorial-arrow[data-position=above]{bottom:-10px;left:50%;transform:translate(-50%);border-width:10px 10px 0 10px;border-color:white transparent transparent transparent}.tutorial-button{padding:12px 32px;font-size:16px;font-weight:600;border:none;border-radius:6px;cursor:pointer;transition:all .2s}.tutorial-button-yes{background:#3498db;color:#fff}.tutorial-button-yes:hover{background:#2980b9}.tutorial-button-no{background:#95a5a6;color:#fff}.tutorial-button-no:hover{background:#7f8c8d}.tutorial-button-next{background:#2ecc71;color:#fff;width:100%}.tutorial-button-next:hover{background:#27ae60}.main-app{width:100%;height:100%;display:flex}.main-content{margin-left:320px;width:calc(100% - 320px);height:100vh;background:#ecf0f1;overflow:hidden}.control-button{position:absolute;right:20px;z-index:100;width:180px;padding:12px 24px;font-size:14px;font-weight:600;color:#2c3e50;background:#fffffff2;border:none;border-radius:8px;cursor:pointer;transition:transform .1s,box-shadow .2s;box-shadow:0 4px 12px #00000026}.control-button:hover{transform:translateY(-1px);box-shadow:0 6px 16px #0003}.control-button:active{transform:translateY(0)}.toggle-locations-button{bottom:70px}.camera-position-display{position:absolute;bottom:20px;left:340px;z-index:100;background:#fffffff2;padding:12px 16px;border-radius:8px;box-shadow:0 4px 12px #00000026;font-size:13px;font-family:monospace;color:#2c3e50;line-height:1.6}.thermal-panels-container,.solar-gain-panels-container,.energy-yield-panels-container,.weather-data-panels-container{position:fixed;top:20px;right:20px;display:flex;flex-direction:row-reverse;gap:20px;z-index:1000;align-items:flex-start}.solar-gain-layout{width:100%;height:100%;display:flex;flex-direction:row;gap:0}.solar-gain-viewer,.solar-gain-chart{width:50%;height:100%}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#root{width:100vw;height:100vh}
