Skip to content

Redesign: Complete UI overhaul with dark mode#32

Merged
EinfachMxrc merged 4 commits into
mainfrom
redesign/complete-ui-overhaul
Apr 12, 2026
Merged

Redesign: Complete UI overhaul with dark mode#32
EinfachMxrc merged 4 commits into
mainfrom
redesign/complete-ui-overhaul

Conversation

@EinfachMxrc

@EinfachMxrc EinfachMxrc commented Apr 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • Komplettes UI-Redesign: Neues Design-System mit saubereren Farben, schärferer Typografie und dezenten Schatten
  • Dark Mode: Class-basierter Toggle mit localStorage-Persistenz und prefers-color-scheme-Erkennung
  • Neue Landing Page: Zentrierter Hero, interaktives Mockup (Presenter + Reader), 3-Schritte-Workflow, Feature-Grid, Zielgruppen-Sektion, CTA mit Demo-Zugangsdaten und Footer
  • Neue Auth-Seiten: Split-Screen-Layout (Indigo-Panel links, Formular rechts)
  • Dashboard vereinfacht: Kompakter Header, saubere Stats und Tabs
  • PowerPoint-Seite: Schlichteres Step-Layout
  • Umlaute korrigiert: Alle ue→ü, oe→ö, ae→ä in sämtlichen Dateien repariert
  • Texte überarbeitet: Konkretere, nutzenorientierte Formulierungen statt generischer KI-Texte

Geänderte Dateien (18)

  • globals.css — Komplettes Design-System mit Light/Dark-Variablen
  • layout.tsx — Dark-Mode-Script + ThemeToggle-Integration
  • tailwind.config.tsdarkMode: "class" hinzugefügt
  • ThemeToggle.tsx — Neuer Toggle-Button (Sonne/Mond)
  • page.tsx (Landing) — Komplett neue Struktur und Texte
  • Auth, Dashboard, Session, Reader, PowerPoint, Print — Umlaute + Design

Test plan

  • Landing Page prüfen (Light + Dark Mode, Desktop + Mobile)
  • Login- und Registrierungsseite testen (Split-Screen auf Desktop, Formular auf Mobile)
  • Dashboard mit Demo-Account öffnen (Handouts + Sessions Tabs)
  • Session-Steuerung und Reader-Ansicht prüfen
  • Dark Mode Toggle testen (unten rechts)
  • PowerPoint-Seite und Print-Ansicht prüfen

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added a theme toggle and dark-mode support; redesigned landing page with new navigation, marketing sections, and demo credentials.
  • Style

    • Overhauled global design tokens, typography, component styles, and spacing for a cleaner, token-driven appearance.
    • Refreshed page and component layouts (login/register split panels, dashboard, session, print views) and updated German UI copy.
  • Improvements

    • PowerPoint integration: adjusted polling for edit vs. read modes for more efficient syncing.

EinfachMxrc and others added 2 commits April 11, 2026 04:02
…ection

PowerPoint Online opens the slideshow in a new browser window; the add-in
runs in the original editor window and cannot access the slideshow context.
Instead of trying (and failing) to detect the presented slide via
getSelectedSlides in read mode, we now only slow the poll cadence
(500ms → 1000ms) and re-sync immediately when returning to edit mode.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rework entire design system: cleaner colors, sharper typography, proper shadows
- Add dark mode with class-based toggle (persisted in localStorage)
- Create ThemeToggle component (sun/moon icon, bottom-right)
- Redesign landing page: centered hero, interactive mockup, 3-step workflow,
  feature grid, target audiences, CTA section with footer
- Redesign auth pages: split-screen layout (indigo left panel + form right)
- Redesign dashboard: compact header, clean stats + tabs
- Redesign PowerPoint page: simpler step-based layout
- Fix all German umlauts (ue→ü, oe→ö, ae→ä) across all files
- Rewrite all UI copy to be more concrete and benefit-oriented

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Apr 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
handout-powerpoint-addin Ready Ready Preview, Comment Apr 12, 2026 1:22am

