*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
:root{
  --bg:#0f1117;--bg2:#1a1d27;--bg3:#242836;--bg4:#2e3344;
  --text:#e8eaf0;--text2:#9ca3b8;--text3:#6b7280;
  --accent:#4ecdc4;--accent2:#45b7aa;--accent-glow:rgba(78,205,196,.15);
  --project-h:44px;
  --warn:#f59e0b;--err:#ef4444;--ok:#22c55e;
  --blue:#3b82f6;--purple:#8b5cf6;
  --radius:8px;--shadow:0 4px 24px rgba(0,0,0,.4);
  --total-top:calc(var(--toolbar-h) + var(--project-h));
  --toolbar-h:48px;--palette-w:240px;--props-w:280px;
}
html,body{height:100%;font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);overflow:hidden}
.hidden{display:none!important}

/* TOOLBAR */
#toolbar{height:var(--toolbar-h);background:var(--bg2);border-bottom:1px solid var(--bg3);display:flex;align-items:center;justify-content:space-between;padding:0 12px;gap:8px;z-index:100}
.toolbar-left{display:flex;align-items:center;gap:10px}
.logo{font-weight:700;font-size:15px;color:var(--accent);text-decoration:none;letter-spacing:1px}
.app-title{font-size:13px;color:var(--text2);border-left:1px solid var(--bg4);padding-left:10px}
.toolbar-center{display:flex;align-items:center;gap:2px}
.toolbar-center button{display:flex;align-items:center;gap:5px;background:none;border:1px solid transparent;color:var(--text2);padding:6px 10px;border-radius:6px;cursor:pointer;font-size:12px;font-family:inherit;transition:.2s}
.toolbar-center button:hover{background:var(--bg3);color:var(--text);border-color:var(--bg4)}
.toolbar-center button:active{transform:scale(.96)}
.toolbar-sep{width:1px;height:24px;background:var(--bg4);margin:0 4px}
.toolbar-right{display:flex;flex-direction:column;align-items:flex-end;gap:2px;min-width:110px}
.toolbar-link{font-size:11px;color:var(--accent);text-decoration:none;opacity:.7;transition:.2s}
.toolbar-link:hover{opacity:1}
.lang-switch{display:inline-flex;align-items:center;justify-content:center;gap:4px;background:linear-gradient(135deg,rgba(78,205,196,.12),rgba(139,92,246,.12));border:1px solid rgba(78,205,196,.3);color:var(--text);padding:3px 12px;border-radius:14px;cursor:pointer;font-size:11px;font-weight:600;font-family:inherit;transition:.25s;min-width:60px;letter-spacing:.5px}
.lang-switch:hover{background:linear-gradient(135deg,rgba(78,205,196,.25),rgba(139,92,246,.25));border-color:var(--accent);transform:scale(1.04);box-shadow:0 0 12px rgba(78,205,196,.2)}

