Files
leaudit-platform-frontend/app/styles/main.css
T
2025-11-18 11:06:24 +08:00

367 lines
8.0 KiB
CSS

/**
* 主样式文件
* 包含应用所有样式
*/
/* 导入组件样式 */
@import './components/badge.css';
@import './components/modal.css';
@import './components/button.css';
@import './components/card.css';
@import './components/form.css';
@import './components/navigation.css';
@import './components/table.css';
@import './components/pagination.css';
@import './components/search-box.css';
@import './components/filter-panel.css';
@import './components/file-icon.css';
@import './components/status-badge.css';
@import './components/file-type-tag.css';
@import './components/status-dot.css';
@import './components/tag.css';
@import './components/file-progress.css';
@import './components/processing-steps.css';
@import './components/date-range-picker.css';
@import './components/upload-area.css';
@import './components/file-tag.css';
@import './components/message-modal.css';
@import './components/toast.css';
@import './components/TooltipStyles.css';
@import './components/document-version.css';
/* @import './components/modal.css'; */
/* 导入页面特定样式 */
@import './pages/contract-template.css';
/* Tailwind 基础指令 */
@tailwind base;
@tailwind components;
@tailwind utilities;
/* 全局变量和基础样式 */
@layer base {
:root {
/* 主题颜色变量 */
--color-primary: #00684a;
--color-primary-hover: #005a3f;
--color-primary-light: rgba(0, 104, 74, 0.1);
/* 成功、警告、错误颜色 */
--color-success: #52c41a;
--color-warning: #faad14;
--color-error: #f5222d;
/* 中性色 */
--color-gray-50: #f8f9fa;
--color-gray-100: #f1f3f5;
--color-gray-200: #e9ecef;
--color-gray-300: #dee2e6;
--color-gray-400: #ced4da;
--color-gray-500: #adb5bd;
--color-gray-600: #868e96;
--color-gray-700: #495057;
--color-gray-800: #343a40;
--color-gray-900: #212529;
}
/* 基本元素样式 */
html, body {
@apply text-gray-800 antialiased;
font-smooth: always;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
scroll-behavior: smooth;
}
/* 文字选择颜色 */
::selection {
@apply bg-[rgba(0,104,74,0.2)] text-[#00684a];
}
/* 滚动条美化 */
::-webkit-scrollbar {
@apply w-2 h-2;
}
::-webkit-scrollbar-track {
@apply bg-gray-100;
}
::-webkit-scrollbar-thumb {
@apply bg-gray-300 rounded-full hover:bg-gray-400;
}
/* 链接样式 */
a {
@apply text-[#00684a] hover:text-[#005a3f] transition-colors duration-200;
}
}
/* 组件相关样式 */
@layer components {
/* 文本颜色工具类 */
.text-primary {
@apply !text-[--color-primary];
}
.text-error {
@apply !text-[--color-error];
}
.bg-primary {
@apply bg-[#00684a];
}
.transition-all-ease {
@apply transition-all duration-200 ease-in-out;
}
/* === 布局组件 === */
.layout-container {
@apply flex min-h-screen bg-gray-50;
}
/* 用户资料 */
.user-profile {
@apply p-4 border-b border-gray-100 flex items-center;
}
.avatar {
@apply w-10 h-10 rounded-full bg-primary text-white flex items-center justify-center;
}
/* === 侧边栏 === */
.sidebar {
@apply w-[240px] h-screen bg-white border-r border-gray-100 flex flex-col
transition-all duration-300 fixed left-0 top-0 z-[100] overflow-y-auto
shadow-[0_0_15px_rgba(0,0,0,0.05)];
}
/* 侧边栏滚动区域样式 */
.sidebar-scroll-area {
}
/* 滚动条样式 - 与背景色一致 */
.sidebar-scroll-area::-webkit-scrollbar {
width: 8px;
}
.sidebar-scroll-area::-webkit-scrollbar-track {
@apply bg-white;
}
.sidebar-scroll-area::-webkit-scrollbar-thumb {
@apply bg-gray-400 rounded;
}
.sidebar-scroll-area::-webkit-scrollbar-thumb:hover {
@apply bg-gray-500;
}
.sidebar.collapsed {
@apply w-20;
}
/* 移动端侧边栏遮罩层 */
.sidebar-overlay {
@apply fixed inset-0 bg-black bg-opacity-50 z-[99];
animation: fadeIn 0.3s ease-in-out;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* 移动端侧边栏样式 */
.sidebar-mobile {
@apply shadow-[0_0_20px_rgba(0,0,0,0.15)];
}
.sidebar-mobile.collapsed {
transform: translateX(-100%);
}
.sidebar-menu {
@apply flex-1 overflow-y-auto py-4 px-3;
}
.sidebar-menu-item {
@apply flex items-center py-3 px-4 text-gray-800 no-underline rounded-md
cursor-pointer transition-all duration-200 mb-1 relative
hover:bg-[rgba(0,104,74,0.05)];
/* 确保点击事件可以正常工作 */
pointer-events: auto;
z-index: 10;
}
.sidebar-menu-item i {
@apply text-base w-6 text-center;
}
.sidebar-menu-text {
@apply ml-2.5 transition-opacity duration-200;
}
.sidebar.collapsed .sidebar-menu-text {
@apply opacity-0 invisible;
}
.sidebar-menu-item.active {
@apply bg-[rgba(0,104,74,0.1)] text-[#00684A] font-medium;
}
.submenu-container {
@apply mt-1 mb-2 space-y-1 overflow-hidden border-l border-gray-100 ml-4 pl-3 relative;
/* 确保子菜单在父菜单之上 */
z-index: 5;
}
.sidebar.collapsed .submenu-container {
@apply border-l-0 pl-0;
}
.submenu-container .sidebar-menu-item {
@apply py-2 pl-2 text-sm;
}
.sidebar-menu-item:hover {
@apply bg-[rgba(0,104,74,0.05)];
}
.sidebar-toggle {
@apply bg-transparent border-none text-xl text-gray-500 cursor-pointer p-1
rounded transition-all duration-200;
}
.sidebar-toggle:hover {
@apply bg-gray-100;
}
/* === 主内容区域 === */
.main-content {
@apply ml-[240px] flex-1 transition-all duration-300 flex flex-col;
}
.main-content.sidebar-collapsed {
@apply ml-20;
}
/* 应用模块选择器 */
.app-module-selector {
@apply bg-white shadow-sm;
}
.app-module-btn {
@apply transition-all duration-200 text-gray-700 hover:bg-gray-50 font-medium;
}
.app-module-btn.active {
@apply bg-green-50 text-green-700 border border-green-200;
}
/* 内容容器 */
.content-container {
@apply p-6 bg-gray-50 flex-1 overflow-auto;
}
/* === 面包屑导航 === */
.breadcrumb {
@apply flex items-center text-sm text-gray-500 mb-4;
}
.breadcrumb-item {
@apply flex items-center;
}
.breadcrumb-item:not(:last-child)::after {
content: "/";
@apply mx-2;
}
.breadcrumb-item:last-child {
@apply text-gray-700 font-medium;
}
/* === UI组件 === */
/* 卡片组件 */
.card {
@apply bg-white rounded-lg shadow-sm border border-gray-200 p-4;
}
/* === 响应式调整 === */
@screen sm {
.content-container {
@apply p-6;
}
}
/* 移动端响应式样式 (768px以下) */
@media (max-width: 768px) {
/* 移动端主内容区域无左边距 */
.main-content {
@apply ml-0;
}
.main-content.sidebar-collapsed {
@apply ml-0;
}
/* 移动端侧边栏默认隐藏 */
.sidebar {
@apply w-[280px];
}
/* 移动端侧边栏折叠时完全隐藏 */
.sidebar.collapsed {
@apply w-0;
}
}
@screen md {
.sidebar-toggle {
@apply block;
}
}
/* === 暗色模式 === */
.dark .layout-container {
@apply bg-gray-900;
}
.dark .content-container {
@apply bg-gray-900 text-gray-200;
}
}
/* RemixIcon 图标保护规则 - 防止被样式隔离覆盖 */
[class^="ri-"]:before,
[class*=" ri-"]:before,
i[class^="ri-"]:before,
i[class*=" ri-"]:before {
font-family: 'remixicon' !important;
font-style: normal !important;
font-weight: normal !important;
font-variant: normal !important;
text-transform: none !important;
line-height: 1 !important;
-webkit-font-smoothing: antialiased !important;
-moz-osx-font-smoothing: grayscale !important;
speak: none !important;
}
/* 确保RemixIcon元素本身也使用正确的字体 */
[class^="ri-"],
[class*=" ri-"],
i[class^="ri-"],
i[class*=" ri-"] {
font-family: 'remixicon' !important;
font-style: normal !important;
}