:root{--bg: #14171b;--panel: #2b313a;--accent: #00e5ff;--text: #dcdcdc;--profile-fill: #242930}*{box-sizing:border-box}body{font-family:Segoe UI,sans-serif;margin:0;height:100vh;background:var(--bg);color:var(--text);overflow:hidden}#root,.app{width:100%;height:100vh;display:flex}.sidebar{width:340px;background:var(--panel);padding:20px;box-shadow:4px 0 15px #0006;z-index:10;border-right:1px solid #444;display:flex;flex-direction:column;gap:5px;overflow-y:auto;overflow-x:hidden;scrollbar-gutter:stable}.profile-panel{width:320px;background:#1b2026;padding:16px;border-left:1px solid #2b333d;display:flex;flex-direction:column;gap:10px;overflow-y:auto;overflow-x:hidden}.profile-panel h2{font-size:.85rem;color:var(--accent);text-transform:uppercase;border-bottom:1px solid #3b434d;padding-bottom:6px;margin:0}.profile-panel__name{font-size:.75rem;color:#cfe9ff}.profile-table{width:100%;border-collapse:collapse;font-size:.7rem;color:#d7dbe0}.profile-table th,.profile-table td{text-align:left;padding:6px;border-bottom:1px solid #2a313a;white-space:nowrap}.profile-table th{font-size:.65rem;text-transform:uppercase;letter-spacing:.02em;color:#9fb2c3}.profile-table tbody tr:hover{background:#00e5ff0f}.welcome-modal__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#080a0cb8;display:flex;align-items:center;justify-content:center;z-index:1000;padding:24px}.welcome-modal{width:min(720px,92vw);max-height:86vh;background:#12161b;border:1px solid #2a313a;border-radius:12px;box-shadow:0 24px 60px #0000008c;padding:18px 20px 16px;overflow:auto}.welcome-modal__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.welcome-modal__header h2{margin:0;font-size:1rem;color:var(--accent);text-transform:uppercase;letter-spacing:.04em}.welcome-modal__close{width:auto;padding:4px 8px;font-size:.8rem;border-radius:6px;background:#27303a;color:#cfe9ff}.welcome-modal__lead{margin:0 0 12px;font-size:.75rem;color:#b7c2cd}.welcome-modal__section{margin-bottom:12px}.welcome-modal__section h3{margin:0 0 6px;font-size:.75rem;color:#8fd9ff;text-transform:uppercase;letter-spacing:.04em}.welcome-modal__section ul{margin:0;padding-left:18px;display:grid;gap:6px;font-size:.72rem;color:#dde3ea}.welcome-modal__footer{display:flex;justify-content:flex-end}.sidebar h2{font-size:.9rem;color:var(--accent);text-transform:uppercase;border-bottom:1px solid #555;padding-bottom:8px;margin:0 0 10px}.control-group{margin-bottom:8px}.control-group label{display:block;font-size:.7rem;margin-bottom:4px;opacity:.8}.row-cols{display:flex;gap:10px}.row-cols__col{flex:1}.manual-grid-box{border:1px solid #49515b;border-radius:6px;padding:10px;background:#00000029}.manual-grid-groups{display:flex;gap:10px}.manual-grid-group{flex:1;min-width:0}.manual-grid-list{display:flex;flex-direction:column;gap:6px}.manual-grid-list input:disabled{opacity:.7;border-style:dashed}input,select{width:100%;padding:7px;background:#1a1e23;border:1px solid #484e55;color:#fff;border-radius:4px;font-size:.8rem}button{width:100%;padding:7px 8px;cursor:pointer;border:none;border-radius:4px;font-weight:700;font-size:.74rem;line-height:1.2}button:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--accent);color:#000}.btn-secondary{background:#0f6a84;color:#d9f7ff}.btn-secondary.is-active{background:#0aa4cc;color:#001d26}.btn-muted{background:#3a414a;color:#e5e5e5}.btn-muted:disabled{opacity:.5;cursor:not-allowed}.sidebar-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:10px}.hint{font-size:.63rem;opacity:.85;line-height:1.3;border:1px dashed #4a515a;padding:10px;border-radius:6px;background:#00000026}.drawing-area{flex-grow:1;position:relative;cursor:grab;background:var(--bg);background-image:radial-gradient(#2d333b 1px,transparent 1px);background-size:40px 40px}.drawing-area:active{cursor:grabbing}.drawing-area.is-measuring{cursor:crosshair}.drawing-tooltip{position:fixed;z-index:999;min-width:220px;max-width:320px;background:#0f1216;border:1px solid #2f3740;border-radius:8px;padding:10px;color:#e5e5e5;box-shadow:0 10px 24px #0006;pointer-events:none}.drawing-tooltip__title{font-size:.75rem;font-weight:700;color:#7fe0ff;margin-bottom:6px}.drawing-tooltip__rows{display:grid;gap:4px}.drawing-tooltip__row{display:flex;justify-content:space-between;gap:10px;font-size:.7rem}.drawing-tooltip__label{color:#9aa7b3}.drawing-tooltip__value{color:#e6eef7;font-weight:600}svg{width:100%;height:100%}.line-profile{stroke:#999;stroke-width:1px;fill:var(--profile-fill);vector-effect:non-scaling-stroke}.line-profile.is-hovered{stroke:#ffd86b;stroke-width:1.8px;filter:drop-shadow(0 0 2px rgba(255,216,107,.6))}.line-glass{fill:#00e5ff0d;stroke:#304ffe;stroke-width:1px;cursor:pointer;vector-effect:non-scaling-stroke}.line-opening{stroke:#fff;stroke-width:1.5;stroke-dasharray:8,5;fill:none;vector-effect:non-scaling-stroke}.handle-block{fill:#fff;stroke:#000;stroke-width:1;vector-effect:non-scaling-stroke}.fixed-cross{stroke:#666;stroke-width:1px;opacity:.5;vector-effect:non-scaling-stroke}.dim-line{stroke:var(--accent);stroke-width:1px;fill:none}.dim-ext{stroke:var(--accent);stroke-width:1px;fill:none;opacity:.9}.dim-arrow{fill:var(--accent);stroke:none}.dim-label-bg{fill:var(--bg);stroke:none}.dim-text{fill:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;text-anchor:middle;dominant-baseline:middle;font-weight:700;vector-effect:non-scaling-stroke;paint-order:stroke;stroke:#14171bbf;stroke-width:3px}.measure-group{pointer-events:none}.measure-line{stroke:#f8f36b;stroke-width:1.25px;vector-effect:non-scaling-stroke}.measure-line--preview{stroke-dasharray:6,4;opacity:.8}.measure-point{fill:#f8f36b;stroke:#111;stroke-width:1;vector-effect:non-scaling-stroke}.measure-text{fill:#f8f36b;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;text-anchor:middle;dominant-baseline:middle;font-weight:700;paint-order:stroke;stroke:#14171be6;stroke-width:3px;vector-effect:non-scaling-stroke}.measure-snap-point{fill:none;stroke:#f8f36b;stroke-width:1.25px;vector-effect:non-scaling-stroke}.sidebar{position:relative}footer{position:absolute;bottom:0;width:100%;padding:8px 12px;font-size:.7rem;text-align:center;color:#555}footer a{color:#555;font-weight:400}
