.graph.svelte-zhue1c{background:#f7f8fa;width:100%;height:100%;position:relative}.view-info.svelte-zhue1c{z-index:50;position:absolute;bottom:20px;left:50%;transform:translate(-50%)}.info-badge.svelte-zhue1c{color:#475569;box-shadow:none;background:#fff;border:1px solid #dbdcdd;border-radius:8px;align-items:center;gap:8px;padding:10px 20px;font-size:13px;font-weight:500;display:inline-flex}.sidebar.svelte-181dlmc{z-index:200;width:400px;height:100%;box-shadow:none;background:#fff;border-left:1px solid #dbdcdd;flex-direction:column;display:flex;position:absolute;top:0;right:0}.sidebar-header.svelte-181dlmc{border-bottom:1px solid #dbdcdd;justify-content:flex-end;padding:16px 20px;display:flex}.close-btn.svelte-181dlmc{color:#64748b;cursor:pointer;background:#f1f5f9;border:none;border-radius:6px;justify-content:center;align-items:center;padding:10px;transition:all .2s;display:flex}.close-btn.svelte-181dlmc:hover{color:#334155;background:#e2e8f0}.sidebar-content.svelte-181dlmc{flex:1;padding:24px;overflow-y:auto}.part-badge.svelte-181dlmc{color:var(--part-color);background:color-mix(in srgb, var(--part-color) 12%, white);border-radius:6px;align-items:center;gap:8px;margin-bottom:20px;padding:8px 14px;font-size:13px;font-weight:600;display:inline-flex}.part-dot.svelte-181dlmc{border-radius:50%;flex-shrink:0;width:10px;height:10px}.node-title.svelte-181dlmc{color:#0f172a;letter-spacing:-.5px;margin:0 0 16px;font-size:24px;font-weight:700;line-height:1.3}.meta-row.svelte-181dlmc{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:24px;display:flex}.difficulty.svelte-181dlmc{background:#f8fafc;border-radius:8px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;font-weight:600;display:flex}.difficulty-icon.svelte-181dlmc{font-size:10px}.feature-badge.svelte-181dlmc{background:#f8fafc;border-radius:8px;padding:6px 10px;font-size:14px}.description.svelte-181dlmc{color:#64748b;margin-bottom:28px;font-size:15px;line-height:1.7}.actions.svelte-181dlmc{margin-bottom:32px}.primary-btn.svelte-181dlmc{color:#fff;cursor:pointer;width:100%;box-shadow:none;background:#1865f2;border:none;border-radius:6px;justify-content:center;align-items:center;gap:10px;padding:16px 24px;font-size:15px;font-weight:600;transition:background-color .18s;display:flex}.primary-btn.svelte-181dlmc:hover{background:#1b50b3}.primary-btn.svelte-181dlmc:active{transform:translateY(0)}.tips.svelte-181dlmc{background:#f8fafc;border:1px solid #dbdcdd;border-radius:8px;padding:18px}.tips.svelte-181dlmc h3:where(.svelte-181dlmc){color:#94a3b8;text-transform:uppercase;letter-spacing:.8px;margin:0 0 14px;font-size:11px;font-weight:700}.tips.svelte-181dlmc ul:where(.svelte-181dlmc){margin:0;padding:0;list-style:none}.tips.svelte-181dlmc li:where(.svelte-181dlmc){color:#64748b;border-bottom:1px solid #0000000a;padding:8px 0;font-size:13px}.tips.svelte-181dlmc li:where(.svelte-181dlmc):last-child{border-bottom:none;padding-bottom:0}.tips.svelte-181dlmc strong:where(.svelte-181dlmc){color:#334155;font-weight:600}@media (width<=768px){.sidebar.svelte-181dlmc{border-top:1px solid #0000000f;border-left:none;width:100%}}.controls.svelte-1y71c66{z-index:100;flex-direction:column;gap:10px;display:flex;position:absolute;top:20px;left:20px}.control-group.svelte-1y71c66{box-shadow:none;background:#fff;border:1px solid #dbdcdd;border-radius:8px;padding:14px}.label.svelte-1y71c66{color:#64748b;text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px;font-size:11px;font-weight:600;display:block}.view-modes.svelte-1y71c66{min-width:320px}.view-mode-buttons.svelte-1y71c66{flex-wrap:wrap;gap:6px;display:flex}.view-mode-btn.svelte-1y71c66{color:#64748b;cursor:pointer;background:#f1f5f9;border:1px solid #0000;border-radius:6px;align-items:center;gap:6px;padding:10px 14px;font-size:12px;font-weight:500;transition:all .2s;display:flex}.view-mode-btn.svelte-1y71c66 .icon:where(.svelte-1y71c66){font-size:16px}.view-mode-btn.svelte-1y71c66:hover{color:#334155;background:#e2e8f0}.view-mode-btn.active.svelte-1y71c66{color:#fff;box-shadow:none;background:#1865f2;border-color:#1865f2}.layout-buttons.svelte-1y71c66{gap:6px;display:flex}.layout-btn.svelte-1y71c66{color:#64748b;cursor:pointer;background:#f1f5f9;border:1px solid #0000;border-radius:6px;flex-direction:column;align-items:center;gap:4px;padding:10px 14px;font-size:11px;font-weight:500;transition:all .2s;display:flex}.layout-btn.svelte-1y71c66 .icon:where(.svelte-1y71c66){font-size:18px}.layout-btn.svelte-1y71c66:hover{color:#334155;background:#e2e8f0}.layout-btn.active.svelte-1y71c66{color:#1b50b3;background:#edf3fe;border-color:#1865f2}.filter-toggle.svelte-1y71c66{color:#475569;cursor:pointer;box-shadow:none;background:#fff;border:1px solid #dbdcdd;border-radius:8px;align-items:center;gap:10px;padding:12px 18px;font-size:14px;font-weight:500;transition:all .2s;display:flex}.filter-toggle.svelte-1y71c66:hover{color:#1e293b;background:#f7f8fa}.chevron.svelte-1y71c66{color:#94a3b8;margin-left:auto;font-size:12px;transition:transform .2s}.chevron.open.svelte-1y71c66{transform:rotate(180deg)}.filter-panel.svelte-1y71c66{max-width:340px;box-shadow:none;background:#fff;border:1px solid #dbdcdd;border-radius:8px;padding:18px}.filter-section.svelte-1y71c66{margin-bottom:18px}.filter-section.svelte-1y71c66:last-of-type{margin-bottom:14px}.filter-header.svelte-1y71c66{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.filter-label.svelte-1y71c66{color:#475569;font-size:12px;font-weight:600}.filter-actions.svelte-1y71c66{gap:8px;display:flex}.action-btn.svelte-1y71c66{color:#1865f2;cursor:pointer;background:0 0;border:none;border-radius:6px;padding:4px 8px;font-size:12px;font-weight:500;transition:background .2s}.action-btn.svelte-1y71c66:hover{background:#edf3fe}.filter-options.svelte-1y71c66{flex-wrap:wrap;gap:8px;display:flex}.parts-grid.svelte-1y71c66{grid-template-columns:repeat(2,1fr);gap:8px;display:grid}.filter-chip.svelte-1y71c66{color:#64748b;cursor:pointer;white-space:nowrap;background:#f1f5f9;border:1px solid #0000;border-radius:6px;align-items:center;gap:6px;padding:8px 12px;font-size:12px;font-weight:500;transition:all .2s;display:flex}.filter-chip.svelte-1y71c66:hover{color:#334155;background:#e2e8f0}.filter-chip.active.svelte-1y71c66{border-color:var(--chip-color,#1865f2);color:#1e293b;box-shadow:none;background:#fff}.chip-icon.svelte-1y71c66{font-size:10px}.chip-dot.svelte-1y71c66{border-radius:50%;flex-shrink:0;width:10px;height:10px}.part-chip.svelte-1y71c66{justify-content:flex-start}.reset-btn.svelte-1y71c66{color:#dc2626;cursor:pointer;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;width:100%;padding:12px;font-size:13px;font-weight:500;transition:all .2s}.reset-btn.svelte-1y71c66:hover{background:#fee2e2}@media (width<=768px){.controls.svelte-1y71c66{top:12px;left:12px;right:12px}.view-modes.svelte-1y71c66{min-width:unset}.view-mode-buttons.svelte-1y71c66{grid-template-columns:repeat(3,1fr);display:grid}.view-mode-btn.svelte-1y71c66{flex-direction:column;gap:2px;padding:8px 10px;font-size:11px}.view-mode-btn.svelte-1y71c66 .text:where(.svelte-1y71c66){display:none}.filter-panel.svelte-1y71c66{max-width:calc(100vw - 24px)}.layout-btn.svelte-1y71c66 .text:where(.svelte-1y71c66){display:none}.layout-btn.svelte-1y71c66{padding:10px 12px}}@media (width<=480px){.view-mode-buttons.svelte-1y71c66{grid-template-columns:repeat(6,1fr)}.view-mode-btn.svelte-1y71c66{justify-content:center;padding:8px 4px}.view-mode-btn.svelte-1y71c66 .icon:where(.svelte-1y71c66){font-size:16px}}.search-container.svelte-tsg0ih{z-index:100;width:320px;position:absolute;top:20px;right:20px}.search-input-wrapper.svelte-tsg0ih{align-items:center;display:flex;position:relative}.search-icon.svelte-tsg0ih{color:#94a3b8;pointer-events:none;position:absolute;left:16px}input.svelte-tsg0ih{color:#21242c;width:100%;box-shadow:none;background:#fff;border:1px solid #dbdcdd;border-radius:8px;outline:none;padding:14px 44px;font-size:14px;font-weight:500;transition:border-color .18s,box-shadow .18s}input.svelte-tsg0ih::placeholder{color:#94a3b8;font-weight:400}input.svelte-tsg0ih:focus{background:#fff;border-color:#1865f2;box-shadow:0 0 0 3px #1865f224}.clear-btn.svelte-tsg0ih{color:#64748b;cursor:pointer;background:#f1f5f9;border:none;border-radius:8px;justify-content:center;align-items:center;padding:6px;transition:all .2s;display:flex;position:absolute;right:14px}.clear-btn.svelte-tsg0ih:hover{color:#334155;background:#e2e8f0}.search-results.svelte-tsg0ih{box-shadow:none;background:#fff;border:1px solid #dbdcdd;border-radius:8px;position:absolute;top:calc(100% + 10px);left:0;right:0;overflow:hidden}.no-results.svelte-tsg0ih{text-align:center;color:#64748b;padding:20px;font-size:14px}.result-item.svelte-tsg0ih{color:#1e293b;cursor:pointer;text-align:left;background:0 0;border:none;border-bottom:1px solid #dbdcdd;align-items:center;gap:12px;width:100%;padding:12px 16px;transition:background .15s;display:flex}.result-item.svelte-tsg0ih:last-of-type{border-bottom:none}.result-item.svelte-tsg0ih:hover,.result-item.selected.svelte-tsg0ih{background:#f8fafc}.result-dot.svelte-tsg0ih{border-radius:50%;flex-shrink:0;width:12px;height:12px}.result-content.svelte-tsg0ih{flex:1;min-width:0}.result-title.svelte-tsg0ih{white-space:nowrap;text-overflow:ellipsis;color:#0f172a;font-size:14px;font-weight:500;display:block;overflow:hidden}.result-part.svelte-tsg0ih{color:#64748b;margin-top:3px;font-size:12px;display:block}.result-difficulty.svelte-tsg0ih{color:#94a3b8;font-size:10px}.search-hint.svelte-tsg0ih{color:#64748b;background:#f8fafc;border-top:1px solid #0000000a;justify-content:center;gap:16px;padding:10px 14px;font-size:12px;display:flex}kbd.svelte-tsg0ih{color:#475569;background:#fff;border:1px solid #e2e8f0;border-radius:6px;padding:3px 7px;font-family:inherit;font-size:11px;font-weight:500;display:inline-block}@media (width<=768px){.search-container.svelte-tsg0ih{width:auto;inset:auto 12px 16px}}.minimap.svelte-1fj6ewf{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:50;background:#1a1f26f2;border:1px solid #ffffff1a;border-radius:8px;width:180px;height:120px;position:absolute;bottom:16px;left:16px;overflow:hidden}.minimap-content.svelte-1fj6ewf{width:100%;height:100%}*{box-sizing:border-box}body{color:#21242c;background:#fff;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.app.svelte-1n46o8q{color:#21242c;background:#fff;flex-direction:column;height:100vh;display:flex}.header.svelte-1n46o8q{z-index:100;flex:none}.subtitle.svelte-1n46o8q{color:#475774;margin:10px auto 0;font-weight:400}.main.svelte-1n46o8q{background:#fff;flex:1;min-height:0;position:relative;overflow:hidden}.graph-container.svelte-1n46o8q{transition:right .3s cubic-bezier(.4,0,.2,1);position:absolute;inset:0}.graph-container.sidebar-open.svelte-1n46o8q{right:400px}.loading.svelte-1n46o8q,.error.svelte-1n46o8q{flex-direction:column;justify-content:center;align-items:center;gap:20px;height:100%;display:flex}.spinner.svelte-1n46o8q{border:3px solid #e2e8f0;border-top-color:#1865f2;border-radius:50%;width:48px;height:48px;animation:.8s ease-in-out infinite svelte-1n46o8q-spin}.loading.svelte-1n46o8q p:where(.svelte-1n46o8q){color:#64748b;font-size:15px}@keyframes svelte-1n46o8q-spin{to{transform:rotate(360deg)}}.error.svelte-1n46o8q h2:where(.svelte-1n46o8q){color:#dc2626;margin:0;font-size:20px;font-weight:600}.error.svelte-1n46o8q p:where(.svelte-1n46o8q){color:#64748b;margin:0}.error.svelte-1n46o8q button:where(.svelte-1n46o8q){color:#fff;cursor:pointer;box-shadow:none;background:#1865f2;border:none;border-radius:6px;padding:12px 28px;font-size:14px;font-weight:600;transition:background-color .18s}.error.svelte-1n46o8q button:where(.svelte-1n46o8q):hover{background:#1b50b3}@media (width<=768px){.header.svelte-1n46o8q{padding:12px 16px}.graph-container.sidebar-open.svelte-1n46o8q{right:0}}:root{--iot-tool-bg:#fff;--iot-tool-surface:#fff;--iot-tool-surface-hover:#f7f8fa;--iot-tool-border:#dbdcdd;--iot-tool-border-strong:#c7c9cc;--iot-tool-text:#21242c;--iot-tool-muted:#475774;--iot-tool-subtle:#646b7a;--iot-tool-accent:#1865f2;--iot-tool-width:1120px;--iot-tool-wide:1400px}.iot-tool-page{background:var(--iot-tool-bg);min-height:100vh;color:var(--iot-tool-text)}.iot-tool-navbar{z-index:1000;border-bottom:1px solid var(--iot-tool-border);background:#fffffff5;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:20px;min-height:56px;padding:10px 28px;display:grid;position:sticky;top:0}.iot-tool-nav-logo{align-items:center;text-decoration:none;display:inline-flex}.iot-tool-nav-logo img{width:auto;height:34px;display:block}.iot-tool-nav-center{justify-content:center;align-items:center;gap:22px;min-width:0;display:flex}.iot-tool-nav-center a,.iot-tool-nav-right a{color:var(--iot-tool-muted);white-space:nowrap;font-size:.86rem;font-weight:700;text-decoration:none}.iot-tool-nav-center a:hover,.iot-tool-nav-center a.iot-tool-nav-active,.iot-tool-nav-right a:hover{color:var(--iot-tool-accent)}.iot-tool-nav-right{justify-content:flex-end;align-items:center;gap:10px;display:flex}.iot-tool-nav-login-btn{min-height:34px;color:var(--iot-tool-text);font:inherit;cursor:pointer;background:#f1f3f5;border:1px solid #cfd4da;border-radius:6px;padding:8px 16px;font-size:.84rem;font-weight:800}.iot-tool-nav-login-btn:hover{border-color:var(--iot-tool-border-strong);background:#e7ebf0}.iot-tool-hero{border-bottom:1px solid var(--iot-tool-border);background:var(--iot-tool-surface);text-align:center;padding:28px 24px 26px}.iot-tool-hero-inner{max-width:var(--iot-tool-width);margin:0 auto}.iot-tool-hero--wide .iot-tool-hero-inner{max-width:var(--iot-tool-wide)}.iot-tool-kicker{border-left:3px solid var(--iot-tool-accent);width:fit-content;color:var(--iot-tool-accent);letter-spacing:0;text-transform:uppercase;align-items:center;margin-bottom:8px;padding-left:9px;font-size:.72rem;font-weight:800;line-height:1.2;display:inline-flex}.iot-tool-title{color:var(--iot-tool-text);margin:0;font-size:2.1rem;font-weight:800;line-height:1.15}.iot-tool-subtitle{max-width:720px;color:var(--iot-tool-muted);margin:10px auto 0;font-size:1rem;line-height:1.55}.iot-tool-meta-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;margin-top:16px;display:flex}.iot-tool-pill{border:1px solid var(--iot-tool-border);min-height:28px;color:var(--iot-tool-muted);background:#f7f8fa;border-radius:999px;align-items:center;padding:6px 10px;font-size:.78rem;font-weight:800;line-height:1;display:inline-flex}.iot-tool-status-tag{color:#5c4300;text-transform:uppercase;background:#fff3bf;border:1px solid #e2b400;border-radius:999px;align-items:center;min-height:24px;padding:4px 10px;font-size:.72rem;font-weight:800;line-height:1;display:inline-flex}.iot-tool-switcher{flex-wrap:wrap;justify-content:center;gap:10px;margin-top:18px;display:flex}.iot-tool-switcher a{border:1px solid var(--iot-tool-border);border-left:3px solid var(--tool-accent,var(--iot-tool-accent));background:var(--iot-tool-surface);min-height:36px;color:var(--iot-tool-text);border-radius:6px;align-items:center;padding:8px 13px;font-size:.86rem;font-weight:800;text-decoration:none;display:inline-flex}.iot-tool-switcher a:hover,.iot-tool-switcher a.iot-tool-switcher-active{border-color:var(--iot-tool-border-strong);border-left-color:var(--tool-accent,var(--iot-tool-accent));background:var(--iot-tool-surface-hover);color:var(--tool-accent,var(--iot-tool-accent))}.iot-tool-panel,.iot-tool-card{border:1px solid var(--iot-tool-border);background:var(--iot-tool-surface);box-shadow:none;border-radius:8px}.iot-tool-card:hover{border-color:var(--iot-tool-border-strong);background:var(--iot-tool-surface-hover)}.iot-tool-button-primary,.iot-tool-button-secondary{border-radius:6px;justify-content:center;align-items:center;min-height:36px;padding:8px 14px;font-size:.88rem;font-weight:800;text-decoration:none;display:inline-flex}.iot-tool-button-primary{border:1px solid var(--iot-tool-accent);background:var(--iot-tool-accent);color:#fff}.iot-tool-button-secondary{color:var(--iot-tool-text);background:#f1f3f5;border:1px solid #cfd4da}.iot-tool-button-secondary:hover{border-color:var(--iot-tool-border-strong);background:#e7ebf0}.iot-tool-footer{border-top:1px solid var(--iot-tool-border);color:#d8dde6;background:#2b3038;margin-top:auto}.iot-tool-footer-inner{max-width:var(--iot-tool-wide);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:18px;margin:0 auto;padding:28px 24px;display:flex}.iot-tool-footer a{color:#d8dde6;text-decoration:none}.iot-tool-footer a:hover{color:#fff}@media (width<=760px){.iot-tool-navbar{grid-template-columns:auto auto;padding:8px 12px}.iot-tool-nav-center{grid-column:1/-1;justify-content:flex-start;gap:14px;padding:6px 2px 2px;overflow-x:auto}.iot-tool-nav-center a{font-size:.78rem}.iot-tool-nav-logo img{height:28px}.iot-tool-nav-login-btn{min-height:30px;padding:6px 12px;font-size:.78rem}.iot-tool-hero{padding:22px 16px}.iot-tool-title{font-size:1.65rem}.iot-tool-subtitle{font-size:.92rem}.iot-tool-switcher{flex-wrap:wrap;justify-content:center;padding-bottom:0;overflow-x:visible}.iot-tool-switcher a{white-space:nowrap}}
