*{margin:0;padding:0;box-sizing:border-box}
:root{
  --bg:#0a0a0a;
  --surface:rgba(255,255,255,0.06);
  --surface2:rgba(255,255,255,0.1);
  --text:#e0e0e0;
  --text2:#888;
  --accent:#00d4ff;
  --accent2:#0099cc;
  --glass:rgba(10,10,10,0.7);
  --border:rgba(255,255,255,0.1);
  --radius:12px;
  --font:-apple-system,'Segoe UI',sans-serif
}
body{
  font-family:var(--font);
  background:var(--bg);
  color:var(--text);
  overflow:hidden;
  height:100vh;
  width:100vw
}
body.light{
  --bg:#f0f0f0;
  --surface:rgba(0,0,0,0.05);
  --surface2:rgba(0,0,0,0.08);
  --text:#1a1a1a;
  --text2:#666;
  --glass:rgba(240,240,240,0.8);
  --border:rgba(0,0,0,0.1)
}

/* Layout */
#app{display:flex;flex-direction:column;height:100vh}

/* Header */
#header{
  display:flex;align-items:center;justify-content:space-between;
  padding:8px 16px;
  background:var(--glass);backdrop-filter:blur(20px);
  border-bottom:1px solid var(--border);
  z-index:10;min-height:48px
}
#header h1{font-size:14px;font-weight:600;color:var(--accent);white-space:nowrap}
#patternTitle{font-size:13px;color:var(--text2);margin-left:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.header-right{display:flex;gap:8px;align-items:center}

/* Main */
#main{display:flex;flex:1;overflow:hidden}

/* Sidebar */
#sidebar{
  width:260px;
  background:var(--glass);backdrop-filter:blur(20px);
  border-right:1px solid var(--border);
  overflow-y:auto;flex-shrink:0;z-index:5
}
#sidebar::-webkit-scrollbar{width:4px}
#sidebar::-webkit-scrollbar-thumb{background:var(--accent2);border-radius:2px}
.cat-group{border-bottom:1px solid var(--border)}
.cat-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 14px;cursor:pointer;
  font-size:12px;font-weight:600;color:var(--text2);
  user-select:none;transition:background 0.2s
}
.cat-header:hover{background:var(--surface)}
.cat-header .arrow{transition:transform 0.2s;font-size:10px}
.cat-header.open .arrow{transform:rotate(90deg)}
.cat-list{display:none;padding:2px 0}
.cat-list.open{display:block}
.pat-item{
  padding:6px 14px 6px 24px;font-size:11px;cursor:pointer;
  transition:all 0.15s;color:var(--text2);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
.pat-item:hover{background:var(--surface);color:var(--text)}
.pat-item.active{background:var(--accent);color:#000;font-weight:600}

/* Canvas */
#canvasWrap{
  flex:1;position:relative;overflow:hidden;
  display:flex;align-items:center;justify-content:center;background:#000
}
#canvasWrap canvas{display:block}
#fps{
  position:absolute;top:8px;left:8px;
  font-size:11px;color:#0f0;font-family:monospace;
  background:rgba(0,0,0,0.5);padding:2px 6px;border-radius:4px;
  z-index:5;display:none
}
#fps.show{display:block}
.overlay-fade{
  position:absolute;inset:0;background:#000;opacity:0;
  pointer-events:none;transition:opacity 0.3s;z-index:2
}

/* Controls */
#controls{
  display:flex;align-items:center;gap:8px;padding:8px 16px;
  background:var(--glass);backdrop-filter:blur(20px);
  border-top:1px solid var(--border);flex-wrap:wrap;z-index:10
}
#controls button,#controls select{
  background:var(--surface);color:var(--text);
  border:1px solid var(--border);border-radius:6px;
  padding:6px 12px;font-size:12px;cursor:pointer;
  font-family:var(--font);transition:all 0.15s;white-space:nowrap
}
#controls button:hover,#controls select:hover{background:var(--surface2);border-color:var(--accent)}
#controls button.primary{background:var(--accent);color:#000;border-color:var(--accent);font-weight:600}
#controls button.primary:hover{background:var(--accent2)}

