/*! tailwindcss v4.1.10 | MIT License | https://tailwindcss.com */ @layer properties; @layer theme, base, components, utilities; @layer theme { :root, :host { --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --color-red-200: oklch(88.5% .062 18.334); --color-red-300: oklch(80.8% .114 19.571); --color-red-400: oklch(70.4% .191 22.216); --color-red-500: oklch(63.7% .237 25.331); --color-red-600: oklch(57.7% .245 27.325); --color-red-700: oklch(50.5% .213 27.518); --color-red-800: oklch(44.4% .177 26.899); --color-red-900: oklch(39.6% .141 25.723); --color-orange-600: oklch(64.6% .222 41.116); --color-yellow-300: oklch(90.5% .182 98.111); --color-yellow-400: oklch(85.2% .199 91.936); --color-yellow-500: oklch(79.5% .184 86.047); --color-yellow-600: oklch(68.1% .162 75.834); --color-green-200: oklch(92.5% .084 155.995); --color-green-400: oklch(79.2% .209 151.711); --color-green-500: oklch(72.3% .219 149.579); --color-green-600: oklch(62.7% .194 149.214); --color-green-900: oklch(39.3% .095 152.535); --color-blue-300: oklch(80.9% .105 251.813); --color-blue-400: oklch(70.7% .165 254.624); --color-blue-500: oklch(62.3% .214 259.815); --color-blue-600: oklch(54.6% .245 262.881); --color-blue-700: oklch(48.8% .243 264.376); --color-purple-400: oklch(71.4% .203 305.504); --color-gray-300: oklch(87.2% .01 258.338); --color-gray-400: oklch(70.7% .022 261.325); --color-gray-500: oklch(55.1% .027 264.364); --color-gray-600: oklch(44.6% .03 256.802); --color-gray-700: oklch(37.3% .034 259.733); --color-gray-800: oklch(27.8% .033 256.848); --color-gray-900: oklch(21% .034 264.665); --color-black: #000; --color-white: #fff; --spacing: .25rem; --container-md: 28rem; --container-lg: 32rem; --container-2xl: 42rem; --container-4xl: 56rem; --container-7xl: 80rem; --text-xs: .75rem; --text-xs--line-height: calc(1 / .75); --text-sm: .875rem; --text-sm--line-height: calc(1.25 / .875); --text-lg: 1.125rem; --text-lg--line-height: calc(1.75 / 1.125); --text-xl: 1.25rem; --text-xl--line-height: calc(1.75 / 1.25); --text-2xl: 1.5rem; --text-2xl--line-height: calc(2 / 1.5); --text-3xl: 1.875rem; --text-3xl--line-height: calc(2.25 / 1.875); --text-4xl: 2.25rem; --text-4xl--line-height: calc(2.5 / 2.25); --text-6xl: 3.75rem; --text-6xl--line-height: 1; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --radius-md: .375rem; --radius-lg: .5rem; --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1); --blur-sm: 8px; --aspect-video: 16 / 9; --default-transition-duration: .15s; --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); --default-font-family: var(--font-sans); --default-mono-font-family: var(--font-mono); } } @layer base { *, :after, :before, ::backdrop, ::file-selector-button { box-sizing: border-box; margin: 0; padding: 0; border: 0 solid; } html, :host { line-height: 1.5; -webkit-text-size-adjust: 100%; tab-size: 4; font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); font-feature-settings: var(--default-font-feature-settings, normal); font-variation-settings: var(--default-font-variation-settings, normal); -webkit-tap-highlight-color: transparent; } hr { height: 0; color: inherit; border-top-width: 1px; } abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } a { color: inherit; -webkit-text-decoration: inherit; text-decoration: inherit; } b, strong { font-weight: bolder; } code, kbd, samp, pre { font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); font-feature-settings: var(--default-mono-font-feature-settings, normal); font-variation-settings: var(--default-mono-font-variation-settings, normal); font-size: 1em; } small { font-size: 80%; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } table { text-indent: 0; border-color: inherit; border-collapse: collapse; } :-moz-focusring { outline: auto; } progress { vertical-align: baseline; } summary { display: list-item; } ol, ul, menu { list-style: none; } img, svg, video, canvas, audio, iframe, embed, object { display: block; vertical-align: middle; } img, video { max-width: 100%; height: auto; } button, input, select, optgroup, textarea, ::file-selector-button { font: inherit; font-feature-settings: inherit; font-variation-settings: inherit; letter-spacing: inherit; color: inherit; border-radius: 0; background-color: rgba(0, 0, 0, 0); opacity: 1; } :where(select:is([multiple], [size])) optgroup { font-weight: bolder; } :where(select:is([multiple], [size])) optgroup option { padding-inline-start: 20px; } ::file-selector-button { margin-inline-end: 4px; } ::placeholder { opacity: 1; } @supports (not ((-webkit-appearance: -apple-pay-button))) or (contain-intrinsic-size: 1px) { ::placeholder { color: currentColor; } @supports (color: color-mix(in lab, red, red)) { ::placeholder { color: color-mix(in oklab, currentcolor 50%, transparent); } } } textarea { resize: vertical; } ::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-date-and-time-value { min-height: 1lh; text-align: inherit; } ::-webkit-datetime-edit { display: inline-flex; } ::-webkit-datetime-edit-fields-wrapper { padding: 0; } ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { padding-block: 0; } :-moz-ui-invalid { box-shadow: none; } button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { appearance: button; } ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } [hidden]:where(:not([hidden="until-found"])) { display: none !important; } } @layer utilities { .pointer-events-none { pointer-events: none; } .collapse { visibility: collapse; } .invisible { visibility: hidden; } .visible { visibility: visible; } .absolute { position: absolute; } .fixed { position: fixed; } .fixed\! { position: fixed !important; } .relative { position: relative; } .static { position: static; } .sticky { position: sticky; } .inset-0 { inset: calc(var(--spacing) * 0); } .inset-y-0 { inset-block: calc(var(--spacing) * 0); } .end-1 { inset-inline-end: calc(var(--spacing) * 1); } .end-2 { inset-inline-end: calc(var(--spacing) * 2); } .end-3 { inset-inline-end: calc(var(--spacing) * 3); } .end-5 { inset-inline-end: calc(var(--spacing) * 5); } .end-9 { inset-inline-end: calc(var(--spacing) * 9); } .end-10 { inset-inline-end: calc(var(--spacing) * 10); } .end-32 { inset-inline-end: calc(var(--spacing) * 32); } .end-88 { inset-inline-end: calc(var(--spacing) * 88); } .top-2 { top: calc(var(--spacing) * 2); } .top-4 { top: calc(var(--spacing) * 4); } .top-10 { top: calc(var(--spacing) * 10); } .right-0 { right: calc(var(--spacing) * 0); } .right-2 { right: calc(var(--spacing) * 2); } .right-4 { right: calc(var(--spacing) * 4); } .bottom-0 { bottom: calc(var(--spacing) * 0); } .bottom-2 { bottom: calc(var(--spacing) * 2); } .left-0 { left: calc(var(--spacing) * 0); } .left-1 { left: calc(var(--spacing) * 1); } .left-2 { left: calc(var(--spacing) * 2); } .isolate { isolation: isolate; } .z-4 { z-index: 4; } .z-50 { z-index: 50; } .col-span-2 { grid-column: span 2 / span 2; } .container { width: 100%; } @media (width >= 40rem) { .container { max-width: 40rem; } } @media (width >= 48rem) { .container { max-width: 48rem; } } @media (width >= 64rem) { .container { max-width: 64rem; } } @media (width >= 80rem) { .container { max-width: 80rem; } } @media (width >= 96rem) { .container { max-width: 96rem; } } .mx-4 { margin-inline: calc(var(--spacing) * 4); } .mx-auto { margin-inline: auto; } .mt-1 { margin-top: calc(var(--spacing) * 1); } .mt-2 { margin-top: calc(var(--spacing) * 2); } .mt-4 { margin-top: calc(var(--spacing) * 4); } .mt-6 { margin-top: calc(var(--spacing) * 6); } .mr-2 { margin-right: calc(var(--spacing) * 2); } .mb-1 { margin-bottom: calc(var(--spacing) * 1); } .mb-2 { margin-bottom: calc(var(--spacing) * 2); } .mb-3 { margin-bottom: calc(var(--spacing) * 3); } .mb-4 { margin-bottom: calc(var(--spacing) * 4); } .mb-6 { margin-bottom: calc(var(--spacing) * 6); } .mb-8 { margin-bottom: calc(var(--spacing) * 8); } .mb-16 { margin-bottom: calc(var(--spacing) * 16); } .ml-1 { margin-left: calc(var(--spacing) * 1); } .ml-2 { margin-left: calc(var(--spacing) * 2); } .ml-6 { margin-left: calc(var(--spacing) * 6); } .ml-auto { margin-left: auto; } .block { display: block; } .block\! { display: block !important; } .contents { display: contents; } .flex { display: flex; } .grid { display: grid; } .grid\! { display: grid !important; } .hidden { display: none; } .inline { display: inline; } .inline-block { display: inline-block; } .inline-flex { display: inline-flex; } .table { display: table; } .table\! { display: table !important; } .table-row { display: table-row; } .aspect-video { aspect-ratio: var(--aspect-video); } .size-1 { width: calc(var(--spacing) * 1); height: calc(var(--spacing) * 1); } .h-1 { height: calc(var(--spacing) * 1); } .h-2 { height: calc(var(--spacing) * 2); } .h-4 { height: calc(var(--spacing) * 4); } .h-6 { height: calc(var(--spacing) * 6); } .h-8 { height: calc(var(--spacing) * 8); } .h-10 { height: calc(var(--spacing) * 10); } .h-12 { height: calc(var(--spacing) * 12); } .h-16 { height: calc(var(--spacing) * 16); } .h-20 { height: calc(var(--spacing) * 20); } .h-32 { height: calc(var(--spacing) * 32); } .h-64 { height: calc(var(--spacing) * 64); } .h-auto { height: auto; } .h-full { height: 100%; } .max-h-32 { max-height: calc(var(--spacing) * 32); } .max-h-48 { max-height: calc(var(--spacing) * 48); } .max-h-64 { max-height: calc(var(--spacing) * 64); } .min-h-\[50vh\] { min-height: 50vh; } .min-h-screen { min-height: 100vh; } .w-3 { width: calc(var(--spacing) * 3); } .w-4 { width: calc(var(--spacing) * 4); } .w-6 { width: calc(var(--spacing) * 6); } .w-8 { width: calc(var(--spacing) * 8); } .w-10 { width: calc(var(--spacing) * 10); } .w-12 { width: calc(var(--spacing) * 12); } .w-16 { width: calc(var(--spacing) * 16); } .w-20 { width: calc(var(--spacing) * 20); } .w-24 { width: calc(var(--spacing) * 24); } .w-64 { width: calc(var(--spacing) * 64); } .w-full { width: 100%; } .max-w-2xl { max-width: var(--container-2xl); } .max-w-4xl { max-width: var(--container-4xl); } .max-w-7xl { max-width: var(--container-7xl); } .max-w-lg { max-width: var(--container-lg); } .max-w-md { max-width: var(--container-md); } .flex-1 { flex: 1; } .shrink { flex-shrink: 1; } .grow { flex-grow: 1; } .border-collapse { border-collapse: collapse; } .scale-19 { --tw-scale-x: 19%; --tw-scale-y: 19%; --tw-scale-z: 19%; scale: var(--tw-scale-x) var(--tw-scale-y); } .scale-21 { --tw-scale-x: 21%; --tw-scale-y: 21%; --tw-scale-z: 21%; scale: var(--tw-scale-x) var(--tw-scale-y); } .transform { transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .cursor-crosshair { cursor: crosshair; } .cursor-not-allowed { cursor: not-allowed; } .cursor-pointer { cursor: pointer; } .resize { resize: both; } .resize-y { resize: vertical; } .appearance-none { appearance: none; } .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .flex-col { flex-direction: column; } .flex-wrap { flex-wrap: wrap; } .items-center { align-items: center; } .items-start { align-items: flex-start; } .justify-between { justify-content: space-between; } .justify-center { justify-content: center; } .gap-1 { gap: calc(var(--spacing) * 1); } .gap-2 { gap: calc(var(--spacing) * 2); } .gap-3 { gap: calc(var(--spacing) * 3); } .gap-4 { gap: calc(var(--spacing) * 4); } .gap-6 { gap: calc(var(--spacing) * 6); } .gap-8 { gap: calc(var(--spacing) * 8); } :where(.space-y-2 > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); } :where(.space-y-3 > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))); } :where(.space-y-4 > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); } :where(.space-y-6 > :not(:last-child)) { --tw-space-y-reverse: 0; margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); } :where(.space-x-2 > :not(:last-child)) { --tw-space-x-reverse: 0; margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); } :where(.space-x-3 > :not(:last-child)) { --tw-space-x-reverse: 0; margin-inline-start: calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse)); margin-inline-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse))); } :where(.space-x-4 > :not(:last-child)) { --tw-space-x-reverse: 0; margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse)); margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))); } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .overflow-auto { overflow: auto; } .overflow-hidden { overflow: hidden; } .overflow-y-auto { overflow-y: auto; } .rounded { border-radius: .25rem; } .rounded-full { border-radius: 3.40282e38px; } .rounded-lg { border-radius: var(--radius-lg); } .rounded-md { border-radius: var(--radius-md); } .border { border-style: var(--tw-border-style); border-width: 1px; } .border\! { border-style: var(--tw-border-style) !important; border-width: 1px !important; } .border-0 { border-style: var(--tw-border-style); border-width: 0; } .border-2 { border-style: var(--tw-border-style); border-width: 2px; } .border-t { border-top-style: var(--tw-border-style); border-top-width: 1px; } .border-r { border-right-style: var(--tw-border-style); border-right-width: 1px; } .border-b { border-bottom-style: var(--tw-border-style); border-bottom-width: 1px; } .border-blue-500 { border-color: var(--color-blue-500); } .border-gray-500\/50 { border-color: rgba(106, 114, 130, .5); } @supports (color: color-mix(in lab, red, red)) { .border-gray-500\/50 { border-color: color-mix(in oklab, var(--color-gray-500) 50%, transparent); } } .border-gray-600 { border-color: var(--color-gray-600); } .border-gray-700 { border-color: var(--color-gray-700); } .border-green-500 { border-color: var(--color-green-500); } .border-green-500\/50 { border-color: rgba(0, 199, 88, .5); } @supports (color: color-mix(in lab, red, red)) { .border-green-500\/50 { border-color: color-mix(in oklab, var(--color-green-500) 50%, transparent); } } .border-red-800 { border-color: var(--color-red-800); } .border-transparent { border-color: rgba(0, 0, 0, 0); } .border-white { border-color: var(--color-white); } .bg-black\/70 { background-color: rgba(0, 0, 0, .7); } @supports (color: color-mix(in lab, red, red)) { .bg-black\/70 { background-color: color-mix(in oklab, var(--color-black) 70%, transparent); } } .bg-blue-500\/10 { background-color: rgba(48, 128, 255, .1); } @supports (color: color-mix(in lab, red, red)) { .bg-blue-500\/10 { background-color: color-mix(in oklab, var(--color-blue-500) 10%, transparent); } } .bg-blue-500\/30 { background-color: rgba(48, 128, 255, .3); } @supports (color: color-mix(in lab, red, red)) { .bg-blue-500\/30 { background-color: color-mix(in oklab, var(--color-blue-500) 30%, transparent); } } .bg-blue-600 { background-color: var(--color-blue-600); } .bg-blue-600\/20 { background-color: rgba(21, 93, 252, .2); } @supports (color: color-mix(in lab, red, red)) { .bg-blue-600\/20 { background-color: color-mix(in oklab, var(--color-blue-600) 20%, transparent); } } .bg-gray-500\/20 { background-color: rgba(106, 114, 130, .2); } @supports (color: color-mix(in lab, red, red)) { .bg-gray-500\/20 { background-color: color-mix(in oklab, var(--color-gray-500) 20%, transparent); } } .bg-gray-600 { background-color: var(--color-gray-600); } .bg-gray-700 { background-color: var(--color-gray-700); } .bg-gray-800 { background-color: var(--color-gray-800); } .bg-gray-900 { background-color: var(--color-gray-900); } .bg-green-500 { background-color: var(--color-green-500); } .bg-green-500\/20 { background-color: rgba(0, 199, 88, .2); } @supports (color: color-mix(in lab, red, red)) { .bg-green-500\/20 { background-color: color-mix(in oklab, var(--color-green-500) 20%, transparent); } } .bg-green-600 { background-color: var(--color-green-600); } .bg-green-900\/50 { background-color: rgba(13, 84, 43, .5); } @supports (color: color-mix(in lab, red, red)) { .bg-green-900\/50 { background-color: color-mix(in oklab, var(--color-green-900) 50%, transparent); } } .bg-orange-600 { background-color: var(--color-orange-600); } .bg-red-600 { background-color: var(--color-red-600); } .bg-red-900\/20 { background-color: rgba(130, 24, 26, .2); } @supports (color: color-mix(in lab, red, red)) { .bg-red-900\/20 { background-color: color-mix(in oklab, var(--color-red-900) 20%, transparent); } } .bg-transparent { background-color: rgba(0, 0, 0, 0); } .bg-yellow-500 { background-color: var(--color-yellow-500); } .bg-yellow-600\/20 { background-color: rgba(205, 137, 0, .2); } @supports (color: color-mix(in lab, red, red)) { .bg-yellow-600\/20 { background-color: color-mix(in oklab, var(--color-yellow-600) 20%, transparent); } } .bg-gradient-to-t { --tw-gradient-position: to top in oklab; background-image: linear-gradient(var(--tw-gradient-stops)); } .from-black\/70 { --tw-gradient-from: rgba(0, 0, 0, .7); } @supports (color: color-mix(in lab, red, red)) { .from-black\/70 { --tw-gradient-from: color-mix(in oklab, var(--color-black) 70%, transparent); } } .from-black\/70 { --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); } .to-transparent { --tw-gradient-to: transparent; --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); } .object-cover { object-fit: cover; } .p-1 { padding: calc(var(--spacing) * 1); } .p-2 { padding: calc(var(--spacing) * 2); } .p-3 { padding: calc(var(--spacing) * 3); } .p-4 { padding: calc(var(--spacing) * 4); } .p-6 { padding: calc(var(--spacing) * 6); } .p-8 { padding: calc(var(--spacing) * 8); } .px-2 { padding-inline: calc(var(--spacing) * 2); } .px-3 { padding-inline: calc(var(--spacing) * 3); } .px-4 { padding-inline: calc(var(--spacing) * 4); } .px-6 { padding-inline: calc(var(--spacing) * 6); } .px-8 { padding-inline: calc(var(--spacing) * 8); } .py-0\.5 { padding-block: calc(var(--spacing) * .5); } .py-1 { padding-block: calc(var(--spacing) * 1); } .py-2 { padding-block: calc(var(--spacing) * 2); } .py-3 { padding-block: calc(var(--spacing) * 3); } .py-4 { padding-block: calc(var(--spacing) * 4); } .py-8 { padding-block: calc(var(--spacing) * 8); } .py-16 { padding-block: calc(var(--spacing) * 16); } .pt-4 { padding-top: calc(var(--spacing) * 4); } .pl-3 { padding-left: calc(var(--spacing) * 3); } .pl-6 { padding-left: calc(var(--spacing) * 6); } .text-center { text-align: center; } .text-left { text-align: left; } .font-mono { font-family: var(--font-mono); } .text-2xl { font-size: var(--text-2xl); line-height: var(--tw-leading, var(--text-2xl--line-height)); } .text-3xl { font-size: var(--text-3xl); line-height: var(--tw-leading, var(--text-3xl--line-height)); } .text-4xl { font-size: var(--text-4xl); line-height: var(--tw-leading, var(--text-4xl--line-height)); } .text-lg { font-size: var(--text-lg); line-height: var(--tw-leading, var(--text-lg--line-height)); } .text-sm { font-size: var(--text-sm); line-height: var(--tw-leading, var(--text-sm--line-height)); } .text-xl { font-size: var(--text-xl); line-height: var(--tw-leading, var(--text-xl--line-height)); } .text-xs { font-size: var(--text-xs); line-height: var(--tw-leading, var(--text-xs--line-height)); } .leading-0 { --tw-leading: calc(var(--spacing) * 0); line-height: calc(var(--spacing) * 0); } .font-bold { --tw-font-weight: var(--font-weight-bold); font-weight: var(--font-weight-bold); } .font-medium { --tw-font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium); } .font-semibold { --tw-font-weight: var(--font-weight-semibold); font-weight: var(--font-weight-semibold); } .text-blue-400 { color: var(--color-blue-400); } .text-blue-500 { color: var(--color-blue-500); } .text-gray-300 { color: var(--color-gray-300); } .text-gray-400 { color: var(--color-gray-400); } .text-gray-500 { color: var(--color-gray-500); } .text-green-200 { color: var(--color-green-200); } .text-green-400 { color: var(--color-green-400); } .text-purple-400 { color: var(--color-purple-400); } .text-red-300 { color: var(--color-red-300); } .text-red-400 { color: var(--color-red-400); } .text-white { color: var(--color-white); } .text-yellow-400 { color: var(--color-yellow-400); } .capitalize { text-transform: capitalize; } .lowercase { text-transform: lowercase; } .uppercase { text-transform: uppercase; } .italic { font-style: italic; } .ordinal { --tw-ordinal: ordinal; font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .line-through { text-decoration-line: line-through; } .underline { text-decoration-line: underline; } .antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .accent-blue-500 { accent-color: var(--color-blue-500); } .opacity-50 { opacity: .5; } .shadow { --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgba(0, 0, 0, .1)), 0 1px 2px -1px var(--tw-shadow-color, rgba(0, 0, 0, .1)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .shadow-2xl { --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgba(0, 0, 0, .25)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .shadow-xl { --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgba(0, 0, 0, .1)), 0 8px 10px -6px var(--tw-shadow-color, rgba(0, 0, 0, .1)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring { --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring-2 { --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring-blue-500 { --tw-ring-color: var(--color-blue-500); } .ring-offset-2 { --tw-ring-offset-width: 2px; --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .ring-offset-gray-800 { --tw-ring-offset-color: var(--color-gray-800); } .outline { outline-style: var(--tw-outline-style); outline-width: 1px; } .blur { --tw-blur: blur(8px); filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .grayscale { --tw-grayscale: grayscale(100%); filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .invert { --tw-invert: invert(100%); filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .filter { filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .backdrop-blur-sm { --tw-backdrop-blur: blur(var(--blur-sm)); -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .transition { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); } .transition-all { transition-property: all; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); } .transition-colors { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); } .transition-transform { transition-property: transform, translate, scale, rotate; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); } .select-all { -webkit-user-select: all; user-select: all; } .select-none { -webkit-user-select: none; user-select: none; } .\[bad-link\:0\] { bad-link: 0; } .\[driver\:nssock\] { driver: nssock; } .\[hexley\:Tcl\/build\/tcl\] { hexley: Tcl / build / tcl; } .\[hexley\:Tcl\/tk8\.5\.4\/macosx\] { hexley: Tcl / tk8.5.4 / macosx; } .\[localhost\:\~\/Desktop\/c84bcopy\] { localhost: ~ / Desktop / c84bcopy; } .\[localhost\:\~\/desktop\/c84bcopy\] { localhost: ~ / desktop / c84bcopy; } .\[log\:log\] { log: log; } .\[mailto\:eric\.tse\@intel\.com\] { mailto: eric. tse@intel. com; } .\[mailto\:hlavana\@cisco\.com\] { mailto: hlavana@cisco. com; } .\[mailto\:tcl-win-admin\@lists\.sourceforge\.net\] { mailto: tcl-win-admin@lists. sourceforge. net; } .\[rowen\:\~\/tk8\.4\.6\/unix\] { rowen: ~ / tk8.4.6 / unix; } .\[tk\:chooseColor\] { tk: chooseColor; } .\[ttk\:PanedWindow\] { ttk: PanedWindow; } .\[ttk\:PannedWindow\] { ttk: PannedWindow; } .\[tz\:gettime\] { tz: gettime; } @media (hover: hover) { .group-hover\:text-blue-400:is(:where(.group):hover *) { color: var(--color-blue-400); } } @media (hover: hover) { .hover\:scale-110:hover { --tw-scale-x: 110%; --tw-scale-y: 110%; --tw-scale-z: 110%; scale: var(--tw-scale-x) var(--tw-scale-y); } } @media (hover: hover) { .hover\:border-gray-500:hover { border-color: var(--color-gray-500); } } @media (hover: hover) { .hover\:border-gray-600:hover { border-color: var(--color-gray-600); } } @media (hover: hover) { .hover\:bg-blue-700:hover { background-color: var(--color-blue-700); } } @media (hover: hover) { .hover\:bg-gray-600:hover { background-color: var(--color-gray-600); } } @media (hover: hover) { .hover\:bg-gray-700:hover { background-color: var(--color-gray-700); } } @media (hover: hover) { .hover\:bg-gray-700\/50:hover { background-color: rgba(54, 65, 83, .5); } @supports (color: color-mix(in lab, red, red)) { .hover\:bg-gray-700\/50:hover { background-color: color-mix(in oklab, var(--color-gray-700) 50%, transparent); } } } @media (hover: hover) { .hover\:bg-green-500\/30:hover { background-color: rgba(0, 199, 88, .3); } @supports (color: color-mix(in lab, red, red)) { .hover\:bg-green-500\/30:hover { background-color: color-mix(in oklab, var(--color-green-500) 30%, transparent); } } } @media (hover: hover) { .hover\:bg-red-700:hover { background-color: var(--color-red-700); } } @media (hover: hover) { .hover\:bg-red-900\/20:hover { background-color: rgba(130, 24, 26, .2); } @supports (color: color-mix(in lab, red, red)) { .hover\:bg-red-900\/20:hover { background-color: color-mix(in oklab, var(--color-red-900) 20%, transparent); } } } @media (hover: hover) { .hover\:text-blue-300:hover { color: var(--color-blue-300); } } @media (hover: hover) { .hover\:text-blue-400:hover { color: var(--color-blue-400); } } @media (hover: hover) { .hover\:text-red-300:hover { color: var(--color-red-300); } } @media (hover: hover) { .hover\:text-white:hover { color: var(--color-white); } } @media (hover: hover) { .hover\:text-yellow-300:hover { color: var(--color-yellow-300); } } @media (hover: hover) { .hover\:underline:hover { text-decoration-line: underline; } } @media (hover: hover) { .hover\:opacity-80:hover { opacity: .8; } } @media (hover: hover) { .hover\:ring-2:hover { --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } } @media (hover: hover) { .hover\:ring-blue-500:hover { --tw-ring-color: var(--color-blue-500); } } .focus\:ring-2:focus { --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .focus\:ring-blue-500:focus { --tw-ring-color: var(--color-blue-500); } .disabled\:cursor-not-allowed:disabled { cursor: not-allowed; } .disabled\:opacity-50:disabled { opacity: .5; } @media (width >= 40rem) { .sm\:flex-row { flex-direction: row; } } @media (width >= 40rem) { .sm\:px-6 { padding-inline: calc(var(--spacing) * 6); } } @media (width >= 48rem) { .md\:mt-0 { margin-top: calc(var(--spacing) * 0); } } @media (width >= 48rem) { .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (width >= 48rem) { .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } } @media (width >= 48rem) { .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } } @media (width >= 48rem) { .md\:flex-row { flex-direction: row; } } @media (width >= 48rem) { .md\:text-6xl { font-size: var(--text-6xl); line-height: var(--tw-leading, var(--text-6xl--line-height)); } } @media (width >= 64rem) { .lg\:col-span-2 { grid-column: span 2 / span 2; } } @media (width >= 64rem) { .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } } @media (width >= 64rem) { .lg\:px-8 { padding-inline: calc(var(--spacing) * 8); } } } :root { --color-text-primary: #fff; --color-text-secondary: #9ca3af; --color-text-muted: #6b7280; --color-text-error: #ef4444; --color-text-success: #22c55e; --color-text-warning: #f59e0b; --color-text-info: #3b82f6; --color-bg-primary: #111827; --color-bg-secondary: #1f2937; --color-bg-tertiary: #374151; --color-bg-hover: #374151; --color-border: #374151; --color-border-focus: #6366f1; --color-accent: #6366f1; --color-accent-hover: #4f46e5; --color-accent-text: #fff; --color-status-active: #22c55e; --color-status-suspended: #f59e0b; --color-status-banned: #ef4444; --color-status-pending: #8b5cf6; --color-status-inactive: #6b7280; --color-role-owner: #f59e0b; --color-role-admin: #ef4444; --color-role-moderator: #8b5cf6; --color-role-member: #3b82f6; --color-role-guest: #6b7280; --color-privacy-public: #22c55e; --color-privacy-unlisted: #f59e0b; --color-privacy-private: #ef4444; --spacing-xs: .25rem; --spacing-sm: .5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --radius-sm: .25rem; --radius-md: .5rem; --radius-lg: .75rem; --radius-full: 9999px; --font-xs: .75rem; --font-sm: .875rem; --font-base: 1rem; --font-lg: 1.125rem; --font-xl: 1.25rem; --font-2xl: 1.5rem; --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1); --shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, .25); --transition-fast: .15s; --transition-base: .2s; --transition-slow: .3s; } * { box-sizing: border-box; } .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--spacing-sm); padding: var(--spacing-sm) var(--spacing-lg); font-size: var(--font-sm); font-weight: 500; border-radius: var(--radius-md); border: 1px solid rgba(0, 0, 0, 0); cursor: pointer; transition: all var(--transition-base); text-decoration: none; } .btn:disabled, .btn-disabled { opacity: .5; cursor: not-allowed; } .btn-primary { background-color: var(--color-accent); color: var(--color-accent-text); } .btn-primary:hover:not(:disabled) { background-color: var(--color-accent-hover); } .btn-secondary { background-color: var(--color-bg-tertiary); color: var(--color-text-primary); border-color: var(--color-border); } .btn-secondary:hover:not(:disabled) { background-color: var(--color-bg-hover); } .btn-danger { background-color: var(--color-status-banned); color: #fff; } .btn-danger:hover:not(:disabled) { opacity: .9; } .btn-warning { background-color: var(--color-status-suspended); color: #fff; } .btn-warning:hover:not(:disabled) { opacity: .9; } .form-group { display: flex; flex-direction: column; gap: var(--spacing-xs); } .form-row { display: flex; flex-wrap: wrap; gap: var(--spacing-md); } .form-row > .form-group { flex: 1; min-width: 200px; } .form-label { font-size: var(--font-sm); font-weight: 500; color: var(--color-text-primary); } .required-mark { color: var(--color-text-error); margin-left: var(--spacing-xs); } .form-input, .form-select, .form-textarea { width: 100%; padding: var(--spacing-sm) var(--spacing-md); font-size: var(--font-base); color: var(--color-text-primary); background-color: var(--color-bg-tertiary); border: 1px solid var(--color-border); border-radius: var(--radius-md); transition: border-color var(--transition-fast); } .form-input:focus, .form-select:focus, .form-textarea:focus { outline: none; border-color: var(--color-border-focus); box-shadow: 0 0 0 2px rgba(99, 102, 241, .2); } .form-input::placeholder, .form-textarea::placeholder { color: var(--color-text-muted); } .form-textarea { resize: vertical; min-height: 100px; } .form-color { width: 100px; height: 40px; padding: 2px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-bg-tertiary); } .form-help { font-size: var(--font-xs); color: var(--color-text-muted); } .checkbox-group { display: flex; flex-direction: column; } .checkbox-label { display: flex; align-items: flex-start; gap: var(--spacing-sm); cursor: pointer; } .form-checkbox { width: 1rem; height: 1rem; margin-top: 2px; accent-color: var(--color-accent); } .checkbox-text { display: flex; flex-direction: column; color: var(--color-text-primary); } .checkbox-description { font-size: var(--font-sm); color: var(--color-text-muted); } .form-actions { display: flex; gap: var(--spacing-md); margin-top: var(--spacing-lg); } .search-box { display: flex; gap: var(--spacing-sm); } .search-input { flex: 1; } .card { background-color: var(--color-bg-secondary); border-radius: var(--radius-lg); padding: var(--spacing-lg); box-shadow: var(--shadow-md); } .card-title { font-size: var(--font-xl); font-weight: 600; color: var(--color-text-primary); margin-bottom: var(--spacing-lg); } .page-header { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-start; gap: var(--spacing-md); margin-bottom: var(--spacing-xl); } .page-header-text { flex: 1; } .page-title { font-size: var(--font-2xl); font-weight: 700; color: var(--color-text-primary); margin: 0; } .page-subtitle { font-size: var(--font-base); color: var(--color-text-secondary); margin: var(--spacing-xs) 0 0 0; } .page-header-actions { display: flex; gap: var(--spacing-sm); } .alert { padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); } .alert p { margin: 0; } .alert-error { background-color: rgba(239, 68, 68, .1); border: 1px solid var(--color-text-error); color: var(--color-text-error); } .alert-success { background-color: rgba(34, 197, 94, .1); border: 1px solid var(--color-text-success); color: var(--color-text-success); } .alert-warning { background-color: rgba(245, 158, 11, .1); border: 1px solid var(--color-text-warning); color: var(--color-text-warning); } .alert-info { background-color: rgba(59, 130, 246, .1); border: 1px solid var(--color-text-info); color: var(--color-text-info); } .status-badge, .role-badge, .privacy-badge, .badge, .nsfw-badge { display: inline-flex; align-items: center; padding: var(--spacing-xs) var(--spacing-sm); font-size: var(--font-xs); font-weight: 500; border-radius: var(--radius-full); text-transform: capitalize; } .status-active { background-color: rgba(34, 197, 94, .2); color: var(--color-status-active); } .status-suspended { background-color: rgba(245, 158, 11, .2); color: var(--color-status-suspended); } .status-banned { background-color: rgba(239, 68, 68, .2); color: var(--color-status-banned); } .status-pending { background-color: rgba(139, 92, 246, .2); color: var(--color-status-pending); } .status-inactive { background-color: rgba(107, 114, 128, .2); color: var(--color-status-inactive); } .role-owner { background-color: rgba(245, 158, 11, .2); color: var(--color-role-owner); } .role-admin { background-color: rgba(239, 68, 68, .2); color: var(--color-role-admin); } .role-moderator { background-color: rgba(139, 92, 246, .2); color: var(--color-role-moderator); } .role-member { background-color: rgba(59, 130, 246, .2); color: var(--color-role-member); } .role-guest { background-color: rgba(107, 114, 128, .2); color: var(--color-role-guest); } .privacy-public { background-color: rgba(34, 197, 94, .2); color: var(--color-privacy-public); } .privacy-unlisted { background-color: rgba(245, 158, 11, .2); color: var(--color-privacy-unlisted); } .privacy-private { background-color: rgba(239, 68, 68, .2); color: var(--color-privacy-private); } .badge-primary { background-color: rgba(99, 102, 241, .2); color: var(--color-accent); } .badge-secondary { background-color: rgba(107, 114, 128, .2); color: var(--color-text-secondary); } .badge-success { background-color: rgba(34, 197, 94, .2); color: var(--color-text-success); } .badge-warning { background-color: rgba(245, 158, 11, .2); color: var(--color-text-warning); } .badge-error { background-color: rgba(239, 68, 68, .2); color: var(--color-text-error); } .nsfw-badge { background-color: rgba(239, 68, 68, .2); color: var(--color-status-banned); text-transform: uppercase; } .table-container { overflow-x: auto; } .data-table { width: 100%; border-collapse: collapse; } .data-table th, .data-table td { padding: var(--spacing-sm) var(--spacing-md); text-align: left; border-bottom: 1px solid var(--color-border); } .data-table th { font-size: var(--font-sm); font-weight: 600; color: var(--color-text-secondary); background-color: var(--color-bg-tertiary); } .data-table td { font-size: var(--font-sm); color: var(--color-text-primary); } .data-table tbody tr:hover { background-color: var(--color-bg-hover); } .table-row-clickable { cursor: pointer; } .table-link { color: var(--color-accent); text-decoration: none; } .table-link:hover { text-decoration: underline; } .pagination { display: flex; align-items: center; justify-content: center; gap: var(--spacing-md); margin-top: var(--spacing-lg); } .pagination-info { color: var(--color-text-secondary); font-size: var(--font-sm); } .modal-overlay { position: fixed; inset: 0; z-index: 50; display: flex; align-items: center; justify-content: center; } .modal-backdrop { position: absolute; inset: 0; background-color: rgba(0, 0, 0, .7); backdrop-filter: blur(4px); } .modal-content { position: relative; background-color: var(--color-bg-secondary); border-radius: var(--radius-lg); box-shadow: var(--shadow-xl); max-width: 28rem; width: calc(100% - 2rem); margin: var(--spacing-md); padding: var(--spacing-lg); border: 1px solid var(--color-border); } .modal-content-large { max-width: 42rem; } .modal-close { position: absolute; top: var(--spacing-md); right: var(--spacing-md); padding: var(--spacing-xs); color: var(--color-text-muted); background: none; border: none; cursor: pointer; transition: color var(--transition-fast); } .modal-close:hover { color: var(--color-text-primary); } .modal-close-icon { width: 1.5rem; height: 1.5rem; } .modal-body { text-align: center; } .modal-title { font-size: var(--font-xl); font-weight: 700; color: var(--color-text-primary); margin: 0 0 var(--spacing-md) 0; } .modal-message { color: var(--color-text-secondary); margin: 0 0 var(--spacing-lg) 0; } .modal-actions { display: flex; flex-direction: column; gap: var(--spacing-sm); } @media (width >= 640px) { .modal-actions { flex-direction: row; justify-content: center; } } .modal-actions-center { justify-content: center; } .admin-layout { display: flex; min-height: 100vh; } .admin-sidebar { width: 16rem; background-color: var(--color-bg-primary); border-right: 1px solid var(--color-border); display: flex; flex-direction: column; position: fixed; height: 100vh; left: 0; top: 0; } .admin-content { flex: 1; margin-left: 16rem; padding: var(--spacing-xl); background-color: var(--color-bg-primary); min-height: 100vh; } .sidebar-header { padding: var(--spacing-lg); border-bottom: 1px solid var(--color-border); } .sidebar-brand { font-size: var(--font-xl); font-weight: 700; color: var(--color-text-primary); text-decoration: none; display: block; } .sidebar-brand:hover { color: var(--color-accent); } .sidebar-subtitle { font-size: var(--font-sm); color: var(--color-text-muted); display: block; margin-top: var(--spacing-xs); } .sidebar-nav { flex: 1; padding: var(--spacing-md); overflow-y: auto; } .nav-section { margin-top: var(--spacing-lg); } .nav-section-title { display: block; font-size: var(--font-xs); font-weight: 600; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: .05em; padding: var(--spacing-sm) var(--spacing-md); } .nav-item { display: flex; align-items: center; gap: var(--spacing-sm); padding: var(--spacing-sm) var(--spacing-md); color: var(--color-text-secondary); text-decoration: none; border-radius: var(--radius-md); transition: all var(--transition-fast); margin-bottom: var(--spacing-xs); } .nav-item:hover { background-color: var(--color-bg-hover); color: var(--color-text-primary); } .nav-item-active { background-color: var(--color-accent); color: var(--color-accent-text); } .nav-item-active:hover { background-color: var(--color-accent-hover); color: var(--color-accent-text); } .nav-icon { width: 1.25rem; height: 1.25rem; } .sidebar-footer { padding: var(--spacing-md); border-top: 1px solid var(--color-border); } .sidebar-link { display: block; padding: var(--spacing-sm) var(--spacing-md); color: var(--color-text-muted); text-decoration: none; font-size: var(--font-sm); text-align: center; border-radius: var(--radius-md); transition: all var(--transition-fast); } .sidebar-link:hover { background-color: var(--color-bg-hover); color: var(--color-text-primary); } .detail-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: var(--spacing-md); } .detail-item { padding: var(--spacing-sm); } .detail-label { font-size: var(--font-xs); font-weight: 500; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: .05em; margin-bottom: var(--spacing-xs); } .detail-value { color: var(--color-text-primary); } .empty-state { text-align: center; padding: var(--spacing-xl); color: var(--color-text-muted); } .empty-state p { margin-bottom: var(--spacing-md); } .centered-layout { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: var(--spacing-md); background-color: var(--color-bg-primary); } .loading-spinner { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--spacing-md); padding: var(--spacing-xl); } .spinner { width: 2rem; height: 2rem; border: 3px solid var(--color-border); border-top-color: var(--color-accent); border-radius: 50%; animation: .8s linear infinite spin; } @keyframes spin { to { transform: rotate(360deg); } } .loading-message { color: var(--color-text-muted); font-size: var(--font-sm); } .mt-4 { margin-top: var(--spacing-md); } .mb-4 { margin-bottom: var(--spacing-md); } .text-muted { color: var(--color-text-muted); } .text-success { color: var(--color-text-success); } .text-error { color: var(--color-text-error); } :root { --color-bg-primary: #1a1a2e; --color-bg-secondary: #16213e; --color-bg-tertiary: #0f3460; --color-bg-hover: #1e3a5f; --color-text-primary: #eee; --color-text-secondary: #a0aec0; --color-text-muted: #6b7280; --color-border: #374151; --color-border-focus: #7c3aed; --color-accent: #7c3aed; --color-accent-hover: #6d28d9; --color-accent-text: #fff; } body.owner-app { font-family: system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif; background: var(--color-bg-primary); color: var(--color-text-primary); line-height: 1.6; min-height: 100vh; margin: 0; padding: 0; } .admin-layout { display: flex; min-height: 100vh; } .sidebar { width: 240px; background: var(--color-bg-secondary); border-right: 1px solid var(--color-border); padding: 1.5rem 0; position: fixed; height: 100vh; overflow-y: auto; display: flex; flex-direction: column; } .admin-content { margin-left: 240px; flex: 1; padding: 2rem; min-height: 100vh; background: var(--color-bg-primary); } .sidebar-header { padding: 0 1.5rem 1.5rem; border-bottom: 1px solid var(--color-border); margin-bottom: 1rem; display: flex; align-items: center; gap: .5rem; } .sidebar-brand { font-size: 1.25rem; font-weight: 600; color: var(--color-accent); text-decoration: none; } .sidebar-brand:hover { opacity: .9; } .sidebar-badge { font-size: .75rem; padding: .125rem .5rem; background: var(--color-accent); color: #fff; border-radius: .25rem; text-transform: uppercase; letter-spacing: .05em; } .nav-list { list-style: none; padding: 0; margin: 0; flex: 1; } .nav-item { margin: .125rem 0; } .nav-link { display: block; padding: .5rem 1.5rem; color: var(--color-text-secondary); text-decoration: none; transition: all .15s; } .nav-link:hover { background: var(--color-bg-tertiary); color: var(--color-text-primary); } .nav-item.active .nav-link { background: var(--color-accent); color: #fff; } .nav-section { margin-top: 1rem; } .nav-section-title { display: block; padding: .5rem 1.5rem; font-size: .75rem; font-weight: 600; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: .05em; } .nav-sublist { list-style: none; padding: 0; margin: 0; } .nav-sublist .nav-link { padding-left: 2.5rem; font-size: .875rem; } .sidebar-footer { padding: var(--spacing-md); border-top: 1px solid var(--color-border); margin-top: auto; } .sidebar-link { display: block; padding: var(--spacing-sm) var(--spacing-md); color: var(--color-text-muted); text-decoration: none; font-size: var(--font-sm); text-align: center; border-radius: var(--radius-md); transition: all var(--transition-fast); } .sidebar-link:hover { background-color: var(--color-bg-hover); color: var(--color-text-primary); } .sidebar-logout { width: 100%; padding: var(--spacing-sm) var(--spacing-md); margin-top: var(--spacing-sm); background: none; border: 1px solid var(--color-border); border-radius: var(--radius-md); color: var(--color-text-muted); font-size: var(--font-sm); cursor: pointer; transition: all var(--transition-fast); } .sidebar-logout:hover { background-color: var(--color-bg-hover); color: var(--color-text-primary); } .page-header { padding-bottom: 1rem; border-bottom: 1px solid var(--color-border); margin-bottom: 2rem; } .card { border: 1px solid var(--color-border); } .card-title { color: var(--color-accent); } .data-table th { text-transform: uppercase; letter-spacing: .05em; } .table-link { font-weight: 500; } .dashboard-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--spacing-md); margin-bottom: var(--spacing-xl); } .stat-card { background: var(--color-bg-secondary); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--spacing-lg); text-align: center; } .stat-value { font-size: 2rem; font-weight: 700; color: var(--color-accent); } .stat-title { font-size: var(--font-sm); color: var(--color-text-secondary); margin-top: var(--spacing-xs); } .dashboard-sections { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--spacing-lg); } .quick-actions { display: flex; flex-wrap: wrap; gap: var(--spacing-sm); } .user-header, .realm-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 1.5rem; margin-bottom: 2rem; } .user-info h2, .realm-info h2 { font-size: 1.5rem; margin-bottom: .25rem; } .realm-badges { display: flex; gap: var(--spacing-sm); } .realm-description { margin-top: var(--spacing-lg); padding-top: var(--spacing-lg); border-top: 1px solid var(--color-border); } .realm-description h4 { font-size: var(--font-lg); margin-bottom: var(--spacing-sm); color: var(--color-text-secondary); } .section-title { font-size: var(--font-lg); font-weight: 600; color: var(--color-accent); margin: var(--spacing-lg) 0 var(--spacing-md) 0; padding-bottom: var(--spacing-sm); border-bottom: 1px solid var(--color-border); } .tab-buttons { display: flex; gap: var(--spacing-sm); margin-bottom: var(--spacing-lg); } .required { color: var(--color-text-error); } .temp-password { display: block; background: var(--color-bg-tertiary); padding: var(--spacing-sm) var(--spacing-md); border-radius: var(--radius-md); font-family: monospace; margin: var(--spacing-sm) 0; word-break: break-all; } .action-buttons { display: flex; flex-wrap: wrap; gap: var(--spacing-sm); margin-top: var(--spacing-md); } .login-layout { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: var(--spacing-md); background: var(--color-bg-primary); } .login-card { background: var(--color-bg-secondary); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: 2rem; width: 100%; max-width: 400px; } .login-header { text-align: center; margin-bottom: 2rem; } .login-title { font-size: 1.5rem; font-weight: 700; color: var(--color-text-primary); margin-bottom: .5rem; } .login-subtitle { color: var(--color-text-muted); } .config-section { margin-bottom: var(--spacing-xl); } .config-section h3 { font-size: var(--font-lg); font-weight: 600; margin-bottom: var(--spacing-md); color: var(--color-accent); } .config-item { margin-bottom: var(--spacing-md); } .config-item label { display: block; font-weight: 500; margin-bottom: var(--spacing-xs); } .config-item .form-help { margin-top: var(--spacing-xs); } @media (width <= 768px) { .sidebar { width: 100%; position: relative; height: auto; } .admin-content { margin-left: 0; padding: 1rem; } .dashboard-grid { grid-template-columns: repeat(2, 1fr); } .form-row { flex-direction: column; } .page-header { flex-direction: column; align-items: stretch; } .page-header-actions { justify-content: flex-start; } } @layer base { :focus-visible { outline-style: var(--tw-outline-style); outline-width: 2px; outline-offset: 2px; outline-color: var(--color-blue-500); } @media (prefers-reduced-motion: reduce) { *, :before, :after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; } } } @layer components { .input-base { width: 100%; border-radius: var(--radius-lg); border-style: var(--tw-border-style); border-width: 1px; border-color: var(--color-gray-600); background-color: var(--color-gray-700); padding-inline: calc(var(--spacing) * 4); padding-block: calc(var(--spacing) * 3); color: var(--color-white); } .input-base::placeholder { color: var(--color-gray-400); } .input-base { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); --tw-duration: .2s; transition-duration: .2s; } .input-base:focus { border-color: rgba(0, 0, 0, 0); } .input-base:focus { --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .input-base:focus { --tw-ring-color: var(--color-blue-500); } .btn-primary { border-radius: var(--radius-lg); background-color: var(--color-blue-600); padding-inline: calc(var(--spacing) * 6); padding-block: calc(var(--spacing) * 3); --tw-font-weight: var(--font-weight-semibold); font-weight: var(--font-weight-semibold); color: var(--color-white); transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); --tw-duration: .2s; transition-duration: .2s; } @media (hover: hover) { .btn-primary:hover { background-color: var(--color-blue-700); } } .btn-primary:focus { --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .btn-primary:focus { --tw-ring-color: var(--color-blue-500); } .btn-primary:focus { --tw-ring-offset-width: 2px; --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .btn-primary:focus { --tw-ring-offset-color: var(--color-gray-800); } .btn-primary:focus { --tw-outline-style: none; outline-style: none; } .btn-primary:disabled { cursor: not-allowed; } .btn-primary:disabled { background-color: var(--color-gray-600); } .btn-secondary { border-radius: var(--radius-lg); background-color: var(--color-gray-600); padding-inline: calc(var(--spacing) * 6); padding-block: calc(var(--spacing) * 3); --tw-font-weight: var(--font-weight-semibold); font-weight: var(--font-weight-semibold); color: var(--color-white); transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); --tw-duration: .2s; transition-duration: .2s; } @media (hover: hover) { .btn-secondary:hover { background-color: var(--color-gray-500); } } .btn-secondary:focus { --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .btn-secondary:focus { --tw-ring-color: var(--color-gray-400); } .btn-secondary:focus { --tw-ring-offset-width: 2px; --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .btn-secondary:focus { --tw-ring-offset-color: var(--color-gray-800); } .btn-secondary:focus { --tw-outline-style: none; outline-style: none; } .btn-secondary:disabled { cursor: not-allowed; } .btn-secondary:disabled { background-color: var(--color-gray-700); } .error-message { border-radius: var(--radius-lg); border-style: var(--tw-border-style); border-width: 1px; border-color: var(--color-red-500); background-color: rgba(130, 24, 26, .5); } @supports (color: color-mix(in lab, red, red)) { .error-message { background-color: color-mix(in oklab, var(--color-red-900) 50%, transparent); } } .error-message { padding: calc(var(--spacing) * 4); color: var(--color-red-200); } .card { border-radius: var(--radius-lg); background-color: var(--color-gray-800); padding: calc(var(--spacing) * 6); --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgba(0, 0, 0, .1)), 0 8px 10px -6px var(--tw-shadow-color, rgba(0, 0, 0, .1)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } } @property --tw-scale-x { syntax: "*"; inherits: false; initial-value: 1; } @property --tw-scale-y { syntax: "*"; inherits: false; initial-value: 1; } @property --tw-scale-z { syntax: "*"; inherits: false; initial-value: 1; } @property --tw-rotate-x { syntax: "*"; inherits: false } @property --tw-rotate-y { syntax: "*"; inherits: false } @property --tw-rotate-z { syntax: "*"; inherits: false } @property --tw-skew-x { syntax: "*"; inherits: false } @property --tw-skew-y { syntax: "*"; inherits: false } @property --tw-space-y-reverse { syntax: "*"; inherits: false; initial-value: 0; } @property --tw-space-x-reverse { syntax: "*"; inherits: false; initial-value: 0; } @property --tw-border-style { syntax: "*"; inherits: false; initial-value: solid; } @property --tw-gradient-position { syntax: "*"; inherits: false } @property --tw-gradient-from { syntax: ""; inherits: false; initial-value: rgba(0, 0, 0, 0); } @property --tw-gradient-via { syntax: ""; inherits: false; initial-value: rgba(0, 0, 0, 0); } @property --tw-gradient-to { syntax: ""; inherits: false; initial-value: rgba(0, 0, 0, 0); } @property --tw-gradient-stops { syntax: "*"; inherits: false } @property --tw-gradient-via-stops { syntax: "*"; inherits: false } @property --tw-gradient-from-position { syntax: ""; inherits: false; initial-value: 0%; } @property --tw-gradient-via-position { syntax: ""; inherits: false; initial-value: 50%; } @property --tw-gradient-to-position { syntax: ""; inherits: false; initial-value: 100%; } @property --tw-leading { syntax: "*"; inherits: false } @property --tw-font-weight { syntax: "*"; inherits: false } @property --tw-ordinal { syntax: "*"; inherits: false } @property --tw-slashed-zero { syntax: "*"; inherits: false } @property --tw-numeric-figure { syntax: "*"; inherits: false } @property --tw-numeric-spacing { syntax: "*"; inherits: false } @property --tw-numeric-fraction { syntax: "*"; inherits: false } @property --tw-shadow { syntax: "*"; inherits: false; initial-value: 0 0 rgba(0, 0, 0, 0); } @property --tw-shadow-color { syntax: "*"; inherits: false } @property --tw-shadow-alpha { syntax: ""; inherits: false; initial-value: 100%; } @property --tw-inset-shadow { syntax: "*"; inherits: false; initial-value: 0 0 rgba(0, 0, 0, 0); } @property --tw-inset-shadow-color { syntax: "*"; inherits: false } @property --tw-inset-shadow-alpha { syntax: ""; inherits: false; initial-value: 100%; } @property --tw-ring-color { syntax: "*"; inherits: false } @property --tw-ring-shadow { syntax: "*"; inherits: false; initial-value: 0 0 rgba(0, 0, 0, 0); } @property --tw-inset-ring-color { syntax: "*"; inherits: false } @property --tw-inset-ring-shadow { syntax: "*"; inherits: false; initial-value: 0 0 rgba(0, 0, 0, 0); } @property --tw-ring-inset { syntax: "*"; inherits: false } @property --tw-ring-offset-width { syntax: ""; inherits: false; initial-value: 0; } @property --tw-ring-offset-color { syntax: "*"; inherits: false; initial-value: #fff; } @property --tw-ring-offset-shadow { syntax: "*"; inherits: false; initial-value: 0 0 rgba(0, 0, 0, 0); } @property --tw-outline-style { syntax: "*"; inherits: false; initial-value: solid; } @property --tw-blur { syntax: "*"; inherits: false } @property --tw-brightness { syntax: "*"; inherits: false } @property --tw-contrast { syntax: "*"; inherits: false } @property --tw-grayscale { syntax: "*"; inherits: false } @property --tw-hue-rotate { syntax: "*"; inherits: false } @property --tw-invert { syntax: "*"; inherits: false } @property --tw-opacity { syntax: "*"; inherits: false } @property --tw-saturate { syntax: "*"; inherits: false } @property --tw-sepia { syntax: "*"; inherits: false } @property --tw-drop-shadow { syntax: "*"; inherits: false } @property --tw-drop-shadow-color { syntax: "*"; inherits: false } @property --tw-drop-shadow-alpha { syntax: ""; inherits: false; initial-value: 100%; } @property --tw-drop-shadow-size { syntax: "*"; inherits: false } @property --tw-backdrop-blur { syntax: "*"; inherits: false } @property --tw-backdrop-brightness { syntax: "*"; inherits: false } @property --tw-backdrop-contrast { syntax: "*"; inherits: false } @property --tw-backdrop-grayscale { syntax: "*"; inherits: false } @property --tw-backdrop-hue-rotate { syntax: "*"; inherits: false } @property --tw-backdrop-invert { syntax: "*"; inherits: false } @property --tw-backdrop-opacity { syntax: "*"; inherits: false } @property --tw-backdrop-saturate { syntax: "*"; inherits: false } @property --tw-backdrop-sepia { syntax: "*"; inherits: false } @property --tw-duration { syntax: "*"; inherits: false } @keyframes spin { to { transform: rotate(360deg); } } @layer properties { @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) { *, :before, :after, ::backdrop { --tw-scale-x: 1; --tw-scale-y: 1; --tw-scale-z: 1; --tw-rotate-x: initial; --tw-rotate-y: initial; --tw-rotate-z: initial; --tw-skew-x: initial; --tw-skew-y: initial; --tw-space-y-reverse: 0; --tw-space-x-reverse: 0; --tw-border-style: solid; --tw-gradient-position: initial; --tw-gradient-from: rgba(0, 0, 0, 0); --tw-gradient-via: rgba(0, 0, 0, 0); --tw-gradient-to: rgba(0, 0, 0, 0); --tw-gradient-stops: initial; --tw-gradient-via-stops: initial; --tw-gradient-from-position: 0%; --tw-gradient-via-position: 50%; --tw-gradient-to-position: 100%; --tw-leading: initial; --tw-font-weight: initial; --tw-ordinal: initial; --tw-slashed-zero: initial; --tw-numeric-figure: initial; --tw-numeric-spacing: initial; --tw-numeric-fraction: initial; --tw-shadow: 0 0 rgba(0, 0, 0, 0); --tw-shadow-color: initial; --tw-shadow-alpha: 100%; --tw-inset-shadow: 0 0 rgba(0, 0, 0, 0); --tw-inset-shadow-color: initial; --tw-inset-shadow-alpha: 100%; --tw-ring-color: initial; --tw-ring-shadow: 0 0 rgba(0, 0, 0, 0); --tw-inset-ring-color: initial; --tw-inset-ring-shadow: 0 0 rgba(0, 0, 0, 0); --tw-ring-inset: initial; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 rgba(0, 0, 0, 0); --tw-outline-style: solid; --tw-blur: initial; --tw-brightness: initial; --tw-contrast: initial; --tw-grayscale: initial; --tw-hue-rotate: initial; --tw-invert: initial; --tw-opacity: initial; --tw-saturate: initial; --tw-sepia: initial; --tw-drop-shadow: initial; --tw-drop-shadow-color: initial; --tw-drop-shadow-alpha: 100%; --tw-drop-shadow-size: initial; --tw-backdrop-blur: initial; --tw-backdrop-brightness: initial; --tw-backdrop-contrast: initial; --tw-backdrop-grayscale: initial; --tw-backdrop-hue-rotate: initial; --tw-backdrop-invert: initial; --tw-backdrop-opacity: initial; --tw-backdrop-saturate: initial; --tw-backdrop-sepia: initial; --tw-duration: initial; } } }