:root{--bg: #f7f9fc;--panel: #ffffff;--panel-strong: #fffbf0;--text: #1a1208;--muted: #5c4228;--border: rgba(120, 70, 8, .14);--border-strong: rgba(120, 70, 8, .28);--primary: #1a1208;--primary-hover: #7a3d08;--danger: #b42318;--danger-soft: #fff1ef;--success: #7a3d08;--next: #e8900a;--next-hover: #c47208;--workspace: #f0ede7;--shadow: 0 18px 48px rgba(26, 18, 8, .1);--radius: 8px}*{box-sizing:border-box}html,body,#root{width:100%;height:100%}body{margin:0;overflow:hidden;color:var(--text);background:var(--bg);font-family:Manrope,Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}button,input,textarea,select{font:inherit}.topo-editor-app{width:100%;height:100vh;display:grid;grid-template-columns:370px minmax(0,1fr) 300px;background:var(--bg)}.sidebar,.icon-sidebar{min-width:0;overflow-y:auto;padding:18px;background:var(--panel)}.left-sidebar{border-right:1px solid var(--border)}.icon-sidebar{border-left:1px solid var(--border)}.workspace{min-width:0;min-height:0;padding:18px;display:flex;background:radial-gradient(circle at 24px 24px,rgba(0,0,0,.06) 1px,transparent 1px),var(--workspace);background-size:28px 28px}.preview-container{position:relative;flex:1;min-width:0;min-height:0;display:flex;align-items:center;justify-content:center;overflow:hidden;background:#d8d0c2;border:1px solid var(--border-strong);border-radius:20px;box-shadow:var(--shadow)}.placeholder{width:min(520px,calc(100% - 40px));padding:42px;text-align:center;color:var(--muted);background:#fffaf2e6;border:2px dashed var(--border-strong);border-radius:24px}.upload-drop-zone{transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease,background .16s ease}.upload-drop-zone.drag-over{transform:translateY(-2px);background:#fffdf8;border-color:var(--primary);box-shadow:0 18px 50px #2a21182e,0 0 0 5px #be531f1f}.upload-drop-zone.drag-over .placeholder-icon{background:#f5dcc6;color:var(--primary)}.upload-drop-hint{margin:-8px 0 18px;display:flex;flex-direction:column;align-items:center;gap:4px;color:var(--muted);font-size:.95rem;line-height:1.35}.upload-drop-hint span:first-child{color:var(--text);font-size:1.05rem;font-weight:800}.upload-drop-hint span:last-child{color:var(--muted);font-size:.9rem;font-weight:650}.placeholder-icon{width:74px;height:74px;margin:0 auto 18px;display:grid;place-items:center;border-radius:22px;background:#efe3d2;font-size:2.2rem}.placeholder h2{margin:0 0 20px;color:var(--text);font-size:1.45rem;font-weight:750}.custom-file-upload{width:auto;display:flex;align-items:center;justify-content:center;margin:0;padding:12px 18px;color:#fff;background:var(--primary);border-radius:999px;cursor:pointer;font-weight:700}.custom-file-upload:hover{background:var(--primary-hover)}#imageInput{display:none}.image-processing-toggle{width:fit-content;margin:16px auto 0;padding:8px 12px 8px 8px;display:flex;align-items:center;gap:10px;cursor:pointer;color:var(--text);background:#ffffffbd;border:1px solid var(--border);border-radius:999px;box-shadow:0 8px 20px #2a211814;font-size:.88rem;font-weight:750;-webkit-user-select:none;user-select:none;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease,opacity .16s ease}.image-processing-toggle:hover{background:#fffdf8;border-color:var(--border-strong);box-shadow:0 10px 24px #2a21181f}.image-processing-toggle.enabled{border-color:#2563eb73;background:#f7fbff}.image-processing-toggle.disabled{cursor:not-allowed;opacity:.64}.image-processing-toggle input{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.image-processing-switch{width:42px;height:24px;padding:3px;display:inline-flex;align-items:center;border-radius:999px;background:#d8cec0;box-shadow:inset 0 1px 3px #2a211838;transition:background .16s ease}.image-processing-switch-knob{width:18px;height:18px;display:block;border-radius:999px;background:#fff;box-shadow:0 2px 6px #2a211847;transform:translate(0);transition:transform .16s ease}.image-processing-toggle.enabled .image-processing-switch{background:var(--next)}.image-processing-toggle.enabled .image-processing-switch-knob{transform:translate(18px)}.image-processing-toggle-text{line-height:1}.panel-section{margin-bottom:18px;padding:16px;background:var(--panel-strong);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 24px #2a21180a}.panel-section h2{margin:0 0 14px;font-size:1rem;letter-spacing:-.01em}.summary-section{background:#fffdf8}label{display:block;margin:10px 0 5px;color:var(--muted);font-size:.82rem;font-weight:700}input,textarea,select{width:100%;padding:9px 10px;color:var(--text);background:#fff;border:1px solid var(--border);border-radius:10px;outline:none}input:focus,textarea:focus,select:focus{border-color:#8f7b65;box-shadow:0 0 0 3px #8f7b6529}textarea{min-height:72px;resize:vertical}button{width:100%;margin-top:10px;padding:10px 12px;border:0;border-radius:11px;cursor:pointer;color:#fff;background:var(--primary);font-weight:750}button:hover:not(:disabled){background:var(--primary-hover)}button:disabled{cursor:not-allowed;background:#b5aca1}button.secondary{color:var(--text);background:#ede3d7}button.secondary:hover:not(:disabled){background:#dfd1c0}button.next-step-button{background:var(--next);box-shadow:0 8px 18px #2367b238}button.next-step-button:hover:not(:disabled){background:var(--next-hover)}button.next-step-button:disabled{box-shadow:none}button.danger{color:#fff;background:var(--danger)}button.danger:hover:not(:disabled){background:#86180f}button.compact,button.compact-wide{width:auto;margin-top:0;padding:8px 10px;font-size:.84rem}button.compact-wide{width:100%;margin-top:8px}.button-row{display:grid;grid-template-columns:1fr .7fr;gap:8px;margin-top:10px}.button-row button{margin-top:0}.hint{margin:12px 0 0;color:var(--muted);font-size:.84rem;line-height:1.4}.selected-info{margin-bottom:10px;padding:9px 10px;background:#f7f0e7;border:1px solid var(--border);border-radius:10px;font-size:.88rem;font-weight:700}.step-list{display:grid;gap:8px}.step-button{margin-top:0;display:grid;grid-template-columns:28px 1fr;align-items:center;gap:9px;text-align:left;color:var(--text);background:#f2e8db}.step-button span{width:28px;height:28px;display:grid;place-items:center;border-radius:999px;color:#fff;background:#8f7b65;font-size:.8rem}.step-button.active{color:#fff;background:var(--primary)}.step-button.active span{color:var(--text);background:#fff}.step-button.done span{background:var(--success)}.step-button:disabled{opacity:.6}.route-tree.empty-state{padding:12px;color:var(--muted);background:#fff;border:1px dashed var(--border-strong);border-radius:12px}.route-card{margin-bottom:10px;padding:10px;background:#fffdf8;border:1px solid var(--border);border-radius:13px}.route-card.active{border-color:#7c6146}.route-header{display:grid;grid-template-columns:34px 14px minmax(0,1fr) 34px;gap:8px;align-items:center;margin-bottom:10px}.route-fold-button,.icon-button{width:34px;height:34px;margin:0;padding:0;display:grid;place-items:center;color:var(--text);background:#eee3d6}.route-color-dot{width:14px;height:14px;border-radius:999px;border:1px solid rgba(0,0,0,.22)}.route-name-input{min-width:0;height:34px;padding:6px 8px;font-weight:750}.danger-icon{color:var(--danger);background:var(--danger-soft)}.small-section-title{margin:10px 0 7px;color:var(--muted);font-size:.78rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em}.belay-list,.pitch-list{display:flex;flex-direction:column;gap:6px}.belay-row,.pitch-item{border:1px solid transparent;border-radius:10px;background:#f6efe5}.belay-row{min-height:34px;padding:7px 9px;display:flex;align-items:center;justify-content:space-between;gap:8px;cursor:pointer;font-size:.86rem;font-weight:700}.belay-row:hover,.pitch-item:hover{background:#efe4d6}.belay-row.active,.pitch-item.active{background:#eadbca;border-color:#8f7b65}.pitch-item{padding:8px}.pitch-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;cursor:pointer}.pitch-main{min-width:0;display:flex;justify-content:space-between;gap:8px;font-size:.9rem}.line-type-chip{padding:3px 7px;color:#5d5145;background:#fff9ef;border:1px solid var(--border);border-radius:999px;font-size:.72rem;white-space:nowrap}.pitch-meta{margin-top:4px;color:var(--muted);font-size:.8rem}.pitch-delete-button{width:26px;height:26px;margin:0;padding:0;color:var(--danger);background:transparent;border-radius:999px;font-size:1rem}.pitch-delete-button:hover:not(:disabled){color:#fff;background:var(--danger)}.inline-pitch-editor{margin-top:10px;padding:10px;background:#fffaf3;border:1px solid var(--border);border-radius:12px}.inline-field-row{display:grid;grid-template-columns:1fr .75fr;gap:10px}.empty-right-panel{background:var(--panel)}.icon-groups{display:flex;flex-direction:column;gap:10px;margin-top:14px}.icon-group{background:#fffdf8;border:1px solid var(--border);border-radius:12px;overflow:hidden}.icon-group summary{padding:10px 12px;cursor:pointer;font-weight:800;-webkit-user-select:none;user-select:none}.icon-palette{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:10px;border-top:1px solid var(--border)}.icon-palette-item{min-height:84px;padding:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;font-size:.76rem;background:#fff;border:1px solid var(--border);border-radius:10px;cursor:grab;-webkit-user-select:none;user-select:none}.icon-palette-item:hover{border-color:#7c6146;background:#faf3e9}.icon-palette-item:active{cursor:grabbing}.icon-palette-item img{width:32px;height:32px;object-fit:contain;pointer-events:none}.selected-editor-section{border-color:#a58b6c}svg{display:block;-webkit-user-select:none;user-select:none}.topo-svg{width:100%;height:100%;max-width:100%;max-height:100%}svg.drawing-mode{cursor:crosshair}svg.panning-mode{cursor:grabbing}.route-line,.pitch-line,.approach-line,.route-preview-line{fill:none;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 3px rgba(0,0,0,.55))}.raw-route-line,.belay-selection-route-line{stroke-width:2.4}.belay-selection-route-line{opacity:.55}.pitch-line{stroke-width:2.6;cursor:default;pointer-events:none}.pitch-line.active{stroke-width:3.6;filter:drop-shadow(0 0 7px rgba(0,0,0,.82))}.approach-line{stroke:#111;stroke-width:3.2;stroke-dasharray:12 9;filter:drop-shadow(0 0 2px rgba(255,255,255,.9))}.route-preview-line{stroke-width:2.8;stroke-dasharray:8 6;opacity:.85;pointer-events:none}.route-hit-line,.approach-hit-line{fill:none;stroke:transparent;stroke-width:28;vector-effect:non-scaling-stroke;cursor:copy}.route-point-circle,.approach-circle,.belay-circle{fill:#fff;stroke-width:2.5;vector-effect:non-scaling-stroke;cursor:move;filter:drop-shadow(0 0 3px rgba(0,0,0,.55))}.route-point-circle.start-point{fill:#ffe08a}.approach-circle{stroke:#111;fill:#fff}.belay-circle{fill:#fff;stroke:#111;stroke-width:1.5}.belay-circle.fixed{fill:#ffe08a}.belay-circle.active{fill:#d7ffd9;stroke:#11812f;stroke-width:1.5}.belay-marker-group.locked .belay-circle{cursor:default}.belay-inner-line{stroke:#111;stroke-width:1.5;stroke-linecap:round;vector-effect:non-scaling-stroke;pointer-events:none}.belay-number{fill:#111;font-size:16px;font-weight:900;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round;pointer-events:none}.route-label{font-size:18px;font-weight:850;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round;pointer-events:none}.topo-icon-group{cursor:move}.topo-icon{cursor:move;pointer-events:all}.topo-icon-note{fill:#111;font-family:Comic Sans MS,Segoe Print,Bradley Hand,cursive;font-weight:800;cursor:move;-webkit-user-select:none;user-select:none}.topo-icon-group.active .topo-icon-note{paint-order:stroke;stroke:#d7ffd9;stroke-width:4px;stroke-linejoin:round;filter:drop-shadow(0 0 5px rgba(0,170,0,.9))}.topo-text-label{fill:#000;font-family:Comic Sans MS,Segoe Print,Bradley Hand,cursive;font-weight:700;cursor:move;-webkit-user-select:none;user-select:none}.topo-text-label.active{paint-order:stroke;stroke:#d7ffd9;stroke-width:4px;stroke-linejoin:round;filter:drop-shadow(0 0 5px rgba(0,170,0,.9))}.svg-text-editor{width:260px;height:110px;padding:8px 10px;border-radius:10px;background:#fff;border:2px solid #111;font:700 18px Comic Sans MS,Segoe Print,cursive;line-height:1.2;resize:none}@media(max-width:1100px){.topo-editor-app{grid-template-columns:320px minmax(0,1fr) 270px}.sidebar,.icon-sidebar{padding:12px}}.active-step-card{border-color:#b8a188;box-shadow:0 10px 30px #48382614}.pitch-sections-card{background:#fffdf8}.status-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.status-strip{margin-top:12px;padding:9px 10px;display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--muted);background:#f7f0e7;border:1px solid var(--border);border-radius:10px;font-size:.84rem}.status-grid .status-strip{margin-top:0}.status-strip strong{color:var(--text);font-size:1rem}.selected-belays-box{margin-top:12px;padding:10px;background:#fffaf3;border:1px solid var(--border);border-radius:12px}.small-hint{margin-top:4px}.compact-pitch-tree{display:flex;flex-direction:column;gap:12px}.compact-pitch-tree .route-card{margin-bottom:0}.compact-pitch-tree .route-header{grid-template-columns:34px 14px minmax(0,1fr) 34px;margin-bottom:10px}.compact-pitch-tree .route-fold-button{width:30px;height:30px;display:flex;align-items:center;justify-content:center;font-size:1rem;line-height:1}.compact-pitch-tree .route-card.active{border-color:#6383b8}.compact-pitch-tree .route-name-input{width:100%;min-width:0}.belay-circle.pitch-target{fill:#d7ffd9;stroke:#11812f;stroke-width:1.5;filter:drop-shadow(0 0 5px rgba(17,129,47,.8)) drop-shadow(0 0 3px rgba(255,255,255,.95))}.belay-add-hit-line{cursor:crosshair}.icon-sidebar{height:100vh;display:flex;flex-direction:column;gap:14px;overflow:hidden}.icon-sidebar .panel-section{margin-bottom:0}.inspector-panel{flex:0 0 auto;background:#fffdf8;border-color:#a58b6c;box-shadow:0 14px 32px #2a211814}.panel-title-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.panel-title-row h2{margin:0}.object-type-pill{padding:4px 8px;color:#1f4f2d;background:#dff4e4;border:1px solid rgba(31,79,45,.18);border-radius:999px;font-size:.72rem;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.object-type-pill.empty{color:var(--muted);background:#f4eadf;border-color:var(--border)}.empty-inspector{padding:12px;color:var(--muted);background:#f7f0e7;border:1px dashed var(--border-strong);border-radius:12px}.empty-inspector strong{display:block;margin-bottom:5px;color:var(--text)}.empty-inspector p{margin:0;font-size:.84rem;line-height:1.35}.selected-object-editor{display:flex;flex-direction:column;gap:8px}.selected-object-editor label{margin-top:4px}.selected-object-editor textarea{min-height:58px}.selected-object-preview{display:grid;grid-template-columns:44px minmax(0,1fr);align-items:center;gap:10px;padding:9px;background:#f7f0e7;border:1px solid var(--border);border-radius:12px}.selected-object-preview strong,.selected-object-preview span{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selected-object-preview span{margin-top:2px;color:var(--muted);font-size:.78rem;font-weight:650}.selected-object-thumb{width:44px;height:44px;display:grid;place-items:center;background:#fff;border:1px solid var(--border);border-radius:12px}.selected-object-thumb img{width:30px;height:30px;object-fit:contain}.selected-object-thumb.text-thumb{color:#111;font:900 1.05rem Comic Sans MS,Segoe Print,cursive}.range-number-row{display:grid;grid-template-columns:minmax(0,1fr) 70px;gap:8px;align-items:center}.range-number-row input[type=range]{padding-left:0;padding-right:0}.add-elements-panel{flex:1 1 auto;min-height:0;overflow:hidden;display:flex;flex-direction:column}.tool-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:4px;background:#f4eadf;border:1px solid var(--border);border-radius:13px}.tool-tab{margin-top:0;padding:8px 10px;color:var(--muted);background:transparent;border-radius:10px}.tool-tab:hover:not(:disabled){color:var(--text);background:#fff6ec}.tool-tab.active{color:#fff;background:var(--primary)}.tool-tab-content{flex:1 1 auto;margin-top:12px;min-height:0;overflow-y:auto;overflow-x:hidden;padding-right:3px}.compact-icon-groups{gap:8px;margin-top:12px}.compact-icon-groups .icon-group summary{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 10px}.group-count{min-width:24px;padding:2px 6px;text-align:center;color:var(--muted);background:#f4eadf;border-radius:999px;font-size:.72rem;font-weight:850}.compact-icon-palette{grid-template-columns:repeat(auto-fit,minmax(64px,1fr));gap:7px;padding:8px}.compact-icon-item{min-height:68px;padding:6px;gap:5px;font-size:.68rem;line-height:1.12}.compact-icon-item img{width:28px;height:28px}.empty-tool-state{padding:12px;color:var(--muted);text-align:center;background:#f7f0e7;border:1px dashed var(--border-strong);border-radius:12px;font-size:.84rem}.workflow-card{position:sticky;top:0;z-index:15;background:#fffdf8;box-shadow:0 12px 28px #2a211814}@media(max-width:1100px){.compact-icon-palette{grid-template-columns:repeat(2,minmax(0,1fr))}}.icon-group,.compact-icon-item{min-width:0}.compact-icon-groups .icon-group summary span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.compact-icon-item span{max-width:100%;overflow-wrap:anywhere}.topo-editor-app{grid-template-columns:350px minmax(0,1fr) 390px}.compact-workflow-card{padding:12px}.compact-workflow-card h2{margin-bottom:9px;font-size:1.08rem;font-weight:900}.compact-step-list{gap:5px}.compact-workflow-card .step-button{min-height:34px;padding:7px 8px;grid-template-columns:22px minmax(0,1fr);gap:7px;border-radius:9px;font-size:.8rem;line-height:1.1}.compact-workflow-card .step-button span{width:22px;height:22px;font-size:.68rem}.compact-start-over{margin-top:8px;padding:8px 10px;border-radius:9px;font-size:.8rem}.right-pitch-sections-card{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;background:#fffdf8}.right-pitch-sections-card .panel-title-row{margin-bottom:10px}.right-pitch-sections-card .route-tree,.right-pitch-sections-card .route-card{margin-bottom:0}.right-pitch-sections-card .route-header{grid-template-columns:34px 14px minmax(0,1fr) 34px}.right-pitch-sections-card .pitch-list{gap:7px}.right-pitch-sections-card .pitch-item{padding:8px}.right-pitch-sections-card .inline-pitch-editor textarea{min-height:64px}@media(max-width:1100px){.topo-editor-app{grid-template-columns:320px minmax(0,1fr) 360px}.compact-workflow-card .step-button{font-size:.76rem}}.active-approach-note{margin:12px 0;padding:9px 10px;color:var(--muted);background:#f7f0e7;border:1px solid var(--border);border-radius:10px;font-size:.84rem}.active-approach-note strong{color:var(--text)}.right-approach-sections-card{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;background:#fffdf8}.right-approach-sections-card .panel-title-row{margin-bottom:10px}.small-action-button{width:auto;margin:0;padding:7px 10px;border-radius:999px;font-size:.78rem;font-weight:750}.approach-list{display:flex;flex-direction:column;gap:10px}.approach-card{padding:10px;background:#fffaf3;border:1px solid var(--border);border-radius:12px}.approach-card.active{border-color:#222;box-shadow:0 0 0 2px #2020200f}.approach-card-header{display:grid;grid-template-columns:24px minmax(0,1fr);gap:8px;align-items:center}.approach-number{width:24px;height:24px;display:grid;place-items:center;color:#fff;background:#222;border-radius:999px;font-size:.75rem;font-weight:800}.approach-name-input{min-width:0;padding:7px 8px;font-size:.86rem;font-weight:700}.approach-card-meta{margin-top:8px;display:flex;justify-content:space-between;gap:8px;color:var(--muted);font-size:.78rem}.approach-card-meta strong{color:var(--success);white-space:nowrap}.compact-button-row{margin-top:8px;gap:7px}.compact-button-row button{margin-top:0;padding:7px 8px;border-radius:9px;font-size:.78rem}.approach-empty-state p{margin:0 0 10px}.approach-label{fill:#111;font-size:17px;font-weight:800;paint-order:stroke;stroke:#fffffff2;stroke-width:4px;stroke-linejoin:round;pointer-events:none}.approach-group.active .approach-line{filter:drop-shadow(0 0 3px rgba(255,255,255,.95)) drop-shadow(0 0 4px rgba(0,0,0,.45))}.next-step-button{background:var(--success);color:#fff;font-weight:850;box-shadow:0 8px 18px #11812f33}.next-step-button:hover:not(:disabled){background:#0d6f27}.approach-arrow-head{fill:none;stroke:#111;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.route-card .approach-card-header{grid-template-columns:14px 24px minmax(0,1fr)}.right-route-sections-card{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;background:#fffdf8}.next-step-button{background:#2563eb;color:#fff;font-weight:850;box-shadow:0 8px 18px #2563eb38}.next-step-button:hover:not(:disabled){background:#1d4ed8}button.next-step-button:disabled,.next-step-button:disabled{color:#667085;background:#dbe4f3;border:1px solid #a9bbd8;box-shadow:none;opacity:1;cursor:not-allowed}button.next-step-button:disabled:after,.next-step-button:disabled:after{content:""}.completion-warning{margin-top:12px;padding:11px 12px;display:grid;gap:4px;color:#7a3414;background:#fff4e5;border:1px solid #f3c07d;border-radius:12px;font-size:.86rem;line-height:1.35}.completion-warning strong{color:#5f2608;font-size:.9rem}.completion-warning small{color:#8a4b20;font-weight:700}.pitch-required-warning{margin-top:6px;padding:5px 7px;color:#8a4b20;background:#fff4e5;border:1px solid #f3c07d;border-radius:8px;font-size:.74rem;font-weight:750}.belay-marker-group.belay-step .belay-circle,.belay-marker-group.belay-step .belay-inner-line{stroke-width:1.5}.note-label-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:4px}.note-label-row label{margin:0}.note-side-tabs{display:inline-grid;grid-template-columns:1fr 1fr;gap:3px;padding:3px;background:#f4eadf;border:1px solid var(--border);border-radius:999px}.note-side-tabs button{width:auto;min-width:54px;margin:0;padding:5px 9px;color:var(--muted);background:transparent;border-radius:999px;font-size:.76rem;line-height:1;box-shadow:none}.note-side-tabs button:hover:not(:disabled){color:var(--text);background:#fff6ec}.note-side-tabs button.active{color:#fff;background:var(--primary)}.belay-marker-group .belay-circle,.belay-marker-group.belay-step .belay-circle,.belay-marker-group.locked .belay-circle,.belay-marker-group .belay-circle.active,.belay-marker-group .belay-circle.pitch-target,.belay-marker-group .belay-inner-line,.belay-marker-group.belay-step .belay-inner-line{stroke-width:1.5}.approach-arrow-head{stroke-width:1.15}button.compact-start-over.danger{color:#fff;background:var(--danger);box-shadow:0 8px 18px #b423182e}button.compact-start-over.danger:hover:not(:disabled){background:#86180f}.step-help-box{margin-top:10px;padding:11px 12px;color:var(--muted);background:#f7f0e7;border:1px solid var(--border);border-radius:12px;font-size:.84rem;line-height:1.42}.step-help-box strong{display:block;margin-bottom:6px;color:var(--text);font-size:.88rem}.step-help-box p{margin:0 0 7px}.step-help-box p:last-child{margin-bottom:0}.finish-topo-button{margin-top:12px;color:#fff;background:var(--success);box-shadow:0 8px 18px #286b3933}.finish-topo-button:hover:not(:disabled){background:#1f572f}.approach-arrow-head{stroke-width:1.45}.step-hotkeys{margin-top:10px;padding-top:9px;border-top:1px dashed var(--border-strong)}.step-help-box .step-help-subtitle{display:block;margin:0 0 7px;color:var(--text);font-size:.82rem;font-weight:850;text-transform:uppercase;letter-spacing:.05em}.step-hotkeys ul{margin:0;padding:0;display:grid;gap:6px;list-style:none}.step-hotkeys li{display:grid;grid-template-columns:128px minmax(0,1fr);gap:8px;align-items:start}.step-hotkeys .hotkey-action{color:var(--text);font-size:.8rem;font-weight:850;line-height:1.35}.step-hotkeys kbd{width:fit-content;max-width:100%;padding:3px 7px;color:#1f2937;background:#fff;border:1px solid #c7b8a6;border-bottom-width:2px;border-radius:7px;font-family:inherit;font-size:.72rem;font-weight:850;line-height:1.1;white-space:normal}.approach-arrow-head{fill:#111;stroke:none}.export-button-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}.export-button-grid button{margin-top:0}.topo-editor-app{grid-template-columns:380px minmax(0,1fr) 420px}.workflow-next-button{width:100%;margin-top:10px}.reset-project-card{margin-top:18px;background:#fff7f6;border-color:#f0b8b2}.reset-project-button{margin-top:0}.workspace,.preview-container{background-color:#eee;background-image:linear-gradient(45deg,#d4d4d4 25%,transparent 25%),linear-gradient(-45deg,#d4d4d4 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#d4d4d4 75%),linear-gradient(-45deg,transparent 75%,#d4d4d4 75%);background-position:0 0,0 11px,11px -11px,-11px 0;background-size:22px 22px}.route-point-circle,.route-point-circle.start-point{fill:red;stroke:none;stroke-width:0;filter:drop-shadow(0 0 2px rgba(255,255,255,.9)) drop-shadow(0 0 2px rgba(0,0,0,.45))}@media(max-width:1100px){.topo-editor-app{grid-template-columns:350px minmax(0,1fr) 390px}}:root{--shadow-lg: var(--shadow)}.workspace{background:radial-gradient(circle at 24px 24px,rgba(0,0,0,.06) 1px,transparent 1px),var(--workspace);background-size:28px 28px}.preview-container{background:linear-gradient(45deg,rgba(31,41,51,.035) 25%,transparent 25%),linear-gradient(-45deg,rgba(31,41,51,.035) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(31,41,51,.035) 75%),linear-gradient(-45deg,transparent 75%,rgba(31,41,51,.035) 75%),#e9e4dc;background-size:28px 28px;background-position:0 0,0 14px,14px -14px,-14px 0;box-shadow:var(--shadow-lg)}.approach-arrow-head{fill:none;stroke:#111;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.route-point-circle,.route-point-circle.start-point{r:5px}.export-button-grid{display:none}.workflow-next-button{margin-top:18px}.existing-route-line{pointer-events:none;opacity:.9}.route-point-circle,.route-point-circle.start-point{r:6px}.topo-icon{filter:drop-shadow(0 0 4px rgba(255,255,255,.98)) drop-shadow(0 0 9px rgba(255,255,255,.88)) drop-shadow(0 0 7px rgba(90,90,90,.25))}.topo-icon-note,.topo-text-label{paint-order:stroke;stroke:#ffffffe0;stroke-width:3px;stroke-linejoin:round;filter:drop-shadow(0 1px 2px rgba(0,0,0,.18))}.topo-icon-group.active .topo-icon{filter:drop-shadow(0 0 5px rgba(215,255,217,.95)) drop-shadow(0 0 7px rgba(0,170,0,.85))}.topo-icon-group.active .topo-icon-note,.topo-text-label.active{stroke:#d7ffd9;filter:drop-shadow(0 0 5px rgba(0,170,0,.9))}.placeholder.is-processing{pointer-events:none;opacity:.62;filter:blur(.4px)}.processing-overlay{position:absolute;inset:auto auto 50% 50%;transform:translate(-50%,50%);z-index:30;width:min(360px,calc(100% - 40px));padding:22px;display:grid;grid-template-columns:92px minmax(0,1fr);gap:18px;align-items:center;color:var(--text);background:#fffaf2f0;border:1px solid rgba(143,123,101,.32);border-radius:24px;box-shadow:0 22px 60px #2a21182e;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.climber-loader{position:relative;width:82px;height:96px;overflow:hidden;border-radius:22px;background:linear-gradient(180deg,#f8efe2,#efe0ce);border:1px solid var(--border)}.climber-rope{position:absolute;top:-8px;bottom:-8px;left:41px;width:2px;background:repeating-linear-gradient(to bottom,#6f5d4a 0,#6f5d4a 8px,#c4ad94 8px,#c4ad94 13px);opacity:.9}.climber-emoji{position:absolute;left:24px;top:46px;font-size:2rem;animation:climberMove 1.35s ease-in-out infinite;filter:drop-shadow(0 3px 3px rgba(0,0,0,.22))}.climber-rock{position:absolute;right:8px;bottom:-8px;color:#9a8268;font-size:3.2rem;line-height:1;opacity:.45}.processing-copy strong,.processing-copy span{display:block}.processing-copy strong{margin-bottom:5px;font-size:1rem;font-weight:900}.processing-copy span{color:var(--muted);font-size:.88rem;line-height:1.4}@keyframes climberMove{0%,to{transform:translateY(12px) rotate(-4deg)}50%{transform:translateY(-20px) rotate(5deg)}}.app-alert{position:fixed;left:50%;bottom:22px;z-index:1000;width:min(520px,calc(100% - 32px));transform:translate(-50%);display:grid;grid-template-columns:34px minmax(0,1fr) 34px;gap:12px;align-items:start;padding:14px;color:var(--text);background:#fffdf8;border:1px solid var(--border-strong);border-left:5px solid var(--danger);border-radius:16px;box-shadow:0 22px 60px #2a211833}.app-alert-warning{border-left-color:#d9822b}.app-alert-info{border-left-color:var(--next)}.app-alert-icon{width:34px;height:34px;display:grid;place-items:center;color:#fff;background:var(--danger);border-radius:999px;font-weight:950;line-height:1}.app-alert-warning .app-alert-icon{background:#d9822b}.app-alert-info .app-alert-icon{background:var(--next)}.app-alert-copy strong,.app-alert-copy span{display:block}.app-alert-copy strong{margin-bottom:3px;font-size:.94rem;font-weight:900}.app-alert-copy span{color:var(--muted);font-size:.84rem;line-height:1.4}.app-alert-close{width:34px;height:34px;margin:0;padding:0;color:var(--muted);background:#f3eadf;border-radius:999px;font-size:1.2rem;line-height:1}.app-alert-close:hover:not(:disabled){color:#fff;background:var(--primary)}.right-reset-card{flex:0 0 auto;margin-top:auto;margin-bottom:0}.approach-arrow-head{fill:none;stroke:#111;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}@media(max-width:720px){.processing-overlay{grid-template-columns:1fr;text-align:center}.climber-loader{margin:0 auto}}.app-confirm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;display:grid;place-items:center;padding:24px;background:#201a156b;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.app-confirm-dialog{width:min(460px,100%);display:grid;grid-template-columns:46px minmax(0,1fr);gap:14px;padding:18px;color:var(--text);background:#fffdf8;border:1px solid #e7c4bd;border-radius:20px;box-shadow:0 28px 80px #2a211857}.app-confirm-icon{width:46px;height:46px;display:grid;place-items:center;color:#fff;background:var(--danger);border-radius:16px;font-size:1.35rem;font-weight:950;line-height:1;box-shadow:0 10px 22px #b423183d}.app-confirm-warning .app-confirm-icon{background:#d9822b;box-shadow:0 10px 22px #d9822b3d}.app-confirm-copy h2{margin:0 0 6px;font-size:1.05rem;font-weight:950;letter-spacing:-.02em}.app-confirm-copy p{margin:0;color:var(--muted);font-size:.9rem;line-height:1.45}.app-confirm-actions{grid-column:1 / -1;display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}.app-confirm-actions button{margin-top:0}@media(max-width:520px){.app-confirm-dialog{grid-template-columns:1fr}.app-confirm-icon{width:40px;height:40px}}.drawing-tutorial-card{position:absolute;top:18px;left:18px;z-index:45;width:min(390px,calc(100% - 36px));padding:16px;color:var(--text);background:#fffaf2f5;border:1px solid rgba(143,123,101,.34);border-radius:22px;box-shadow:0 24px 70px #2a211833;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:tutorialSlideIn .24s ease-out}.drawing-tutorial-close{position:absolute;top:10px;right:10px;width:30px;height:30px;margin:0;padding:0;display:grid;place-items:center;color:var(--muted);background:#f2e8dc;border-radius:999px;font-size:1.25rem;line-height:1}.drawing-tutorial-close:hover:not(:disabled){color:#fff;background:var(--primary)}.drawing-tutorial-header{padding-right:34px}.drawing-tutorial-badge{width:fit-content;margin-bottom:8px;padding:4px 9px;display:inline-flex;align-items:center;color:#4d3728;background:#f1ddc4;border:1px solid #dfc19c;border-radius:999px;font-size:.72rem;font-weight:900;letter-spacing:.03em;text-transform:uppercase}.drawing-tutorial-header h2{margin:0 0 4px;font-size:1.05rem;font-weight:950}.drawing-tutorial-header p{margin:0;color:var(--muted);font-size:.86rem;line-height:1.35}.drawing-tutorial-list{margin-top:14px;display:grid;gap:9px}.drawing-tutorial-item{display:grid;grid-template-columns:34px minmax(0,1fr);gap:10px;align-items:start}.drawing-tutorial-icon{width:34px;height:34px;display:grid;place-items:center;background:#fff5e8;border:1px solid #ead7bf;border-radius:12px;font-size:1rem}.drawing-tutorial-item strong,.drawing-tutorial-item span{display:block}.drawing-tutorial-item strong{margin-bottom:2px;font-size:.86rem;font-weight:900}.drawing-tutorial-item span{color:var(--muted);font-size:.8rem;line-height:1.35}.drawing-tutorial-button{width:100%;margin-top:14px;padding:10px 14px;border-radius:999px;font-size:.9rem;font-weight:850}@keyframes tutorialSlideIn{0%{opacity:0;transform:translateY(-8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:720px){.drawing-tutorial-card{top:12px;left:12px;width:calc(100% - 24px)}}.topo-editor-app{background:var(--bg)}.sidebar,.icon-sidebar{background:var(--panel)}.workspace{background:radial-gradient(circle at 24px 24px,rgba(120,70,8,.1) 1px,transparent 1px),var(--workspace);background-size:28px 28px}.preview-container{background:linear-gradient(45deg,rgba(120,70,8,.035) 25%,transparent 25%),linear-gradient(-45deg,rgba(120,70,8,.035) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(120,70,8,.035) 75%),linear-gradient(-45deg,transparent 75%,rgba(120,70,8,.035) 75%),#f7f9fc;background-size:28px 28px;background-position:0 0,0 14px,14px -14px,-14px 0;border-color:var(--border-strong);border-radius:8px}.panel-section,.placeholder,.approach-card,.route-card,.icon-group,.icon-palette-item,.selected-object-preview,.selected-object-thumb,.empty-tool-state,.step-help-box,.completion-warning,.inline-pitch-editor,.app-alert,.app-confirm-dialog,.drawing-tutorial-card{border-radius:8px}.panel-section,.summary-section,.workflow-card,.right-approach-sections-card,.right-route-sections-card,.right-pitch-sections-card,.inspector-panel,.add-elements-panel,.route-card,.approach-card,.icon-group,.inline-pitch-editor,.app-alert,.app-confirm-dialog,.drawing-tutorial-card{background:var(--panel-strong)}.panel-section,.route-card,.approach-card,.icon-group,.icon-palette-item,.selected-object-preview,.inline-pitch-editor,.step-help-box{border-color:var(--border)}button,.custom-file-upload,.btn-like{border-radius:4px}button.secondary,.step-button,.route-fold-button,.icon-button,.selected-info,.belay-row,.pitch-item,.empty-tool-state,.selected-object-preview,.tool-tabs,.note-side-tabs,.step-help-box{background:#fef3e0}button.secondary:hover:not(:disabled),.belay-row:hover,.pitch-item:hover,.icon-palette-item:hover,.note-side-tabs button:hover:not(:disabled){background:#fffbf0}.tool-tab:hover:not(:disabled){color:var(--muted);background:transparent}.tool-tab.active:hover:not(:disabled){color:#fff;background:var(--primary)}button.next-step-button,.next-step-button,.finish-topo-button,.drawing-tutorial-button{background:var(--next);box-shadow:0 8px 18px #e8900a38}button.next-step-button:hover:not(:disabled),.next-step-button:hover:not(:disabled),.finish-topo-button:hover:not(:disabled),.drawing-tutorial-button:hover:not(:disabled){background:var(--next-hover)}button.next-step-button:disabled,.next-step-button:disabled{color:#7a5a35;background:#f4e2c4;border-color:#78460838}input:focus,textarea:focus,select:focus{border-color:var(--next);box-shadow:0 0 0 3px #e8900a29}.step-button span,.approach-number,.step-button.active,.tool-tab.active,.note-side-tabs button.active{background:var(--primary)}.step-button.done span,.approach-card-meta strong{background:var(--next);color:#fff}.approach-card-meta strong{padding:1px 6px;border-radius:999px}.route-card.active,.approach-card.active,.compact-pitch-tree .route-card.active,.inspector-panel{border-color:var(--next)}.right-approach-sections-card,.right-route-sections-card,.right-pitch-sections-card,.inspector-panel,.add-elements-panel,.right-reset-card{background:#fef3e0;border-color:#78460838}.right-approach-sections-card .approach-card,.right-route-sections-card .approach-card,.right-pitch-sections-card .route-card,.right-pitch-sections-card .pitch-item,.inspector-panel .selected-object-preview,.add-elements-panel .tool-tabs,.add-elements-panel .icon-group,.add-elements-panel .icon-palette-item,.add-elements-panel .tool-tab-content>textarea,.add-elements-panel .tool-tab-content>input{background:#fff;border-color:#7846083d;box-shadow:0 8px 20px #1a120814}.right-approach-sections-card .approach-card.active,.right-route-sections-card .approach-card.active,.right-pitch-sections-card .route-card.active,.right-pitch-sections-card .pitch-item.active{border-color:var(--next);box-shadow:0 0 0 2px #e8900a29,0 10px 24px #1a12081a}.route-point-circle,.route-point-circle.start-point{fill:red;stroke:none;stroke-width:0}.route-point-circle.active{fill:red;stroke:var(--primary);stroke-width:2.5}.approach-circle.active{fill:#ffd060;stroke:var(--primary);stroke-width:2.5}.approach-line,.approach-arrow-head,.approach-circle{stroke:var(--primary)}.belay-circle.active,.belay-circle.pitch-target{fill:#fef3e0;stroke:var(--next)}.topo-icon-group.active .topo-icon,.topo-icon-group.active .topo-icon-note,.topo-text-label.active{filter:drop-shadow(0 0 5px rgba(215,255,217,.95)) drop-shadow(0 0 8px rgba(0,170,0,.85))}.topo-icon-group.active .topo-icon-note{stroke:#d7ffd9}.topo-text-label.active{stroke:#d7ffd9;filter:drop-shadow(0 0 5px rgba(215,255,217,.95)) drop-shadow(0 0 8px rgba(0,170,0,.85))}.topo-icon-transform-controls,.topo-text-transform-controls{pointer-events:all}.topo-icon-selection-box,.topo-icon-rotate-line,.topo-text-selection-box,.topo-text-rotate-line{fill:none;stroke:#111;stroke-width:1.5;stroke-dasharray:5 4;vector-effect:non-scaling-stroke;pointer-events:none;filter:drop-shadow(0 0 3px rgba(255,255,255,.95))}.topo-icon-rotate-line,.topo-text-rotate-line{stroke-dasharray:none}.topo-icon-resize-handle,.topo-icon-rotate-handle,.topo-text-resize-handle,.topo-text-rotate-handle{fill:#fff;stroke:#111;stroke-width:1.8;vector-effect:non-scaling-stroke;filter:drop-shadow(0 1px 3px rgba(0,0,0,.35))}.topo-icon-resize-handle,.topo-text-resize-handle{cursor:nwse-resize}.topo-icon-rotate-handle,.topo-text-rotate-handle{cursor:grab}.topo-icon-rotate-handle:active,.topo-text-rotate-handle:active{cursor:grabbing}.group-count,.drawing-tutorial-badge,.object-type-pill{color:var(--next);background:#fef3e0;border-color:#e8900a3d}
