.app{display:flex;flex-direction:column;height:100vh;overflow:hidden;background:var(--bg-app);animation:fade-in-up .45s ease-out}.editor-layout{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.tab-panel{flex:1;min-height:0;overflow:auto;background:var(--bg-panel);padding:var(--space-md)}.app-header{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);background:var(--bg-header);border-bottom:1px solid rgba(255,255,255,.12);flex-wrap:wrap}.app-brand{display:flex;align-items:baseline;gap:var(--space-xs);margin-right:auto}.app-brand h1{margin:0;font-size:1.35rem;font-weight:700;color:var(--text-on-dark)}.app-brand span{color:var(--peach-glow);font-size:.85rem;font-family:var(--font-sans);font-weight:500}.github-credit{color:var(--peach-glow);font-size:.82rem;text-decoration:none;padding:var(--space-3xs) var(--space-xs);border:1px solid rgba(238,229,233,.35);border-radius:var(--radius-sm);transition:background .2s ease,color .2s ease}.github-credit:hover{background:#eee5e91f;color:var(--lavender-blush)}.toolbar{display:flex;gap:var(--space-2xs);flex-wrap:wrap}.btn{border:1px solid var(--border);background:var(--bg-panel);color:var(--text);border-radius:var(--radius-sm);padding:var(--space-2xs) var(--space-sm);cursor:pointer;font-size:.84rem;font-weight:500;transition:background .2s ease,border-color .2s ease,transform .15s ease}.app-header .btn{background:#eee5e91a;border-color:#eee5e947;color:var(--text-on-dark)}.app-header .btn:hover{background:#eee5e92e;border-color:var(--peach-glow)}.btn:hover{background:var(--lavender-blush);border-color:var(--slate-grey)}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--peach-glow);border-color:var(--peach-glow);color:var(--yale-blue);font-weight:600}.app-header .btn-primary{background:var(--peach-glow);border-color:var(--peach-glow);color:var(--yale-blue)}.btn-primary:hover{background:var(--btn-primary-hover);border-color:var(--btn-primary-hover)}.btn-danger{background:var(--surface-danger-soft);border-color:var(--surface-danger-border);color:var(--danger)}.btn-danger:hover{background:var(--btn-danger-hover)}.app-body{display:grid;grid-template-columns:260px 1fr 300px;flex:1;min-height:0;overflow:hidden;gap:0}.app-body.palette-collapsed{grid-template-columns:48px 1fr 300px}.app-body.properties-collapsed{grid-template-columns:260px 1fr 48px}.app-body.palette-collapsed.properties-collapsed{grid-template-columns:48px 1fr 48px}.app-bottom{border-top:1px solid var(--border-soft);background:var(--bg-panel);flex-shrink:0;display:flex;flex-direction:column}.diagnostics-panel{min-height:auto;max-height:280px}.diagnostics-panel.collapsed{max-height:none}.diagnostics-header{display:flex;justify-content:flex-start;align-items:center;gap:var(--space-xs);width:100%;border:none;cursor:pointer;text-align:left;background:var(--bg-panel);color:var(--text)}.diagnostics-status{margin-left:auto}.diagnostics-content{padding:var(--space-sm) var(--space-md);overflow-y:auto;max-height:220px}.diagnostics-empty{padding:var(--space-md) var(--space-lg)}.diagnostics-loading{padding:var(--space-sm) var(--space-md) var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.diagnostic-group{margin-bottom:var(--space-sm)}.diagnostic-group-title{font-size:.74rem;color:var(--text-muted);margin-bottom:var(--space-2xs);font-family:var(--font-serif)}.verify-progress-wrap{height:5px;background:var(--lavender-blush);overflow:hidden}.verify-progress-bar{height:100%;background:linear-gradient(90deg,var(--yale-blue),var(--peach-glow));transition:width .08s linear}.palette-scroll,.properties-scroll{overflow-y:auto;overflow-x:hidden;flex:1;min-height:0;height:100%}.palette-category{font-size:.74rem;font-weight:600;margin-bottom:var(--space-2xs);text-transform:uppercase;letter-spacing:.06em;font-family:var(--font-serif);color:var(--yale-blue)}.connections-debug pre{margin:0;padding:var(--space-sm);background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-md);font-size:.78rem;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:var(--text)}.panel{background:var(--bg-panel);border-right:1px solid var(--border-soft);overflow:hidden;display:flex;flex-direction:column;min-height:0}.collapsible-panel.collapsed{min-width:48px;width:48px}.collapsible-panel.collapsed .collapsible-body{display:none}.collapsible-panel.collapsed .collapsible-header span:not(.collapse-chevron){display:none}.collapsible-panel.collapsed .collapsible-badge{display:none}.collapsible-panel.collapsible-right{border-right:none;border-left:1px solid var(--border-soft)}.collapsible-header{display:flex;align-items:center;gap:var(--space-2xs);width:100%;border:none;cursor:pointer;text-align:left}.collapse-chevron{font-size:.72rem;color:var(--text-muted);width:.85rem}.panel-header{padding:var(--space-sm) var(--space-md);font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);border-bottom:1px solid var(--border-soft);background:var(--bg-input);font-family:var(--font-serif)}.panel-content,.collapsible-body{padding:var(--space-md);flex:1;overflow:auto;min-height:0}.tabs{display:flex;gap:0;border-bottom:1px solid var(--border-soft);background:var(--bg-subbar);padding:0 var(--space-xs);transition:background-color .25s ease,border-color .25s ease}.tab{flex:1;border:none;background:transparent;color:var(--text-muted);padding:var(--space-sm) var(--space-xs);cursor:pointer;font-size:.8rem;font-weight:600;border-bottom:2px solid transparent;transition:color .2s ease,border-color .2s ease}.tab:hover{color:var(--text);background:var(--lavender-blush);border-radius:var(--radius-sm) var(--radius-sm) 0 0}.tab.active{color:var(--accent);border-bottom-color:var(--tomato-jam)}[data-theme=dark] .tab.active{color:var(--peach-glow);border-bottom-color:var(--peach-glow)}[data-theme=dark] .tab{color:var(--text-muted)}[data-theme=dark] .tab:hover{color:var(--text);background:#ffffff0a}[data-theme=dark] .port-btn.connected{color:var(--peach-glow)}[data-theme=dark] .device-node{border-color:var(--slate-grey)}[data-theme=dark] .device-node.device-error{border-color:var(--danger)}[data-theme=dark] .btn-loading .loading-pulse-dot,[data-theme=dark] .loading-pulse-dot{background:var(--peach-glow)}.btn-theme{min-width:4.5rem}.list-item{display:block;width:100%;text-align:left;border:1px solid var(--border-soft);background:var(--bg-input);color:var(--text);border-radius:var(--radius-md);padding:var(--space-2xs) var(--space-sm);margin-bottom:var(--space-2xs);cursor:pointer;font-size:.84rem;transition:border-color .2s ease,box-shadow .2s ease}.list-item:hover{border-color:var(--slate-grey);box-shadow:var(--shadow-list)}.list-item.selected{border-color:var(--accent);background:var(--surface-selected)}.list-item small{display:block;color:var(--text-muted);margin-top:.18rem}.field{margin-bottom:var(--space-sm)}.field label{display:block;font-size:.74rem;color:var(--text-muted);margin-bottom:var(--space-3xs);text-transform:uppercase;letter-spacing:.05em;font-weight:600}.field input,.field select,.field textarea{width:100%;border:1px solid var(--border);background:var(--bg-input);color:var(--text);border-radius:var(--radius-sm);padding:var(--space-2xs) var(--space-xs);font-size:.86rem;transition:border-color .2s ease,box-shadow .2s ease}.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--accent);box-shadow:var(--shadow-focus)}.field textarea{min-height:200px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;resize:vertical}.badge{display:inline-block;font-size:.68rem;font-weight:600;padding:.14rem .48rem;border-radius:999px;text-transform:uppercase;letter-spacing:.03em}.badge-error{background:var(--surface-danger-soft);color:var(--danger)}.badge-warning{background:var(--surface-warning-soft);color:var(--warning)}.badge-info{background:var(--surface-info-soft);color:var(--accent)}.badge-ok{background:var(--surface-success-soft);color:var(--success)}.app-header .badge-ok{background:#eee5e926;color:var(--lavender-blush)}.app-header .badge-error{background:#cc293640;color:#fecaca}.app-header .badge-warning{background:#f1bf9840;color:var(--peach-glow)}.empty-state{color:var(--text-muted);font-size:.88rem;text-align:center;padding:var(--space-xl) var(--space-lg);font-family:var(--font-serif)}.status-bar{display:flex;gap:var(--space-lg);padding:var(--space-2xs) var(--space-md);font-size:.76rem;color:var(--text-muted);border-top:1px solid var(--border-soft);background:var(--lavender-blush)}.status-bar strong{color:var(--text)}.info-list{margin:0;padding-left:1.35rem;color:var(--text)}.muted-line{margin-bottom:var(--space-2xs);color:var(--text-muted)}.skeleton-wrap{display:flex;flex-direction:column;gap:var(--space-2xs)}.skeleton-line{height:.85rem;border-radius:var(--radius-sm);background:linear-gradient(90deg,var(--lavender-blush) 0%,var(--skeleton-mid) 45%,var(--lavender-blush) 90%);background-size:200% 100%;animation:skeleton-shimmer 1.4s ease-in-out infinite}.loading-pulse{display:flex;align-items:center;gap:var(--space-2xs)}.loading-pulse-dot{width:7px;height:7px;border-radius:50%;background:var(--yale-blue);animation:pulse-soft 1.1s ease-in-out infinite}.loading-pulse-dot:nth-child(2){animation-delay:.15s}.loading-pulse-dot:nth-child(3){animation-delay:.3s}.loading-pulse-label{font-size:.8rem;color:var(--text-muted);margin-left:var(--space-2xs)}.canvas{position:relative;flex:1;overflow:auto;background:radial-gradient(circle at 1px 1px,var(--canvas-grid-dot) 1px,transparent 0) 0 0 / 28px 28px,var(--bg-canvas);min-height:400px}.canvas-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;min-width:1600px;min-height:720px;pointer-events:none}.canvas-wires{z-index:0}.canvas-wiring .canvas-wires{z-index:2}.connection-group{cursor:pointer;pointer-events:stroke}.connection-group.selected line,.connection-group.highlighted line{filter:drop-shadow(0 0 4px var(--wire-glow))}.fuse-marker{pointer-events:none}.wire-legend{display:flex;flex-wrap:wrap;gap:var(--space-sm) var(--space-lg);padding:var(--space-2xs) var(--space-md);background:var(--bg-subbar);border-bottom:1px solid var(--border-soft);font-size:.74rem;color:var(--text-muted);flex-shrink:0;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.wire-legend-item{display:flex;align-items:center;gap:var(--space-2xs)}.palette-item{display:flex;align-items:center;gap:var(--space-xs)}.palette-item span{flex:1}.device-node{position:absolute;width:168px;min-height:130px;background:var(--surface-card);border:2px solid var(--yale-blue);border-radius:var(--radius-md);padding:var(--space-2xs);-webkit-user-select:none;user-select:none;z-index:1;box-shadow:var(--shadow-device);transition:box-shadow .2s ease}.device-drag-handle{cursor:grab;margin:calc(-1 * var(--space-2xs)) calc(-1 * var(--space-2xs)) 0;padding:var(--space-2xs) var(--space-2xs) 0;border-radius:var(--radius-md) var(--radius-md) 0 0}.device-drag-handle:active{cursor:grabbing}.device-node.device-error{border:2px dotted var(--tomato-jam)}.device-node.selected{box-shadow:var(--shadow-selected)}.device-node.highlighted{box-shadow:var(--shadow-highlighted)}.device-image-wrap{display:flex;justify-content:center;margin-bottom:.3rem}.device-icon{display:block}.port-more{font-size:.64rem;color:var(--text-muted);width:100%;padding-top:.18rem}.port-picker{display:flex;flex-wrap:wrap;gap:var(--space-3xs)}.device-title{font-size:.8rem;font-weight:700;margin-bottom:.18rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text);font-family:var(--font-serif)}.device-type{font-size:.7rem;color:var(--text-muted);margin-bottom:var(--space-2xs)}.device-ports{position:relative;z-index:3;display:flex;flex-wrap:wrap;gap:.24rem}.port-btn{font-size:.64rem;padding:.14rem .3rem;border:1px solid var(--border);background:var(--bg-panel);color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;transition:background .15s ease,box-shadow .15s ease}.port-btn:hover{background:var(--lavender-blush)}.port-btn.disconnected{color:var(--tomato-jam)}.port-btn.connected{color:var(--yale-blue);font-weight:600}.port-btn.pending{background:var(--surface-pending);border-color:var(--accent);color:var(--accent)}.port-btn.compatible{background:var(--surface-compatible);border-color:var(--accent);color:var(--accent);box-shadow:var(--shadow-compatible)}.canvas-hint{position:fixed;bottom:240px;left:50%;transform:translate(-50%);background:var(--bg-panel);border:1px solid var(--border);padding:var(--space-2xs) var(--space-sm);border-radius:var(--radius-lg);font-size:.82rem;color:var(--text);z-index:10;pointer-events:none;display:flex;align-items:center;gap:var(--space-xs);box-shadow:var(--shadow-hint)}.canvas-hint:has(.btn-inline){pointer-events:auto}.canvas-hint-error{border-color:var(--danger);background:var(--surface-danger-soft);color:var(--danger)}.btn-inline{font-size:.74rem;padding:.18rem .54rem;pointer-events:auto}.btn-loading{display:inline-flex;align-items:center;gap:.4rem}.btn-loading .loading-pulse-dot{width:6px;height:6px;background:var(--yale-blue)}.canvas-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:.92rem;pointer-events:none;font-family:var(--font-serif);z-index:0}@media(max-width:1100px){.app-body{grid-template-columns:220px 1fr;grid-template-rows:1fr auto}.app-body.palette-collapsed{grid-template-columns:48px 1fr}}.sim-panel{font-size:.86rem}.sim-mode-toggle{display:flex;align-items:center;gap:var(--space-xs);margin-bottom:var(--space-sm)}.sim-mode-toggle span{color:var(--text-muted);font-size:.82rem}.sim-alert{border-radius:var(--radius-md);padding:var(--space-xs) var(--space-sm);font-weight:700;font-size:.86rem;margin-bottom:var(--space-sm)}.sim-alert-danger{background:var(--surface-danger-soft);border:1px solid var(--surface-danger-border);color:var(--danger)}.sim-banner{margin:var(--space-xs) var(--space-md) 0;text-align:center}.sim-metrics{display:flex;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-lg)}.sim-metric{flex:1;min-width:130px;background:var(--lavender-blush);border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:var(--space-xs) var(--space-sm);display:flex;flex-direction:column;gap:.24rem}.sim-metric-label{font-size:.74rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.sim-metric-value{font-size:1.4rem;font-weight:700;color:var(--text);font-family:var(--font-serif)}.sim-voltage-ok{color:var(--success)}.sim-voltage-warn{color:var(--warning)}.sim-voltage-danger{color:var(--tomato-jam)}.sim-wire-table{width:100%;border-collapse:collapse;font-size:.8rem}.sim-wire-table th,.sim-wire-table td{text-align:left;padding:.36rem .48rem;border-bottom:1px solid var(--border-soft)}.sim-wire-table th{color:var(--text-muted);font-weight:600;font-family:var(--font-serif)}.sim-wire-hazard td{background:var(--surface-danger-soft);color:var(--danger)}.info-list small{display:block;color:var(--text-muted);font-size:.74rem}:root,[data-theme=light]{color-scheme:light;--yale-blue: #08415c;--tomato-jam: #cc2936;--slate-grey: #6b818c;--peach-glow: #f1bf98;--lavender-blush: #eee5e9;--bg-app: var(--lavender-blush);--bg-panel: #ffffff;--bg-header: var(--yale-blue);--bg-canvas: #faf7f4;--bg-input: var(--lavender-blush);--border: #c5ccd2;--border-soft: #d8dee3;--text: var(--yale-blue);--text-muted: var(--slate-grey);--text-on-dark: var(--lavender-blush);--accent: var(--yale-blue);--accent-hover: #0a5275;--success: #0d5a3a;--danger: var(--tomato-jam);--warning: #b45309;--surface-card: linear-gradient(180deg, #ffffff 0%, var(--lavender-blush) 100%);--surface-danger-soft: #fae8ea;--surface-danger-border: #e8a0a8;--surface-warning-soft: #fef3e8;--surface-info-soft: #e8f0f4;--surface-success-soft: #e6f2ec;--surface-selected: #e8f0f4;--surface-pending: #e8f0f4;--surface-compatible: var(--peach-glow);--fuse-fill: var(--peach-glow);--fuse-stroke: var(--yale-blue);--fuse-fault-fill: #f5c4c8;--fuse-fault-stroke: var(--tomato-jam);--fuse-fault-text: var(--tomato-jam);--shadow-device: 0 10px 28px rgba(8, 65, 92, .1);--shadow-hint: 0 12px 32px rgba(8, 65, 92, .12);--shadow-list: 0 4px 14px rgba(8, 65, 92, .08);--shadow-focus: 0 0 0 3px rgba(8, 65, 92, .12);--shadow-selected: 0 0 0 3px rgba(8, 65, 92, .25);--shadow-highlighted: 0 0 0 3px rgba(241, 191, 152, .85);--shadow-compatible: 0 0 0 2px rgba(241, 191, 152, .65);--canvas-grid-dot: rgba(107, 129, 140, .22);--wire-glow: rgba(8, 65, 92, .45);--skeleton-mid: #ffffff;--btn-primary-hover: #f5cdb0;--btn-danger-hover: #f5d0d5;--radius-sm: 12px;--radius-md: 16px;--radius-lg: 20px;--radius-xl: 24px;--font-serif: "Source Serif 4", Georgia, "Times New Roman", serif;--font-sans: "DM Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--space-3xs: .3rem;--space-2xs: .48rem;--space-xs: .6rem;--space-sm: .78rem;--space-md: .9rem;--space-lg: 1.2rem;--space-xl: 1.44rem;--bg-subbar: var(--lavender-blush)}[data-theme=dark]{color-scheme:dark;--bg-app: #062636;--bg-panel: #0a3549;--bg-header: #08415c;--bg-canvas: #083247;--bg-input: #0c3f58;--border: #1a5570;--border-soft: #144a63;--text: var(--lavender-blush);--text-muted: #9aadb8;--text-on-dark: var(--lavender-blush);--accent: var(--peach-glow);--accent-hover: #f5cdb0;--success: #6ee7b7;--danger: #f0717c;--warning: var(--peach-glow);--surface-card: linear-gradient(180deg, #0e4560 0%, #0a3549 100%);--surface-danger-soft: #3d1820;--surface-danger-border: #7a2e38;--surface-warning-soft: #3d3020;--surface-info-soft: #0e4560;--surface-success-soft: #123d30;--surface-selected: #0e4a66;--surface-pending: #0e4a66;--surface-compatible: #4a3828;--fuse-fill: #4a3828;--fuse-stroke: var(--peach-glow);--fuse-fault-fill: #4a2028;--fuse-fault-stroke: var(--danger);--fuse-fault-text: #fecaca;--shadow-device: 0 10px 28px rgba(0, 0, 0, .35);--shadow-hint: 0 12px 32px rgba(0, 0, 0, .4);--shadow-list: 0 4px 14px rgba(0, 0, 0, .25);--shadow-focus: 0 0 0 3px rgba(241, 191, 152, .2);--shadow-selected: 0 0 0 3px rgba(241, 191, 152, .35);--shadow-highlighted: 0 0 0 3px rgba(241, 191, 152, .5);--shadow-compatible: 0 0 0 2px rgba(241, 191, 152, .4);--canvas-grid-dot: rgba(107, 129, 140, .35);--wire-glow: rgba(241, 191, 152, .55);--skeleton-mid: #0e4a66;--btn-primary-hover: #f5cdb0;--btn-danger-hover: #5c2830;--bg-subbar: #0c3f58}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-width:320px;height:100vh;overflow:hidden;font-family:var(--font-sans);line-height:1.55;color:var(--text);background:var(--bg-app);-webkit-font-smoothing:antialiased;transition:background-color .25s ease,color .25s ease}h1,h2,h3,.panel-header,.app-brand h1{font-family:var(--font-serif);font-weight:600;letter-spacing:-.02em}button,input,select,textarea{font:inherit}#root{height:100vh;overflow:hidden}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes pulse-soft{0%,to{opacity:.55}50%{opacity:1}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