/* PROJECT PANEL */
#projectBar{background:var(--bg2);border-bottom:1px solid var(--bg3);position:relative;z-index:50}
#projSummary{height:var(--project-h);display:flex;align-items:center;padding:0 12px;gap:10px;font-size:12px}
.proj-stat{color:var(--text3);font-size:11px;padding:0 8px;border-left:1px solid var(--bg4)}
.proj-stat b{color:var(--accent)}
.proj-toggle{margin-left:auto;padding:4px 12px;background:var(--accent-glow);border:1px solid rgba(78,205,196,.3);border-radius:5px;color:var(--accent);font-size:11px;font-family:inherit;cursor:pointer;transition:.2s}
.proj-toggle:hover{background:rgba(78,205,196,.2)}
#projPanel{background:var(--bg);border-top:1px solid var(--bg3);max-height:320px;overflow-y:auto}
.proj-panel-head{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--bg3)}
.proj-panel-head h4{font-size:12px;font-weight:600;color:var(--text2)}
.proj-panel-head button{padding:4px 12px;background:var(--accent);color:var(--bg);border:none;border-radius:5px;font-size:11px;font-family:inherit;font-weight:600;cursor:pointer;transition:.2s}
.proj-panel-head button:hover{background:var(--accent2)}
.load-card{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--bg3);font-size:11px;flex-wrap:wrap}
.load-card:hover{background:rgba(255,255,255,.02)}
.load-num{width:20px;height:20px;border-radius:50%;background:var(--accent);color:var(--bg);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.load-card label{color:var(--text3);font-size:10px;white-space:nowrap}
.load-card input,.load-card select{padding:3px 6px;background:var(--bg3);border:1px solid var(--bg4);border-radius:4px;color:var(--text);font-size:11px;font-family:inherit;outline:none}
.load-card input:focus,.load-card select:focus{border-color:var(--accent)}
.load-card .load-result{color:var(--accent);font-weight:600;font-size:11px;padding:2px 8px;background:rgba(78,205,196,.08);border-radius:4px;white-space:nowrap}
.load-card .load-warn{color:var(--warn);font-size:10px}
.load-card .load-del{background:none;border:none;color:var(--text3);cursor:pointer;font-size:14px;padding:2px 4px;opacity:.5;transition:.15s}
.load-card .load-del:hover{opacity:1;color:var(--err)}
.proj-panel-footer{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-top:1px solid var(--bg3);background:var(--bg2)}
.proj-totals{display:flex;gap:16px;font-size:11px;color:var(--text2)}
.proj-totals b{color:var(--accent)}
.proj-apply{padding:6px 16px;background:var(--accent);color:var(--bg);border:none;border-radius:6px;font-size:12px;font-family:inherit;font-weight:600;cursor:pointer;transition:.2s}
.proj-apply:hover{background:var(--accent2);transform:translateY(-1px)}

/* MAIN LAYOUT */
#app{display:flex;height:calc(100vh - var(--total-top))}

/* PALETTE */
#palette{width:var(--palette-w);background:var(--bg2);border-right:1px solid var(--bg3);display:flex;flex-direction:column;overflow:hidden}
.palette-search{padding:8px}
.palette-search input{width:100%;padding:7px 10px;background:var(--bg3);border:1px solid var(--bg4);border-radius:6px;color:var(--text);font-size:12px;font-family:inherit;outline:none;transition:.2s}
.palette-search input:focus{border-color:var(--accent)}
#paletteList{flex:1;overflow-y:auto;padding:0 8px 8px}
#paletteList::-webkit-scrollbar{width:4px}
#paletteList::-webkit-scrollbar-thumb{background:var(--bg4);border-radius:4px}
.palette-cat{margin-bottom:4px}
.palette-cat-title{font-size:11px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.5px;padding:8px 4px 4px;cursor:pointer;display:flex;align-items:center;gap:4px;user-select:none}
.palette-cat-title::before{content:'▸';font-size:10px;transition:.2s;display:inline-block}
.palette-cat.open .palette-cat-title::before{transform:rotate(90deg)}
.palette-cat-items{display:none;padding:2px 0}
.palette-cat.open .palette-cat-items{display:block}
.palette-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:grab;font-size:12px;color:var(--text2);transition:.15s;user-select:none}
.palette-item:hover{background:var(--accent-glow);color:var(--text)}
.palette-item:active{cursor:grabbing;transform:scale(.97)}
.palette-item svg{width:32px;height:24px;flex-shrink:0}
.palette-item svg path,.palette-item svg rect,.palette-item svg line,.palette-item svg circle,.palette-item svg polygon{stroke:var(--text2);fill:none;stroke-width:1.5}
.palette-item:hover svg path,.palette-item:hover svg rect,.palette-item:hover svg line,.palette-item:hover svg circle,.palette-item:hover svg polygon{stroke:var(--accent)}

