*{margin:0;padding:0;box-sizing:border-box}:root{--primary-color: #2563eb;--primary-hover: #1d4ed8;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--bg-color: #f8fafc;--card-bg: #ffffff;--text-primary: #1e293b;--text-secondary: #64748b;--border-color: #e2e8f0;--highlight-i: #3b82f6;--highlight-left: #10b981;--highlight-right: #f59e0b;--highlight-found: #ec4899;--highlight-skip: #94a3b8}html,body,#root{height:100%;width:100%;overflow:hidden}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background-color:var(--bg-color);color:var(--text-primary);line-height:1.5}button{cursor:pointer;border:none;outline:none;font-family:inherit}input,select{font-family:inherit;outline:none}a{text-decoration:none;color:inherit}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}.header{position:relative;display:flex;align-items:center;justify-content:space-between;padding:0 12px;background:var(--card-bg);border-bottom:1px solid var(--border-color);height:46px;flex-shrink:0}.header-left{flex:1}.back-link{color:var(--primary-color);font-size:13px;transition:color .2s}.back-link:hover{color:var(--primary-hover)}.header-center{position:absolute;left:50%;max-width:calc(100% - 300px);transform:translate(-50%);text-align:center}.title-link{display:inline-block}.title{max-width:100%;overflow:hidden;font-size:16px;font-weight:700;color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;transition:color .2s}.title-link:hover .title{color:var(--primary-color)}.header-right{flex:1;display:flex;align-items:center;justify-content:flex-end;gap:12px}.problem-book-btn,.problem-description-btn,.algorithm-idea-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;background:var(--primary-color);color:#fff;border-radius:6px;font-size:13px;font-weight:500;transition:background .2s}.algorithm-idea-btn{background:var(--primary-color)}.problem-book-btn,.problem-description-btn{background:#e7f0eb;color:#245642;border:1px solid #c8d9ce}.problem-book-btn:hover,.problem-description-btn:hover{background:#d9e9df}.problem-book-icon{font-size:16px;line-height:1}.algorithm-idea-btn:hover{background:var(--primary-hover)}.github-link{display:flex;align-items:center;gap:6px;padding:6px 10px;background:#24292e;color:#fff;border-radius:6px;font-size:13px;transition:background .2s}.github-link:hover{background:#1b1f23}.github-icon{width:18px;height:18px}.star-count{font-weight:500}@media(max-width:760px){.header{height:48px;min-height:48px;gap:8px;padding:0 10px}.header-left{display:none}.header-center{position:static;flex:1;max-width:none;transform:none;text-align:left}.title{font-size:16px;white-space:nowrap}.header-right{flex:0 0 auto;gap:6px}.problem-book-btn,.problem-description-btn,.algorithm-idea-btn,.github-link{padding:6px 8px;font-size:12px;white-space:nowrap}}.data-input{display:flex;align-items:center;gap:12px;min-height:40px;padding:2px 12px;background:var(--card-bg);border-bottom:1px solid var(--border-color);flex-shrink:0}.input-row{flex:1}.examples-row{flex:0 0 auto;margin:0}.input-row{display:flex;align-items:center;gap:8px;min-width:0}.input-label{font-size:13px;font-weight:500;color:var(--text-secondary);white-space:nowrap}.input-field{flex:1;max-width:400px;padding:6px 10px;border:1px solid var(--border-color);border-radius:6px;font-size:13px;transition:border-color .2s}.input-field:focus{border-color:var(--primary-color)}.input-field.input-error{border-color:var(--error-color)}.apply-btn{padding:6px 14px;background:var(--primary-color);color:#fff;border-radius:6px;font-size:13px;font-weight:500;transition:background .2s}.apply-btn:hover{background:var(--primary-hover)}.random-btn{padding:6px 14px;background:var(--success-color);color:#fff;border-radius:6px;font-size:13px;font-weight:500;transition:background .2s}.random-btn:hover{background:#059669}.error-message{margin-top:4px;font-size:12px;color:var(--error-color)}.examples-row{display:flex;align-items:center;gap:6px;margin-top:6px}.examples-label{font-size:12px;color:var(--text-secondary)}.example-btn{padding:3px 10px;background:#f1f5f9;color:var(--text-secondary);border-radius:4px;font-size:12px;transition:all .2s}.example-btn:hover{background:#e2e8f0;color:var(--text-primary)}.example-btn.active{background:var(--primary-color);color:#fff}@media(max-width:760px){.data-input{min-height:40px;padding:2px 8px}.input-row,.examples-row{flex-wrap:nowrap;overflow:hidden}.examples-row{display:none}.input-field{min-width:0;max-width:none;flex-basis:0}.apply-btn,.random-btn,.example-btn{white-space:nowrap}}.code-panel{display:flex;flex-direction:column;background:var(--card-bg);border-radius:8px;border:1px solid var(--border-color);overflow:hidden;height:100%}.code-header{padding:8px 12px;border-bottom:1px solid var(--border-color);background:#f8fafc}.language-tabs{display:flex;gap:4px}.language-tab{padding:4px 12px;background:transparent;color:var(--text-secondary);border-radius:4px;font-size:12px;font-weight:500;transition:all .2s}.language-tab:hover{background:#e2e8f0;color:var(--text-primary)}.language-tab.active{background:var(--primary-color);color:#fff}.code-container{flex:1;overflow:auto;padding:8px 0}.code-pre{margin:0;font-family:Fira Code,Monaco,Consolas,monospace;font-size:12px;line-height:1.6}.code-line{display:flex;align-items:flex-start;padding:0 12px;min-height:20px;transition:background .2s}.code-line.highlighted{background:#fef3c7;border-left:3px solid var(--warning-color);padding-left:9px}.line-number{width:32px;text-align:right;padding-right:12px;color:#94a3b8;-webkit-user-select:none;user-select:none;flex-shrink:0}.line-content{flex:1;white-space:pre}.line-variables{display:flex;gap:8px;margin-left:16px;flex-shrink:0}.variable{padding:1px 6px;background:#e0f2fe;color:#0369a1;border-radius:3px;font-size:11px;white-space:nowrap}.variable.highlight{background:#fce7f3;color:#be185d}.canvas-container{position:relative;flex:1 1 0%;width:100%;min-width:0;min-height:0;height:100%;background:var(--card-bg);border:1px solid var(--border-color);border-radius:8px;overflow:hidden;isolation:isolate}.canvas-container svg{display:block;width:100%;height:100%;cursor:grab;background:radial-gradient(circle at 24px 24px,rgba(37,99,235,.07) 1px,transparent 1.5px),linear-gradient(180deg,#fff,#f8fafc);background-size:24px 24px,100% 100%;touch-action:none}.canvas-container svg:active,.canvas-container.is-dragging svg{cursor:grabbing}.canvas-container.is-dragging{border-color:#2563eb6b}.canvas-toolbar{position:absolute;top:8px;right:auto;z-index:2;display:flex;align-items:center;gap:4px;padding:4px;background:#fffffff0;border:1px solid var(--border-color);border-radius:6px}.canvas-array-overview{position:absolute;right:8px;bottom:34px;z-index:3;display:flex;align-items:center;gap:8px;width:min(260px,calc(100% - 16px));padding:4px 8px;background:#fffffff2;border:1px solid var(--border-color);border-radius:6px;color:var(--text-secondary);font-size:10px}.canvas-array-overview input{flex:1;min-width:40px;accent-color:var(--primary-color)}.canvas-legend{position:absolute;z-index:2;top:8px;left:8px;display:flex;gap:8px;align-items:center;max-width:min(var(--canvas-legend-width, 180px),calc(100% - 190px));padding:5px 8px;color:var(--text-secondary);background:#fffffff0;border:1px solid var(--border-color);border-radius:6px;font-size:10px}.canvas-metrics{pointer-events:none}.metric-label{fill:var(--text-secondary);font-size:10px}.metric-value{fill:var(--text-primary);font-size:10px;font-weight:700}.canvas-container .canvas-metrics{z-index:2}.canvas-legend-item{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.legend-swatch{width:8px;height:8px;border:1px solid rgba(15,31,27,.25);border-radius:2px}.legend-swatch--current{background:#2f9e7d}.legend-swatch--compare{background:#e8b04b;border-radius:50%}.legend-swatch--visited{background:#9ad3c2;transform:rotate(45deg)}.legend-swatch--done{background:#18765a;border-radius:50%;box-shadow:inset 0 0 0 2px #fff}.canvas-toolbar button{width:30px;height:28px;border-radius:5px;color:var(--text-primary);background:#f8fafc;font-size:12px;font-weight:700}.canvas-toolbar span{min-width:42px;color:var(--text-secondary);font-size:11px;font-weight:700;text-align:center}.canvas-hint{position:absolute;right:10px;bottom:8px;z-index:2;padding:2px 8px;color:var(--text-secondary);background:#ffffffe6;border-radius:4px;font-size:10px}.canvas-empty{position:absolute;inset:0;display:grid;place-items:center;color:var(--text-secondary);pointer-events:none}.canvas-grid{pointer-events:none}.canvas-grid line{stroke:#94a3b829;stroke-width:1}.stage-panel-bg,.info-panel-bg{fill:#fff;stroke:var(--border-color);stroke-width:1}.stage-accent{fill:var(--primary-color)}.stage-accent.less,.stage-accent.move-left{fill:var(--highlight-left)}.stage-accent.greater,.stage-accent.move-right{fill:var(--highlight-right)}.stage-accent.equal,.stage-accent.found{fill:var(--success-color)}.stage-accent.skip{fill:var(--highlight-skip)}.stage-accent.complete{fill:var(--success-color)}.stage-kicker{fill:var(--text-primary);font-size:13px;font-weight:700}.operation-badge{fill:var(--primary-color);font-size:10px;font-weight:700}.decision-action{fill:var(--text-secondary);font-size:12px}.relation-badge,.relation-pill{font-size:12px;font-weight:700}.relation-badge.equal,.relation-pill.equal{fill:var(--success-color)}.relation-badge.less,.relation-pill.less{fill:var(--highlight-left)}.relation-badge.greater,.relation-pill.greater{fill:var(--highlight-right)}.legend-label{fill:var(--text-secondary);font-size:10px}.search-window{fill:#2563eb0e;stroke:#2563eb47;stroke-width:1;stroke-dasharray:4 4}.window-label{fill:var(--primary-color);font-size:11px;text-anchor:middle}.sum-connector{fill:none;stroke:#64748b94;stroke-width:1.5;stroke-linecap:round}.sum-flow--i .sum-connector{stroke:#2563eb}.sum-flow--left .sum-connector{stroke:#059669}.sum-flow--right .sum-connector{stroke:#d97706}.sum-flow-badge{fill:#fff;stroke:#d7e0e8;stroke-width:1}.sum-connector-label{fill:var(--text-primary);font-size:9px;font-weight:600;text-anchor:middle}.sum-total-label{fill:var(--text-secondary);font-size:9px;text-anchor:middle}.array-cell{fill:#f1f5f9;stroke:#cbd5e1;stroke-width:1;transition:fill .18s ease,stroke .18s ease}.node-status{fill:var(--text-secondary);font-size:9px;text-anchor:middle}.array-cell-group[data-status=current] .cell-value,.array-cell-group[data-status=compare] .cell-value,.array-cell-group[data-status=done] .cell-value{font-size:11px}.array-cell-group .cell-value{pointer-events:none}.array-cell-group[data-status=current] .array-cell{stroke-width:3}.array-cell-group[data-status=done] .node-status{fill:var(--success-color);font-weight:700}.array-cell.i{fill:#dbeafe;stroke:var(--highlight-i);stroke-width:2}.array-cell.left{fill:#d1fae5;stroke:var(--highlight-left);stroke-width:2}.array-cell.right{fill:#fef3c7;stroke:var(--highlight-right);stroke-width:2}.array-cell.found{fill:#d1fae5;stroke:var(--success-color);stroke-width:3}.array-cell.skip{fill:#e2e8f0;stroke:var(--highlight-skip);stroke-width:2}.cell-value{fill:var(--text-primary);font-size:15px;font-weight:700;text-anchor:middle;dominant-baseline:middle}.cell-index,.cell-origin{fill:var(--text-secondary);font-size:10px;text-anchor:middle}.pointer-label{fill:#fff;font-size:11px;font-weight:700;text-anchor:middle}.move-line{fill:none;stroke-width:2;stroke-linecap:round}.move-label{fill:var(--text-secondary);font-size:11px;font-weight:600;text-anchor:middle}.move-origin{opacity:.28}.skip-marker line{stroke:var(--highlight-skip);stroke-width:2;stroke-linecap:round;opacity:.75}.section-title{fill:var(--text-secondary);font-size:12px;font-weight:600}.array-subtitle{fill:var(--text-secondary);font-size:10px}.formula-text{fill:var(--text-primary);font-size:18px;font-weight:700}.target-text{fill:var(--text-secondary);font-size:12px}.decision-explanation{fill:var(--text-secondary);font-size:10px}.var-text{fill:var(--text-primary);font-family:monospace;font-size:12px}.var-text.highlight{fill:var(--success-color);font-weight:700}.empty-result{fill:var(--text-secondary);font-size:12px}.triplet-bg{fill:#ecfdf5;stroke:#10b98173;stroke-width:1}.triplet-bg.latest{fill:#dcfce7;stroke:#0596699e}.triplet-text{fill:#047857;font-size:12px;font-weight:600;text-anchor:middle}.step-description{fill:var(--text-primary);font-size:12px;font-weight:600}.data-flow-guide{fill:var(--text-secondary);font-size:10px}.decision-panel .info-panel-bg{fill:#f8fafc}.vars-panel .info-panel-bg{fill:#f0f7f4}.stage-kicker{font-size:12px}.operation-badge{font-size:9px}@media(max-width:760px){.canvas-legend{gap:5px;padding:4px 6px;font-size:9px}.canvas-legend-item{gap:3px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.controls{background:var(--card-bg);border-top:1px solid var(--border-color);padding:2px 12px;flex-shrink:0}.controls-main{display:flex;align-items:center;gap:8px;margin:0}.progress-bar{position:absolute;left:490px;right:118px;bottom:18px;padding:4px 0;pointer-events:auto;z-index:0}.progress-track,.progress-fill,.progress-thumb{pointer-events:none}.speed-menu{z-index:10;left:0;transform:none}.controls-main{position:relative;z-index:3;pointer-events:none}.controls-main>*{pointer-events:auto}.step-info{position:absolute;right:12px;top:50%;transform:translateY(-50%);margin:0;pointer-events:none;z-index:1}.controls{position:relative;min-height:44px}.control-btn,.speed-btn{padding:6px 10px;font-size:12px}.control-btn kbd{display:none}.control-btn{display:flex;align-items:center;gap:6px;padding:8px 14px;background:#f1f5f9;color:var(--text-primary);border-radius:6px;font-size:13px;font-weight:500;transition:all .2s}.control-btn:hover:not(:disabled){background:#e2e8f0}.control-btn:disabled{opacity:.5;cursor:not-allowed}.control-btn kbd{padding:2px 5px;background:#e2e8f0;border-radius:3px;font-size:10px;font-family:inherit}.play-btn{background:var(--primary-color);color:#fff}.play-btn:hover{background:var(--primary-hover)}.play-btn kbd{background:#fff3;color:#fff}.reset-btn{background:#fef3c7;color:#92400e}.reset-btn:hover,.reset-btn kbd{background:#fde68a}.speed-control{position:relative;margin-left:0;z-index:12}.speed-btn{padding:8px 14px;background:#f1f5f9;color:var(--text-primary);border-radius:6px;font-size:13px;font-weight:500;transition:all .2s}.speed-btn:hover{background:#e2e8f0}.speed-menu{position:absolute;bottom:100%;left:0;transform:none;margin-bottom:4px;background:var(--card-bg);border:1px solid var(--border-color);border-radius:6px;box-shadow:0 4px 12px #0000001a;overflow:hidden;z-index:100}.speed-option{display:block;width:100%;padding:8px 20px;background:transparent;color:var(--text-primary);font-size:13px;text-align:center;transition:background .2s}.speed-option:hover{background:#f1f5f9}.speed-option.active{background:var(--primary-color);color:#fff}.step-info{font-size:13px;color:var(--text-secondary);margin-left:12px}.progress-bar{cursor:pointer;padding:4px 0}.progress-track{position:relative;height:6px;background:#e2e8f0;border-radius:3px}.progress-fill{position:absolute;left:0;top:0;height:100%;background:var(--success-color);border-radius:3px;transition:width .1s ease}.progress-thumb{position:absolute;top:50%;transform:translate(-50%,-50%);width:14px;height:14px;background:var(--success-color);border:2px solid white;border-radius:50%;box-shadow:0 2px 4px #0003;transition:left .1s ease}.progress-bar:hover .progress-thumb{transform:translate(-50%,-50%) scale(1.2)}@media(max-width:760px){.controls{min-height:56px;padding:4px 8px}.progress-bar{left:8px;right:86px;bottom:4px}.step-info{right:8px;top:14px;bottom:auto;transform:none}.controls-main{flex-wrap:nowrap;gap:4px}.control-btn,.speed-btn{flex-shrink:0;padding:7px 10px;white-space:nowrap}.speed-control{margin-left:0}.step-info{margin-left:0;white-space:nowrap}}.speed-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:4px}.modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{background:var(--card-bg);border-radius:12px;box-shadow:0 20px 40px #0003;max-width:600px;width:90%;max-height:80vh;display:flex;flex-direction:column;animation:slideUp .3s ease}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border-color)}.modal-title{font-size:18px;font-weight:600;color:var(--text-primary)}.modal-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;color:var(--text-secondary);font-size:24px;border-radius:6px;transition:all .2s}.modal-close:hover{background:#f1f5f9;color:var(--text-primary)}.modal-body{padding:20px;overflow-y:auto;line-height:1.7;color:var(--text-primary)}.modal-body h3{font-size:15px;font-weight:600;margin:16px 0 8px;color:var(--primary-color)}.modal-body h3:first-child{margin-top:0}.modal-body p{margin:8px 0;font-size:14px}.modal-body ul{margin:8px 0;padding-left:20px}.modal-body li{margin:4px 0;font-size:14px}.modal-body code{background:#f1f5f9;padding:2px 6px;border-radius:4px;font-family:Fira Code,monospace;font-size:13px}.problem-book{--book-paper: #fffefa;--book-ink: #203a32;--book-muted: #64766f;width:min(1040px,100%);color:var(--book-ink);background:var(--book-paper);border:1px solid #b8c8c1;border-radius:10px;box-shadow:0 20px 56px #0f1f1b38,0 3px #d5ded9;overflow:hidden;transform-origin:center center;animation:book-open .42s cubic-bezier(.2,.72,.18,1) both}.book-running-head{display:flex;justify-content:space-between;padding:10px 22px;color:#45685d;background:#f1f6f3;border-bottom:1px solid #d3dfd9;font-size:10px;letter-spacing:.04em}.book-spread{display:grid;grid-template-columns:minmax(240px,.72fr) minmax(0,1.28fr);max-height:min(680px,calc(100vh - 132px));overflow-y:auto}.book-page{position:relative;min-width:0;padding:28px clamp(20px,4vw,44px) 52px;background:var(--book-paper)}.book-page--title{display:flex;flex-direction:column;background:linear-gradient(90deg,#fffefa,#fbfcf8 92%,#f0f4f0);border-right:1px solid #d9e1dc;box-shadow:inset -9px 0 14px -14px #10352873}.book-page-topline{display:flex;align-items:center;justify-content:space-between;padding-bottom:10px;border-bottom:1px solid #b8c8c1;color:var(--book-muted);font-size:11px}.book-difficulty{padding:2px 8px;color:#7a5712;background:#f7edcf;border-radius:10px}.book-page--title h2{margin:38px 0 14px;color:#173d30;font-family:Georgia,Songti SC,"Noto Serif CJK SC",serif;font-size:clamp(28px,3.4vw,42px);line-height:1.2;letter-spacing:.06em}.book-deck{max-width:28ch;margin:0;color:#3f5a50;font-family:Georgia,Songti SC,"Noto Serif CJK SC",serif;font-size:16px;line-height:1.9}.book-rule{width:44px;height:3px;margin:24px 0 18px;background:#2e725b}.book-page-note{margin:0 0 8px;color:var(--book-muted);font-size:12px}.book-key-points{margin:0;padding-left:19px;color:#2f4d42;font-size:13px;line-height:2}.book-page--content{padding-top:25px;line-height:1.8}.book-page--content h3{margin:0 0 9px;color:#1d4939;font-family:Georgia,Songti SC,"Noto Serif CJK SC",serif;font-size:17px;font-weight:700}.book-page--content p{margin:8px 0;color:#334b42;font-size:13px}.book-page--content ul{margin:6px 0 10px;padding-left:22px;color:#334b42;font-size:13px}.book-page--content li{padding-left:3px}.book-page--content code{padding:1px 4px;color:#174b37;background:#edf4ef;border-radius:3px;font-family:SFMono-Regular,Consolas,monospace;font-size:11px}.book-section-heading{display:flex;align-items:center;gap:10px;margin-top:18px!important}.book-section-heading:after{height:1px;flex:1;background:#d8e1dc;content:""}.book-examples{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.book-example{min-width:0;padding:9px 10px;background:#f6f8f4;border:1px solid #dce5df;border-radius:5px}.book-example h4{margin:0 0 5px;color:#315b49;font-size:11px}.book-example p{display:grid;grid-template-columns:26px minmax(0,1fr);gap:3px;margin:3px 0;font-size:10px}.book-example p>span{color:#728178}.book-example code{overflow-wrap:anywhere}.book-example .book-explanation{display:block;padding-top:3px;color:#66776e;font-size:10px}.book-constraints{display:flex;flex-wrap:wrap;gap:4px 18px}.book-page-number{position:absolute;right:24px;bottom:14px;color:#82938a;font-family:Georgia,serif;font-size:10px}.book-citation{position:absolute;left:44px;bottom:14px;color:#82938a;font-size:10px}@keyframes book-open{0%{opacity:0;transform:perspective(1200px) rotateY(-7deg) scale(.97)}to{opacity:1;transform:perspective(1200px) rotateY(0) scale(1)}}@media(max-width:760px){.book-running-head{padding:8px 14px}.book-spread{display:block;max-height:calc(100vh - 112px)}.book-page{padding:18px 18px 42px}.book-page--title{min-height:230px;border-right:0;border-bottom:1px solid #d9e1dc}.book-page--title h2{margin:22px 0 10px;font-size:30px}.book-deck{font-size:14px}.book-rule{margin:14px 0 10px}.book-examples{grid-template-columns:1fr}.book-example{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px}.book-example h4,.book-example .book-explanation{grid-column:1 / -1}.book-example p{grid-template-columns:32px minmax(0,1fr)}}@media(prefers-reduced-motion:reduce){.problem-book{animation:none}}.floating-ball-container{position:fixed;bottom:24px;right:24px;z-index:900}.floating-ball{display:flex;flex-direction:column;align-items:center;justify-content:center;width:60px;height:60px;background:#07c160;border-radius:50%;box-shadow:0 4px 12px #07c16066;cursor:pointer;transition:all .3s ease}.floating-ball:hover{transform:scale(1.1);box-shadow:0 6px 16px #07c16080}.wechat-icon{width:24px;height:24px;color:#fff}.ball-text{font-size:10px;color:#fff;margin-top:2px;font-weight:500}.qr-popup{position:absolute;bottom:70px;right:0;animation:popIn .3s ease}@keyframes popIn{0%{opacity:0;transform:translateY(10px) scale(.9)}to{opacity:1;transform:translateY(0) scale(1)}}.qr-content{background:#fff;border-radius:12px;padding:16px;box-shadow:0 8px 24px #00000026;text-align:center}.qr-image{width:200px;height:auto;border-radius:8px}.qr-hint{margin-top:12px;font-size:12px;color:var(--text-secondary);max-width:200px}.app{position:relative;display:flex;flex-direction:column;width:100vw;height:100vh;overflow:hidden}.main-content{position:relative;display:flex;flex:1 1 auto;min-width:0;min-height:0;padding:0 4px;overflow:hidden}.canvas-section{position:relative;display:flex;flex:1 1 100%;flex-direction:column;min-width:0;min-height:0}.code-drawer{position:absolute;z-index:5;top:8px;right:8px;bottom:8px;display:flex;flex-direction:column;width:clamp(320px,24vw,400px);overflow:hidden;background:var(--card-bg);border:1px solid var(--border-color);border-radius:8px;box-shadow:0 12px 34px #0f1f1b33;visibility:hidden;opacity:0;pointer-events:none;transform:translate(calc(100% + 16px));transition:transform .22s ease,opacity .18s ease}.has-code-drawer .code-drawer{visibility:visible;opacity:1;pointer-events:auto;transform:translate(0)}.code-drawer-heading{display:flex;align-items:center;justify-content:space-between;min-height:40px;padding:0 10px 0 14px;color:var(--text-primary);background:#f8fafc;border-bottom:1px solid var(--border-color);font-size:12px}.code-drawer-heading button{width:28px;height:28px;color:var(--text-secondary);background:transparent;border-radius:5px;font-size:20px}.code-drawer-heading button:hover{background:#e8eef0}.code-drawer-body{flex:1;min-height:0;overflow:hidden}.code-drawer-body .code-panel{border:0;border-radius:0}.canvas-code-toggle{position:absolute;z-index:3;top:8px;right:170px;min-height:34px;padding:0 10px;color:#245642;background:#fffffff5;border:1px solid #c8d9ce;border-radius:6px;font-size:11px;font-weight:600}.canvas-code-toggle:hover{background:#e7f0eb}@media(max-width:760px){.main-content{padding:0 4px 4px}.code-drawer{inset:auto 4px 4px;width:auto;height:min(58vh,420px);transform:translateY(calc(100% + 12px))}.has-code-drawer .code-drawer{transform:translateY(0)}.canvas-code-toggle{right:164px;top:8px}}@media(prefers-reduced-motion:reduce){.code-drawer{transition:none}}
