refactor: split admin.css monolith, standardize CSS architecture

- Split admin.css (3228 lines) into 12 focused files: variables, base,
  forms, buttons, layout, components, tables, skeleton, datepicker,
  filemanager, pagination, responsive
- Extracted shared styles from offers.css and dashboard.css into
  components.css and forms.css (offers-* → admin-* prefix)
- Standardized naming: dash-kpi-* → admin-kpi-*, session-* → dash-session-*,
  rich-editor → admin-rich-editor
- Deleted duplicate offers-tabs (using admin-tabs everywhere)
- Deduplicated DatePicker and FileManager CSS (~360 lines removed)
- Added 16 utility classes to base.css (font sizes, widths, gaps, margins)
- Deleted empty admin.css

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
BOHA
2026-03-27 13:00:45 +01:00
parent cde560a2c3
commit e0ea997c24
29 changed files with 3542 additions and 3856 deletions

View File

@@ -161,7 +161,7 @@ export default function RichEditor({
return (
<div
className="rich-editor"
className="admin-rich-editor"
style={{ "--re-min-height": minHeight } as React.CSSProperties}
>
<ReactQuill

View File

@@ -109,10 +109,10 @@ function buildInvoiceKpi(invoices: InvoicesData): KpiCard {
}
const KPI_CLASS_MAP: Record<number, string> = {
4: "dash-kpi-4",
3: "dash-kpi-3",
2: "dash-kpi-2",
1: "dash-kpi-1",
4: "admin-kpi-4",
3: "admin-kpi-3",
2: "admin-kpi-2",
1: "admin-kpi-1",
};
export default function DashKpiCards({ dashData }: DashKpiCardsProps) {
@@ -121,11 +121,11 @@ export default function DashKpiCards({ dashData }: DashKpiCardsProps) {
return null;
}
const kpiClass = KPI_CLASS_MAP[Math.min(kpiCards.length, 4)] || "dash-kpi-4";
const kpiClass = KPI_CLASS_MAP[Math.min(kpiCards.length, 4)] || "admin-kpi-4";
return (
<motion.div
className={`dash-kpi-grid ${kpiClass}`}
className={`admin-kpi-grid ${kpiClass}`}
initial={{ opacity: 0, y: 12 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.25, delay: 0.06 }}

View File

@@ -218,17 +218,17 @@ export default function DashSessions() {
</div>
)}
{!sessionsLoading && sessions.length > 0 && (
<div className="sessions-list">
<div className="dash-sessions-list">
{sessions.map((session) => (
<div
key={session.id}
className={`session-item ${session.is_current ? "session-item-current" : ""}`}
className={`dash-session-item ${session.is_current ? "dash-session-item-current" : ""}`}
>
<div className="session-icon">
<div className="dash-session-icon">
{getDeviceIcon(session.device_info?.icon)}
</div>
<div className="session-info">
<div className="session-device">
<div className="dash-session-info">
<div className="dash-session-device">
{session.device_info?.browser} na{" "}
{session.device_info?.os}
{session.is_current && (
@@ -240,13 +240,13 @@ export default function DashSessions() {
</span>
)}
</div>
<div className="session-meta">
<div className="dash-session-meta">
<span>{session.ip_address}</span>
<span className="session-meta-separator">|</span>
<span className="dash-session-meta-separator">|</span>
<span>{formatSessionDate(session.created_at)}</span>
</div>
</div>
<div className="session-actions">
<div className="dash-session-actions">
{!session.is_current && (
<button
onClick={() =>