@coderabbitai

coderabbitai Bot commented Apr 12, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

Redesign of UI/layout and global theming with CSS variable-driven tokens and class-based dark mode; updated fonts and a ThemeToggle; many pages/components restyled and copy adjusted; PowerPoint bridge polling made adaptive to active view (edit vs read) with view-change handling.

Changes

Cohort / File(s) Summary
Authentication Pages
apps/web/src/app/auth/login/page.tsx, apps/web/src/app/auth/register/page.tsx
Replaced centered grid/hero card layouts with two-column split (left info panel hidden on small screens, right form); updated German copy and CTAs; adjusted error/loading text (em dash, ellipsis) and added dark-mode alert classes.
Design System & Global CSS
apps/web/src/app/globals.css, apps/web/tailwind.config.ts
Introduced token-based palette (--paper,--ink,--line, etc.), added .dark overrides, removed decorative body overlays, refactored component styles to use tokens, enabled class-based dark mode, updated animations and font stacks.
Root Layout & Theme Toggle
apps/web/src/app/layout.tsx, apps/web/src/components/ThemeToggle.tsx
Swapped fonts to Space_Grotesk/DM_Sans; added suppressHydrationWarning to <html>; injected script to initialize dark class from localStorage/system preference; added new client ThemeToggle component and rendered it inside provider.
Landing & Public Pages
apps/web/src/app/page.tsx, apps/web/src/app/powerpoint/page.tsx
Rebuilt marketing landing page (nav, hero, workflow, benefit grid, demo creds); replaced PowerPoint install layout with card/grid sections and updated copy/links.
Dashboard & Session UIs
apps/web/src/app/dashboard/page.tsx, apps/web/src/app/dashboard/session/[id]/page.tsx, apps/web/src/app/dashboard/handout/[id]/page.tsx
Restyled layout/components to use theme variables (inline styles) instead of stone-based Tailwind classes; updated German labels and copy; simplified some UI fragments and status computations; adjusted loading/empty-state copy and ellipses.
Handout Reader / Print
apps/web/src/app/dashboard/handout/[id]/print/page.tsx, apps/web/src/app/h/[token]/page.tsx
Replaced Tailwind stone color utilities with CSS variable-based inline styles; changed badge shapes to rounded-lg; adjusted footer tracking/typography and reveal-rule formatting.
Dashboard Components / Modals
apps/web/src/components/dashboard/BlockEditor.tsx, apps/web/src/components/dashboard/QRCodeDialog.tsx, apps/web/src/components/dashboard/SlideControls.tsx, apps/web/src/components/ui/Modal.tsx
Migrated container/background/border styling to rounded-2xl + inline var(--...) styles, added dark-mode variants, simplified text color usage to theme variables, minor text tweaks (ellipsis).
PowerPoint Bridge Logic
apps/web/src/lib/powerpoint/officeBridge.ts
Introduced adaptive polling intervals (POLL_EDIT_MS = 500, POLL_READ_MS = 1000); startPolling now accepts interval; handleActiveViewChanged tolerates optional/normalized activeView and switches polling on view changes; corrected slide-title fallback text to Präsentation.
Miscellaneous UI files
apps/web/src/components/ThemeToggle.tsx, apps/web/src/components/...
Added new ThemeToggle component; various small text/ellipsis and accessibility tweaks across components (aria-labels, button text, dark-mode class additions).

Sequence Diagram(s)

sequenceDiagram
  participant UI as App UI
  participant Bridge as OfficeBridge
  participant Office as PowerPoint (Office.js)

  UI->>Bridge: initOfficeBridge()
  Bridge->>Office: startPolling(intervalMs = POLL_EDIT_MS)
  loop polling
    Bridge->>Office: requestCurrentSlide()
    Office-->>Bridge: currentSlideInfo
    Bridge->>UI: syncCurrentSlide(info)
  end
  Office-->>Bridge: activeViewChanged(activeView)
  Bridge->>Bridge: normalize view -> "edit"/"read"
  Bridge->>Bridge: startPolling(intervalMs = POLL_READ_MS or POLL_EDIT_MS)
  Bridge->>Office: syncCurrentSlide() (on view change)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~65 minutes