/* CANVAS */
#canvasWrap{flex:1;position:relative;overflow:hidden;background:var(--bg)}
#canvas{width:100%;height:100%;cursor:crosshair}
#canvas .component{cursor:move}
#canvas .component:hover .comp-body{filter:brightness(1.3)}
#canvas .component.selected .comp-body{filter:drop-shadow(0 0 6px var(--accent))}
#canvas .port{cursor:pointer;transition:.15s}
#canvas .port circle{fill:var(--bg);stroke:var(--accent);stroke-width:1.5;r:4;transition:.15s}
#canvas .port:hover circle{fill:var(--accent);r:6}
#canvas .connection{stroke:var(--text3);stroke-width:2.5;fill:none;cursor:pointer;transition:.15s}
#canvas .connection:hover{stroke:var(--accent);stroke-width:3.5}
#canvas .connection.flow-active{stroke:var(--accent);stroke-dasharray:8 4;animation:flowAnim 1s linear infinite}
#canvas .connection.flow-reverse{animation:flowAnimReverse 1s linear infinite}
#canvas .connection.flow-exhaust{stroke:var(--warn)!important;stroke-dasharray:6 6;animation:flowAnim .8s linear infinite}
#canvas .tube-label{font-family:'Inter',sans-serif;pointer-events:none;user-select:none}
#canvas .tube-label.warn{fill:var(--warn)}
@keyframes flowAnim{to{stroke-dashoffset:-24}}
@keyframes flowAnimReverse{to{stroke-dashoffset:24}}
.sim-piston{pointer-events:none}
.sim-valve-overlay{pointer-events:none}
.sim-coil-pulse{animation:coilPulse 0.8s ease-in-out infinite}
@keyframes coilPulse{0%,100%{opacity:0.7}50%{opacity:1}}
#btnPowerFail{display:none;color:#ef4444;background:rgba(239,68,68,0.08)}
#btnPowerFail.active{color:#fff;background:rgba(239,68,68,0.6);animation:powerBlink 1s ease-in-out infinite}
@keyframes powerBlink{0%,100%{opacity:0.8}50%{opacity:1}}
#canvas .comp-label{fill:var(--text2);font-size:11px;font-family:'Inter',sans-serif;text-anchor:middle;pointer-events:none}

/* VALIDATION BAR */
#validationBar{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);background:var(--bg2);border:1px solid var(--bg3);border-radius:8px;padding:6px 16px;display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text2);box-shadow:var(--shadow);z-index:10}
#validationBar.error{border-color:var(--err);color:var(--err)}
#validationBar.warning{border-color:var(--warn);color:var(--warn)}
#validationBar.ok{border-color:var(--ok);color:var(--ok)}

/* ZOOM */
#zoomControls{position:absolute;bottom:12px;right:12px;display:flex;align-items:center;gap:4px;background:var(--bg2);border:1px solid var(--bg3);border-radius:8px;padding:4px;z-index:10}
#zoomControls button{width:28px;height:28px;border:none;background:none;color:var(--text2);font-size:16px;cursor:pointer;border-radius:4px;transition:.15s}
#zoomControls button:hover{background:var(--bg3);color:var(--text)}
#zoomLevel{font-size:11px;color:var(--text3);min-width:36px;text-align:center}

/* PROPERTIES PANEL */
#properties{width:var(--props-w);background:var(--bg2);border-left:1px solid var(--bg3);display:flex;flex-direction:column;overflow-y:auto}
#properties::-webkit-scrollbar{width:4px}
#properties::-webkit-scrollbar-thumb{background:var(--bg4);border-radius:4px}
.props-header{display:flex;align-items:center;justify-content:space-between;padding:12px;border-bottom:1px solid var(--bg3)}
.props-header h3{font-size:13px;font-weight:600}
.props-header button{background:none;border:none;font-size:16px;cursor:pointer;opacity:.6;transition:.15s}
.props-header button:hover{opacity:1}
.props-empty{padding:32px 16px;text-align:center;color:var(--text3);font-size:12px;line-height:1.6}
.props-empty svg{margin-bottom:12px}
.props-section{padding:12px;border-bottom:1px solid var(--bg3)}
.props-section label{display:block;font-size:11px;color:var(--text3);margin-bottom:4px;text-transform:uppercase;letter-spacing:.3px}
.props-section h4{font-size:12px;font-weight:600;margin-bottom:8px;color:var(--text2)}
.props-section input,.props-section select{width:100%;padding:6px 8px;background:var(--bg3);border:1px solid var(--bg4);border-radius:6px;color:var(--text);font-size:12px;font-family:inherit;outline:none;transition:.2s}
.props-section input:focus,.props-section select:focus{border-color:var(--accent)}
#catalogLinks a,#wikiLinks a{display:block;padding:6px 8px;font-size:12px;color:var(--accent);text-decoration:none;border-radius:4px;transition:.15s;margin-bottom:2px}
#catalogLinks a:hover,#wikiLinks a:hover{background:var(--accent-glow)}

