:root{ --bg: #0d1b0f; /* deep garden night */ --panel: #18361d; /* foliage panel */ --panel-2: #204b27; /* darker panel */ --accent: #7cd26f; /* leaf green */ --accent-2: #ffd36e; /* sun gold */ --accent-3: #ff8a5b; /* flower orange */ --ink: #f2ffef; /* light text */ --muted: #a6c3a9; /* muted text */ --wood: #5a3f2e; /* wood bar */ --shadow: rgba(0,0,0,.25); --radius: 12px; --pixel-font: 'Press Start 2P', system-ui, sans-serif; /* RGB components for theme-aware rgba() */ --accent-rgb: 124,210,111; --accent-2-rgb: 255,211,110; --accent-3-rgb: 255,138,91; --btn-start-rgb: 42,90,53; /* Button / gradient */ --btn-start: #2a5a35; --btn-end: #1a3a21; --btn-hover-start: #35744a; --btn-hover-end: #224b2b; /* Editor (Monaco) */ --editor-bg: #18361d; --editor-line: #204b27; /* AI chat accent (separate from compiler) */ --chat-accent: #7cd26f; --chat-accent-rgb: 124,210,111; } /* Monaco Editor Line Highlighting */ .current-line-highlight { background: rgba(var(--accent-rgb), 0.03) !important; border-left: none !important; } .current-line-glyph { background: transparent !important; width: 0px !important; } /* Error line highlighting in Monaco */ .error-line-highlight { background: rgba(255, 50, 30, 0.45) !important; border-left: 3px solid #ff3322 !important; box-shadow: inset 0 0 0 9999px rgba(255, 50, 30, 0.15); } .error-line-glyph { background: #ff3322 !important; width: 4px !important; margin-left: 2px; border-radius: 2px; } /* Unmatched bracket highlighting */ .bracket-mismatch { color: #ff3322 !important; font-weight: bold; text-decoration: wavy underline #ff3322; background: rgba(255, 50, 30, 0.2); border-radius: 2px; } /* Base */ body{ font-family: 'Baloo 2', Arial, sans-serif; margin: 0; padding: 0; background: radial-gradient(1400px 700px at 80% -20%, rgba(var(--accent-rgb),.18), transparent), radial-gradient(1000px 600px at 0% 100%, rgba(var(--accent-2-rgb),.15), transparent), radial-gradient(800px 800px at 50% 50%, rgba(var(--accent-rgb),.08), transparent), linear-gradient(135deg, #0a150c 0%, var(--bg) 50%, var(--panel-2) 100%); color: var(--ink); display: flex; flex-direction: column; height: 100vh; height: 100dvh; max-height: 100vh; max-height: 100dvh; overflow: hidden; position: relative; } body::before { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 20% 30%, rgba(var(--accent-rgb),.05) 0%, transparent 25%), radial-gradient(circle at 80% 70%, rgba(var(--accent-2-rgb),.05) 0%, transparent 25%); pointer-events: none; animation: breathe 8s ease-in-out infinite alternate; } @keyframes breathe { 0% { opacity: 0.5; transform: scale(1); } 100% { opacity: 0.8; transform: scale(1.02); } } img, canvas{ image-rendering: pixelated; } /* Scrollbar */ ::-webkit-scrollbar{ width: 12px; height: 12px; background: rgba(15,32,20,.4); border-radius: 6px; } ::-webkit-scrollbar-thumb{ background:linear-gradient(135deg, #35543b 0%, #2a4530 100%); border-radius: 6px; border: 2px solid rgba(var(--btn-start-rgb),.6); box-shadow: 0 2px 8px rgba(0,0,0,.3), inset 0 1px 0 rgba(255,255,255,.1); } ::-webkit-scrollbar-thumb:hover{ background:linear-gradient(135deg, #4a6d4f 0%, #35543b 100%); box-shadow: 0 2px 12px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.15); } ::-webkit-scrollbar-corner{ display: none; } /* Navbar */ .navbar{ display: flex; align-items: center; justify-content: space-between; background: linear-gradient(135deg, rgba(90,63,46,.98) 0%, rgba(70,50,35,.95) 100%); padding: 14px 24px; max-height: 5%; box-shadow: 0 4px 24px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.12); border-bottom: 3px solid #3f2c20; backdrop-filter: blur(10px); position: relative; z-index: 100; } .navbar::after { content: ''; position: absolute; bottom: -3px; left: 0; width: 100%; height: 2px; background: linear-gradient(90deg, transparent 0%, rgba(var(--accent-rgb),.4) 20%, rgba(var(--accent-rgb),.6) 50%, rgba(var(--accent-rgb),.4) 80%, transparent 100%); animation: shimmer 3s ease-in-out infinite; } @keyframes shimmer { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } } /* Toolbar */ .toolbar{ display:flex; align-items:center; justify-content:space-between; padding:10px 20px; background:linear-gradient(135deg, var(--btn-start) 0%, var(--btn-end) 100%); border-bottom:3px solid var(--btn-start); box-shadow: 0 4px 16px rgba(0,0,0,.4), inset 0 1px 0 rgba(var(--accent-rgb),.15); position: relative; z-index: 90; } .toolbar-left{ flex:1; display:flex; align-items:center; } .toolbar-right{ display:flex; gap:8px; } .current-file-name { font-family: var(--pixel-font); font-size: 11px; font-weight: 700; color: #b6ffb6; background: linear-gradient(135deg, rgba(15,32,20,.7) 0%, rgba(10,24,14,.85) 100%); border: 1px solid rgba(var(--accent-rgb),.3); border-radius: 6px; padding: 7px 14px 7px 30px; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; letter-spacing: .4px; text-shadow: 0 0 8px rgba(var(--accent-rgb),.4), 0 1px 3px rgba(0,0,0,.5); position: relative; box-shadow: 0 2px 8px rgba(0,0,0,.25), inset 0 1px 0 rgba(255,255,255,.05); transition: all .3s ease; } .current-file-name::before { content: '\1F4C4'; position: absolute; left: 10px; top: 50%; transform: translateY(-50%); font-size: 12px; filter: drop-shadow(0 0 3px rgba(var(--accent-rgb),.4)); } .current-file-name:hover { border-color: rgba(var(--accent-rgb),.5); text-shadow: 0 0 12px rgba(var(--accent-rgb),.6), 0 1px 3px rgba(0,0,0,.5); box-shadow: 0 3px 12px rgba(0,0,0,.3), inset 0 1px 0 rgba(255,255,255,.08), 0 0 15px rgba(var(--accent-rgb),.08); } .app-title{ font-family: var(--pixel-font); letter-spacing:.5px; color: var(--ink); opacity:.9; text-shadow: 0 2px 4px rgba(0,0,0,.3); } .tb-btn{ border:2px solid rgba(var(--btn-start-rgb),.8); background:linear-gradient(135deg, #15301e 0%, #102417 100%); color:var(--ink); padding:10px 16px; border-radius:6px; cursor:pointer; font-weight:800; font-family:var(--pixel-font); font-size:11px; transition: all .3s ease; box-shadow: 0 3px 10px rgba(0,0,0,.3), inset 0 1px 0 rgba(255,255,255,.08); position: relative; overflow: hidden; } .tb-btn::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(var(--accent-rgb),.2), transparent); transition: left .5s ease; } .tb-btn:hover::before { left: 100%; } .tb-btn:hover{ background:linear-gradient(135deg, var(--btn-end) 0%, #15301e 100%); transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.12); border-color: rgba(var(--accent-rgb),.6); } .tb-btn:active{ transform: translateY(0); box-shadow: 0 2px 6px rgba(0,0,0,.3); } /* ── File popup menu ── */ .file-menu-wrap { position: relative; display: inline-block; } .file-popup { position: absolute; top: calc(100% + 6px); left: 0; min-width: 180px; background: linear-gradient(135deg, #152a18 0%, #0f1d12 100%); border: 2px solid rgba(var(--accent-rgb),.35); border-radius: 8px; padding: 6px 0; box-shadow: 0 10px 32px rgba(0,0,0,.55), 0 0 0 1px rgba(0,0,0,.3); z-index: 999; animation: filePopIn .15s ease-out; } .file-popup.hidden { display: none; } @keyframes filePopIn { from { opacity: 0; transform: translateY(-6px) scale(.96); } to { opacity: 1; transform: translateY(0) scale(1); } } .file-popup-item { display: block; width: 100%; border: none; background: transparent; color: #d1f5c4; font-family: var(--pixel-font); font-size: 11px; font-weight: 700; padding: 10px 18px; text-align: left; cursor: pointer; transition: background .15s, color .15s; } .file-popup-item:hover { background: rgba(var(--accent-rgb),.15); color: #fff; } .file-popup-item.danger { color: #ff6b5a; } .file-popup-item.danger:hover { background: rgba(255,80,60,.15); color: #ff4433; } .file-popup-divider { height: 1px; margin: 4px 12px; background: rgba(var(--accent-rgb),.2); } .tb-run{ background:linear-gradient(135deg, var(--accent) 0%, #49a25c 100%); color:#0f1d12; border-color:#2e6f3e; text-shadow: 0 1px 2px rgba(255,255,255,.4); box-shadow: 0 3px 12px rgba(var(--accent-rgb),.4), inset 0 1px 0 rgba(255,255,255,.2); } .tb-run:hover{ background:linear-gradient(135deg, #8ee280 0%, #55b86a 100%); box-shadow: 0 6px 20px rgba(var(--accent-rgb),.6), inset 0 1px 0 rgba(255,255,255,.3); } /* ═══════════════════════════════════════════ IDE LAYOUT — Title Bar, Tab Bar, Status Bar ═══════════════════════════════════════════ */ /* ── IDE Title Bar ── */ .ide-titlebar { display: flex; align-items: center; justify-content: space-between; height: 48px; min-height: 48px; background: linear-gradient(180deg, #1a2e1d 0%, #111f14 100%); padding: 0 14px; border-bottom: 1px solid rgba(var(--btn-start-rgb),.5); z-index: 100; flex-shrink: 0; position: relative; } .ide-titlebar-left { display: flex; align-items: center; gap: 2px; z-index: 2; } .ide-titlebar-center { position: absolute; left: 50%; transform: translateX(-50%); display: flex; align-items: center; gap: 8px; pointer-events: none; } .ide-titlebar-right { display: flex; align-items: center; gap: 8px; z-index: 2; } .ide-logo { height: 36px; width: auto; margin-right: 6px; } .ide-title { font-family: var(--pixel-font); font-size: 9px; color: var(--muted); letter-spacing: .5px; opacity: .65; } .ide-center-logo { height: 50px; width: auto; object-fit: contain; pointer-events: none; filter: drop-shadow(0 1px 4px rgba(0,0,0,.4)); } .ide-menu-btn { background: linear-gradient(135deg, var(--btn-start) 0%, var(--btn-end) 100%); border: 1px solid rgba(var(--accent-rgb),.35); color: var(--ink); font-family: var(--pixel-font); font-size: 10px; padding: 6px 14px; cursor: pointer; border-radius: 4px; transition: background .15s, color .15s, border-color .15s; letter-spacing: .3px; font-weight: 700; } .ide-menu-btn:hover { background: linear-gradient(135deg, var(--btn-hover-start) 0%, var(--btn-hover-end) 100%); border-color: rgba(var(--accent-rgb),.6); color: #8ee280; } /* ── IDE Tab Bar ── */ .ide-tabbar { display: flex; align-items: stretch; height: 20px; min-height: 20px; background: #0b160d; border-bottom: 1px solid rgba(var(--btn-start-rgb),.35); flex-shrink: 0; overflow-x: auto; overflow-y: hidden; } .ide-tab { display: flex; align-items: center; gap: 4px; padding: 0 10px; background: transparent; border-right: 1px solid rgba(var(--btn-start-rgb),.2); cursor: default; white-space: nowrap; min-width: 0; position: relative; } .ide-tab.active { background: var(--panel); border-bottom: 2px solid var(--accent); } .ide-tab-icon { font-size: 13px; line-height: 1; } .ide-tabbar-fill { flex: 1; background: transparent; } /* Override current-file-name when inside tab */ .ide-tab .current-file-name { background: transparent; border: none; padding: 0; box-shadow: none; font-size: 10px; font-weight: 700; color: var(--ink); text-shadow: none; letter-spacing: .3px; max-width: 220px; } .unsaved-dot { display: none; width: 8px; height: 8px; border-radius: 50%; background: #f5c842; flex-shrink: 0; margin-left: 2px; box-shadow: 0 0 4px #f5c842; } .unsaved-dot.visible { display: inline-block; animation: unsaved-glow 1.5s ease-in-out infinite; } @keyframes unsaved-glow { 0%, 100% { box-shadow: 0 0 4px #f5c842; opacity: 1; } 50% { box-shadow: 0 0 10px #f5c842, 0 0 18px #f5c84266; opacity: .75; } } .ide-tab .current-file-name::before { display: none; } .ide-tab .current-file-name:hover { border: none; box-shadow: none; text-shadow: none; } /* ── IDE Status Bar ── */ .ide-statusbar { display: flex; align-items: center; justify-content: space-between; height: 32px; min-height: 32px; background: linear-gradient(180deg, #162e1b 0%, #0e1f12 100%); border-top: 1px solid rgba(var(--btn-start-rgb),.4); padding: 0 14px; flex-shrink: 0; z-index: 100; } .ide-statusbar-left { display: flex; gap: 10px; align-items: center; } .ide-statusbar-right { display: flex; gap: 8px; align-items: center; } .ide-status-lang { font-family: var(--pixel-font); font-size: 10px; color: var(--muted); letter-spacing: .3px; } /* Status chips compact for statusbar */ .ide-statusbar .status-chip { padding: 4px 10px; font-size: 10px; border-width: 1px; border-radius: 4px; } /* ── IDE Run Button (compact for titlebar) ── */ .ide-run-icon { font-size: 10px; margin-right: 2px; } .ide-titlebar .run-dropdown .btn-primary { min-width: 140px; padding: 6px 28px; font-size: 10px; border-radius: 6px 0 0 6px; } .ide-titlebar .btn-dropdown-toggle { padding: 6px 10px; font-size: 9px; border-radius: 0 6px 6px 0; } /* Workspace layout */ .workspace{ display:flex; gap:0; padding:12px; flex:1; min-height:0; overflow:hidden; } /* Sidebar drag-resize handle */ .sidebarResizer{ width:6px; background:linear-gradient(180deg, #35543b, #2a4530); cursor:ew-resize; border-radius:2px; flex-shrink:0; transition: background .2s ease; position:relative; z-index:5; margin:0 3px; } .sidebarResizer:hover, .sidebarResizer.active{ background:linear-gradient(180deg, var(--accent), #49a25c); } .sidebarResizer::after{ content:''; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); width:2px; height:30px; background:rgba(var(--accent-rgb),.5); border-radius:1px; } .sidebar{ width: 520px; min-width: 200px; max-width: 70%; flex-shrink: 0; background:linear-gradient(135deg, rgba(24,54,29,.95) 0%, rgba(18,40,22,.95) 100%); outline:2px solid rgba(var(--btn-start-rgb),.9); padding:16px; box-shadow:0 6px 24px rgba(0,0,0,.4), inset 0 1px 0 rgba(var(--accent-rgb),.1); border-radius:8px; backdrop-filter: blur(6px); overflow-y:auto; position: relative; } .sidebar::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: linear-gradient(90deg, transparent, rgba(var(--accent-rgb),.4), transparent); animation: slideGlow 3s ease-in-out infinite; } @keyframes slideGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.8; } } .workspace-main{ flex:1; display:flex; flex-direction:column; gap:8px; overflow:hidden; height:100%; min-height:0; min-width:0; width:100%; max-width:100%; box-sizing:border-box; } .sd-section{ font-family:var(--pixel-font); font-size:11px; color:var(--accent-2); margin:12px 0 8px; text-transform:uppercase; letter-spacing:.8px; text-shadow: 0 1px 2px rgba(0,0,0,.3); } .explorer-list, .themes-list{ list-style:none; padding:0; margin:0; } .explorer-list li, .themes-list li{ padding:8px 10px; border-left:3px solid transparent; cursor:pointer; transition: all .2s ease; border-radius:3px; margin-bottom:2px; } .explorer-list li:hover, .themes-list li:hover{ background:rgba(26,58,33,.8); border-left-color:var(--accent); transform: translateX(2px); } .themes-list .active{ background:linear-gradient(90deg, rgba(34,75,43,.9) 0%, rgba(26,58,33,.7) 100%); border-left-color:var(--accent); box-shadow: inset 0 1px 3px rgba(0,0,0,.2); } .navbar img{ margin-right: 10px; } .logoContainer{ display:flex; justify-content:flex-end; align-items:center; } .logo-img{ height: 96px; width: auto; max-width: 260px; object-fit: contain; } .logoName{ text-shadow: 2px 2px 0 #3a271c; margin: 0 0 0 8px; } /* Mode Selector - OLD (replaced with dropdown) */ /* .mode-selector { display: flex; gap: 6px; align-items: center; background: linear-gradient(135deg, rgba(13,27,15,.95) 0%, rgba(18,36,20,.9) 100%); padding: 6px; border-radius: 10px; border: 2px solid rgba(var(--accent-rgb),.15); box-shadow: 0 4px 16px rgba(0,0,0,.6), inset 0 1px 0 rgba(var(--accent-rgb),.1); position: relative; overflow: hidden; backdrop-filter: blur(8px); } .mode-radio { display: flex; align-items: center; justify-content: center; cursor: pointer; font-family: var(--pixel-font); font-size: 11px; color: rgba(166,195,169,.7); padding: 10px 18px; border-radius: 7px; transition: all .4s cubic-bezier(0.34, 1.56, 0.64, 1); position: relative; z-index: 1; min-width: 85px; background: transparent; border: 2px solid transparent; user-select: none; } .mode-radio:hover { color: rgba(166,195,169,.95); background: rgba(var(--accent-rgb),.08); border-color: rgba(var(--accent-rgb),.2); transform: translateY(-1px); } .mode-radio input[type="radio"] { position: absolute; opacity: 0; cursor: pointer; width: 0; height: 0; } .mode-radio input[type="radio"]:checked ~ span { color: var(--accent); font-weight: bold; letter-spacing: 0.5px; animation: modeGlow 0.5s ease-out; } .mode-radio input[type="radio"]:checked { accent-color: var(--accent); } .mode-radio:has(input:checked) { color: var(--accent); background: rgba(var(--accent-rgb),.12); border-color: rgba(var(--accent-rgb),.4); transform: scale(1.03); } @keyframes modeGlow { 0% { text-shadow: 0 0 4px rgba(var(--accent-rgb),.4); } 50% { text-shadow: 0 2px 6px rgba(0,0,0,.6); } 100% { text-shadow: 0 2px 4px rgba(0,0,0,.5); } } */ /* Sidebar tokens table */ .side-tokens{ max-height: 90%; overflow:auto; margin-top:8px; border-radius:6px; outline:2px solid rgba(var(--btn-start-rgb),.6); box-shadow:0 2px 10px rgba(0,0,0,.25), inset 0 1px 0 rgba(255,255,255,.05); background:linear-gradient(135deg, rgba(24,54,29,.9), rgba(18,40,22,.9)); } .side-token-table{ width:100%; border-collapse:separate; border-spacing:0; color: #e8ffe4; font-size:12px; } .side-token-table thead th{ position:sticky; top:0; z-index:2; background:linear-gradient(135deg, var(--btn-end), #153018); padding:8px; font-family:var(--pixel-font); font-size:10px; letter-spacing:.5px; text-align:left; color: #ffd36e; font-weight: bold; border: 1px solid rgba(var(--btn-start-rgb),.6); box-shadow: 0 2px 4px rgba(0,0,0,.3); } .side-token-table td{ padding:6px 8px; border: 1px solid rgba(var(--btn-start-rgb),.4); word-break:break-word; font-weight: bold; color: #e8ffe4; } .side-token-table td:first-child{ color: #f2ffef; } .side-token-table td:nth-child(2){ color: #89cff0; } .side-token-table td:nth-child(3){ color: #ffa86a; } .side-token-table tr:nth-child(even){ background:rgba(16,36,20,.7); } .side-token-table tr:nth-child(odd){ background:rgba(20,44,26,.7); } .side-token-table tr:hover{ background:rgba(var(--btn-start-rgb),.55) !important; transition: background .15s ease; } /* Make Token Type (3rd column) a bit smaller to fit */ .side-token-table th:nth-child(3), .side-token-table td:nth-child(3){ font-size: 11px; white-space: normal; overflow-wrap: anywhere; } /* Dropdown + Buttons */ .button-group{ display:inline-flex; border-radius:6px; overflow:hidden; box-shadow:0 4px 16px rgba(0,0,0,.4); } .button-group button{ padding:12px 16px; border:none; background:linear-gradient(135deg, rgba(24,54,29,.95) 0%, rgba(18,40,22,.95) 100%); color:var(--ink); cursor:pointer; font-size:13px; font-weight:800; font-family:var(--pixel-font); letter-spacing:.6px; transition: all .3s ease; position: relative; } .button-group button::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(var(--accent-rgb),.1), transparent); opacity: 0; transition: opacity .3s ease; } .button-group button:hover::before { opacity: 1; } .button-group button:hover{ background:linear-gradient(135deg, rgba(32,75,43,.95) 0%, rgba(26,58,33,.95) 100%); } .button-group .dropdown-toggle{ border-left:2px solid rgba(var(--accent-rgb),0.2); } .nav-links{ list-style:none; padding:0; margin:0; position:absolute; background:linear-gradient(135deg, rgba(32,75,43,.98) 0%, rgba(26,58,33,.98) 100%); width:auto; z-index:10; box-shadow:0 10px 30px rgba(0,0,0,.5); transition:all .3s ease; outline:2px solid rgba(var(--accent-rgb),.6); border-radius:6px; overflow:hidden; backdrop-filter:blur(10px); } .nav-links li a{ display:block; padding:12px 18px; text-decoration:none; color:var(--ink); font-family:var(--pixel-font); font-size:11px; transition: all .3s ease; position: relative; } .nav-links li a::before { content: ''; position: absolute; left: 0; top: 0; width: 3px; height: 100%; background: linear-gradient(180deg, var(--accent), #49a25c); transform: scaleY(0); transition: transform .3s ease; } .nav-links li a:hover::before { transform: scaleY(1); } .nav-links li a:hover{ background:rgba(var(--btn-start-rgb),.6); padding-left: 22px; } .hidden{ display:none; } /* Layout */ .mainCont{ display:flex; height:55%; padding:0; gap:8px; position:relative; flex-shrink:0; min-height:0; } .textFieldCont{ display:flex; width:100%; min-width:50%; background:linear-gradient(135deg, rgba(24,54,29,.95) 0%, rgba(18,40,22,.95) 100%); border-radius:8px; outline:2px solid rgba(var(--btn-start-rgb),.9); padding:10px; box-shadow:0 6px 24px rgba(0,0,0,.4), inset 0 1px 0 rgba(var(--accent-rgb),.1); position:relative; height:auto; backdrop-filter: blur(6px); transition: all .3s ease; } .textFieldCont:hover{ box-shadow:0 8px 32px rgba(0,0,0,.5), inset 0 1px 0 rgba(var(--accent-rgb),.15); outline-color: rgba(var(--accent-rgb),.7); } .editor-header{ display:flex; align-items:center; justify-content:space-between; background:linear-gradient(135deg, rgba(26,58,33,.7), rgba(16,36,23,.6)); border-radius:4px; padding:6px 8px; margin-bottom:8px; border:1px solid rgba(var(--btn-start-rgb),.5); } .editor-tabs{ display:flex; gap:6px; } .tab{ padding:6px 10px; border-radius:4px; border:1px solid transparent; font-family:var(--pixel-font); font-size:10px; color:var(--ink); background:transparent; cursor:pointer; transition:all .2s ease; } .tab:hover{ background:rgba(26,58,33,.55); } .tab.active{ background:linear-gradient(135deg, var(--btn-hover-end), var(--btn-end)); border-color:var(--btn-start); box-shadow: inset 0 1px 2px rgba(0,0,0,.25); } .editor-actions .tab-btn{ padding:6px 8px; border:1px solid var(--btn-start); border-radius:4px; background:linear-gradient(135deg, #15301e, #102417); color:var(--ink); font-family:var(--pixel-font); font-size:10px; cursor:pointer; } .editor-body{ height: calc(100% - 36px); } .widthResizer{ width:4px; background:linear-gradient(135deg, #35543b, #2a4530); cursor:ew-resize; position:relative; height:10%; top:45%; border-radius:2px; transition: background .2s ease; } .widthResizer:hover{ background:linear-gradient(135deg, #4a6d4f, #35543b); } .heightResizer{ width:100%; height:6px; background:linear-gradient(180deg, #35543b, #2a4530); cursor:ns-resize; border-radius:2px; flex-shrink:0; transition: background .2s ease; position:relative; z-index:5; } .heightResizer:hover, .heightResizer.active{ background:linear-gradient(180deg, var(--accent), #49a25c); } .heightResizer::after{ content:''; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); width:30px; height:2px; background:rgba(var(--accent-rgb),.5); border-radius:1px; } .outputCont{ flex:1; display:flex; flex-direction:column; overflow-y:auto; border-radius:6px; overflow-x:hidden; } /* Mobile tokens section - visible by default, hidden on desktop */ .mobile-tokens{ display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 92%; max-width: 500px; height: 65vh; max-height: 600px; overflow: hidden; border-radius: 12px; background: rgba(24,54,29,.98); outline: 3px solid rgba(var(--accent-rgb),.6); box-shadow: 0 10px 50px rgba(0,0,0,.7), 0 0 0 1px rgba(var(--accent-rgb),.3); z-index: 1000; flex-direction: column; will-change: transform; } .mobile-tokens.show { display: flex !important; } .mobile-tokens-header { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; background: linear-gradient(135deg, #2a4c30 0%, #234026 100%); border-bottom: 2px solid rgba(var(--btn-start-rgb),.8); } .mobile-tokens-title { font-family: var(--pixel-font); font-size: 12px; letter-spacing: 0.8px; color: var(--accent-2); margin: 0; text-shadow: 0 1px 2px rgba(0,0,0,.3); } .mobile-tokens-close { background: linear-gradient(135deg, #ff8a5b 0%, #c95f36 100%); color: #fff; border: 2px solid #8c3b21; border-radius: 6px; width: 36px; height: 36px; font-size: 20px; font-weight: bold; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all .2s ease; box-shadow: 0 2px 8px rgba(0,0,0,.4); text-shadow: 0 1px 2px rgba(0,0,0,.3); } .mobile-tokens-close:hover { background: linear-gradient(135deg, #ffa070 0%, #d76f45 100%); transform: scale(1.05); } .mobile-tokens-close:active { transform: scale(0.95); box-shadow: 0 1px 4px rgba(0,0,0,.3); } .mobile-tokens .tokenTable { background: transparent; outline: none; box-shadow: none; font-size: 13px; height: 100%; overflow-y: auto; display: block; min-width: unset; } .mobile-tokens .tokenTable thead { display: table; width: 100%; table-layout: fixed; } .mobile-tokens .tokenTable tbody { display: block; overflow-y: auto; height: calc(65vh - 90px); max-height: 510px; -webkit-overflow-scrolling: touch; } .mobile-tokens .tokenTable tr { display: table; width: 100%; table-layout: fixed; } .mobile-tokens .tokenTable th { font-size: 10px; padding: 10px 8px; background: linear-gradient(135deg, #2a4c30 0%, #234026 100%); } .mobile-tokens .tokenTable td { padding: 10px 8px; word-break: break-word; } /* Overlay backdrop when table is shown */ .mobile-tokens-backdrop { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); z-index: 999; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .mobile-tokens-backdrop.show { display: block !important; } /* ── Mobile Status Popup ── */ .mobile-status-fab { display: none; position: fixed; bottom: 16px; right: 16px; width: 48px; height: 48px; border-radius: 50%; background: linear-gradient(135deg, var(--btn-start), var(--btn-end)); border: 2px solid rgba(var(--accent-rgb),.5); color: var(--accent); font-size: 20px; cursor: pointer; z-index: 998; box-shadow: 0 4px 16px rgba(0,0,0,.5), 0 0 0 1px rgba(var(--accent-rgb),.2); align-items: center; justify-content: center; transition: all .2s ease; } .mobile-status-fab:active { transform: scale(0.92); box-shadow: 0 2px 8px rgba(0,0,0,.4); } .mobile-status-fab-icon { font-size: 14px; line-height: 1; } .mobile-status-backdrop { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); z-index: 999; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .mobile-status-backdrop.show { display: block !important; } .mobile-status-popup { display: none; position: fixed; bottom: 80px; right: 16px; width: 220px; max-width: 80vw; border-radius: 12px; background: rgba(24,54,29,.98); outline: 3px solid rgba(var(--accent-rgb),.6); box-shadow: 0 10px 50px rgba(0,0,0,.7), 0 0 0 1px rgba(var(--accent-rgb),.3); z-index: 1000; flex-direction: column; overflow: hidden; } .mobile-status-popup.show { display: flex !important; } .mobile-status-header { display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; background: linear-gradient(135deg, #2a4c30 0%, #234026 100%); border-bottom: 2px solid rgba(var(--btn-start-rgb),.8); } .mobile-status-title { font-family: var(--pixel-font); font-size: 11px; letter-spacing: 0.8px; color: var(--accent-2); margin: 0; text-shadow: 0 1px 2px rgba(0,0,0,.3); } .mobile-status-close { background: linear-gradient(135deg, #ff8a5b 0%, #c95f36 100%); color: #fff; border: 2px solid #8c3b21; border-radius: 6px; width: 28px; height: 28px; font-size: 16px; font-weight: bold; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all .2s ease; box-shadow: 0 2px 8px rgba(0,0,0,.4); } .mobile-status-close:active { transform: scale(0.95); } .mobile-status-body { display: flex; flex-direction: column; gap: 8px; padding: 12px 14px; } .mobile-status-chip { font-family: var(--pixel-font); font-size: 11px; padding: 8px 12px; border-radius: 6px; background: rgba(var(--btn-start-rgb),.3); border: 1px solid rgba(var(--btn-start-rgb),.5); color: var(--muted); letter-spacing: .3px; text-align: center; } .mobile-status-chip.ok { background: linear-gradient(135deg, var(--accent) 0%, #49a25c 100%); color: #0f1d12; border-color: #2e6f3e; box-shadow: 0 2px 8px rgba(var(--accent-rgb),.3); } .mobile-status-chip.err { background: linear-gradient(135deg, #ff8a5b 0%, #c95f36 100%); color: #2b0c06; border-color: #8c3b21; box-shadow: 0 2px 8px rgba(255,138,91,.3); } /* Mobile lexeme toggle button in navbar - hidden on desktop */ .mobile-lexeme-nav-toggle { display: none; } .btn-toggle-lexemes { background: linear-gradient(135deg, var(--accent) 0%, #49a25c 100%); color: #0f1d12; border: 2px solid #2e6f3e; border-radius: 6px; padding: 10px 16px; font-family: var(--pixel-font); font-size: 11px; font-weight: 800; cursor: pointer; box-shadow: 0 2px 8px rgba(0,0,0,.3); transition: all .2s ease; display: flex; align-items: center; gap: 6px; text-shadow: 0 1px 1px rgba(255,255,255,.2); } .btn-toggle-lexemes:hover { background: linear-gradient(135deg, #8ee280 0%, #55b86a 100%); transform: translateY(-1px); } .btn-toggle-lexemes:active { transform: translateY(0); box-shadow: 0 1px 4px rgba(0,0,0,.3); } #lexeme-toggle-icon { font-size: 10px; } /* Hide mobile elements on desktop */ @media (min-width: 769px) { .mobile-tokens { display: none !important; } .mobile-tokens-backdrop { display: none !important; } .mobile-lexeme-nav-toggle { display: none !important; } .mobile-status-fab { display: none !important; } .mobile-status-popup { display: none !important; } .mobile-status-backdrop { display: none !important; } } /* Show on mobile screens */ @media (max-width: 768px) { html { overflow-x: hidden !important; max-width: 100vw; } .mobile-lexeme-nav-toggle { display: flex !important; align-items: center; justify-content: center; } /* Mobile performance optimizations */ * { -webkit-tap-highlight-color: rgba(var(--accent-rgb),0.2); box-sizing: border-box; } body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; touch-action: manipulation; overflow-x: hidden !important; max-width: 100vw; height: 100vh; height: -webkit-fill-available; height: 100dvh; max-height: 100vh; max-height: -webkit-fill-available; max-height: 100dvh; } /* Reduce expensive effects on mobile */ .workspace, .sidebar, .textFieldCont, .terminalCont, .tokenTable { backdrop-filter: none !important; } body::before { display: none !important; } /* Simplify shadows on mobile */ .navbar, .toolbar, .textFieldCont, .terminalCont { box-shadow: 0 2px 8px rgba(0,0,0,.2) !important; } /* Prevent text selection on interactive elements */ button, .btn, .tb-btn, .term-btn { -webkit-user-select: none; user-select: none; } } /* Token Table */ .tokenTable{ border-collapse:collapse; width:100%; min-width:600px; background:linear-gradient(135deg, rgba(24,54,29,.95) 0%, rgba(18,40,22,.95) 100%); color: white; border-radius:8px; outline:2px solid rgba(var(--btn-start-rgb),.9); box-shadow:0 6px 24px rgba(0,0,0,.4), inset 0 1px 0 rgba(var(--accent-rgb),.1); overflow:hidden; } .tokenTable th{ background:linear-gradient(135deg, var(--btn-end) 0%, #153018 100%); color: #ffd36e; text-align:center; padding:12px 14px; font-family:var(--pixel-font); font-size:11px; letter-spacing:.6px; text-shadow: 0 1px 3px rgba(0,0,0,.4); font-weight: bold; border: 1px solid rgba(var(--btn-start-rgb),.7); position: sticky; top: 0; z-index: 2; } .tokenTable th::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 1px; background: linear-gradient(90deg, transparent, rgba(var(--accent-rgb),.5), transparent); } .tokenTable td{ text-align:left; padding:10px 14px; font-size:14px; word-break:break-word; border: 1px solid rgba(var(--btn-start-rgb),.4); font-weight: bold; transition: background .15s ease; color: #e8ffe4; } .tokenTable td:first-child{ color: #f2ffef; } .tokenTable td:nth-child(2){ color: #89cff0; } .tokenTable td:nth-child(3){ color: #ffa86a; } .tokenTable tr:nth-child(even){ background:rgba(16,36,20,.75); } .tokenTable tr:nth-child(odd){ background:rgba(20,44,26,.75); } .tokenTable tr:hover{ background:rgba(var(--btn-start-rgb),.6) !important; } /* Make Token Type (3rd column) smaller to aid fit */ .tokenTable th:nth-child(3), .tokenTable td:nth-child(3){ font-size: 12px; white-space: normal; overflow-wrap: anywhere; } /* Terminal */ .terminalCont{ width:100%; max-width:100%; height:40%; min-height:200px; flex-shrink:0; background:linear-gradient(135deg, rgba(24,54,29,.95) 0%, rgba(18,40,22,.95) 100%); border-radius:8px; border:2px solid rgba(var(--btn-start-rgb),.9); color:var(--ink); margin:0; display:flex; flex-direction:column; overflow:hidden; box-shadow:0 6px 24px rgba(0,0,0,.4), inset 0 1px 0 rgba(var(--accent-rgb),.1); backdrop-filter: blur(6px); position:relative; box-sizing:border-box; } .terminal-header{ display:flex; align-items:center; justify-content:space-between; gap:10px; padding:8px 12px; border-bottom:2px solid rgba(var(--btn-start-rgb),.7); background:linear-gradient(135deg, rgba(26,58,33,.8), rgba(16,36,23,.7)); box-shadow: 0 2px 10px rgba(0,0,0,.2); flex-shrink: 0; } .panel-tabs{ display:flex; gap:6px; } .panel-tabs .tab{ padding:6px 10px; border-radius:4px; border:1px solid transparent; font-family:var(--pixel-font); font-size:10px; color:var(--ink); background:transparent; cursor:pointer; transition:all .2s ease; } .panel-tabs .tab:hover{ background:rgba(26,58,33,.55); } .panel-tabs .tab.active{ background:linear-gradient(135deg, var(--btn-hover-end), var(--btn-end)); border-color:var(--btn-start); box-shadow: inset 0 1px 2px rgba(0,0,0,.25); } .term-title{ font-family:var(--pixel-font); font-size:11px; letter-spacing:.9px; color:var(--accent-2); display:flex; align-items:center; gap:10px; text-shadow: 0 1px 3px rgba(0,0,0,.4); } .dot{ width:10px; height:10px; border-radius:50%; display:inline-block; animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.1); opacity: 0.8; } } .dot-green{ background:var(--accent); box-shadow:0 0 8px rgba(var(--accent-rgb),.7), inset 0 0 4px rgba(255,255,255,.3); } .term-actions{ display:flex; gap:8px; } .term-btn{ padding:7px 12px; border:2px solid rgba(var(--btn-start-rgb),.8); border-radius:5px; cursor:pointer; font-family:var(--pixel-font); font-size:10px; font-weight:800; color:var(--ink); background:linear-gradient(135deg, #15301e, #102417); box-shadow:0 3px 10px rgba(0,0,0,.3), inset 0 1px 0 rgba(255,255,255,.08); transition:all .3s ease; } .term-btn:hover{ transform: translateY(-2px); background:linear-gradient(135deg, var(--btn-end), #15301e); box-shadow:0 5px 15px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.12); border-color: rgba(var(--accent-rgb),.6); } .term-btn[aria-pressed="true"]{ background:linear-gradient(135deg, var(--accent), #49a25c); color:#0f1d12; border-color:#2e6f3e; box-shadow:0 3px 12px rgba(var(--accent-rgb),.5), inset 0 1px 0 rgba(255,255,255,.2); } .term-btn.danger{ background:linear-gradient(135deg, #5b2a1e, #3a1b14); border-color:#8c3b21; box-shadow:0 3px 10px rgba(255,138,91,.3); } .term-btn.danger:hover{ background:linear-gradient(135deg, #7a3a2a, #5b2a1e); box-shadow:0 5px 15px rgba(255,138,91,.5); } /* Status chips inside terminal */ .term-status{ display:flex; flex-wrap:nowrap; gap:6px; align-items:center; padding:6px 8px; border-bottom:2px solid rgba(var(--btn-start-rgb),.4); background:linear-gradient(135deg, rgba(18,40,22,.7), rgba(12,28,17,.7)); } .term-status .status-chip{ padding:4px 8px; font-size:10px; white-space:nowrap; } .terminal-body{ flex:1; padding:12px; position:relative; overflow:auto; border:2px solid rgba(var(--btn-start-rgb),.6); border-radius:6px; box-shadow: inset 0 2px 6px rgba(0,0,0,.5); background:linear-gradient(135deg,var(--panel-2),#0a1a0e 60%); } #terminal{ height:100%; width:100%; background:#0a1a0e; color:var(--ink); border:none; border-radius:4px; padding:0; overflow:hidden; box-shadow: inset 0 2px 8px rgba(0,0,0,.4); font-family: 'Courier New', monospace; font-size:14px; line-height:1.4; } .panel-placeholder{ position:absolute; inset:12px; background:linear-gradient(135deg, rgba(24,54,29,.6), rgba(18,40,22,.6)); color:var(--muted); border:1px dashed rgba(var(--btn-start-rgb),.6); border-radius:6px; display:flex; align-items:center; justify-content:center; font-family:var(--pixel-font); font-size:10px; letter-spacing:.6px; } .token-value{ white-space:pre; } /* Analysis status row */ .analysis-status{ display:flex; gap:12px; align-items:center; padding:10px 16px; height:auto; flex-shrink:0; } .status-chip{ padding:6px 12px; border:2px solid rgba(var(--btn-start-rgb),.8); background:linear-gradient(135deg, rgba(16,36,23,.95) 0%, rgba(12,28,17,.95) 100%); border-radius:4px; font-family:var(--pixel-font); font-size:10px; color:var(--ink); box-shadow: 0 2px 6px rgba(0,0,0,.2), inset 0 1px 0 rgba(255,255,255,.05); text-align: center; white-space: nowrap; box-sizing: border-box; } .status-chip.ok{ background:linear-gradient(135deg, var(--accent) 0%, #49a25c 100%); color:#0f1d12; border-color:#2e6f3e; box-shadow: 0 2px 8px rgba(var(--accent-rgb),.3), inset 0 1px 0 rgba(255,255,255,.2); } .status-chip.err{ background:linear-gradient(135deg, #ff8a5b 0%, #c95f36 100%); color:#2b0c06; border-color:#8c3b21; box-shadow: 0 2px 8px rgba(255,138,91,.3), inset 0 1px 0 rgba(255,255,255,.2); } /* Accessibility */ .sr-only{ position:absolute !important; width:1px !important; height:1px !important; padding:0 !important; margin:-1px !important; overflow:hidden !important; clip:rect(0,0,0,0) !important; white-space:nowrap !important; border:0 !important; } /* HUD */ .hud{ display:flex; align-items:center; gap:14px; } .coin-badge{ background:linear-gradient(135deg, #ffd36e 0%, #ffb800 100%); color:#3a271c; font-weight:800; padding:6px 12px; border-radius:6px; border:2px solid #f3a300; box-shadow: 0 3px 10px rgba(var(--accent-2-rgb),.4), inset 0 1px 0 rgba(255,231,169,.6); min-width:50px; text-align:center; font-family:var(--pixel-font); transition: transform .2s ease; } .coin-badge:hover{ transform: scale(1.05); } .energy-wrap{ display:flex; align-items:center; gap:10px; } .energy-bar{ width:170px; height:16px; background:#0a1a0e; border-radius:8px; padding:2px; border:2px solid #2d5d38; box-shadow: inset 0 2px 6px rgba(0,0,0,.4), 0 2px 8px rgba(0,0,0,.2); } .energy-fill{ height:100%; background:linear-gradient(90deg, var(--accent) 0%, #b6ff85 100%); border-radius:6px; box-shadow:0 0 12px rgba(var(--accent-rgb),.6), inset 0 1px 0 rgba(255,255,255,.3); transition: width .3s ease; } .energy-label{ color:var(--ink); font-weight:700; font-family:var(--pixel-font); font-size:12px; text-shadow: 0 1px 2px rgba(0,0,0,.3); } /* Status Bar */ .statusbar{ position:fixed; bottom:0; left:0; right:0; height:28px; background:linear-gradient(180deg, #15301e, var(--panel-2)); border-top:3px solid var(--btn-start); color:var(--ink); display:flex; align-items:center; justify-content:space-between; padding:0 12px; font-size:12px; } .sb-left{ opacity:.85; } .sb-right{ opacity:.85; } /* Decorative leaves removed */ /* Buttons */ .btn{ border-radius:6px; padding:12px 20px; border:2px solid rgba(var(--btn-start-rgb),.8); background:linear-gradient(135deg, var(--btn-end) 0%, #15301e 100%); color:var(--ink); font-weight:800; cursor:pointer; font-family:var(--pixel-font); font-size:11px; transition: all .3s ease; box-shadow: 0 4px 12px rgba(0,0,0,.3), inset 0 1px 0 rgba(255,255,255,.08); position: relative; overflow: hidden; } .btn::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(var(--accent-rgb),.25), transparent); transition: left .5s ease; } .btn:hover::before { left: 100%; } .btn:hover{ background:linear-gradient(135deg, var(--btn-hover-end) 0%, var(--btn-end) 100%); transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.12); border-color: rgba(var(--accent-rgb),.7); } .btn:active{ transform: translateY(0); box-shadow: 0 2px 8px rgba(0,0,0,.3); } .btn-primary{ background:linear-gradient(135deg, var(--btn-start) 0%, var(--btn-end) 100%); border-color:var(--btn-end); color:var(--accent); text-shadow:0 1px 2px rgba(0,0,0,.5); box-shadow: 0 4px 16px rgba(0,0,0,.4), inset 0 1px 0 rgba(var(--accent-rgb),.15); min-width: 140px; padding: 10px 32px; } .btn-primary:hover{ background:linear-gradient(135deg, var(--btn-hover-start) 0%, var(--btn-hover-end) 100%); box-shadow: 0 6px 24px rgba(0,0,0,.5), inset 0 1px 0 rgba(var(--accent-rgb),.25); color:#8ee280; } /* Run dropdown button group */ .run-dropdown { position: relative; display: flex; gap: 0; } .run-dropdown .btn-primary { border-radius: 8px 0 0 8px; min-width: 120px; } .btn-dropdown-toggle { background: linear-gradient(135deg, var(--btn-start) 0%, var(--btn-end) 100%); border: 2px solid var(--btn-end); border-left: 1px solid rgba(var(--accent-rgb),0.2); border-radius: 0 8px 8px 0; color: var(--accent); font-family: 'Press Start 2P', monospace; font-size: 10px; padding: 10px 12px; cursor: pointer; text-shadow: 0 1px 2px rgba(0,0,0,.5); box-shadow: 0 4px 16px rgba(0,0,0,.4), inset 0 1px 0 rgba(var(--accent-rgb),.15); transition: all 0.2s ease; } .btn-dropdown-toggle:hover { background: linear-gradient(135deg, var(--btn-hover-start) 0%, var(--btn-hover-end) 100%); color: #8ee280; box-shadow: 0 6px 24px rgba(0,0,0,.5), inset 0 1px 0 rgba(var(--accent-rgb),.25); } .run-dropdown-menu { position: absolute; top: 100%; right: 0; margin-top: 8px; background: linear-gradient(135deg, var(--btn-start) 0%, var(--btn-end) 100%); border: 2px solid var(--btn-end); border-radius: 8px; min-width: 160px; box-shadow: 0 8px 32px rgba(0,0,0,.6); z-index: 1000; overflow: hidden; } .run-dropdown-menu.hidden { display: none; } .run-dropdown-item { padding: 12px 20px; color: var(--accent); font-family: 'Press Start 2P', monospace; font-size: 10px; cursor: pointer; transition: all 0.2s ease; border-bottom: 1px solid rgba(var(--accent-rgb),0.1); } .run-dropdown-item:last-child { border-bottom: none; } .run-dropdown-item:hover { background: rgba(var(--accent-rgb),0.15); color: #8ee280; } /* Utility */ .garden-wood{ border-bottom: 3px solid #3f2c20; } /* Responsive spacing adjustments */ @media (max-height: 700px){ .mainCont{ padding-bottom: 10px; } } /* ===== MOBILE OPTIMIZATIONS ===== */ /* Tablet breakpoint: 769px - 1024px */ @media (max-width: 1024px) and (min-width: 769px) { .workspace { gap: 8px; } .sidebar { width: 280px; min-width: 200px; } .ide-logo { height: 24px; } .side-token-table { font-size: 11px; } } /* Mobile: avoid duplicate lexeme tables by hiding sidebar and using single column */ @media (max-width: 768px){ /* Disable animations for performance */ *, *::before, *::after { animation-duration: 0.01s !important; transition-duration: 0.15s !important; } body::before { display: none; } .coin-badge{ font-size:10px; padding:3px 8px; } .workspace { flex-direction: column; flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 8px; gap: 8px; max-width: 100vw; box-sizing: border-box; } .sidebar { display: none !important; } .sidebarResizer { display: none !important; } .workspace-main { overflow: hidden; height: auto; gap: 8px; max-width: 100%; width: 100%; } /* Adjust main container for mobile */ .mainCont { flex-direction: column; height: auto; min-height: 250px; padding: 0; max-width: 100%; overflow: hidden; } .textFieldCont { width: 100%; min-width: 100%; height: 45vh; min-height: 200px; max-height: 350px; margin-bottom: 0; padding: 6px; } .widthResizer { display: none; } /* Hide desktop token table on mobile */ .outputCont { display:none !important; } /* Terminal adjustments for mobile */ .terminalCont { height: 35vh; min-height: 180px; max-height: 300px; flex-shrink: 0; border-radius: 6px; overflow: hidden; width: 100%; max-width: 100%; box-sizing: border-box; } .terminal-header { max-width: 100%; overflow: hidden; } .terminal-body { min-height: 120px; max-height: 200px; padding: 8px; } #terminal { font-size: 11px; line-height: 1.3; } /* Adjust table for mobile viewing */ .tokenTable { font-size: 11px; min-width: unset; width: 100%; } .tokenTable th { font-size: 9px; padding: 8px 6px; letter-spacing: 0.2px; } .tokenTable td { font-size: 11px; padding: 6px; } /* Mobile tokens modal optimization */ .mobile-tokens { width: 95%; max-width: none; height: 60vh; max-height: none; top: 50%; transform: translate(-50%, -50%); border-radius: 12px; } .mobile-tokens .tokenTable { min-width: unset; } .mobile-tokens .tokenTable tbody { height: calc(60vh - 100px); max-height: none; } .mobile-tokens-header { padding: 10px 12px; } /* ===== IDE TITLEBAR MOBILE ===== */ .ide-titlebar { height: 36px; min-height: 36px; padding: 0 6px; gap: 6px; } .ide-logo { height: 22px; } .ide-titlebar-center { display: none; } .ide-menu-btn { padding: 4px 6px; font-size: 9px; flex-shrink: 0; } /* Center lexeme toggle */ .mobile-lexeme-nav-toggle { flex: 0 1 auto; display: flex; justify-content: center; min-width: 0; overflow: hidden; } .btn-toggle-lexemes { padding: 4px 8px; font-size: 8px; min-height: 28px; white-space: nowrap; gap: 3px; overflow: hidden; text-overflow: ellipsis; } #lexeme-toggle-icon { font-size: 7px; } /* Run dropdown mobile */ .run-dropdown { flex: 0 0 auto; } .ide-titlebar .run-dropdown .btn-primary { min-width: 60px; padding: 6px 8px; font-size: 8px; min-height: 32px; } .ide-run-icon { display: none; } #run-mode-text { font-size: 8px; } .ide-titlebar .btn-dropdown-toggle { padding: 6px 6px; font-size: 8px; min-height: 32px; } .run-dropdown-menu { min-width: 140px; right: 0; left: auto; position: fixed; top: auto; margin-top: 4px; z-index: 9999; } .run-dropdown-item { padding: 14px 16px; font-size: 10px; -webkit-tap-highlight-color: rgba(var(--accent-rgb),0.3); cursor: pointer; } /* ===== IDE TABBAR MOBILE ===== */ .ide-tabbar { height: 30px; min-height: 30px; } .ide-tab { padding: 0 10px; } .ide-tab-icon { font-size: 11px; } .ide-tab .current-file-name { font-size: 9px; max-width: 140px; } /* ===== TERMINAL HEADER MOBILE ===== */ .terminal-header { flex-wrap: nowrap; gap: 6px; padding: 6px 8px; } .term-title { font-size: 9px; gap: 6px; } .dot { width: 8px; height: 8px; } .term-actions { gap: 4px; flex-shrink: 0; } .term-btn { padding: 6px 10px; font-size: 8px; min-height: 28px; } /* ===== IDE STATUSBAR MOBILE ===== */ .ide-statusbar { height: 22px; min-height: 22px; padding: 0 6px; flex-shrink: 0; position: fixed; bottom: 0; left: 0; right: 0; z-index: 100; } .ide-statusbar .status-chip { font-size: 7px; padding: 2px 5px; } .ide-status-lang { font-size: 7px; } .mobile-status-fab { display: none !important; } .mobile-status-popup { display: none !important; } .mobile-status-backdrop { display: none !important; } /* ===== FILE MENU MOBILE ===== */ .file-menu-wrap { position: static; } .file-popup { position: fixed; top: auto; bottom: 0; left: 0; right: 0; min-width: 100vw; border-radius: 16px 16px 0 0; padding: 10px 0 env(safe-area-inset-bottom, 12px); animation: filePopUpMobile .2s ease-out; } @keyframes filePopUpMobile { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } } .file-popup-item { padding: 16px 24px; font-size: 13px; min-height: 44px; display: flex; align-items: center; } .file-popup-divider { margin: 4px 16px; } } /* ===== SMALL MOBILE (max 480px) ===== */ @media (max-width: 480px) { .ide-titlebar { height: 32px; min-height: 32px; padding: 0 6px; } .ide-logo { height: 18px; } .ide-menu-btn { padding: 4px 6px; font-size: 8px; } .btn-toggle-lexemes { padding: 6px 8px; font-size: 8px; } .ide-titlebar .run-dropdown .btn-primary { min-width: 50px; padding: 6px 6px; font-size: 8px; } .ide-titlebar .btn-dropdown-toggle { padding: 6px 6px; font-size: 8px; } .ide-tabbar { height: 26px; min-height: 26px; } .ide-tab { padding: 0 8px; } .ide-tab .current-file-name { max-width: 100px; font-size: 8px; } .ide-tab-icon { font-size: 10px; } .ide-statusbar .status-chip { font-size: 6px; padding: 2px 4px; } .textFieldCont { height: 40vh; min-height: 180px; padding: 4px; } .terminalCont { height: 30vh; min-height: 150px; } .mobile-tokens { width: 98%; height: 70vh; top: 48%; border-radius: 8px; } .mobile-tokens-header { padding: 8px 10px; } .mobile-tokens-title { font-size: 10px; } .mobile-tokens-close { width: 28px; height: 28px; font-size: 14px; } .tokenTable th { font-size: 8px; padding: 6px 4px; } .tokenTable td { font-size: 10px; padding: 4px; } .term-btn { padding: 4px 6px; font-size: 7px; } #terminal { font-size: 10px; } } /* ===== LANDSCAPE MOBILE ===== */ @media (max-width: 768px) and (orientation: landscape) { .workspace { flex: 1; min-height: 0; } .textFieldCont { height: 50vh; min-height: 150px; max-height: 250px; } .terminalCont { height: 40vh; min-height: 120px; max-height: 200px; } .mobile-tokens { height: 80vh; width: 90%; top: 50%; } .mobile-tokens .tokenTable tbody { height: calc(80vh - 100px); } } /* ===== TOUCH FRIENDLY ENHANCEMENTS ===== */ @media (hover: none) and (pointer: coarse) { /* Larger touch targets */ .ide-menu-btn, .term-btn, .btn, .btn-primary, .btn-dropdown-toggle, .btn-toggle-lexemes { min-height: 44px; min-width: 44px; } .run-dropdown-item { padding: 14px 16px; } /* Remove hover effects that cause issues on touch */ .ide-menu-btn:hover, .term-btn:hover, .btn:hover { transform: none; } .file-popup-item { min-height: 44px; } /* Better scroll behavior */ .workspace, .mobile-tokens .tokenTable tbody, .terminal-body { -webkit-overflow-scrolling: touch; scroll-behavior: smooth; } } /* ===== AI CHAT PANEL ===== */ .btn-chat-toggle { display: flex; align-items: center; gap: 4px; font-family: var(--pixel-font); font-size: 11px; background: linear-gradient(135deg, var(--btn-start) 0%, var(--btn-end) 100%); border: 2px solid rgba(var(--btn-start-rgb),.8); border-radius: 5px; padding: 4px 18px; cursor: pointer; transition: all .3s ease; box-shadow: 0 3px 8px rgba(0,0,0,.3), inset 0 1px 0 rgba(var(--accent-rgb),.15); white-space: nowrap; } .btn-chat-toggle:hover { background: linear-gradient(135deg, var(--btn-hover-start) 0%, var(--btn-hover-end) 100%); border-color: rgba(var(--accent-rgb),.7); transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,.4), inset 0 1px 0 rgba(var(--accent-rgb),.25); } .btn-chat-toggle:active { transform: translateY(0); box-shadow: 0 2px 8px rgba(0,0,0,.3); } .chat-btn-text { color: var(--accent); font-size: 8px; font-weight: 800; text-shadow: 0 1px 2px rgba(0,0,0,.5); } /* Chat backdrop (mobile) */ .chat-backdrop { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.5); z-index: 998; } .chat-backdrop.show { display: block; } /* ── Chat Panel (Copilot-style) ────────────────────────── */ .chat-panel { position: fixed; right: -420px; top: 0; bottom: 0; width: 420px; max-width: 100vw; background: var(--bg); border-left: 1px solid rgba(var(--accent-rgb),.15); box-shadow: -2px 0 16px rgba(0,0,0,.4); z-index: 999; display: flex; flex-direction: column; transition: right .3s cubic-bezier(.4,0,.2,1); box-sizing: border-box; } .chat-panel.open { right: 0; } /* Header */ .chat-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; background: linear-gradient(180deg, var(--panel) 0%, rgba(24,54,29,.95) 100%); border-bottom: 1px solid rgba(var(--accent-rgb),.18); flex-shrink: 0; min-height: 52px; box-sizing: border-box; } .chat-header-left { display: flex; flex-direction: column; gap: 2px; } .chat-title { font-family: var(--pixel-font); font-size: 10px; color: var(--accent); letter-spacing: .5px; } .chat-subtitle { font-family: 'Baloo 2', sans-serif; font-size: 11px; color: var(--muted); letter-spacing: .2px; opacity: .75; } .chat-header-actions { display: flex; gap: 4px; } .chat-header-btn { background: transparent; border: 1px solid transparent; color: var(--muted); font-size: 14px; width: 28px; height: 28px; border-radius: 4px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all .15s ease; } .chat-header-btn:hover { background: rgba(var(--accent-rgb),.08); color: var(--ink); border-color: rgba(var(--accent-rgb),.2); } /* Messages container — KEY: min-height:0 enables flex scroll */ .chat-messages { flex: 1 1 0; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 0; display: flex; flex-direction: column; } /* Individual message row */ .chat-msg { padding: 12px 20px; border-bottom: 1px solid rgba(var(--accent-rgb),.06); display: flex; gap: 12px; align-items: flex-start; width: 100%; box-sizing: border-box; animation: chatMsgIn .25s ease-out; } @keyframes chatMsgIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } .chat-msg.user { background: rgba(var(--accent-rgb),.08); border-left: 3px solid rgba(var(--accent-rgb),.25); } .chat-msg.assistant { background: rgba(13,27,15,.3); border-left: 3px solid rgba(var(--accent-rgb),.08); } /* Avatar icon */ .chat-avatar { width: 28px; height: 28px; border-radius: 6px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-size: 15px; line-height: 1; margin-top: 1px; } .chat-msg.user .chat-avatar { background: rgba(var(--accent-2-rgb),.12); color: var(--accent-2); } .chat-msg.assistant .chat-avatar { background: rgba(var(--accent-rgb),.18); color: var(--accent); } /* Message content */ .chat-bubble { flex: 1; min-width: 0; font-family: 'Baloo 2', sans-serif; font-size: 14px; line-height: 1.6; color: var(--ink); word-wrap: break-word; overflow-wrap: break-word; word-break: break-word; padding: 0; } .chat-msg.user .chat-bubble { color: var(--ink); font-size: 13.5px; } .chat-msg.assistant .chat-bubble { color: #ddf0de; } /* Paragraphs inside bubble */ .chat-bubble p { margin: 0 0 5px 0; } .chat-bubble p:last-child { margin-bottom: 0; } /* Lists inside assistant messages */ .chat-bubble ol, .chat-bubble ul { margin: 4px 0; padding-left: 18px; } .chat-bubble li { margin-bottom: 2px; line-height: 1.5; } /* Code blocks */ .chat-bubble .code-block-wrap { position: relative; margin: 6px 0; border-radius: 8px; overflow: hidden; border: 1px solid rgba(var(--accent-rgb),.12); background: #0a140c; } .chat-bubble .code-block-header { display: flex; align-items: center; justify-content: space-between; padding: 4px 10px; background: rgba(var(--accent-rgb),.06); border-bottom: 1px solid rgba(var(--accent-rgb),.08); min-height: 26px; } .chat-bubble .code-block-lang { font-family: 'Baloo 2', sans-serif; font-size: 10px; color: var(--muted); text-transform: uppercase; letter-spacing: .5px; } .chat-copy-btn { background: transparent; border: 1px solid rgba(var(--accent-rgb),.15); border-radius: 4px; color: var(--muted); font-size: 10.5px; padding: 2px 8px; cursor: pointer; transition: all .15s ease; font-family: 'Baloo 2', sans-serif; } .chat-copy-btn:hover { background: rgba(var(--accent-rgb),.12); color: var(--ink); border-color: rgba(var(--accent-rgb),.3); } .chat-copy-btn.copied { color: var(--accent); border-color: var(--accent); } .chat-bubble .code-block-wrap pre { margin: 0; border: none; border-radius: 0; padding: 10px 12px; background: transparent; } .chat-bubble pre { background: #0a140c; border: 1px solid rgba(var(--accent-rgb),.12); border-radius: 8px; padding: 10px 12px; margin: 6px 0; overflow-x: auto; max-width: 100%; box-sizing: border-box; font-family: 'Consolas', 'Courier New', monospace; font-size: 12.5px; line-height: 1.5; color: var(--accent); white-space: pre; position: relative; } /* Subtle horizontal scrollbar inside code blocks */ .chat-bubble pre::-webkit-scrollbar { height: 4px; } .chat-bubble pre::-webkit-scrollbar-track { background: transparent; } .chat-bubble pre::-webkit-scrollbar-thumb { background: rgba(var(--accent-rgb),.12); border-radius: 2px; } .chat-bubble pre::-webkit-scrollbar-thumb:hover { background: rgba(var(--accent-rgb),.22); } .chat-bubble code { font-family: 'Consolas', 'Courier New', monospace; font-size: 12px; background: rgba(var(--accent-rgb),.08); padding: 2px 5px; border-radius: 3px; color: var(--accent); } .chat-bubble pre code { background: transparent; padding: 0; font-size: 12px; } /* Strong / emphasis inside chat */ .chat-bubble strong { color: #fff; font-weight: 700; letter-spacing: .1px; } .chat-bubble em { color: var(--muted); } /* Fallback mode badge */ .chat-fallback-badge { display: inline-block; font-size: 10px; color: #f5c842; background: rgba(245, 200, 66, 0.1); border: 1px solid rgba(245, 200, 66, 0.3); border-radius: 4px; padding: 3px 8px; margin-bottom: 8px; letter-spacing: 0.3px; } /* Message type tags */ .chat-msg-tags { display: flex; gap: 5px; flex-wrap: wrap; margin-bottom: 6px; } .chat-tag { font-family: var(--pixel-font); font-size: 7px; padding: 2px 7px; border-radius: 3px; letter-spacing: .5px; text-transform: uppercase; font-weight: 400; line-height: 1.4; } .chat-tag.tag-syntax { background: rgba(var(--accent-rgb),.12); color: var(--accent); border: 1px solid rgba(var(--accent-rgb),.2); } .chat-tag.tag-semantic { background: rgba(var(--accent-2-rgb),.1); color: var(--accent-2); border: 1px solid rgba(var(--accent-2-rgb),.2); } .chat-tag.tag-code { background: rgba(138,180,255,.1); color: #8ab4ff; border: 1px solid rgba(138,180,255,.2); } .chat-tag.tag-fix { background: rgba(255,138,91,.1); color: var(--accent-3); border: 1px solid rgba(255,138,91,.2); } .chat-tag.tag-info { background: rgba(166,195,169,.08); color: var(--muted); border: 1px solid rgba(166,195,169,.15); } /* Action buttons under replies */ .chat-actions { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; padding-top: 8px; border-top: 1px solid rgba(var(--accent-rgb),.06); } .chat-action-btn { font-family: 'Baloo 2', sans-serif; font-size: 11px; color: var(--muted); background: rgba(var(--accent-rgb),.04); border: 1px solid rgba(var(--accent-rgb),.12); border-radius: 6px; padding: 4px 10px; cursor: pointer; transition: all .15s ease; display: flex; align-items: center; gap: 4px; } .chat-action-btn:hover { background: rgba(var(--accent-rgb),.1); color: var(--ink); border-color: rgba(var(--accent-rgb),.3); } .chat-action-btn .action-icon { font-size: 12px; } /* Retry action shown only when a chat request fails */ .chat-msg-error .chat-bubble { color: var(--accent-3); } .chat-error-content { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; } .chat-error-text { color: var(--accent-3) !important; } .chat-retry-btn { height: 30px; padding: 0 10px; display: inline-flex; align-items: center; gap: 6px; color: var(--accent); background: rgba(var(--accent-rgb), .08); border: 1px solid rgba(var(--accent-rgb), .28); border-radius: 6px; font-family: 'Baloo 2', sans-serif; font-size: 12px; cursor: pointer; transition: background .15s ease, border-color .15s ease, color .15s ease; } .chat-retry-btn svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .chat-retry-btn:hover:not(:disabled) { color: var(--ink); background: rgba(var(--accent-rgb), .16); border-color: rgba(var(--accent-rgb), .52); } .chat-retry-btn:disabled { opacity: .42; cursor: not-allowed; } /* Typing indicator */ .chat-typing { display: flex; gap: 4px; padding: 4px 0; align-items: center; } .chat-typing span { width: 6px; height: 6px; background: var(--accent); border-radius: 50%; animation: chatBounce .6s infinite alternate; opacity: .4; } .chat-typing span:nth-child(2) { animation-delay: .2s; } .chat-typing span:nth-child(3) { animation-delay: .4s; } @keyframes chatBounce { to { opacity: 1; transform: translateY(-3px); } } /* Thinking indicator — multi-phase */ .chat-thinking { display: flex; flex-direction: column; gap: 6px; padding: 8px 0; max-width: 240px; } .chat-thinking-status { display: flex; align-items: center; gap: 8px; font-family: var(--pixel-font); font-size: 8px; color: rgba(var(--accent-rgb), .8); animation: thinkFadeIn .3s ease; } .chat-thinking-status .think-icon { width: 16px; height: 16px; border: 2px solid rgba(var(--accent-rgb), .3); border-top-color: var(--accent); border-radius: 50%; animation: thinkSpin .8s linear infinite; flex-shrink: 0; } .chat-thinking-status .think-text { opacity: 1; transition: opacity .3s ease; } .chat-thinking-status.fading .think-text { opacity: 0; } .chat-thinking-progress { height: 2px; background: rgba(var(--accent-rgb), .1); border-radius: 1px; overflow: hidden; } .chat-thinking-progress-bar { height: 100%; background: linear-gradient(90deg, var(--accent), rgba(var(--accent-rgb), .4)); border-radius: 1px; width: 0%; animation: thinkProgress 2s ease-out forwards; } @keyframes thinkSpin { to { transform: rotate(360deg); } } @keyframes thinkFadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } @keyframes thinkProgress { 0% { width: 0%; } 30% { width: 45%; } 60% { width: 70%; } 90% { width: 85%; } 100% { width: 95%; } } /* Input area */ .chat-input-area { padding: 12px 16px 14px; border-top: 1px solid rgba(var(--accent-rgb),.15); flex-shrink: 0; background: linear-gradient(0deg, var(--panel) 0%, rgba(24,54,29,.95) 100%); } .chat-context-hint { margin-bottom: 8px; } .chat-context-hint label { font-family: 'Baloo 2', sans-serif; font-size: 11px; color: var(--muted); cursor: pointer; display: flex; align-items: center; gap: 6px; } .chat-context-hint input[type="checkbox"] { accent-color: var(--accent); } .chat-input-row { display: flex; gap: 8px; align-items: flex-end; } .chat-input-wrap { flex: 1; display: flex; align-items: center; background: var(--bg); border: 1px solid rgba(var(--accent-rgb),.2); border-radius: 8px; transition: border-color .2s ease, box-shadow .2s ease; min-height: 38px; } .chat-input-wrap:focus-within { border-color: var(--accent); box-shadow: 0 0 0 2px rgba(var(--accent-rgb),.12), 0 0 12px rgba(var(--accent-rgb),.08); } .chat-input-icon { padding-left: 10px; font-size: 14px; opacity: .45; flex-shrink: 0; pointer-events: none; display: flex; align-items: center; line-height: 1; } .chat-input { flex: 1; background: transparent; border: none; padding: 9px 12px 9px 8px; color: var(--ink); font-family: 'Baloo 2', sans-serif; font-size: 13.5px; resize: none; max-height: 120px; outline: none; box-sizing: border-box; } .chat-input::placeholder { color: rgba(166,195,169,.4); } .chat-send-btn { width: 38px; height: 38px; background: linear-gradient(135deg, #3a8f45, #2a6a32); border: 1px solid rgba(var(--accent-rgb),.3); border-radius: 8px; color: #fff; font-size: 13px; cursor: pointer; flex-shrink: 0; transition: all .2s ease; display: flex; align-items: center; justify-content: center; } .chat-send-btn:hover { background: linear-gradient(135deg, #4aaf55, #3a8f45); box-shadow: 0 0 12px rgba(var(--accent-rgb),.25); transform: translateY(-1px); } .chat-send-btn:disabled { opacity: .4; cursor: not-allowed; transform: none; box-shadow: none; } /* Scrollbar */ .chat-messages::-webkit-scrollbar { width: 6px; } .chat-messages::-webkit-scrollbar-track { background: transparent; } .chat-messages::-webkit-scrollbar-thumb { background: rgba(var(--accent-rgb),.15); border-radius: 3px; } .chat-messages::-webkit-scrollbar-thumb:hover { background: rgba(var(--accent-rgb),.3); } /* ── Empty state / Welcome ──────────────────────────── */ .chat-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; flex: 1; padding: 24px 24px 20px; text-align: center; animation: fadeInUp .4s ease-out; gap: 0; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } .chat-watermark { margin-bottom: 8px; opacity: .12; } .chat-watermark-logo { width: 180px; height: 180px; object-fit: contain; image-rendering: pixelated; filter: drop-shadow(0 0 8px rgba(var(--accent-rgb),.08)); } .chat-welcome-title { font-family: 'Baloo 2', sans-serif; font-size: 16px; font-weight: 700; color: var(--ink); margin-bottom: 2px; } .chat-welcome-sub { font-family: 'Baloo 2', sans-serif; font-size: 12.5px; color: var(--muted); margin-bottom: 8px; } .chat-welcome-topics { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; margin-bottom: 16px; } .chat-welcome-topics span { font-family: 'Baloo 2', sans-serif; font-size: 11px; color: rgba(166,195,169,.7); background: rgba(var(--accent-rgb),.04); border: 1px solid rgba(var(--accent-rgb),.08); border-radius: 20px; padding: 3px 10px; letter-spacing: .2px; } /* Suggestion chips (action buttons) */ .chat-suggestion-chips { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; max-width: 340px; } .chat-chip { font-family: 'Baloo 2', sans-serif; font-size: 12px; color: var(--accent); background: rgba(var(--accent-rgb),.08); border: 1px solid rgba(var(--accent-rgb),.25); border-radius: 8px; padding: 7px 14px; cursor: pointer; transition: all .2s ease; white-space: nowrap; font-weight: 600; letter-spacing: .1px; } .chat-chip:hover { background: rgba(var(--accent-rgb),.18); border-color: rgba(var(--accent-rgb),.5); box-shadow: 0 2px 12px rgba(var(--accent-rgb),.15); transform: translateY(-1px); color: #fff; } /* Mobile */ @media (max-width: 768px) { .chat-panel { width: 100vw; right: -100vw; border-left: none; box-shadow: none; } .chat-panel.open { right: 0; } /* Full-height using safe viewport units */ .chat-panel { top: 0; bottom: 0; height: 100vh; height: 100dvh; } /* Larger touch targets */ .chat-header { padding: 12px 14px; min-height: 48px; } .chat-header-btn { width: 36px; height: 36px; font-size: 16px; } /* Messages area fills available space */ .chat-messages { flex: 1 1 0; min-height: 0; } .chat-msg { padding: 12px 14px; } .chat-bubble { font-size: 14.5px; } .chat-bubble pre { font-size: 11px; padding: 8px; } .chat-chip { font-size: 11.5px; padding: 6px 12px; } .chat-welcome-title { font-size: 16px; } /* Input area — safe area padding for phones with notches/gesture bars */ .chat-input-area { padding: 10px 14px calc(10px + env(safe-area-inset-bottom, 0px)); } .chat-input { font-size: 16px; /* prevents iOS zoom on focus */ padding: 10px 12px; } .chat-send-btn { width: 42px; height: 42px; font-size: 14px; } /* Hide backdrop on mobile — panel is full screen */ .chat-backdrop.show { display: none; } }