- Added DOKUMENTASI-FILTER-PER-SITE.md (site isolation docs) - Fixed start-with-env.js to force-load .env.production - Fixed MONGODB_URI hostname from mongodb-netify to mongodb.prod.proit.id - Updated .gitignore to exclude sensitive scripts and credential files - Minor UI and labeling improvements
201 lines
4.5 KiB
CSS
201 lines
4.5 KiB
CSS
@import "tailwindcss";
|
||
@import "./theme.css";
|
||
@import "./variables.css";
|
||
|
||
/* ── Zero Horizontal Scrollbar – Global Enforcement ── */
|
||
/* Per AGENTS.md §9: horizontal scrollbar strictly prohibited at any level. */
|
||
html {
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
body {
|
||
overflow-x: hidden;
|
||
width: 100%;
|
||
}
|
||
|
||
body {
|
||
font-family: var(--font-sans);
|
||
color: var(--foreground);
|
||
/* Optical sizing + smoothing */
|
||
font-optical-sizing: auto;
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
text-rendering: optimizeLegibility;
|
||
}
|
||
|
||
/* 1-Second Dual-Layer Smooth Background Crossfade */
|
||
|
||
/* Dark Mode Background Layer (Active by default, fades out on .light) */
|
||
body::before,
|
||
body::after {
|
||
content: "";
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: -1;
|
||
transition: opacity 150ms ease-in-out;
|
||
pointer-events: none;
|
||
background-size: cover;
|
||
background-attachment: fixed;
|
||
}
|
||
|
||
body::before {
|
||
background-color: #09090b;
|
||
background-image:
|
||
radial-gradient(circle at 0% 0%, rgba(30, 58, 138, 0.35) 0%, transparent 40%),
|
||
radial-gradient(circle at 100% 20%, rgba(220, 38, 38, 0.15) 0%, transparent 40%),
|
||
radial-gradient(circle at 50% 100%, rgba(15, 23, 42, 0.8) 0%, transparent 60%);
|
||
opacity: 1;
|
||
}
|
||
|
||
.light body::before {
|
||
opacity: 0;
|
||
}
|
||
|
||
/* Light Mode Background Layer (Hidden by default, fades in on .light) */
|
||
body::after {
|
||
background-color: #f1f5f9;
|
||
background-image:
|
||
radial-gradient(circle at 0% 0%, rgba(59, 130, 246, 0.1) 0px, transparent 40%),
|
||
radial-gradient(circle at 100% 0%, rgba(239, 68, 68, 0.05) 0px, transparent 40%);
|
||
opacity: 0;
|
||
}
|
||
|
||
.light body::after {
|
||
opacity: 1;
|
||
}
|
||
|
||
/* Ambient Colors for Cards & Sidebars */
|
||
:root {
|
||
--ambient-card-bg: rgba(24, 24, 27, 0.7);
|
||
--ambient-sidebar-bg: rgba(9, 9, 11, 0.95);
|
||
}
|
||
|
||
.light {
|
||
--ambient-card-bg: rgba(255, 255, 255, 0.9);
|
||
--ambient-sidebar-bg: rgba(255, 255, 255, 1);
|
||
}
|
||
|
||
.bg-card {
|
||
background-color: var(--ambient-card-bg) !important;
|
||
background-image: none !important;
|
||
backdrop-filter: blur(12px);
|
||
}
|
||
|
||
.bg-sidebar {
|
||
background-color: var(--ambient-sidebar-bg) !important;
|
||
background-image: none !important;
|
||
backdrop-filter: blur(16px);
|
||
}
|
||
|
||
/* Global smooth transition for theme change */
|
||
*,
|
||
*::before,
|
||
*::after {
|
||
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, box-shadow, opacity, transform !important;
|
||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;
|
||
transition-duration: 500ms !important;
|
||
}
|
||
|
||
canvas {
|
||
transition: none !important;
|
||
}
|
||
|
||
/* View Transitions API (For perfect whole-screen crossfade including WebGL/Canvas) */
|
||
::view-transition-old(root),
|
||
::view-transition-new(root) {
|
||
animation-duration: 500ms;
|
||
animation-timing-function: ease-in-out;
|
||
}
|
||
|
||
/* ── Custom Scrollbar for Fixed Modals ── */
|
||
.custom-scrollbar::-webkit-scrollbar {
|
||
width: 6px;
|
||
height: 6px;
|
||
}
|
||
.custom-scrollbar::-webkit-scrollbar-track {
|
||
background: transparent;
|
||
}
|
||
.custom-scrollbar::-webkit-scrollbar-thumb {
|
||
background-color: var(--muted);
|
||
border-radius: 10px;
|
||
}
|
||
.dark .custom-scrollbar::-webkit-scrollbar-thumb {
|
||
background-color: rgba(255, 255, 255, 0.1);
|
||
}
|
||
.light .custom-scrollbar::-webkit-scrollbar-thumb {
|
||
background-color: rgba(0, 0, 0, 0.1);
|
||
}
|
||
|
||
/* ── Modal Animations (0.5s) ── */
|
||
@keyframes modalFadeIn {
|
||
from {
|
||
opacity: 0;
|
||
transform: scale(0.95) translateY(10px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: scale(1) translateY(0);
|
||
}
|
||
}
|
||
|
||
@keyframes modalFadeOut {
|
||
from {
|
||
opacity: 1;
|
||
transform: scale(1) translateY(0);
|
||
}
|
||
to {
|
||
opacity: 0;
|
||
transform: scale(0.95) translateY(10px);
|
||
}
|
||
}
|
||
|
||
@keyframes overlayFadeIn {
|
||
from { opacity: 0; }
|
||
to { opacity: 1; }
|
||
}
|
||
|
||
@keyframes overlayFadeOut {
|
||
from { opacity: 1; }
|
||
to { opacity: 0; }
|
||
}
|
||
|
||
.animate-modal-in {
|
||
animation: modalFadeIn 500ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
||
}
|
||
|
||
.animate-modal-out {
|
||
animation: modalFadeOut 500ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
||
}
|
||
|
||
.animate-overlay-in {
|
||
animation: overlayFadeIn 500ms ease-out forwards;
|
||
}
|
||
|
||
.animate-overlay-out {
|
||
animation: overlayFadeOut 500ms ease-in forwards;
|
||
}
|
||
|
||
/* Hide native Edge/IE password reveal icon (the second eye) */
|
||
input::-ms-reveal,
|
||
input::-ms-clear {
|
||
display: none;
|
||
}
|
||
|
||
/* Accordion Animation Fix */
|
||
.accordion-grid {
|
||
display: grid;
|
||
grid-template-rows: 0fr;
|
||
transition: grid-template-rows 1s ease-in-out, margin-top 1s ease-in-out, opacity 1s ease-in-out;
|
||
opacity: 0;
|
||
margin-top: 0;
|
||
}
|
||
.accordion-grid.expanded {
|
||
grid-template-rows: 1fr;
|
||
opacity: 1;
|
||
margin-top: 0.375rem;
|
||
}
|
||
.accordion-inner {
|
||
overflow: hidden;
|
||
min-height: 0;
|
||
}
|