/* VALIDATION PANEL */
#validationPanel{padding:0}
#validationPanel ul{list-style:none;padding:4px 8px}
#validationPanel li{padding:6px 8px;font-size:11px;border-radius:4px;margin-bottom:2px;display:flex;align-items:flex-start;gap:6px;line-height:1.4}
#validationPanel li.err{color:var(--err);background:rgba(239,68,68,.08)}
#validationPanel li.warn{color:var(--warn);background:rgba(245,158,11,.08)}
#validationPanel li.ok{color:var(--ok);background:rgba(34,197,94,.08)}

/* PROMO */
#promoBlock{margin-top:auto;padding:12px;border-top:1px solid var(--bg3)}
.promo-card{background:linear-gradient(135deg,rgba(78,205,196,.12),rgba(59,130,246,.08));border:1px solid rgba(78,205,196,.2);border-radius:8px;padding:12px;text-align:center;margin-bottom:8px}
.promo-badge{font-size:11px;font-weight:700;color:var(--accent);letter-spacing:1px}
.promo-card p{font-size:11px;color:var(--text2);margin:6px 0 8px;line-height:1.4}
.promo-btn{display:inline-block;padding:6px 14px;background:var(--accent);color:var(--bg);font-size:12px;font-weight:600;border-radius:6px;text-decoration:none;transition:.2s}
.promo-btn:hover{background:var(--accent2);transform:translateY(-1px)}
.promo-tools{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.promo-tools a{display:block;padding:6px;font-size:11px;color:var(--text2);text-decoration:none;text-align:center;border-radius:4px;transition:.15s}
.promo-tools a:hover{background:var(--bg3);color:var(--text)}

/* MODAL */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;z-index:200;backdrop-filter:blur(4px)}
.modal-content{background:var(--bg2);border:1px solid var(--bg3);border-radius:12px;width:90%;max-width:640px;max-height:80vh;overflow:hidden;box-shadow:var(--shadow)}
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--bg3)}
.modal-header h2{font-size:16px;font-weight:600}
.modal-close{background:none;border:none;color:var(--text3);font-size:18px;cursor:pointer;transition:.15s}
.modal-close:hover{color:var(--text)}
.modal-body{padding:16px 20px;overflow-y:auto;max-height:calc(80vh - 60px)}
.template-card{padding:12px;border:1px solid var(--bg3);border-radius:8px;margin-bottom:8px;cursor:pointer;transition:.2s}
.template-card:hover{border-color:var(--accent);background:var(--accent-glow)}
.template-card h4{font-size:13px;margin-bottom:4px}
.template-card p{font-size:11px;color:var(--text3);line-height:1.4}

