Modules: - Chain: daemon RPC client (DaemonRpc singleton, cached queries) - Explorer: block browser, tx viewer, alias directory, search, stats API - Names: .lthn TLD registrar portal (availability check, lookup, directory) - Trade: scaffold (DEX frontend + API) - Pool: scaffold (mining pool dashboard) Replaces 5 Node.js containers (5.9GB) with one FrankenPHP app. Built on CorePHP framework pattern from host.uk.com. Co-Authored-By: Charon <charon@lethean.io>
193 lines
4.8 KiB
CSS
193 lines
4.8 KiB
CSS
@import 'tailwindcss';
|
|
@import '../../vendor/livewire/flux/dist/flux.css';
|
|
|
|
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
|
|
@source '../../vendor/livewire/flux/src/resources/views/**/*.blade.php';
|
|
@source '../../storage/framework/views/*.php';
|
|
@source '../views/admin/**/*.blade.php';
|
|
@source '../../app/Core/**/Blade/**/*.blade.php';
|
|
@source '../../app/Mod/*/View/Blade/**/*.blade.php';
|
|
|
|
@plugin "@tailwindcss/forms" {
|
|
strategy: base;
|
|
}
|
|
|
|
@custom-variant dark (&:is(.dark *));
|
|
@custom-variant sidebar-expanded (&:is(.sidebar-expanded *));
|
|
|
|
@theme {
|
|
--shadow-sm: 0 1px 1px 0 rgb(0 0 0 / 0.05), 0 1px 2px 0 rgb(0 0 0 / 0.02);
|
|
|
|
--color-gray-50: #f9fafb;
|
|
--color-gray-100: #f3f4f6;
|
|
--color-gray-200: #e5e7eb;
|
|
--color-gray-300: #bfc4cd;
|
|
--color-gray-400: #9ca3af;
|
|
--color-gray-500: #6b7280;
|
|
--color-gray-600: #4b5563;
|
|
--color-gray-700: #374151;
|
|
--color-gray-800: #1f2937;
|
|
--color-gray-900: #111827;
|
|
--color-gray-950: #030712;
|
|
|
|
--color-violet-50: #f1eeff;
|
|
--color-violet-100: #e6e1ff;
|
|
--color-violet-200: #d2cbff;
|
|
--color-violet-300: #b7acff;
|
|
--color-violet-400: #9c8cff;
|
|
--color-violet-500: #8470ff;
|
|
--color-violet-600: #755ff8;
|
|
--color-violet-700: #5d47de;
|
|
--color-violet-800: #4634b1;
|
|
--color-violet-900: #2f227c;
|
|
--color-violet-950: #1c1357;
|
|
|
|
--color-sky-50: #e3f3ff;
|
|
--color-sky-500: #67bfff;
|
|
|
|
--color-green-50: #d2ffe2;
|
|
--color-green-500: #3ec972;
|
|
|
|
--color-red-50: #ffe8e8;
|
|
--color-red-500: #ff5656;
|
|
|
|
--color-yellow-50: #fff2c9;
|
|
--color-yellow-500: #f0bb33;
|
|
|
|
--font-inter: "Inter", "sans-serif";
|
|
|
|
--text-xs: 0.75rem;
|
|
--text-xs--line-height: 1.5;
|
|
--text-sm: 0.875rem;
|
|
--text-sm--line-height: 1.5715;
|
|
--text-base: 1rem;
|
|
--text-base--line-height: 1.5;
|
|
--text-base--letter-spacing: -0.01em;
|
|
--text-lg: 1.125rem;
|
|
--text-lg--line-height: 1.5;
|
|
--text-lg--letter-spacing: -0.01em;
|
|
--text-xl: 1.25rem;
|
|
--text-xl--line-height: 1.5;
|
|
--text-xl--letter-spacing: -0.01em;
|
|
--text-2xl: 1.5rem;
|
|
--text-2xl--line-height: 1.33;
|
|
--text-2xl--letter-spacing: -0.01em;
|
|
--text-3xl: 1.88rem;
|
|
--text-3xl--line-height: 1.33;
|
|
--text-3xl--letter-spacing: -0.01em;
|
|
|
|
--breakpoint-xs: 480px;
|
|
}
|
|
|
|
@layer base {
|
|
*,
|
|
::after,
|
|
::before,
|
|
::backdrop,
|
|
::file-selector-button {
|
|
border-color: var(--color-gray-200, currentColor);
|
|
}
|
|
}
|
|
|
|
/* Typography */
|
|
.h1 {
|
|
@apply text-4xl font-extrabold tracking-tighter;
|
|
}
|
|
.h2 {
|
|
@apply text-3xl font-extrabold tracking-tighter;
|
|
}
|
|
.h3 {
|
|
@apply text-3xl font-extrabold;
|
|
}
|
|
.h4 {
|
|
@apply text-2xl font-extrabold tracking-tight;
|
|
}
|
|
|
|
@media (width >= 768px) {
|
|
.h1 { @apply text-5xl; }
|
|
.h2 { @apply text-4xl; }
|
|
}
|
|
|
|
/* Buttons */
|
|
.btn,
|
|
.btn-lg,
|
|
.btn-sm,
|
|
.btn-xs {
|
|
@apply font-medium text-sm inline-flex items-center justify-center border border-transparent rounded-lg leading-5 shadow-xs transition;
|
|
}
|
|
.btn { @apply px-3 py-2; }
|
|
.btn-lg { @apply px-4 py-3; }
|
|
.btn-sm { @apply px-2 py-1; }
|
|
.btn-xs { @apply px-2 py-0.5; }
|
|
|
|
/* Forms */
|
|
input[type="search"]::-webkit-search-decoration,
|
|
input[type="search"]::-webkit-search-cancel-button,
|
|
input[type="search"]::-webkit-search-results-button,
|
|
input[type="search"]::-webkit-search-results-decoration {
|
|
-webkit-appearance: none;
|
|
}
|
|
|
|
.form-input,
|
|
.form-textarea,
|
|
.form-multiselect,
|
|
.form-select,
|
|
.form-checkbox,
|
|
.form-radio {
|
|
@apply bg-white dark:bg-gray-900/30 border focus:ring-0 focus:ring-offset-0;
|
|
}
|
|
|
|
.form-input,
|
|
.form-textarea,
|
|
.form-multiselect,
|
|
.form-select {
|
|
@apply text-sm text-gray-800 dark:text-gray-100 leading-5 py-2 px-3 border-gray-200 hover:border-gray-300 focus:border-gray-300 dark:border-gray-700/60 dark:hover:border-gray-600 dark:focus:border-gray-600 shadow-xs rounded-lg;
|
|
}
|
|
|
|
.form-input,
|
|
.form-textarea {
|
|
@apply placeholder-gray-400 dark:placeholder-gray-500;
|
|
}
|
|
|
|
.form-checkbox,
|
|
.form-radio {
|
|
@apply text-violet-500 checked:bg-violet-500 checked:border-transparent border border-gray-300 dark:border-gray-700/60;
|
|
}
|
|
|
|
/* Hide scrollbar */
|
|
.no-scrollbar::-webkit-scrollbar { display: none; }
|
|
.no-scrollbar {
|
|
-ms-overflow-style: none;
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
/* Fix for duotone icons in flex containers */
|
|
/* Duotone icons use ::before (absolute) + ::after (base layer) */
|
|
/* This ensures they display correctly inside flex containers */
|
|
.fa-duotone,
|
|
.fad,
|
|
.fa-sharp-duotone,
|
|
.fa-notdog-duo,
|
|
.fa-jelly-duo,
|
|
.fa-utility-duo {
|
|
display: inline-block;
|
|
}
|
|
|
|
/* Ensure duotone ::before stays absolutely positioned */
|
|
.fa-duotone::before,
|
|
.fad::before,
|
|
.fa-sharp-duotone::before,
|
|
.fa-notdog-duo::before,
|
|
.fa-jelly-duo::before,
|
|
.fa-utility-duo::before {
|
|
position: absolute !important;
|
|
}
|
|
|
|
/* Diff highlighting for revision comparison */
|
|
.diff-added {
|
|
@apply bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300 rounded px-0.5;
|
|
}
|
|
|
|
.diff-removed {
|
|
@apply bg-red-100 dark:bg-red-900/30 text-red-800 dark:text-red-300 rounded px-0.5 line-through;
|
|
}
|