feat(v8.2): UX — Guide-Tabs, Begriffe oben, Mobile, Download-Links

- GuidesPanel: "Begriffe kurz erklärt" jetzt ganz oben (vor Guide-Karten)
- GuidesPanel: Tab-Navigation mit Kategorie-Chips + Active-Highlighting;
  Klick scrollt zur jeweiligen Guide-Gruppe
- ConnectPanel: Download-Links für Zed (zed.dev) und Cline (VS Code +
  JetBrains Marketplace) ergänzt
- base.css: Mobile-Breakpoint ≤520px — Sidebar wird zur Bottom-Nav,
  Content-Padding reduziert, Touch-freundliche Button-Höhen (min 40px),
  Topbar kompaktiert, Guide-Tabs horizontal scrollbar

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-06-23 18:23:57 +02:00
parent e8971fbf0c
commit df1ba748d4
5 changed files with 148 additions and 49 deletions
+2
View File
@@ -270,6 +270,7 @@
</div>
<p style="margin-top:12px"><b>API-Key:</b> Öffne den Agent-Panel → Anbieter <b>bosgame</b> → trag irgendeinen Wert ein (z.B. <code>local</code>).</p>
<div class="hint">Danach im Agent-Panel das Modell <b>bosgame / {firstModel}</b> auswählen.</div>
<div class="hint" style="margin-top:4px">Zed herunterladen: <a href="https://zed.dev" target="_blank" rel="noopener">zed.dev</a> — kostenlos, native Performance, Windows/macOS/Linux.</div>
{:else if selectedTool === 'opencode'}
{@const block = openCodeBlock(url, activeIds)}
<p>Datei anlegen oder öffnen (OpenCode Desktop nutzt <b>.jsonc</b> — JSON mit Kommentaren):</p>
@@ -294,6 +295,7 @@
<button class="ghost" onclick={e => copyVal((e.currentTarget as HTMLElement).previousElementSibling as HTMLInputElement)}>Kopieren</button>
</div>
<div class="hint">API-Key: ein beliebiger Wert (z.B. <code>local</code>).</div>
<div class="hint" style="margin-top:4px">Cline für VS Code: <a href="https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev" target="_blank" rel="noopener">VS Code Marketplace</a> · für JetBrains: <a href="https://plugins.jetbrains.com/plugin/24604-cline" target="_blank" rel="noopener">JetBrains Marketplace</a></div>
{:else if selectedTool === 'openwebui'}
<p>Settings → Admin Panel → Connections → neue OpenAI-Verbindung:</p>
<label>Basis-URL</label>
+59 -12
View File
@@ -1,5 +1,12 @@
<script lang="ts">
import { GUIDE_GROUPS, CONCEPTS } from './guides-data.js'
let activeGroup = $state(0)
function scrollTo(gi: number) {
activeGroup = gi
document.getElementById(`guide-group-${gi}`)?.scrollIntoView({ behavior: 'smooth', block: 'start' })
}
</script>
<div class="pagehead">
@@ -9,8 +16,33 @@
</div>
</div>
<!-- Begriffe oben -->
<div class="card">
<div class="card-h"><h3>Begriffe kurz erklärt</h3></div>
<div class="concept-grid" style="margin-top:8px">
{#each CONCEPTS as [term, text]}
<div class="concept">
<h4>{term}</h4>
<p>{text}</p>
</div>
{/each}
</div>
</div>
<!-- Tab-Navigation -->
<div class="guide-tabs">
{#each GUIDE_GROUPS as group, gi}
<button
class="guide-tab{activeGroup === gi ? ' active' : ''}"
onclick={() => scrollTo(gi)}>
{group.label}
</button>
{/each}
</div>
<!-- Guide-Karten -->
{#each GUIDE_GROUPS as group, gi}
<div class="card guide-card">
<div class="card guide-card" id="guide-group-{gi}">
<div class="guide-group-hd">{group.label}</div>
{#each group.tutorials as [title, body], i}
<details class="guide-acc" open={gi === 0 && i === 0}>
@@ -21,21 +53,36 @@
</div>
{/each}
<div class="card-h" style="margin-top:8px"><h3>Begriffe kurz erklärt</h3></div>
<div class="concept-grid">
{#each CONCEPTS as [term, text]}
<div class="concept">
<h4>{term}</h4>
<p>{text}</p>
</div>
{/each}
</div>
<style>
.guide-tabs {
display: flex;
gap: 6px;
flex-wrap: wrap;
margin: -6px 0 2px;
}
.guide-tab {
font-size: 12px;
padding: 5px 13px;
border-radius: 999px;
background: var(--tile);
border: 1px solid var(--line);
color: var(--mut);
cursor: pointer;
transition: .13s;
font-family: var(--sans);
}
.guide-tab:hover { color: var(--tx); border-color: var(--line2); }
.guide-tab.active {
background: rgba(45,212,191,.12);
border-color: rgba(45,212,191,.30);
color: var(--accent);
}
.guide-card {
padding: 0;
overflow: hidden;
margin-bottom: 8px;
margin-bottom: 0;
}
.guide-group-hd {