/* BOM BUTTON & TABLE */
.proj-bom{padding:6px 16px;background:rgba(59,130,246,.12);color:#60a5fa;border:1px solid rgba(59,130,246,.25);border-radius:6px;cursor:pointer;font-size:12px;font-weight:500;transition:.2s}
.proj-bom:hover{background:rgba(59,130,246,.2);color:#93bbfd}
.bom-section{margin-bottom:18px}
.bom-section h3{font-size:13px;font-weight:600;color:var(--accent);margin-bottom:8px;display:flex;align-items:center;gap:6px}
.bom-table{width:100%;border-collapse:collapse;font-size:12px}
.bom-table th{text-align:left;padding:6px 10px;background:var(--bg3);color:var(--text2);font-weight:500;border-radius:4px 4px 0 0;font-size:11px;text-transform:uppercase;letter-spacing:.5px}
.bom-table td{padding:6px 10px;border-bottom:1px solid var(--bg3);color:var(--text)}
.bom-table tr:last-child td{border-bottom:none}
.bom-table .bom-qty{font-weight:600;color:var(--accent);text-align:center;width:50px}
.bom-table .bom-link{color:#60a5fa;text-decoration:none;font-weight:500;transition:.15s}
.bom-table .bom-link:hover{color:#93bbfd;text-decoration:underline}
.bom-total-row{margin-top:16px;padding:12px;background:linear-gradient(135deg,rgba(78,205,196,.08),rgba(59,130,246,.06));border:1px solid rgba(78,205,196,.15);border-radius:8px;text-align:center;font-size:12px;color:var(--text2)}
.bom-total-row b{color:var(--accent)}

/* ==================== MOBILE TOGGLES ==================== */
.mobile-toggle{display:none;position:fixed;z-index:150;width:44px;height:44px;border-radius:12px;border:1px solid var(--bg4);background:var(--bg2);color:var(--accent);font-size:20px;cursor:pointer;align-items:center;justify-content:center;box-shadow:0 2px 12px rgba(0,0,0,.5);transition:.2s}
.mobile-toggle:hover{background:var(--bg3);transform:scale(1.05)}
.mobile-toggle:active{transform:scale(.95)}
#btnTogglePalette{bottom:80px;left:12px}
#btnToggleProps{bottom:80px;right:12px}
.mobile-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:80;backdrop-filter:blur(2px)}
.mobile-overlay.active{display:block}

/* ==================== TABLET ≤ 1024px ==================== */
@media(max-width:1024px){
  :root{--palette-w:200px;--props-w:240px}
  .toolbar-center button span{display:none}
  .toolbar-center button{padding:8px}
  .app-title{display:none}
  .toolbar-link{font-size:11px}
  .proj-stat{font-size:10px;padding:0 4px}
}

/* ==================== MOBILE ≤ 768px ==================== */
@media(max-width:768px){
  :root{
    --toolbar-h:44px;
    --project-h:40px;
    --palette-w:280px;
    --props-w:300px;
  }

  /* Toolbar compact */
  #toolbar{padding:0 8px;gap:4px}
  .logo{font-size:14px}
  .app-title{display:none}
  .toolbar-center{gap:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .toolbar-center::-webkit-scrollbar{display:none}
  .toolbar-center button{padding:8px 6px;font-size:11px;flex-shrink:0}
  .toolbar-center button span{display:none}
  .toolbar-sep{margin:0 2px;height:20px}
  .toolbar-right{display:none}

  /* Project bar compact */
  #projSummary{padding:0 8px;gap:6px;font-size:11px;height:var(--project-h);overflow-x:auto;scrollbar-width:none}
  #projSummary::-webkit-scrollbar{display:none}
  #projName{max-width:100px!important;font-size:11px!important}
  .proj-stat{font-size:10px;padding:0 4px}
  .proj-bom{padding:4px 10px;font-size:11px}
  .proj-toggle{font-size:10px;padding:3px 8px}

  /* Main layout: canvas full width */
  #app{position:relative}

  /* Palette: slide-in from left */
  #palette{
    position:fixed;
    top:var(--total-top);
    left:0;
    bottom:0;
    width:var(--palette-w);
    z-index:90;
    transform:translateX(-100%);
    transition:transform .3s cubic-bezier(.4,0,.2,1);
    box-shadow:4px 0 20px rgba(0,0,0,.5);
  }
  #palette.mobile-open{transform:translateX(0)}

  /* Properties: slide-in from right */
  #properties{
    position:fixed;
    top:var(--total-top);
    right:0;
    bottom:0;
    width:var(--props-w);
    z-index:90;
    transform:translateX(100%);
    transition:transform .3s cubic-bezier(.4,0,.2,1);
    box-shadow:-4px 0 20px rgba(0,0,0,.5);
  }
  #properties.mobile-open{transform:translateX(0)}

  /* Show toggle buttons */
  .mobile-toggle{display:flex}

  /* Canvas full width */
  #canvasWrap{width:100%}

  /* Zoom controls bottom left */
  #zoomControls{bottom:12px;left:50%;right:auto;transform:translateX(-50%)}

  /* Validation bar */
  #validationBar{bottom:56px;font-size:11px;padding:4px 12px;max-width:calc(100% - 120px)}

  /* Load cards responsive */
  .load-card{padding:6px 8px;font-size:10px;gap:4px}
  .load-card input,.load-card select{font-size:10px;padding:2px 4px}
  .load-card label{font-size:9px}

  /* Modals full screen on mobile */
  .modal-content{width:95%;max-height:90vh;border-radius:10px}
  .modal-header{padding:12px 16px}
  .modal-body{padding:12px 16px}
}

/* ==================== SMALL PHONES ≤ 480px ==================== */
@media(max-width:480px){
  :root{--palette-w:260px;--props-w:280px}
  .logo{font-size:13px;letter-spacing:0.5px}
  .toolbar-center button{padding:6px 4px}
  #projSummary{flex-wrap:nowrap}
  #projName{max-width:80px!important}
  .proj-stat:nth-child(n+4){display:none}
  .modal-content{width:98%;margin:8px}
  #validationBar{max-width:calc(100% - 80px);font-size:10px}
}
