diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index e93ff96e..a1d94030 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -367,7 +367,13 @@ button:disabled { cursor: default; opacity: .45; } .chat-header span { color: var(--color-ink-secondary); margin-top: var(--space-1); font-size: 12px; } .status { display: inline-block; margin: 0 6px 1px 0; border-radius: 50%; background: var(--color-success); width: 7px; height: 7px; margin-right: var(--space-2); } .status-loading { background: var(--color-action); } -.credit-button { min-height: 44px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 0 11px; cursor: pointer; font-size: 13px; font-variant-numeric: tabular-nums; transition: background-color 120ms ease-out, transform 120ms ease-out; min-width: 64px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-canvas-soft); color: var(--color-ink-secondary); font-weight: 500; } +.chat-header > .chat-header-actions { min-width: auto; display: flex; flex: 0 0 auto; align-items: center; gap: var(--space-2); } +.admin-button, .credit-button { min-height: 44px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-canvas-soft); color: var(--color-ink-secondary); transition: background-color 120ms ease-out, border-color 120ms ease-out, color 120ms ease-out, transform 120ms ease-out; } +.admin-button { width: 44px; flex: 0 0 44px; } +.admin-button svg { width: 18px; height: 18px; } +.admin-button:hover, .credit-button:hover { border-color: color-mix(in srgb, var(--color-action) 35%, var(--color-border)); background: var(--color-action-soft); color: var(--color-action-hover); } +.admin-button:active, .credit-button:active { transform: translateY(1px); } +.credit-button { gap: 6px; min-width: 64px; padding: 0 11px; cursor: pointer; font-size: 13px; font-variant-numeric: tabular-nums; font-weight: 500; } .conversation { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; padding-bottom: var(--composer-reserve); background: var(--color-canvas); } .conversation.is-empty { display: grid; place-items: center; padding: var(--space-8); } diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 3ce7621f..ec93444e 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -2,7 +2,7 @@ import Link from "next/link"; import dynamic from "next/dynamic"; -import { ArrowUp, ArrowUpRight, Sparkles, Square, X } from "lucide-react"; +import { ArrowUp, ArrowUpRight, ShieldCheck, Sparkles, Square, X } from "lucide-react"; import { useGSAP } from "@gsap/react"; import { gsap } from "gsap"; import { useEffect, useRef, useState } from "react"; @@ -2875,10 +2875,17 @@ export default function Home() { ? "正在校正出生时间" : personalChartAvailable ? "基于星盘证据回答" : "回答一般占星知识"} - +
+ {account.isAdmin && account.adminUrl ? ( + +
{!rectificationSurfaceOpen && ( diff --git a/frontend/src/components/app-sidebar.tsx b/frontend/src/components/app-sidebar.tsx index 974f3d8b..4de7e36e 100644 --- a/frontend/src/components/app-sidebar.tsx +++ b/frontend/src/components/app-sidebar.tsx @@ -1,11 +1,9 @@ "use client"; import { Popover } from "@base-ui/react/popover"; -import Link from "next/link"; import { ChevronRight, Gift, - KeyRound, LogOut, MessageSquareText, Plus, @@ -37,8 +35,6 @@ export type SidebarAccount = { name: string; email: string; credits: number; - isAdmin: boolean; - adminUrl: string | null; initial: string; }; @@ -215,9 +211,6 @@ export function AppSidebar({ - {account.isAdmin && account.adminUrl && onAccountMenuOpenChange(false)}> -