/* Settings Panel */
#settingsPanel{
  position:absolute;right:0;top:0;bottom:0;width:300px;
  background:var(--glass);backdrop-filter:blur(20px);
  border-left:1px solid var(--border);z-index:20;
  transform:translateX(100%);transition:transform 0.3s;
  overflow-y:auto;padding:16px
}
#settingsPanel.open{transform:translateX(0)}
#settingsPanel h3{font-size:13px;margin-bottom:12px;color:var(--accent)}
.param-group{margin-bottom:16px}
.param-group label{display:flex;justify-content:space-between;font-size:11px;color:var(--text2);margin-bottom:4px}
.param-group input[type=range]{width:100%;accent-color:var(--accent)}
.param-group input[type=color]{width:40px;height:24px;border:none;background:none;cursor:pointer}
.param-group input[type=number]{
  width:70px;background:var(--surface);border:1px solid var(--border);
  color:var(--text);border-radius:4px;padding:2px 6px;font-size:11px
}

/* Export Modal */
#exportModal{
  display:none;position:fixed;inset:0;z-index:100;
  align-items:center;justify-content:center;
  background:rgba(0,0,0,0.7);backdrop-filter:blur(8px)
}
#exportModal.open{display:flex}
.modal-box{
  background:var(--glass);backdrop-filter:blur(20px);
  border:1px solid var(--border);border-radius:16px;
  width:min(720px,92vw);max-height:85vh;display:flex;flex-direction:column;
  overflow:hidden
}
.modal-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:16px 20px;border-bottom:1px solid var(--border)
}
.modal-header h2{font-size:15px;color:var(--accent);font-weight:600}
.modal-close{
  background:none;border:none;color:var(--text2);font-size:20px;
  cursor:pointer;padding:0 4px;line-height:1
}
.modal-close:hover{color:var(--text)}
.modal-tabs{
  display:flex;border-bottom:1px solid var(--border)
}
.modal-tab{
  flex:1;padding:10px;text-align:center;font-size:12px;font-weight:600;
  cursor:pointer;color:var(--text2);border:none;background:none;
  border-bottom:2px solid transparent;transition:all 0.15s
}
.modal-tab:hover{color:var(--text);background:var(--surface)}
.modal-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.modal-body{flex:1;overflow-y:auto;padding:16px 20px}
.modal-body pre{
  background:rgba(0,0,0,0.4);border:1px solid var(--border);
  border-radius:8px;padding:12px;font-size:11px;line-height:1.5;
  overflow-x:auto;white-space:pre;color:#ccc;
  font-family:'Cascadia Code','Fira Code','Consolas',monospace;
  max-height:50vh;tab-size:2
}
.modal-footer{
  display:flex;gap:8px;padding:12px 20px;
  border-top:1px solid var(--border);justify-content:flex-end
}
.modal-footer button{
  padding:8px 20px;border-radius:6px;font-size:12px;font-weight:600;
  cursor:pointer;border:1px solid var(--border);font-family:var(--font);
  transition:all 0.15s
}
.btn-copy{background:var(--accent);color:#000;border-color:var(--accent)}
.btn-copy:hover{background:var(--accent2)}
.btn-copy.copied{background:#22c55e;border-color:#22c55e}
.btn-dl{background:var(--surface);color:var(--text)}
.btn-dl:hover{background:var(--surface2)}
.export-info{
  font-size:11px;color:var(--text2);margin-bottom:12px;line-height:1.6
}
.export-info code{
  background:var(--surface);padding:1px 5px;border-radius:3px;
  font-size:10px;color:var(--accent)
}

/* Embed size controls */
.embed-options{
  display:flex;gap:12px;align-items:center;margin-bottom:12px;flex-wrap:wrap
}
.embed-options label{font-size:11px;color:var(--text2)}
.embed-options input[type=number]{
  width:65px;background:var(--surface);border:1px solid var(--border);
  color:var(--text);border-radius:4px;padding:4px 6px;font-size:11px
}
.embed-options select{
  background:var(--surface);border:1px solid var(--border);
  color:var(--text);border-radius:4px;padding:4px 8px;font-size:11px
}

/* Responsive */
@media(max-width:768px){
  #sidebar{display:none}
  #controls{padding:6px 8px;gap:4px}
  #controls button,#controls select{padding:4px 8px;font-size:11px}
  #settingsPanel{width:100%}
  .modal-box{width:96vw;max-height:90vh}
}
