feat(theme): add OpenChamber hybrid theme and make it the default
- Add OpenChamber brand theme (dark+light): Vitesse syntax over OpenCode-deep neutrals with Flexoki accents, harmonized in OKLCH - Add scripts/harmonize-theme.mjs: align accent saturation/lightness and boost syntax chroma via OKLCH - Set default theme to OpenChamber (was Flexoki) - Rename fields-of-the-shire off the openchamber-* id; keep it as a normal preset - Remove OpenCode and OC-2 ports and all disabled theme JSON definitions - Make panel/header/sidebar borders opaque and theme-driven; global default border now uses --border instead of hardcoded rgba
This commit is contained in:
@@ -367,7 +367,7 @@ const EditorTreeColumn: React.FC<{ visible: boolean }> = ({ visible }) => {
|
||||
<div
|
||||
ref={columnRef}
|
||||
className={cn(
|
||||
'relative h-full flex-shrink-0 overflow-hidden border-l border-border/40 bg-background will-change-[width] motion-reduce:transition-none',
|
||||
'relative h-full flex-shrink-0 overflow-hidden border-l border-border bg-background will-change-[width] motion-reduce:transition-none',
|
||||
!visible && 'border-l-0',
|
||||
)}
|
||||
style={{
|
||||
@@ -1248,7 +1248,7 @@ const PreviewPane: React.FC<PreviewPaneProps> = ({ rawUrl, onNavigate }) => {
|
||||
|
||||
return (
|
||||
<div className="absolute inset-0 flex flex-col">
|
||||
<div className="flex items-center gap-1 border-b border-border/40 bg-[var(--surface-background)] px-2 py-1">
|
||||
<div className="flex items-center gap-1 border-b border-border bg-[var(--surface-background)] px-2 py-1">
|
||||
<div className="min-w-0 flex-1 truncate typography-micro text-muted-foreground" title={headerSrc || rawUrl}>
|
||||
{headerSrc || rawUrl || t('contextPanel.preview.empty')}
|
||||
</div>
|
||||
@@ -1877,7 +1877,7 @@ const IframeBrowserPane: React.FC<DesktopBrowserPaneProps> = ({ initialUrl, dire
|
||||
|
||||
return (
|
||||
<div className="absolute inset-0 flex flex-col bg-background">
|
||||
<div className="flex items-center gap-1 border-b border-border/40 bg-[var(--surface-background)] px-2 py-1">
|
||||
<div className="flex items-center gap-1 border-b border-border bg-[var(--surface-background)] px-2 py-1">
|
||||
<Button type="button" variant="ghost" size="sm" className="h-7 w-7 p-0" disabled={historyIndex <= 0} onClick={() => goToHistory(historyIndex - 1)}>
|
||||
<Icon name="arrow-left" className="h-3.5 w-3.5" />
|
||||
</Button>
|
||||
@@ -2167,7 +2167,7 @@ const DesktopBrowserPane: React.FC<DesktopBrowserPaneProps> = ({ initialUrl, dir
|
||||
|
||||
return (
|
||||
<div className="absolute inset-0 flex flex-col bg-background">
|
||||
<div className="flex items-center gap-1 border-b border-border/40 bg-[var(--surface-background)] px-2 py-1">
|
||||
<div className="flex items-center gap-1 border-b border-border bg-[var(--surface-background)] px-2 py-1">
|
||||
<Button type="button" variant="ghost" size="sm" className="h-7 w-7 p-0" onClick={() => { try { webviewRef.current?.goBack?.(); } catch { /* webview not ready */ } }}>
|
||||
<Icon name="arrow-left" className="h-3.5 w-3.5" />
|
||||
</Button>
|
||||
@@ -2730,7 +2730,7 @@ export const ContextPanel: React.FC = () => {
|
||||
const isFileTabActive = activeTab?.mode === 'file';
|
||||
|
||||
const header = (
|
||||
<header className="flex h-10 items-stretch border-b border-border/40">
|
||||
<header className="flex h-10 items-stretch border-b border-border">
|
||||
{isMultiInstanceMode ? (
|
||||
<SortableTabsStrip
|
||||
items={tabItems}
|
||||
@@ -2854,11 +2854,11 @@ export const ContextPanel: React.FC = () => {
|
||||
content box only while collapsed, shifting the header controls by
|
||||
1px between the collapsed and expanded states. */}
|
||||
{isOpen && !isExpanded && (
|
||||
<div aria-hidden="true" className="absolute left-0 top-0 z-40 h-full w-px bg-border/40" />
|
||||
<div aria-hidden="true" className="absolute left-0 top-0 z-40 h-full w-px bg-border" />
|
||||
)}
|
||||
{/* Divider between the panel and the icon rail on its right. */}
|
||||
{isOpen && (
|
||||
<div aria-hidden="true" className="absolute right-0 top-0 z-40 h-full w-px bg-border/40" />
|
||||
<div aria-hidden="true" className="absolute right-0 top-0 z-40 h-full w-px bg-border" />
|
||||
)}
|
||||
{!isExpanded && (
|
||||
<div
|
||||
|
||||
@@ -414,7 +414,7 @@ export const MainLayout: React.FC = () => {
|
||||
<Sidebar
|
||||
isOpen={isSidebarOpen}
|
||||
isMobile={isMobile}
|
||||
className="border-border/50"
|
||||
className="border-border"
|
||||
topBar={<SidebarTopBar />}
|
||||
>
|
||||
<SessionSidebar isVisible={isSidebarOpen} />
|
||||
@@ -422,7 +422,7 @@ export const MainLayout: React.FC = () => {
|
||||
<div className="relative flex flex-1 min-w-0 flex-col overflow-hidden bg-background" data-page-scroll-lock="true">
|
||||
<Header />
|
||||
<div className="relative flex flex-1 min-h-0 overflow-hidden bg-background" data-page-scroll-lock="true">
|
||||
<div className="relative flex flex-1 min-w-0 flex-col overflow-hidden border-t border-border/50 bg-background" data-page-scroll-lock="true">
|
||||
<div className="relative flex flex-1 min-w-0 flex-col overflow-hidden border-t border-border bg-background" data-page-scroll-lock="true">
|
||||
<div className="flex flex-1 min-h-0 overflow-hidden" data-page-scroll-lock="true">
|
||||
<div className="relative flex flex-1 min-h-0 min-w-0 overflow-hidden" data-page-scroll-lock="true">
|
||||
<main className="flex-1 overflow-hidden bg-background relative" data-page-scroll-lock="true">
|
||||
@@ -456,7 +456,7 @@ export const MainLayout: React.FC = () => {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="border-t border-border/50" data-page-scroll-lock="true">
|
||||
<div className="border-t border-border" data-page-scroll-lock="true">
|
||||
<ErrorBoundary><ContextPanelRail /></ErrorBoundary>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -126,7 +126,7 @@ export const Sidebar: React.FC<SidebarProps> = ({ isOpen, isMobile, children, cl
|
||||
<aside
|
||||
ref={sidebarRef}
|
||||
className={cn(
|
||||
'relative flex h-full overflow-hidden border-r border-border/40 will-change-[width] motion-reduce:transition-none',
|
||||
'relative flex h-full overflow-hidden border-r border-border will-change-[width] motion-reduce:transition-none',
|
||||
'bg-sidebar oc-vibrancy-surface',
|
||||
isOpen && 'shadow-[inset_-2px_0_10px_-2px_rgb(0_0_0_/_0.06)]',
|
||||
!isOpen && 'border-r-0',
|
||||
|
||||
Reference in New Issue
Block a user