| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579 |
- @import 'tailwindcss';
- @import 'tw-animate-css';
- @plugin '@tailwindcss/typography';
- @plugin '@iconify/tailwind4';
- /* Monorepo source detection: scan all packages and apps for utility classes */
- @source '../../../packages/';
- @source '../../../apps/';
- @source '../../../docs/';
- @source '../../../playground/';
- /* Dark mode uses .dark class selector, not prefers-color-scheme */
- @custom-variant dark (&:is(.dark *));
- /* Explicitly pin Tailwind v4 dynamic spacing for classes like w-150/h-55. */
- @theme {
- --spacing: 0.25rem;
- }
- @theme inline {
- /* Font */
- --font-sans: var(--font-family);
- /* Border Radius */
- --radius-sm: calc(var(--radius) - 4px);
- --radius-md: calc(var(--radius) - 2px);
- --radius-lg: var(--radius);
- --radius-xl: calc(var(--radius) + 4px);
- /* Box Shadow */
- --shadow-float:
- 0 6px 16px 0 rgb(0 0 0 / 8%), 0 3px 6px -4px rgb(0 0 0 / 12%),
- 0 9px 28px 8px rgb(0 0 0 / 5%);
- /* Animations */
- --animate-accordion-down: accordion-down 0.2s ease-out;
- --animate-accordion-up: accordion-up 0.2s ease-out;
- --animate-collapsible-down: collapsible-down 0.2s ease-in-out;
- --animate-collapsible-up: collapsible-up 0.2s ease-in-out;
- --animate-float: float 5s linear 0ms infinite;
- /* ===== Semantic Colors (shadcn-ui) ===== */
- --color-background: hsl(var(--background));
- --color-background-deep: hsl(var(--background-deep));
- --color-foreground: hsl(var(--foreground));
- --color-card: hsl(var(--card));
- --color-card-foreground: hsl(var(--card-foreground));
- --color-popover: hsl(var(--popover));
- --color-popover-foreground: hsl(var(--popover-foreground));
- --color-muted: hsl(var(--muted));
- --color-muted-foreground: hsl(var(--muted-foreground));
- --color-accent: hsl(var(--accent));
- --color-accent-foreground: hsl(var(--accent-foreground));
- --color-accent-hover: hsl(var(--accent-hover));
- --color-accent-lighter: hsl(var(--accent-lighter));
- --color-border: hsl(var(--border));
- --color-input: hsl(var(--input));
- --color-input-background: hsl(var(--input-background));
- --color-ring: hsl(var(--ring));
- --color-secondary: hsl(var(--secondary));
- --color-secondary-desc: hsl(var(--secondary-desc));
- --color-secondary-foreground: hsl(var(--secondary-foreground));
- /* ===== Custom Semantic Colors ===== */
- --color-header: hsl(var(--header));
- --color-heavy: hsl(var(--heavy));
- --color-heavy-foreground: hsl(var(--heavy-foreground));
- --color-main: hsl(var(--main));
- --color-overlay: hsl(var(--overlay));
- --color-overlay-content: hsl(var(--overlay-content));
- --color-sidebar: hsl(var(--sidebar));
- --color-sidebar-deep: hsl(var(--sidebar-deep));
- /* ===== Primary Palette ===== */
- --color-primary: hsl(var(--primary));
- --color-primary-foreground: hsl(var(--primary-foreground));
- --color-primary-50: hsl(var(--primary-50));
- --color-primary-100: hsl(var(--primary-100));
- --color-primary-200: hsl(var(--primary-200));
- --color-primary-300: hsl(var(--primary-300));
- --color-primary-400: hsl(var(--primary-400));
- --color-primary-500: hsl(var(--primary-500));
- --color-primary-600: hsl(var(--primary-600));
- --color-primary-700: hsl(var(--primary-700));
- --color-primary-active: hsl(var(--primary-700));
- --color-primary-background-light: hsl(var(--primary-200));
- --color-primary-background-lighter: hsl(var(--primary-100));
- --color-primary-background-lightest: hsl(var(--primary-50));
- --color-primary-border: hsl(var(--primary-400));
- --color-primary-border-light: hsl(var(--primary-300));
- --color-primary-hover: hsl(var(--primary-600));
- --color-primary-text: hsl(var(--primary-500));
- --color-primary-text-active: hsl(var(--primary-700));
- --color-primary-text-hover: hsl(var(--primary-600));
- /* ===== Destructive Palette ===== */
- --color-destructive: hsl(var(--destructive));
- --color-destructive-foreground: hsl(var(--destructive-foreground));
- --color-destructive-50: hsl(var(--destructive-50));
- --color-destructive-100: hsl(var(--destructive-100));
- --color-destructive-200: hsl(var(--destructive-200));
- --color-destructive-300: hsl(var(--destructive-300));
- --color-destructive-400: hsl(var(--destructive-400));
- --color-destructive-500: hsl(var(--destructive-500));
- --color-destructive-600: hsl(var(--destructive-600));
- --color-destructive-700: hsl(var(--destructive-700));
- --color-destructive-active: hsl(var(--destructive-700));
- --color-destructive-background-light: hsl(var(--destructive-200));
- --color-destructive-background-lighter: hsl(var(--destructive-100));
- --color-destructive-background-lightest: hsl(var(--destructive-50));
- --color-destructive-border: hsl(var(--destructive-400));
- --color-destructive-border-light: hsl(var(--destructive-300));
- --color-destructive-hover: hsl(var(--destructive-600));
- --color-destructive-text: hsl(var(--destructive-500));
- --color-destructive-text-active: hsl(var(--destructive-700));
- --color-destructive-text-hover: hsl(var(--destructive-600));
- /* ===== Success Palette ===== */
- --color-success: hsl(var(--success));
- --color-success-foreground: hsl(var(--success-foreground));
- --color-success-50: hsl(var(--success-50));
- --color-success-100: hsl(var(--success-100));
- --color-success-200: hsl(var(--success-200));
- --color-success-300: hsl(var(--success-300));
- --color-success-400: hsl(var(--success-400));
- --color-success-500: hsl(var(--success-500));
- --color-success-600: hsl(var(--success-600));
- --color-success-700: hsl(var(--success-700));
- --color-success-active: hsl(var(--success-700));
- --color-success-background-light: hsl(var(--success-200));
- --color-success-background-lighter: hsl(var(--success-100));
- --color-success-background-lightest: hsl(var(--success-50));
- --color-success-border: hsl(var(--success-400));
- --color-success-border-light: hsl(var(--success-300));
- --color-success-hover: hsl(var(--success-600));
- --color-success-text: hsl(var(--success-500));
- --color-success-text-active: hsl(var(--success-700));
- --color-success-text-hover: hsl(var(--success-600));
- /* ===== Warning Palette ===== */
- --color-warning: hsl(var(--warning));
- --color-warning-foreground: hsl(var(--warning-foreground));
- --color-warning-50: hsl(var(--warning-50));
- --color-warning-100: hsl(var(--warning-100));
- --color-warning-200: hsl(var(--warning-200));
- --color-warning-300: hsl(var(--warning-300));
- --color-warning-400: hsl(var(--warning-400));
- --color-warning-500: hsl(var(--warning-500));
- --color-warning-600: hsl(var(--warning-600));
- --color-warning-700: hsl(var(--warning-700));
- --color-warning-active: hsl(var(--warning-700));
- --color-warning-background-light: hsl(var(--warning-200));
- --color-warning-background-lighter: hsl(var(--warning-100));
- --color-warning-background-lightest: hsl(var(--warning-50));
- --color-warning-border: hsl(var(--warning-400));
- --color-warning-border-light: hsl(var(--warning-300));
- --color-warning-hover: hsl(var(--warning-600));
- --color-warning-text: hsl(var(--warning-500));
- --color-warning-text-active: hsl(var(--warning-700));
- --color-warning-text-hover: hsl(var(--warning-600));
- /* ===== Green Palette (alias for success shades) ===== */
- --color-green-50: hsl(var(--green-50));
- --color-green-100: hsl(var(--green-100));
- --color-green-200: hsl(var(--green-200));
- --color-green-300: hsl(var(--green-300));
- --color-green-400: hsl(var(--green-400));
- --color-green-500: hsl(var(--green-500));
- --color-green-600: hsl(var(--green-600));
- --color-green-700: hsl(var(--green-700));
- --color-green-active: hsl(var(--green-700));
- --color-green-background-light: hsl(var(--green-200));
- --color-green-background-lighter: hsl(var(--green-100));
- --color-green-background-lightest: hsl(var(--green-50));
- --color-green-border: hsl(var(--green-400));
- --color-green-border-light: hsl(var(--green-300));
- --color-green-foreground: hsl(var(--success-foreground));
- --color-green-hover: hsl(var(--green-600));
- --color-green-text: hsl(var(--green-500));
- --color-green-text-active: hsl(var(--green-700));
- --color-green-text-hover: hsl(var(--green-600));
- /* ===== Red Palette (alias for destructive shades) ===== */
- --color-red-50: hsl(var(--red-50));
- --color-red-100: hsl(var(--red-100));
- --color-red-200: hsl(var(--red-200));
- --color-red-300: hsl(var(--red-300));
- --color-red-400: hsl(var(--red-400));
- --color-red-500: hsl(var(--red-500));
- --color-red-600: hsl(var(--red-600));
- --color-red-700: hsl(var(--red-700));
- --color-red-active: hsl(var(--red-700));
- --color-red-background-light: hsl(var(--red-200));
- --color-red-background-lighter: hsl(var(--red-100));
- --color-red-background-lightest: hsl(var(--red-50));
- --color-red-border: hsl(var(--red-400));
- --color-red-border-light: hsl(var(--red-300));
- --color-red-foreground: hsl(var(--destructive-foreground));
- --color-red-hover: hsl(var(--red-600));
- --color-red-text: hsl(var(--red-500));
- --color-red-text-active: hsl(var(--red-700));
- --color-red-text-hover: hsl(var(--red-600));
- /* ===== Yellow Palette (alias for warning shades) ===== */
- --color-yellow-50: hsl(var(--yellow-50));
- --color-yellow-100: hsl(var(--yellow-100));
- --color-yellow-200: hsl(var(--yellow-200));
- --color-yellow-300: hsl(var(--yellow-300));
- --color-yellow-400: hsl(var(--yellow-400));
- --color-yellow-500: hsl(var(--yellow-500));
- --color-yellow-600: hsl(var(--yellow-600));
- --color-yellow-700: hsl(var(--yellow-700));
- --color-yellow-active: hsl(var(--yellow-700));
- --color-yellow-background-light: hsl(var(--yellow-200));
- --color-yellow-background-lighter: hsl(var(--yellow-100));
- --color-yellow-background-lightest: hsl(var(--yellow-50));
- --color-yellow-border: hsl(var(--yellow-400));
- --color-yellow-border-light: hsl(var(--yellow-300));
- --color-yellow-foreground: hsl(var(--warning-foreground));
- --color-yellow-hover: hsl(var(--yellow-600));
- --color-yellow-text: hsl(var(--yellow-500));
- --color-yellow-text-active: hsl(var(--yellow-700));
- --color-yellow-text-hover: hsl(var(--yellow-600));
- }
- /* Keyframes */
- @keyframes accordion-down {
- from {
- height: 0;
- }
- to {
- height: var(--reka-accordion-content-height);
- }
- }
- @keyframes accordion-up {
- from {
- height: var(--reka-accordion-content-height);
- }
- to {
- height: 0;
- }
- }
- @keyframes collapsible-down {
- from {
- height: 0;
- }
- to {
- height: var(--reka-collapsible-content-height);
- }
- }
- @keyframes collapsible-up {
- from {
- height: var(--reka-collapsible-content-height);
- }
- to {
- height: 0;
- }
- }
- @keyframes float {
- 0% {
- transform: translateY(0);
- }
- 50% {
- transform: translateY(-20px);
- }
- 100% {
- transform: translateY(0);
- }
- }
- /* Base styles */
- @layer base {
- *,
- ::after,
- ::before {
- @apply border-border outline-ring/50;
- box-sizing: border-box;
- border-style: solid;
- border-width: 0;
- }
- html {
- @apply text-foreground bg-background font-sans;
- scroll-behavior: smooth;
- font-size: var(--font-size-base, 16px);
- font-variation-settings: normal;
- font-synthesis-weight: none;
- line-height: 1.15;
- text-rendering: optimizelegibility;
- text-size-adjust: 100%;
- -webkit-tap-highlight-color: transparent;
- }
- #app,
- body,
- html {
- @apply size-full;
- }
- body {
- min-height: 100vh;
- }
- a,
- a:active,
- a:hover,
- a:link,
- a:visited {
- @apply no-underline;
- }
- ::view-transition-new(root),
- ::view-transition-old(root) {
- @apply animate-none mix-blend-normal;
- }
- ::view-transition-old(root) {
- @apply z-1;
- }
- ::view-transition-new(root) {
- @apply z-2147483646;
- }
- html.dark::view-transition-old(root) {
- @apply z-2147483646;
- }
- html.dark::view-transition-new(root) {
- @apply z-1;
- }
- input::placeholder,
- textarea::placeholder {
- @apply opacity-100;
- }
- input[type='number']::-webkit-inner-spin-button,
- input[type='number']::-webkit-outer-spin-button {
- @apply m-0 appearance-none;
- }
- /* Only adjust scrollbar for non-macOS */
- html:not([data-platform='macOs']) {
- ::-webkit-scrollbar {
- @apply h-2.5 w-2.5;
- }
- ::-webkit-scrollbar-thumb {
- @apply bg-border rounded-sm border-none;
- }
- ::-webkit-scrollbar-track {
- @apply rounded-sm border-none bg-transparent shadow-none;
- }
- ::-webkit-scrollbar-button {
- @apply hidden;
- }
- }
- /* Tailwind v4 Preflight 不再为 button 默认设置 pointer;见官方升级说明:
- * https://tailwindcss.com/docs/upgrade-guide#buttons-use-the-default-cursor */
- button:not(:disabled),
- [role='button']:not(:disabled) {
- @apply cursor-pointer;
- }
- }
- /* Custom utilities (v4 @utility syntax) */
- @utility flex-center {
- display: flex;
- align-items: center;
- justify-content: center;
- }
- @utility flex-col-center {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- }
- /* Tailwind v4 的 utilities 在 @layer 内;组件样式若留在 layer 外,会按层叠规则压过 py-4 等工具类。
- * 见:https://tailwindcss.com/docs/adding-custom-styles#using-css-and-layering */
- @layer components {
- .outline-box {
- @apply outline-border relative cursor-pointer rounded-md p-1 outline-1;
- }
- .outline-box::after {
- @apply absolute top-1/2 left-1/2 z-20 h-0 w-px rounded-sm opacity-0 outline-2 outline-transparent transition-all duration-300 content-[""];
- }
- .outline-box.outline-box-active {
- @apply outline-primary outline-2;
- }
- .outline-box.outline-box-active::after {
- display: none;
- }
- .outline-box:not(.outline-box-active):hover::after {
- @apply outline-primary top-0 left-0 h-full w-full p-1 opacity-100;
- }
- .vben-link {
- @apply text-primary hover:text-primary-hover active:text-primary-active cursor-pointer;
- }
- .card-box {
- @apply bg-card text-card-foreground border-border rounded-xl border;
- }
- }
- /* Enter animations (converted from enterAnimationPlugin) */
- @keyframes enter-x-animation {
- to {
- opacity: 1;
- transform: translateX(0);
- }
- }
- @keyframes enter-y-animation {
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
- .enter-x:nth-child(1) {
- opacity: 0;
- transform: translateX(50px);
- animation: enter-x-animation 0.3s ease-in-out 0.1s forwards;
- }
- .enter-x:nth-child(2) {
- opacity: 0;
- transform: translateX(50px);
- animation: enter-x-animation 0.3s ease-in-out 0.2s forwards;
- }
- .enter-x:nth-child(3) {
- opacity: 0;
- transform: translateX(50px);
- animation: enter-x-animation 0.3s ease-in-out 0.3s forwards;
- }
- .enter-x:nth-child(4) {
- opacity: 0;
- transform: translateX(50px);
- animation: enter-x-animation 0.3s ease-in-out 0.4s forwards;
- }
- .enter-x:nth-child(5) {
- opacity: 0;
- transform: translateX(50px);
- animation: enter-x-animation 0.3s ease-in-out 0.5s forwards;
- }
- .enter-y:nth-child(1) {
- opacity: 0;
- transform: translateY(50px);
- animation: enter-y-animation 0.3s ease-in-out 0.1s forwards;
- }
- .enter-y:nth-child(2) {
- opacity: 0;
- transform: translateY(50px);
- animation: enter-y-animation 0.3s ease-in-out 0.2s forwards;
- }
- .enter-y:nth-child(3) {
- opacity: 0;
- transform: translateY(50px);
- animation: enter-y-animation 0.3s ease-in-out 0.3s forwards;
- }
- .enter-y:nth-child(4) {
- opacity: 0;
- transform: translateY(50px);
- animation: enter-y-animation 0.3s ease-in-out 0.4s forwards;
- }
- .enter-y:nth-child(5) {
- opacity: 0;
- transform: translateY(50px);
- animation: enter-y-animation 0.3s ease-in-out 0.5s forwards;
- }
- .-enter-x:nth-child(1) {
- opacity: 0;
- transform: translateX(-50px);
- animation: enter-x-animation 0.3s ease-in-out 0.1s forwards;
- }
- .-enter-x:nth-child(2) {
- opacity: 0;
- transform: translateX(-50px);
- animation: enter-x-animation 0.3s ease-in-out 0.2s forwards;
- }
- .-enter-x:nth-child(3) {
- opacity: 0;
- transform: translateX(-50px);
- animation: enter-x-animation 0.3s ease-in-out 0.3s forwards;
- }
- .-enter-x:nth-child(4) {
- opacity: 0;
- transform: translateX(-50px);
- animation: enter-x-animation 0.3s ease-in-out 0.4s forwards;
- }
- .-enter-x:nth-child(5) {
- opacity: 0;
- transform: translateX(-50px);
- animation: enter-x-animation 0.3s ease-in-out 0.5s forwards;
- }
- .-enter-y:nth-child(1) {
- opacity: 0;
- transform: translateY(-50px);
- animation: enter-y-animation 0.3s ease-in-out 0.1s forwards;
- }
- .-enter-y:nth-child(2) {
- opacity: 0;
- transform: translateY(-50px);
- animation: enter-y-animation 0.3s ease-in-out 0.2s forwards;
- }
- .-enter-y:nth-child(3) {
- opacity: 0;
- transform: translateY(-50px);
- animation: enter-y-animation 0.3s ease-in-out 0.3s forwards;
- }
- .-enter-y:nth-child(4) {
- opacity: 0;
- transform: translateY(-50px);
- animation: enter-y-animation 0.3s ease-in-out 0.4s forwards;
- }
- .-enter-y:nth-child(5) {
- opacity: 0;
- transform: translateY(-50px);
- animation: enter-y-animation 0.3s ease-in-out 0.5s forwards;
- }
- html.invert-mode {
- @apply invert;
- }
- html.grayscale-mode {
- @apply grayscale;
- }
|