diff --git a/app/admin/layout.tsx b/app/admin/layout.tsx index bed7d26..e0bc514 100644 --- a/app/admin/layout.tsx +++ b/app/admin/layout.tsx @@ -18,7 +18,7 @@ export default function AdminLayout({ children }: { children: ReactNode }) { {/* 오른쪽 메인 영역 */} -
+
{/* 메인 컨텐츠 영역 */}
{children} diff --git a/app/globals.css b/app/globals.css index dc2aea1..5d62bf9 100644 --- a/app/globals.css +++ b/app/globals.css @@ -37,6 +37,19 @@ --sidebar-accent-foreground: oklch(0.205 0 0); --sidebar-border: oklch(0.922 0 0); --sidebar-ring: oklch(0.708 0 0); + /* App-wide UI tokens (additive — does not override shadcn primary) */ + --app-surface: oklch(0.96 0 0); + --app-surface-muted: oklch(0.985 0 0); + --app-border: oklch(0.922 0 0); + --app-accent: oklch(0.205 0 0); + --app-accent-muted: oklch(0.94 0 0); + /* Subtle blue-gray accents (not primary black) */ + --app-accent-soft: oklch(0.93 0.02 245); + --app-accent-soft-foreground: oklch(0.42 0.045 245); + --app-focus: oklch(0.48 0.06 245); + --app-ring: oklch(0.72 0.03 245); + --app-spinner-track: oklch(0.78 0.018 250); + --app-sidebar-active: oklch(0.92 0.028 245); } .dark { @@ -72,6 +85,17 @@ --sidebar-accent-foreground: oklch(0.985 0 0); --sidebar-border: oklch(0.269 0 0); --sidebar-ring: oklch(0.439 0 0); + --app-surface: oklch(0.18 0 0); + --app-surface-muted: oklch(0.16 0 0); + --app-border: oklch(0.32 0 0); + --app-accent: oklch(0.985 0 0); + --app-accent-muted: oklch(0.28 0 0); + --app-accent-soft: oklch(0.28 0.025 245); + --app-accent-soft-foreground: oklch(0.78 0.04 245); + --app-focus: oklch(0.72 0.05 245); + --app-ring: oklch(0.45 0.04 245); + --app-spinner-track: oklch(0.38 0.02 250); + --app-sidebar-active: oklch(0.3 0.03 245); } @theme inline { @@ -113,6 +137,17 @@ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); + --color-app-surface: var(--app-surface); + --color-app-surface-muted: var(--app-surface-muted); + --color-app-border: var(--app-border); + --color-app-accent: var(--app-accent); + --color-app-accent-muted: var(--app-accent-muted); + --color-app-accent-soft: var(--app-accent-soft); + --color-app-accent-soft-foreground: var(--app-accent-soft-foreground); + --color-app-focus: var(--app-focus); + --color-app-ring: var(--app-ring); + --color-app-spinner-track: var(--app-spinner-track); + --color-app-sidebar-active: var(--app-sidebar-active); } @layer base { diff --git a/app/master/layout.tsx b/app/master/layout.tsx index da6ac73..0c8fea8 100644 --- a/app/master/layout.tsx +++ b/app/master/layout.tsx @@ -36,10 +36,7 @@ export default function MasterLayout({
-
+
{children}
diff --git a/app/test/page.tsx b/app/test/page.tsx index 40e12e4..2206df3 100644 --- a/app/test/page.tsx +++ b/app/test/page.tsx @@ -100,7 +100,7 @@ export default function TestPage() { if (isRestoring || !examId || !participantId) { return ( -
+

{restoreError ?? "시험 세션을 복구하는 중입니다..."} diff --git a/app/waiting/page.tsx b/app/waiting/page.tsx index ad41253..f76cae3 100644 --- a/app/waiting/page.tsx +++ b/app/waiting/page.tsx @@ -69,7 +69,7 @@ export default function WaitingPage() { }, [examId, router]); return ( -

+

Vibe Coding Evaluator

@@ -77,13 +77,13 @@ export default function WaitingPage() { {/* 🔥 여기 flex-1 추가 */}

시험 대기 중입니다.

-

+

관리자가 시험을 시작하면 자동으로 진행됩니다.

{errorMessage && ( diff --git a/components/account-delete-success-dialog.tsx b/components/account-delete-success-dialog.tsx index 15eb017..49d9d56 100644 --- a/components/account-delete-success-dialog.tsx +++ b/components/account-delete-success-dialog.tsx @@ -43,7 +43,7 @@ export function AccountDeleteSuccessDialog({ {description} - diff --git a/components/admin-accounts-content.tsx b/components/admin-accounts-content.tsx index 4e5b8b2..18aa10f 100644 --- a/components/admin-accounts-content.tsx +++ b/components/admin-accounts-content.tsx @@ -377,18 +377,28 @@ export function AdminAccountsContent() { } return ( -
+
+ + 발급 + + 관리자 번호 발급 + + } /> -
+
{/* Admin Users Card */} - + 관리자 목록 - {listError && !isLoading && ( @@ -762,12 +759,7 @@ export function AdminAccountsContent() { {!generatedKey && ( @@ -891,13 +883,7 @@ export function AdminAccountsContent() { @@ -971,12 +957,7 @@ export function AdminAccountsContent() { diff --git a/components/admin-page-header.tsx b/components/admin-page-header.tsx index 395253e..9fae7b4 100644 --- a/components/admin-page-header.tsx +++ b/components/admin-page-header.tsx @@ -8,10 +8,10 @@ export type AdminPageHeaderProps = { export function AdminPageHeader({ title, description, actions }: AdminPageHeaderProps) { return ( -
-
-

{title}

- {description ?

{description}

: null} +
+
+

{title}

+ {description ?

{description}

: null}
{actions ?
{actions}
: null}
diff --git a/components/admin-sidebar.tsx b/components/admin-sidebar.tsx index a85e0cd..00697dd 100644 --- a/components/admin-sidebar.tsx +++ b/components/admin-sidebar.tsx @@ -60,7 +60,9 @@ function MenuItem({ @@ -129,32 +131,32 @@ export function AdminSidebar() { } return ( -