Possibly related PRs

Poem

🐰
Hops and pixels, tokens bright and new,
I toggled themes and nudged the hue,
Pages split and handouts hum along,
Polls now listen to edit or song,
A tiny rabbit cheers: design — hop on through!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.17% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Redesign: Complete UI overhaul with dark mode' directly summarizes the main changes: a comprehensive UI redesign with dark mode support, matching the extensive modifications across styling, layout, design tokens, and dark-mode infrastructure.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch redesign/complete-ui-overhaul

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps

greptile-apps Bot commented Apr 12, 2026

Copy link
Copy Markdown

Greptile Summary

This PR delivers a complete UI overhaul for the apps/web Next.js application: a new CSS design-system based on CSS custom properties, class-based dark mode with localStorage persistence and prefers-color-scheme detection, brand-new landing page, redesigned auth/dashboard/session/reader pages, and sweeping German umlaut corrections across all copy.

Key changes:

  • Design system (globals.css): All colours, shadows, and component classes replaced with a clean light/dark variable set under :root and .dark
  • Dark mode (layout.tsx + ThemeToggle.tsx): Inline script eliminates FOUC; toggle button reads/writes localStorage and flips the .dark class on <html>
  • Landing page (page.tsx): Entirely new — hero, interactive mockup, 3-step workflow, feature grid, target-audience cards, CTA with demo credentials, and footer
  • Auth pages: Split-screen layout (indigo panel left, form right); logic unchanged
  • Modal.tsx ⚠️: Uses two CSS variables (--radius-card, --shadow-strong) that are not defined in the new globals.css, causing modals to render without border-radius or box-shadow
  • SlideControls.tsx ⚠️: auto/hybrid sync-mode badge classes still use hardcoded light-mode Tailwind colours without dark: counterparts
  • tailwind.config.ts: colors.accent.DEFAULT is set to emerald green (#10B981), conflicting semantically with the --accent CSS variable which is indigo (#4F46E5)

Confidence Score: 4/5

Safe to merge after fixing the undefined CSS variables in Modal.tsx — one targeted fix remains before all modals render correctly.

The vast majority of changes are clean UI/styling work with no logic regressions. The dark mode implementation is solid (FOUC-prevention script, localStorage persistence, hydration warning suppressed). The one concrete bug — undefined --radius-card and --shadow-strong in Modal.tsx — will visually break every modal dialog (sharp corners, no shadow) but does not affect data integrity or application logic. Fixing it is a two-line change. The remaining P2 items (SlideControls dark mode badge colours, Tailwind colour naming) are cosmetic and can follow as a cleanup.

apps/web/src/components/ui/Modal.tsx needs the two undefined CSS variable references resolved before merge.

Important Files Changed

Filename Overview
apps/web/src/components/ui/Modal.tsx Migrated to CSS-variable–based styling but references two undefined variables (--radius-card, --shadow-strong), causing modals to render without rounded corners or drop shadow.
apps/web/src/app/globals.css Complete design-system overhaul: new light/dark CSS variable sets, simplified component classes, and class-based dark mode. Well structured — but missing --radius-card and --shadow-strong that Modal.tsx expects.
apps/web/src/app/layout.tsx Adds inline script for FOUC-free dark mode initialisation, swaps fonts to Space Grotesk + DM Sans, and mounts ThemeToggle inside ConvexClientProvider — straightforward and correct.
apps/web/src/components/ThemeToggle.tsx New client component that reads/writes localStorage and toggles the .dark class; uses mounted guard to avoid SSR hydration mismatch. Clean implementation.
apps/web/tailwind.config.ts Adds darkMode: "class" and extends colors with primary/accent groups; accent.DEFAULT (#10B981 emerald) conflicts semantically with the --accent CSS variable (indigo #4F46E5), though unused currently.
apps/web/src/components/dashboard/SlideControls.tsx Migrated to CSS-variable styling; auto/hybrid sync-mode badge classes still use hardcoded light-mode Tailwind colors without dark variants, causing visual glitches in dark mode.
apps/web/src/app/page.tsx Complete landing page rewrite with hero, interactive mockup, 3-step workflow, feature grid, target audience section, CTA with demo credentials, and footer. Clean structure using the new CSS variable system.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["layout.tsx — RootLayout"] -->|"Inline script (FOUC prevention)"| B["Check localStorage 'theme'"]
    B -->|"'dark' or prefers-color-scheme:dark"| C["Add .dark to <html>"]
    B -->|"Otherwise"| D["No class (light mode)"]
    A --> E["ConvexClientProvider"]
    E --> F["{children}"]
    E --> G["ThemeToggle (client)"]
    G -->|"onClick"| H["Toggle .dark on <html>"]
    H --> I["localStorage.setItem('theme', ...)"]
    C --> J["globals.css .dark { --paper, --ink, --accent... }"]
    D --> K["globals.css :root { --paper, --ink, --accent... }"]
    J --> L["All components read CSS vars"]
    K --> L
Loading

Fix All in Codex

Reviews (1): Last reviewed commit: "redesign: complete UI overhaul with dark..." | Re-trigger Greptile

Comment thread apps/web/src/components/ui/Modal.tsx
Comment thread apps/web/src/components/dashboard/SlideControls.tsx
Comment thread apps/web/tailwind.config.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

🧹 Nitpick comments (2)
apps/web/src/components/ThemeToggle.tsx (1)

24-28: Expose toggle state with aria-pressed.

This is a toggle button; adding aria-pressed improves assistive-tech state reporting.

♿ Suggested patch
     <button
       onClick={toggle}
       className="theme-toggle"
       aria-label={dark ? "Helles Design aktivieren" : "Dunkles Design aktivieren"}
+      aria-pressed={dark}
     >
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/components/ThemeToggle.tsx` around lines 24 - 28, The
ThemeToggle button currently uses aria-label but doesn't expose its pressed
state; update the button in ThemeToggle (the element with onClick={toggle} using
the dark state) to include aria-pressed={dark} so assistive tech can detect the
toggle state; ensure you reference the existing dark boolean and toggle handler
(onClick={toggle}) when adding aria-pressed to the button element.
apps/web/src/app/globals.css (1)

263-264: Add a reduced-motion fallback for animation utilities.

These utilities currently animate unconditionally. A prefers-reduced-motion override will improve accessibility.

Proposed change
`@layer` utilities {
  .text-balance { text-wrap: balance; }
  .animate-fade-up { animation: fade-up 600ms ease-out both; }
  .animate-soft-float { animation: soft-float 6s ease-in-out infinite; }
}
+
+@media (prefers-reduced-motion: reduce) {
+  .animate-fade-up,
+  .animate-soft-float {
+    animation: none !important;
+  }
+}

Also applies to: 311-314

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/app/globals.css` around lines 263 - 264, The animation utility
classes (.animate-fade-up and .animate-soft-float, plus the other animation
utilities around the block at lines ~311-314) currently run unconditionally; add
a prefers-reduced-motion media-query override so animations are disabled for
users who prefer reduced motion. Concretely, wrap or override these classes
inside an `@media` (prefers-reduced-motion: reduce) { ... } block to set
animation: none (or animation-duration: 0ms / animation-name: none) for
.animate-fade-up, .animate-soft-float and the other animation utility class
names to provide an accessible reduced-motion fallback.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/web/src/app/dashboard/handout/`[id]/page.tsx:
- Around line 94-107: The icon-only move buttons that call
onMoveBlock(block._id, "up") and onMoveBlock(block._id, "down") lack accessible
names; add aria-label attributes to both buttons (e.g., aria-label="Move block
up" and aria-label="Move block down") alongside the existing title so screen
readers announce the purpose while leaving disabled logic and onClick handlers
unchanged.

In `@apps/web/src/app/dashboard/page.tsx`:
- Line 211: The external link anchor that renders Handout (the <a> element using
href={`/h/${s.publicToken}`} with target="_blank` and className="btn-secondary")
is missing a rel attribute; update that anchor to include rel="noopener
noreferrer" to prevent the opened page from accessing window.opener and mitigate
reverse tabnabbing.

In `@apps/web/src/app/globals.css`:
- Around line 197-199: Replace the hard-coded rgba in the CSS rule that
currently uses background: var(--warning-soft); border: 1px solid
rgba(217,119,6,0.2); color: var(--warning); with a semantic CSS variable (e.g.
--warning-soft-border or --soft-note-border) so the border adapts in dark mode;
add the new variable to the token definitions alongside --warning-soft and
--warning (with an appropriate dark-mode value) and update the border
declaration to use var(--warning-soft-border, rgba(217,119,6,0.2)) for
backwards-compatible fallback.
- Line 122: The CSS file has stylelint "declaration-empty-line-before"
violations for several property declarations (e.g., the line with "background:
var(--paper-strong);"); update the spacing to match the project's
declaration-empty-line-before rule by adding or removing the single blank line
immediately before each listed declaration so they conform to the configured
style (apply the same change for the other reported lines). Locate occurrences
by searching for the property tokens like "background:" (and similar
declarations on the referenced lines) in globals.css and normalize the
blank-line presence, or run stylelint --fix to automatically apply the correct
spacing.

In `@apps/web/src/components/dashboard/BlockEditor.tsx`:
- Line 233: The error alert in BlockEditor.tsx uses only light-theme classes on
the div (currently "rounded-2xl border border-red-300/40 bg-red-50/90 px-4 py-3
text-sm text-red-700"); update the class string to include dark-mode variants
(e.g., dark:border-red-600/40, dark:bg-red-900/60 or similar darker bg, and
dark:text-red-200) so the border, background and text colors render correctly in
dark mode while preserving the existing light-mode classes.

In `@apps/web/src/components/ui/Modal.tsx`:
- Around line 39-44: The modal container's inline style in the Modal component
uses boxShadow: "var(--shadow-strong)" which may be undefined; update the style
to use a guaranteed token (e.g., replace "var(--shadow-strong)" with
"var(--shadow-lg)") or add a global CSS variable definition for --shadow-strong;
locate the style block in Modal (the object containing borderRadius, border,
background, boxShadow) and either swap the token to --shadow-lg or define
--shadow-strong in your global CSS variables to ensure the modal always has a
shadow.
- Around line 53-57: The close icon button in Modal.tsx (the button with
onClick={onClose}) is missing an accessible name and button type; update that
button element to include type="button" and an appropriate aria-label (e.g.,
aria-label="Close" or a localized string) so screen readers can identify it,
keeping the onClick={onClose} handler intact.

In `@apps/web/src/lib/powerpoint/officeBridge.ts`:
- Around line 108-123: When view becomes "read" preserve the last known slide
and prevent syncCurrentSlide from emitting editor selection by setting a
read-mode guard instead of only slowing polling: in handleActiveViewChanged set
lastReportedSlide = lastReportedSlide ?? (current cached slide) and set a flag
like isReadMode = true, call startPolling(POLL_READ_MS) but do NOT call
syncCurrentSlide; update syncCurrentSlide (and any emission path) to check
isReadMode and skip emitting or updating lastReportedSlide while true; when
leaving read mode (in the else branch) clear isReadMode = false, reset
lastReportedSlide if needed, resume startPolling(POLL_EDIT_MS) and then call
void syncCurrentSlide() as now to re-sync; apply the same change to the other
matching branch around lines 126-133.
- Around line 86-89: The addHandlerAsync call for
Office.EventType.ActiveViewChanged (Office.context.document.addHandlerAsync) is
missing the AsyncResult callback so registration failures are silent; update the
call that registers handleActiveViewChanged to include the completion callback,
inspect the AsyncResult (check status === Office.AsyncResultStatus.Succeeded or
error) and log/handle errors (and trigger the presentation-mode cadence switch
on success), ensuring you reference Office.context.document.addHandlerAsync,
Office.EventType.ActiveViewChanged, and handleActiveViewChanged when locating
the code.

---

Nitpick comments:
In `@apps/web/src/app/globals.css`:
- Around line 263-264: The animation utility classes (.animate-fade-up and
.animate-soft-float, plus the other animation utilities around the block at
lines ~311-314) currently run unconditionally; add a prefers-reduced-motion
media-query override so animations are disabled for users who prefer reduced
motion. Concretely, wrap or override these classes inside an `@media`
(prefers-reduced-motion: reduce) { ... } block to set animation: none (or
animation-duration: 0ms / animation-name: none) for .animate-fade-up,
.animate-soft-float and the other animation utility class names to provide an
accessible reduced-motion fallback.

In `@apps/web/src/components/ThemeToggle.tsx`:
- Around line 24-28: The ThemeToggle button currently uses aria-label but
doesn't expose its pressed state; update the button in ThemeToggle (the element
with onClick={toggle} using the dark state) to include aria-pressed={dark} so
assistive tech can detect the toggle state; ensure you reference the existing
dark boolean and toggle handler (onClick={toggle}) when adding aria-pressed to
the button element.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 25a61180-0360-45c2-bb49-690ecd711ee6

📥 Commits

Reviewing files that changed from the base of the PR and between 85f0f46 and 732a73b.

📒 Files selected for processing (18)
  • apps/web/src/app/auth/login/page.tsx
  • apps/web/src/app/auth/register/page.tsx
  • apps/web/src/app/dashboard/handout/[id]/page.tsx
  • apps/web/src/app/dashboard/handout/[id]/print/page.tsx
  • apps/web/src/app/dashboard/page.tsx
  • apps/web/src/app/dashboard/session/[id]/page.tsx
  • apps/web/src/app/globals.css
  • apps/web/src/app/h/[token]/page.tsx
  • apps/web/src/app/layout.tsx
  • apps/web/src/app/page.tsx
  • apps/web/src/app/powerpoint/page.tsx
  • apps/web/src/components/ThemeToggle.tsx
  • apps/web/src/components/dashboard/BlockEditor.tsx
  • apps/web/src/components/dashboard/QRCodeDialog.tsx
  • apps/web/src/components/dashboard/SlideControls.tsx
  • apps/web/src/components/ui/Modal.tsx
  • apps/web/src/lib/powerpoint/officeBridge.ts
  • apps/web/tailwind.config.ts

Comment thread apps/web/src/app/dashboard/handout/[id]/page.tsx
Comment thread apps/web/src/app/dashboard/page.tsx Outdated
Comment thread apps/web/src/app/globals.css
Comment thread apps/web/src/app/globals.css
Comment thread apps/web/src/components/dashboard/BlockEditor.tsx Outdated
Comment thread apps/web/src/components/ui/Modal.tsx
Comment thread apps/web/src/components/ui/Modal.tsx
Comment thread apps/web/src/lib/powerpoint/officeBridge.ts
Comment thread apps/web/src/lib/powerpoint/officeBridge.ts
EinfachMxrc and others added 2 commits April 12, 2026 03:21
- Modal: replace undefined --radius-card/--shadow-strong with 0.75rem/--shadow-lg
- SlideControls: add dark mode variants to syncModeColor badges
- tailwind.config: rename accent → emerald to avoid CSS variable conflict
- handout/[id]: add aria-label to icon-only move buttons
- dashboard: add rel="noopener noreferrer" to target="_blank" link
- globals.css: tokenize soft-note border color with --warning-border for dark mode
- officeBridge: resolve merge conflict combining poll frequency + view tracking

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@EinfachMxrc EinfachMxrc merged commit 33d280d into main Apr 12, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant