|
129 | 129 | 0%, 100% { border-color: #ef4444; } |
130 | 130 | 50% { border-color: #eab308; } |
131 | 131 | } |
| 132 | + #helpContent p { margin: 0 0 10px; } |
| 133 | + #helpContent strong { color: #475569; } |
| 134 | + #helpContent ol { margin: 0 0 10px; padding-left: 1.2em; } |
| 135 | + #helpContent li { margin: 0; } |
132 | 136 | .key-needed { animation: keyNeeded 1.2s ease-in-out infinite; } |
133 | 137 | </style> |
134 | 138 | </head> |
@@ -326,8 +330,9 @@ <h3 class="font-black text-blue-500 text-xs uppercase tracking-widest">AI Strate |
326 | 330 | </div> |
327 | 331 | </div> |
328 | 332 |
|
329 | | - <div id="emptyState" class="absolute inset-0 flex flex-col items-center justify-center text-slate-800"> |
330 | | - <p class="font-black text-xs uppercase tracking-[0.5em]">No Active Workspace</p> |
| 333 | + <div id="emptyState" class="absolute inset-0 flex flex-col items-center text-slate-800 overflow-hidden" style="padding-top:25vh"> |
| 334 | + <p class="font-black text-xs uppercase tracking-[0.5em] shrink-0">No Active Workspace</p> |
| 335 | + <div id="helpContent" class="mt-8 overflow-y-auto custom-scroll px-4 text-slate-800" style="max-width:520px;font-size:12px;font-weight:700;line-height:1.7"></div> |
331 | 336 | </div> |
332 | 337 | </main> |
333 | 338 |
|
@@ -460,6 +465,7 @@ <h3 class="text-xl font-black text-white mb-6 tracking-tighter italic">OPEN NEW |
460 | 465 | updateLangSelector(); |
461 | 466 | updateKeyIndicator(); |
462 | 467 | updateMicStatus(); |
| 468 | + renderHelp(); |
463 | 469 | }); |
464 | 470 | }); |
465 | 471 | } else { setTimeout(boot, 100); } |
@@ -2033,6 +2039,43 @@ <h3 class="text-xl font-black text-white mb-6 tracking-tighter italic">OPEN NEW |
2033 | 2039 | setTimeout(() => { if (ed && ed.layout) ed.layout(); }, 50); |
2034 | 2040 | } |
2035 | 2041 |
|
| 2042 | + function renderHelp() { |
| 2043 | + const md = ` |
| 2044 | +**Get started** — click **+** in the sidebar to open a problem.\ |
| 2045 | +Search the LeetCode catalog or paste your own problem statement. |
| 2046 | +
|
| 2047 | +**Workflow** — four steps before code:\ |
| 2048 | +1 Restate the problem, inputs, outputs, edge cases\ |
| 2049 | +2 Identify patterns and data structures\ |
| 2050 | +3 Write pseudocode\ |
| 2051 | +4 Dry run through examples |
| 2052 | +
|
| 2053 | +Each step has **Validate with AI** to get feedback from Gemini. |
| 2054 | +
|
| 2055 | +**API key** — click {🗝} in the sidebar footer to set your Gemini key.\ |
| 2056 | +Stored in your browser only, never sent to any server for storage. |
| 2057 | +
|
| 2058 | +**Code** — write your solution, then **Run Logic** or **Run Tests**.\ |
| 2059 | +JavaScript runs in-browser. Python/Java need the Flask server. |
| 2060 | +
|
| 2061 | +**Debug** — 🐛 Debug instruments your code and shows a step-by-step trace table.\ |
| 2062 | +Arrow keys to step, Space to play/pause. |
| 2063 | +
|
| 2064 | +**Shortcuts**\ |
| 2065 | +Ctrl+S save · Ctrl+' run · Ctrl+" gen tests\ |
| 2066 | +Ctrl+Shift+D debug · Ctrl+Shift+M maximize editor\ |
| 2067 | +Ctrl+Shift+V toggle voice (mic + TTS) |
| 2068 | +
|
| 2069 | +**Chat** — select any text to ask a contextual question.\ |
| 2070 | +Threaded Q&A with @hash cross-references. |
| 2071 | +
|
| 2072 | +**Tabs** — open multiple problems. Closing a tab hides it;\ |
| 2073 | +click it in the sidebar to reopen. Delete with 🗑. |
| 2074 | +`; |
| 2075 | + const el = document.getElementById('helpContent'); |
| 2076 | + if (el) el.innerHTML = marked.parse(md); |
| 2077 | + } |
| 2078 | + |
2036 | 2079 | function voiceSpeak(text) { |
2037 | 2080 | if (!ttsEnabled || !text) return; |
2038 | 2081 | speechSynthesis.cancel(); |
|
0 commit comments