.custom-node{border-radius:var(--radius-lg);background:color-mix(in srgb, var(--surface-primary) 70%, transparent);border:2px solid var(--accent-primary);color:var(--text-primary);box-shadow:var(--shadow-md);font-weight:500;font-size:var(--font-size-base);-webkit-backdrop-filter:blur(6px);flex-direction:column;display:flex;position:relative;overflow:visible}.custom-node.target{background:color-mix(in srgb, var(--surface-secondary) 80%, transparent);border:2px solid var(--accent-secondary);box-shadow:var(--shadow-target)}.react-flow__node.selected .custom-node{border-color:var(--accent-primary);box-shadow:0 0 0 2px var(--accent-primary), 0 0 15px color-mix(in srgb, var(--accent-primary) 40%, transparent);transition:all .2s;transform:translateY(-2px)}.node-info-area{flex-direction:column;padding:15px 20px 0;display:flex}.node-recipe-name{font-size:var(--font-size-lg);color:var(--text-primary);text-align:center;margin-bottom:var(--spacing-md);white-space:nowrap;text-overflow:ellipsis;max-width:100%;padding:0 10px;font-weight:700;overflow:hidden}.node-stats-row{border-bottom:1px solid color-mix(in srgb, var(--accent-primary) 33%, transparent);justify-content:space-between;align-items:center;display:flex}.node-stats{font-size:var(--font-size-xs);flex-direction:column;flex:1;justify-content:space-evenly;gap:3px;min-width:0;min-height:65px;display:flex}.node-stat-row{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.node-stat-label{color:var(--text-primary);font-weight:600}.node-machine-info{flex-direction:column;flex:1;justify-content:center;align-items:flex-end;min-width:0;display:flex}.node-machine-name{color:var(--text-primary);font-weight:600;font-size:var(--font-size-sm);white-space:normal;word-wrap:break-word;overflow-wrap:break-word;text-align:right;max-width:100%;margin-bottom:4px}.node-machine-count{color:var(--text-primary);font-size:var(--font-size-xl);font-weight:700;line-height:1}.node-io-area{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.node-handles-container{pointer-events:none;position:absolute;inset:0}.node-handles-container .react-flow__handle{pointer-events:auto}.node-io-columns{align-items:center;width:100%;height:100%;display:grid}.node-io-column{flex-direction:column;gap:8px;padding:12px 0;display:flex;position:relative}.node-io-column.node-io-right{justify-self:end}.node-io-left{align-items:flex-start}.node-io-right{align-items:flex-end}.node-io-right .node-rect-wrapper{justify-content:flex-end;width:100%;display:flex}.node-rect-wrapper{width:100%;position:relative}.node-rect{border-radius:var(--radius-sm);font-size:var(--font-size-sm);text-align:center;border:2px solid;justify-content:center;align-items:center;padding:4px 8px;font-weight:600;display:flex;position:relative;overflow:hidden}.node-rect-text{-webkit-line-clamp:2;line-clamp:2;text-overflow:ellipsis;word-break:break-word;-webkit-box-orient:vertical;line-height:1.2;display:-webkit-box;overflow:hidden}.node-rect-input{background:color-mix(in srgb, var(--status-success) 12%, var(--bg-primary));border-color:var(--status-success);color:var(--status-success)}.node-rect-output{background:color-mix(in srgb, var(--status-error) 12%, var(--bg-primary));border-color:var(--status-error);color:var(--status-error)}.node-rect.clickable{cursor:pointer}@keyframes dash{to{stroke-dashoffset:-24px}}.custom-edge{stroke:var(--accent-primary);stroke-width:3px}.custom-edge-animated{stroke-dasharray:8 4;animation:1.5s linear infinite dash}.btn{border-radius:var(--radius-md);cursor:pointer;font-weight:600;font-size:var(--font-size-sm);box-shadow:var(--shadow-sm);white-space:nowrap;border:2px solid #0000;align-items:center;gap:6px;padding:8px 16px;transition:background .2s,opacity .2s;display:flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent-primary);color:var(--text-inverse)}@media (hover:hover){.btn-primary:hover:not(:disabled){background:var(--accent-secondary)}}.btn-secondary{background:var(--surface-primary);color:var(--accent-primary);border:2px solid var(--border-primary)}@media (hover:hover){.btn-secondary:hover:not(:disabled){background:var(--accent-primary);color:var(--text-inverse)}}.btn-delete{background:color-mix(in srgb, var(--status-error) 12%, var(--bg-primary));color:var(--status-error);border:2px solid var(--status-error)}@media (hover:hover){.btn-delete:hover:not(:disabled){background:var(--status-error);color:var(--text-inverse)}}.btn-icon{min-width:auto;font-size:var(--font-size-lg);padding:8px;line-height:1}.btn.active{background:var(--accent-primary);color:var(--text-inverse);border-color:var(--accent-secondary)}.top-menu-wrapper{top:var(--spacing-md);background:var(--surface-primary);border:2px solid var(--border-primary);border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg);z-index:51;box-shadow:var(--shadow-md);max-width:calc(100vw - var(--spacing-md));border-right:none;transition:transform .3s cubic-bezier(.4,0,.2,1),max-width .3s cubic-bezier(.4,0,.2,1);display:flex;position:absolute;right:0}.top-left-open .top-menu-wrapper{max-width:calc(100vw - 260px - var(--spacing-md) * 3)}.top-menu-wrapper.minimized{transform:translate(calc(100% - 40px))}.top-menu-toggle{width:40px;color:var(--text-primary);cursor:pointer;z-index:52;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}@media (hover:hover){.top-menu-toggle:hover{color:var(--accent-secondary)}}.top-menu-content{gap:var(--spacing-xs);padding:var(--spacing-sm);padding-left:var(--spacing-xs);display:flex;overflow-x:auto}.top-menu-content::-webkit-scrollbar{height:4px}.top-menu-content::-webkit-scrollbar-thumb{background:0 0}@media (hover:hover){.top-menu-content:hover::-webkit-scrollbar-thumb{background:var(--border-secondary)}}.btn-top-menu{background:var(--bg-primary);min-width:52px;min-height:52px;color:var(--text-secondary);border:2px solid var(--border-secondary);border-radius:var(--radius-sm);cursor:pointer;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:2px;padding:4px;transition:background .2s;display:flex}@media (hover:hover){.btn-top-menu:hover{background:var(--surface-tertiary);color:var(--text-primary);border-color:var(--border-primary)}}.btn-top-menu-icon{font-size:18px}.btn-top-menu-text{text-align:center;font-size:8px;font-weight:600}.btn-tray{min-width:44px;max-width:90px;min-height:44px;color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;flex-direction:column;flex:1 0 44px;justify-content:center;align-items:center;gap:0;padding:2px;transition:background .2s,opacity .2s;display:flex}@media (hover:hover){.btn-tray:hover:not(:disabled){background:var(--surface-tertiary);color:var(--text-primary)}}.btn-tray:disabled{opacity:.5;cursor:not-allowed}.btn-tray.active{color:var(--accent-primary);background:var(--surface-tertiary)}.btn-tray-icon{font-size:16px}.btn-tray-text{text-align:center;font-size:8px;font-weight:600}.bottom-tray{background:var(--surface-primary);border:2px solid var(--border-primary);border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);width:100%;max-width:500px;padding:4px 6px calc(4px + env(safe-area-inset-bottom,0px)) 6px;z-index:50;border-bottom:none;flex-direction:column;gap:4px;transition:transform .3s cubic-bezier(.4,0,.2,1);display:flex;position:absolute;bottom:0;left:50%;transform:translate(-50%);box-shadow:0 -4px 12px #0006}.bottom-tray.minimized{transform:translate(-50%, calc(100% - 24px - env(safe-area-inset-bottom,0px)))}.tray-row{flex-wrap:nowrap;justify-content:center;align-items:center;gap:4px;padding-bottom:2px;display:flex;overflow-x:auto}.tray-row::-webkit-scrollbar{height:4px}.tray-row::-webkit-scrollbar-thumb{background:0 0}@media (hover:hover){.tray-row:hover::-webkit-scrollbar-thumb{background:var(--border-secondary)}}.tray-row+.tray-row{border-top:1px solid color-mix(in srgb, var(--accent-primary) 33%, transparent);padding-top:var(--spacing-xs)}.tray-divider{background:color-mix(in srgb, var(--accent-primary) 33%, transparent);width:1px;height:16px;margin:0 var(--spacing-xxs);flex-shrink:0}.tray-pull-bar{cursor:pointer;justify-content:center;align-items:center;width:100%;padding:4px 0 8px;display:flex}.tray-pull-handle{background:var(--border-secondary);border-radius:3px;width:48px;height:5px;transition:background .2s}@media (hover:hover){.tray-pull-bar:hover .tray-pull-handle{background:var(--border-primary)}}.input,.select{background:var(--bg-primary);border:2px solid var(--border-primary);border-radius:var(--radius-sm);width:100%;color:var(--text-primary);font-size:var(--font-size-base);padding:10px}.input::placeholder{color:var(--text-secondary)}.select{cursor:pointer}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{appearance:textfield}.io-item-box{background:color-mix(in srgb, var(--surface-secondary,var(--bg-primary)) 60%, transparent);border:1px solid var(--border-secondary);border-radius:var(--radius-sm);align-items:center;gap:var(--spacing-sm);flex-direction:row;padding:6px 8px;transition:all .2s;display:flex}@media (width<=500px){.modal-io-columns{flex-direction:column!important}.io-column{width:100%}}.theme-editor-panel{background:var(--surface-primary);border-left:2px solid var(--border-primary);width:340px;height:100%;box-shadow:var(--shadow-lg);z-index:100;flex-direction:column;display:flex;position:absolute;top:0;right:0;overflow-y:auto}.theme-editor-header{padding:var(--spacing-lg);border-bottom:1px solid color-mix(in srgb, var(--accent-primary) 33%, transparent);justify-content:space-between;align-items:center;display:flex}.theme-editor-header h2{font-weight:700;font-size:var(--font-size-lg);color:var(--accent-primary)}.theme-editor-body{padding:var(--spacing-lg);gap:var(--spacing-lg);flex-direction:column;display:flex}.theme-group{margin-bottom:var(--spacing-xl)}.theme-group-title{color:var(--text-primary);font-size:var(--font-size-md);margin-bottom:var(--spacing-md);padding-bottom:var(--spacing-sm);border-bottom:2px solid color-mix(in srgb, var(--accent-primary) 33%, transparent);font-weight:600}.theme-color-grid{gap:var(--spacing-md);flex-direction:column;display:flex}.theme-color-item{font-size:var(--font-size-sm);justify-content:space-between;align-items:center;display:flex}.theme-color-label{color:var(--text-secondary);font-weight:500}.theme-color-inputs{gap:var(--spacing-sm);align-items:center;display:flex}.theme-color-picker{border:2px solid var(--border-primary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;width:28px;height:28px;padding:0}.theme-color-text{width:80px;font-size:var(--font-size-xs);background:var(--bg-primary);border:1px solid var(--border-secondary);border-radius:var(--radius-sm);color:var(--text-primary);padding:4px 6px;font-family:monospace}.modal-overlay{background:var(--bg-overlay);z-index:1000;padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface-primary);border:2px solid var(--border-primary);border-radius:var(--radius-lg);padding:var(--spacing-lg);width:600px;max-height:80dvh;box-shadow:var(--shadow-lg);flex-direction:column;display:flex;overflow:hidden}.modal-title{color:var(--accent-primary);margin-bottom:var(--spacing-xl);text-align:center;font-size:var(--font-size-xl);font-weight:700}.modal-content{flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.modal-footer{padding-top:var(--spacing-lg);border-top:1px solid color-mix(in srgb, var(--accent-primary) 33%, transparent);justify-content:flex-end;gap:var(--spacing-sm);display:flex}@media (width<=768px){.modal-overlay{padding:calc(var(--spacing-md) + env(safe-area-inset-top,0px)) calc(var(--spacing-sm) + env(safe-area-inset-right,0px)) calc(var(--spacing-sm) + env(safe-area-inset-bottom,0px)) calc(var(--spacing-sm) + env(safe-area-inset-left,0px));align-items:flex-start}.modal{width:100%;max-width:100%;min-height:0;max-height:100%;margin:0}}.add-recipe-modal{width:95vw;max-width:1000px;height:min(90dvh,100%);max-height:100%}.modal-tabs{border-bottom:1px solid color-mix(in srgb, var(--accent-primary) 33%, transparent);display:flex}.tab-btn{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:12px;font-weight:600}.tab-btn.active{color:var(--text-primary);border-bottom-color:var(--accent-primary)}.data-table-container{border:1px solid var(--border-secondary);border-radius:var(--radius-sm);background:var(--surface-primary);flex-direction:column;min-height:0;display:flex}.virtual-table-header{background:var(--surface-tertiary);z-index:10;border-bottom:2px solid var(--border-secondary);font-weight:600;display:grid;position:sticky;top:0}.virtual-table-header-cell{font-size:var(--font-size-sm);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--text-secondary);padding:8px 12px;transition:all .2s;overflow:hidden}@media (hover:hover){.virtual-table-header-cell:hover{background:color-mix(in srgb, var(--accent-primary) 10%, transparent);color:var(--accent-primary)}}.virtual-table-header-cell.active{color:var(--accent-primary)}.virtual-table-row{border-bottom:1px solid var(--border-secondary);cursor:pointer;align-items:center;transition:background .1s;display:grid}@media (hover:hover){.virtual-table-row:hover{background:color-mix(in srgb, var(--accent-primary) 10%, transparent)}}.virtual-table-cell{font-size:var(--font-size-sm);white-space:nowrap;text-overflow:ellipsis;padding:8px 12px;overflow:hidden}.recipe-entry{background:var(--surface-primary);border:1px solid var(--border-secondary);border-radius:var(--radius-md);flex-direction:column;gap:8px;padding:12px;transition:border-color .2s;display:flex}.recipe-entry.clickable{cursor:pointer}@media (hover:hover){.recipe-entry.clickable:hover{border-color:var(--accent-primary);background:color-mix(in srgb, var(--accent-primary) 5%, transparent)}}.recipe-entry-header{border-bottom:1px solid color-mix(in srgb, var(--accent-primary) 33%, transparent);justify-content:space-between;align-items:center;padding-bottom:8px;display:flex}.recipe-entry-title{flex:1;align-items:flex-start;gap:8px;min-width:0;display:flex}.favorite-btn{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;padding:4px}@media (hover:hover){.favorite-btn:hover{color:var(--accent-primary)}}.favorite-btn.active{color:var(--accent-secondary)}.text-gold{color:var(--accent-primary)}.recipe-name{color:var(--text-primary);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;max-width:100%;font-weight:600;line-height:1.2;display:-webkit-box;overflow:hidden}.recipe-machine-name{color:var(--text-secondary);font-size:var(--font-size-sm);white-space:nowrap}.recipe-pollution{font-size:var(--font-size-xs);color:var(--status-error);background:color-mix(in srgb, var(--status-error) 10%, transparent);border-radius:var(--radius-sm);align-items:center;gap:4px;padding:2px 6px;display:flex}.recipe-entry-body{justify-content:space-between;align-items:center;gap:16px;padding-top:8px;display:flex}.recipe-entry-io{flex-wrap:wrap;flex:1;gap:8px;display:flex}.recipe-entry-inputs{justify-content:flex-end}.recipe-entry-outputs{justify-content:flex-start}.recipe-io-block{flex-direction:column;align-items:center;gap:2px;display:flex;position:relative}.recipe-io-label{text-align:center;word-wrap:break-word;width:60px;color:var(--text-secondary);font-size:10px;line-height:1.1}.recipe-io-qty{background:var(--surface-tertiary);border:1px solid var(--border-secondary);z-index:2;color:var(--text-primary);border-radius:8px;padding:0 4px;font-size:10px;position:absolute;top:-6px;right:-6px}.recipe-io-square{background:var(--bg-primary);border:2px solid var(--border-secondary);border-radius:var(--radius-sm);width:48px;height:48px;color:var(--text-primary);justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex}.recipe-io-square.input{border-color:var(--status-success);background:color-mix(in srgb, var(--status-success) 12%, var(--bg-primary))}.recipe-io-square.output{border-color:var(--status-error);background:color-mix(in srgb, var(--status-error) 12%, var(--bg-primary))}.recipe-entry-process{flex-direction:column;justify-content:center;align-items:center;min-width:150px;display:flex}.process-arrow{color:var(--text-secondary);font-size:24px;line-height:1;display:inline-block;transform:scaleX(2.5)}.process-stat{font-size:var(--font-size-xs);color:var(--text-secondary)}:root{--bg-primary:#0a0a0a;--surface-primary:#1a1a1a;--surface-secondary:#2d2416;--surface-tertiary:#2a2e38;--bg-overlay:#000000b3;--text-primary:#f5d56a;--text-secondary:#999;--text-muted:#aaa;--text-inverse:#0a0a0a;--border-primary:#d4a637;--border-secondary:#333;--accent-primary:#d4a637;--accent-secondary:#f5d56a;--status-success:#22c55e;--status-error:#ef4444;--status-warning:#f59e0b;--cat-extractor:#10b981;--cat-factory:#3b82f6;--cat-logic:#a855f7;--cat-modular:#f97316;--cat-power:#eab308;--cat-silo:#6366f1;--cat-misc:#64748b;--sub-fluid-extractor:#14b8a6;--sub-item-extractor:#10b981;--sub-assembler:#3b82f6;--sub-furnace:#ef4444;--sub-factory-misc:#64748b;--sub-molder:#8b5cf6;--sub-plant:#22c55e;--sub-processor:#06b6d4;--sub-refinery:#f97316;--sub-separator:#ec4899;--sub-logic-gate:#a855f7;--sub-logic-input:#22c55e;--sub-logic-output:#ef4444;--sub-logic-misc:#64748b;--sub-decoration:#f472b6;--sub-depot:#fb923c;--sub-other:#64748b;--sub-research:#818cf8;--sub-modular-diesel:#f97316;--sub-modular-turbine:#06b6d4;--sub-tree-farm:#22c55e;--sub-battery:#eab308;--sub-large-power-plant:#f59e0b;--sub-non-renewable:#ef4444;--sub-power-rate-calc:#a855f7;--sub-renewable:#22c55e;--sub-transfer-pole:#3b82f6;--sub-fluid-silo:#06b6d4;--sub-item-silo:#8b5cf6;--tier-1-color:#888;--tier-2-color:#4ade80;--tier-3-color:#60a5fa;--tier-4-color:#c084fc;--tier-5-color:#fbbf24;--spacing-xs:4px;--spacing-sm:8px;--spacing-md:12px;--spacing-lg:15px;--spacing-xl:20px;--spacing-2xl:30px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--shadow-sm:0 2px 4px #0000004d;--shadow-md:0 4px 6px #0000004d;--shadow-lg:0 8px 16px #00000080;--shadow-target:0 0 20px #d4a63766;--font-size-xs:11px;--font-size-sm:13px;--font-size-base:14px;--font-size-md:15px;--font-size-lg:15px;--font-size-xl:20px;--font-size-2xl:24px;--font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--bg-primary);color:var(--text-primary);width:100%;height:100dvh;position:fixed;overflow:hidden}#root{width:100vw;height:100dvh}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--surface-primary)}::-webkit-scrollbar-thumb{background:var(--accent-primary);border-radius:var(--radius-sm)}@media (hover:hover){::-webkit-scrollbar-thumb:hover{background:var(--border-secondary)}}.flex-row{gap:10px;display:flex}.flex-col{flex-direction:column;gap:10px;display:flex}.flex-1{flex:1}.wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.text-center{text-align:center}.text-right{text-align:right}.w-full{width:100%}.h-full{height:100%}@keyframes moveAlongPath{0%{offset-distance:0%}to{offset-distance:100%}}.animated-edge-arrow{offset-anchor:center;offset-rotate:auto;transform-origin:50%;animation:3s linear infinite moveAlongPath}
