Files
EonaCat.DoxaApi/DoxaApi/UI/Assets/app.css
T

3628 lines
72 KiB
CSS

*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
:root {
/* Premium Method colors with enhanced vibrancy */
--m-get: #10b981;
--m-post: #6366f1;
--m-put: #f59e0b;
--m-patch: #f97316;
--m-delete: #ef4444;
--m-head: #a855f7;
--m-options: #06b6d4;
--m-default: #6b7280;
/* Enhanced Accent palette with gradients */
--accent: #6366f1;
--accent-2: #818cf8;
--accent-3: #c4b5fd;
--accent-dim: rgba(99,102,241,.12);
--accent-glow: rgba(99,102,241,.3);
--accent-gradient: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);
/* Premium gradient backgrounds */
--gradient-subtle: linear-gradient(135deg, rgba(99,102,241,.05) 0%, rgba(139,92,246,.05) 100%);
--gradient-strong: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #06b6d4 100%);
--gradient-warm: linear-gradient(135deg, #f97316 0%, #f59e0b 100%);
/* Typography - enhanced */
--font-sans: 'Inter', system-ui, -apple-system, sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
--font-weight-light: 300;
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
/* Radii - refined */
--radius-xs: 2px;
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 10px;
--radius-xl: 14px;
--radius-2xl: 20px;
--radius-full: 9999px;
/* Sizing */
--topbar-h: 56px;
--sidebar-w: 260px;
--try-w: 400px;
/* Transitions - smooth and sophisticated */
--ease: cubic-bezier(.22,.1,.36,1);
--ease-out: cubic-bezier(.16,.1,0,1);
--ease-in: cubic-bezier(.52,0,.3,1);
--ease-smooth: cubic-bezier(.4,.0,.2,1);
/* Animations */
--duration-fast: 150ms;
--duration-base: 250ms;
--duration-slow: 350ms;
}
/* DARK THEME (default) - Premium */
[data-theme="dark"] {
--bg-0: #060609;
--bg-1: #0a0d14;
--bg-2: #0f1219;
--bg-3: #151a28;
--bg-4: #1d2235;
--bg-5: #252d42;
--border: rgba(255,255,255,.05);
--border-2: rgba(255,255,255,.08);
--border-3: rgba(255,255,255,.12);
--text-1: #f0f4f8;
--text-2: #8b92b0;
--text-3: #4a5268;
--text-hover: #ffffff;
--shadow-xs: 0 1px 2px rgba(0,0,0,.3);
--shadow-sm: 0 2px 6px rgba(0,0,0,.5), 0 4px 12px rgba(0,0,0,.2);
--shadow: 0 8px 24px rgba(0,0,0,.6), 0 12px 48px rgba(0,0,0,.3);
--shadow-lg: 0 20px 60px rgba(0,0,0,.7), 0 8px 24px rgba(0,0,0,.4);
--shadow-xl: 0 30px 80px rgba(0,0,0,.8);
--topbar-bg: rgba(10,13,20,.85);
--sidebar-bg: rgba(10,13,20,.90);
--code-bg: #020203;
--code-border: rgba(255,255,255,.08);
--overlay: rgba(0,0,0,.3);
--icon-sun: block;
--icon-moon: none;
}
/* LIGHT THEME - Premium */
[data-theme="light"] {
--bg-0: #f8f9fc;
--bg-1: #ffffff;
--bg-2: #f3f5fa;
--bg-3: #eff1f8;
--bg-4: #e8ebf5;
--bg-5: #e0e4f0;
--border: rgba(0,0,0,.06);
--border-2: rgba(0,0,0,.10);
--border-3: rgba(0,0,0,.14);
--text-1: #0d1428;
--text-2: #63718a;
--text-3: #959db4;
--text-hover: #000000;
--shadow-xs: 0 1px 2px rgba(0,0,0,.05);
--shadow-sm: 0 2px 6px rgba(0,0,0,.08), 0 4px 12px rgba(0,0,0,.03);
--shadow: 0 8px 24px rgba(0,0,0,.12), 0 12px 48px rgba(0,0,0,.06);
--shadow-lg: 0 20px 60px rgba(0,0,0,.15), 0 8px 24px rgba(0,0,0,.08);
--shadow-xl: 0 30px 80px rgba(0,0,0,.18);
--topbar-bg: rgba(255,255,255,.88);
--sidebar-bg: rgba(255,255,255,.95);
--code-bg: #f7f8fb;
--code-border: rgba(0,0,0,.08);
--overlay: rgba(0,0,0,.2);
--icon-sun: none;
--icon-moon: block;
}
/* BASE */
html, body {
height: 100%;
overflow: hidden;
background: var(--bg-0);
color: var(--text-1);
font-family: var(--font-sans);
font-size: 13px;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
button {
cursor: pointer;
border: none;
background: none;
font: inherit;
color: inherit;
}
input, textarea, select {
font: inherit;
color: inherit;
background: transparent;
border: none;
outline: none;
}
select {
appearance: none;
-webkit-appearance: none;
}
a {
color: var(--accent-2);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
::-webkit-scrollbar {
width: 4px;
height: 4px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--bg-4);
border-radius: 99px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--bg-5);
}
/* TOP BAR - Premium Enhancement */
.topbar {
position: fixed;
inset: 0 0 auto 0;
z-index: 100;
height: var(--topbar-h);
display: flex;
align-items: center;
gap: 12px;
padding: 0 20px;
background: var(--topbar-bg);
border-bottom: 1px solid var(--border);
backdrop-filter: blur(12px) saturate(1.5);
-webkit-backdrop-filter: blur(12px) saturate(1.5);
box-shadow: 0 1px 3px var(--overlay);
transition: all var(--duration-base) var(--ease-smooth);
}
[data-theme="dark"] .topbar {
background: linear-gradient(180deg, rgba(10,13,20,.95) 0%, rgba(10,13,20,.90) 100%);
}
[data-theme="light"] .topbar {
background: linear-gradient(180deg, rgba(255,255,255,.95) 0%, rgba(255,255,255,.88) 100%);
}
.topbar-left {
display: flex;
align-items: center;
gap: 14px;
flex-shrink: 0;
}
.topbar-center {
flex: 1;
min-width: 0;
max-width: 480px;
margin: 0 auto;
}
.topbar-right {
display: flex;
align-items: center;
gap: 6px;
flex-shrink: 0;
}
/* Brand - Premium */
.brand {
display: flex;
align-items: center;
gap: 12px;
user-select: none;
transition: opacity var(--duration-fast) var(--ease-smooth);
}
.brand:hover {
opacity: 0.8;
}
.brand-icon {
width: 36px;
height: 36px;
border-radius: var(--radius-lg);
background: var(--gradient-strong);
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 16px rgba(99,102,241,.4), 0 0 0 1px rgba(255,255,255,.2) inset;
position: relative;
overflow: hidden;
flex-shrink: 0;
}
.brand-icon::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(255,255,255,.2) 0%, transparent 60%);
}
.brand-icon svg {
width: 18px;
height: 18px;
color: #fff;
position: relative;
z-index: 1;
filter: drop-shadow(0 1px 2px rgba(0,0,0,.3));
}
.brand-text {
display: flex;
align-items: baseline;
gap: 8px;
flex-shrink: 0;
}
.brand-name {
font-size: 15px;
font-weight: 700;
letter-spacing: -.02em;
background: linear-gradient(135deg, var(--text-1) 30%, var(--accent-2) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
text-shadow: 0 1px 2px rgba(0,0,0,.1);
}
.brand-ver {
font-size: 11px;
font-weight: 700;
font-family: var(--font-mono);
padding: 3px 8px;
background: var(--bg-3);
border: 1px solid var(--border-2);
border-radius: var(--radius-full);
color: var(--text-2);
flex-shrink: 0;
}
/* API Selector */
.api-switcher-wrap {
display: flex;
}
.api-select {
height: 30px;
padding: 0 28px 0 10px;
font-size: 12px;
font-weight: 500;
background: var(--bg-2) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%236b7280' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") right 6px center / 16px no-repeat;
border: 1px solid var(--border-2);
border-radius: var(--radius-md);
color: var(--text-1);
cursor: pointer;
transition: border-color .15s, box-shadow .15s;
}
.api-select:hover {
border-color: var(--accent);
}
.api-select:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-dim);
outline: none;
}
/* Search - Enhanced */
.search-wrap {
display: flex;
align-items: center;
gap: 8px;
height: 38px;
background: var(--bg-2);
border: 1px solid var(--border-2);
border-radius: var(--radius-lg);
padding: 0 12px;
transition: all var(--duration-fast) var(--ease-smooth);
position: relative;
}
.search-wrap::before {
content: '';
position: absolute;
inset: 0;
background: var(--gradient-subtle);
border-radius: inherit;
pointer-events: none;
opacity: 0;
transition: opacity var(--duration-base) var(--ease-smooth);
}
.search-wrap:focus-within {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-dim), 0 4px 12px var(--overlay);
}
.search-wrap:focus-within::before {
opacity: 1;
}
.search-ico {
width: 16px;
height: 16px;
color: var(--text-3);
flex-shrink: 0;
transition: color var(--duration-fast) var(--ease-smooth);
}
.search-wrap:focus-within .search-ico {
color: var(--accent);
}
.search-wrap input {
flex: 1;
font-size: 13px;
font-weight: 500;
background: none;
color: var(--text-1);
position: relative;
z-index: 1;
}
.search-wrap input::placeholder {
color: var(--text-3);
}
.search-kbd {
font-family: var(--font-mono);
font-size: 10px;
padding: 3px 6px;
background: var(--bg-3);
border: 1px solid var(--border-2);
border-radius: var(--radius-xs);
color: var(--text-3);
flex-shrink: 0;
font-weight: 500;
}
/* Topbar Buttons - Enhanced */
.tb-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
height: 32px;
padding: 0 12px;
font-size: 12px;
font-weight: 500;
border-radius: var(--radius-md);
color: var(--text-2);
background: transparent;
transition: all var(--duration-fast) var(--ease-smooth);
white-space: nowrap;
position: relative;
cursor: pointer;
}
.tb-btn::before {
content: '';
position: absolute;
inset: 0;
background: var(--bg-2);
border-radius: inherit;
opacity: 0;
transition: opacity var(--duration-fast) var(--ease-smooth);
z-index: -1;
}
.tb-btn svg {
width: 15px;
height: 15px;
flex-shrink: 0;
transition: color var(--duration-fast) var(--ease-smooth);
}
.tb-btn:hover {
color: var(--text-1);
}
.tb-btn:hover::before {
opacity: 1;
}
.tb-btn:active {
transform: scale(0.98);
}
.tb-btn-accent {
background: var(--gradient-strong);
color: #fff !important;
box-shadow: 0 4px 12px rgba(99,102,241,.35);
font-weight: 600;
}
.tb-btn-accent::before {
display: none !important;
}
.tb-btn-accent:hover {
box-shadow: 0 6px 20px rgba(99,102,241,.5) !important;
transform: translateY(-1px);
}
.tb-btn-accent:active {
transform: translateY(0);
}
.tb-divider {
width: 1px;
height: 18px;
background: linear-gradient(180deg, transparent 0%, var(--border-2) 50%, transparent 100%);
margin: 0 6px;
}
/* Auth dot */
.auth-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: #34d399;
box-shadow: 0 0 6px rgba(52,211,153,.7);
margin-left: 2px;
}
/* Export dropdown */
.export-group {
display: flex;
align-items: center;
gap: 4px;
position: relative;
}
.export-dropdown {
position: relative;
}
/* Export dropdown - Enhanced */
.export-menu {
position: absolute;
top: calc(100% + 8px);
right: 0;
min-width: 180px;
background: var(--bg-2);
border: 1px solid var(--border-2);
border-radius: var(--radius-lg);
box-shadow: 0 10px 32px var(--overlay);
overflow: hidden;
display: none;
z-index: 200;
animation: pop-in .14s var(--ease-smooth);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
}
.export-menu.open {
display: block;
}
@keyframes pop-in {
from {
opacity: 0;
transform: translateY(-8px) scale(.95);
}
to {
opacity: 1;
transform: none;
}
}
.export-item {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
padding: 10px 14px;
font-size: 12px;
transition: all var(--duration-fast) var(--ease-smooth);
cursor: pointer;
}
.export-item:hover {
background: var(--bg-3);
transform: translateX(2px);
}
.export-fmt {
font-weight: 600;
color: var(--text-1);
}
.export-desc {
color: var(--text-3);
font-family: var(--font-mono);
font-size: 10px;
}
.chevdown {
width: 14px;
height: 14px;
margin-left: 2px;
}
/* Icon buttons - Enhanced */
.icon-btn {
width: 32px;
height: 32px;
border-radius: var(--radius-md);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-2);
transition: all var(--duration-fast) var(--ease-smooth);
cursor: pointer;
position: relative;
}
.icon-btn::before {
content: '';
position: absolute;
inset: 0;
background: var(--bg-2);
border-radius: inherit;
opacity: 0;
transition: opacity var(--duration-fast) var(--ease-smooth);
z-index: -1;
}
.icon-btn:hover {
color: var(--text-1);
}
.icon-btn:hover::before {
opacity: 1;
}
.icon-btn:active {
transform: scale(0.92);
}
.icon-btn svg {
width: 16px;
height: 16px;
transition: transform var(--duration-base) var(--ease-smooth);
}
.icon-btn:hover svg {
transform: rotate(12deg);
}
[data-theme="dark"] .icon-sun {
display: block;
}
[data-theme="dark"] .icon-moon {
display: none;
}
[data-theme="light"] .icon-sun {
display: none;
}
[data-theme="light"] .icon-moon {
display: block;
}
/*
LAYOUT
*/
.app-shell {
display: flex;
flex-direction: column;
height: 100vh;
}
.layout {
display: flex;
flex: 1;
overflow: hidden;
margin-top: var(--topbar-h);
}
/*
SIDEBAR - Enhanced
*/
.sidebar {
width: var(--sidebar-w);
flex-shrink: 0;
overflow-y: auto;
overflow-x: hidden;
background: var(--sidebar-bg);
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
transition: background var(--duration-base) var(--ease-smooth);
}
.sidebar-inner {
padding: 12px 0 40px;
}
/* Overview link - Enhanced */
.nav-overview-link {
display: flex;
align-items: center;
gap: 10px;
width: 100%;
padding: 9px 16px;
font-size: 12px;
font-weight: 500;
color: var(--text-2);
border-radius: 0;
margin-bottom: 4px;
transition: all var(--duration-fast) var(--ease-smooth);
position: relative;
cursor: pointer;
}
.nav-overview-link svg {
width: 15px;
height: 15px;
flex-shrink: 0;
transition: color var(--duration-fast) var(--ease-smooth);
}
.nav-overview-link:hover {
background: var(--bg-2);
color: var(--text-1);
padding-left: 18px;
}
.nav-overview-link.active {
background: linear-gradient(90deg, var(--accent-dim) 0%, transparent 100%);
color: var(--accent-2);
position: relative;
}
.nav-overview-link.active::before {
content: '';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 3px;
height: 18px;
background: var(--accent-gradient);
border-radius: 0 2px 2px 0;
box-shadow: 2px 0 8px rgba(99,102,241,.3);
}
/* Nav groups - Enhanced */
.nav-group {
margin-bottom: 2px;
}
.nav-group-header {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
padding: 10px 16px 6px;
font-size: 10px;
font-weight: 700;
color: var(--text-3);
letter-spacing: .08em;
text-transform: uppercase;
transition: all var(--duration-fast) var(--ease-smooth);
cursor: pointer;
user-select: none;
}
.nav-group-header:hover {
color: var(--text-2);
}
.chev {
width: 12px;
height: 12px;
transition: transform var(--duration-base) var(--ease-smooth);
flex-shrink: 0;
}
.nav-group.collapsed .chev {
transform: rotate(-90deg);
}
.nav-group-count {
margin-left: auto;
font-size: 10px;
font-weight: 700;
padding: 1px 7px;
height: 18px;
line-height: 18px;
background: var(--bg-3);
border-radius: var(--radius-full);
color: var(--text-3);
font-family: var(--font-mono);
}
.nav-endpoints {
}
.nav-group.collapsed .nav-endpoints {
display: none;
}
/* Endpoint items - Enhanced */
.nav-endpoint {
display: flex;
align-items: center;
gap: 10px;
width: 100%;
padding: 6px 16px 6px 28px;
font-size: 12px;
font-weight: 500;
color: var(--text-2);
transition: all var(--duration-fast) var(--ease-smooth);
border-left: 3px solid transparent;
overflow: hidden;
min-height: 32px;
cursor: pointer;
position: relative;
}
.nav-endpoint::before {
content: '';
position: absolute;
inset: 0;
background: var(--gradient-subtle);
opacity: 0;
transition: opacity var(--duration-fast) var(--ease-smooth);
z-index: -1;
}
.nav-endpoint:hover {
background: var(--bg-2);
color: var(--text-1);
padding-left: 30px;
}
.nav-endpoint:hover::before {
opacity: 1;
}
.nav-endpoint.active {
background: color-mix(in srgb, var(--method-color, var(--accent)) 12%, var(--bg-2));
color: var(--text-1);
border-left-color: var(--method-color, var(--accent));
font-weight: 600;
}
.nav-endpoint.active::after {
content: '';
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
width: 2px;
height: 12px;
background: var(--method-color, var(--accent));
border-radius: 1px 0 0 1px;
box-shadow: -2px 0 6px rgba(99,102,241,.3);
}
.nav-endpoint.deprecated {
opacity: 0.5;
text-decoration: line-through;
}
/* Method tags - Enhanced */
.method-tag {
font-family: var(--font-mono);
font-size: 9px;
font-weight: 800;
padding: 2px 6px;
border-radius: var(--radius-sm);
flex-shrink: 0;
letter-spacing: .06em;
background: color-mix(in srgb, var(--method-color, var(--m-default)) 20%, transparent);
color: var(--method-color, var(--m-default));
min-width: 42px;
text-align: center;
border: 1px solid color-mix(in srgb, var(--method-color, var(--m-default)) 35%, transparent);
transition: all var(--duration-fast) var(--ease-smooth);
}
.nav-endpoint:hover .method-tag {
background: color-mix(in srgb, var(--method-color, var(--m-default)) 30%, transparent);
border-color: color-mix(in srgb, var(--method-color, var(--m-default)) 50%, transparent);
}
.nav-endpoint-path {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 400;
}
.nav-empty {
padding: 20px 16px;
color: var(--text-3);
font-size: 12px;
line-height: 1.6;
}
/* Skeleton */
.skeleton {
background: linear-gradient(90deg, var(--bg-3) 25%, var(--bg-4) 50%, var(--bg-3) 75%);
background-size: 200% 100%;
animation: shimmer 1.6s infinite;
border-radius: 4px;
}
@keyframes shimmer {
from {
background-position: 200% 0;
}
to {
background-position: -200% 0;
}
}
/*
MAIN CONTENT
*/
.content-area {
flex: 1;
display: flex;
overflow: hidden;
min-width: 0;
}
/* Detail pane */
.detail-pane {
flex: 1;
overflow-y: auto;
min-width: 0;
background: var(--bg-0);
}
.detail-content {
max-width: 820px;
margin: 0 auto;
padding: 36px 44px 100px;
}
/* Try pane */
.try-pane {
width: var(--try-w);
flex-shrink: 0;
overflow-y: auto;
background: var(--bg-1);
border-left: 1px solid var(--border);
}
.try-content {
padding: 18px;
}
/*
ANIMATIONS - Enhanced
*/
.fade-in {
animation: fade-up var(--duration-base) var(--ease);
}
@keyframes fade-up {
from {
opacity: 0;
transform: translateY(12px);
}
to {
opacity: 1;
transform: translate(0);
}
}
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes slide-in-left {
from {
opacity: 0;
transform: translateX(-16px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slide-down {
from {
opacity: 0;
transform: translateY(-12px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes scale-in {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes bounce-in {
0% {
opacity: 0;
transform: scale(0.3);
}
50% {
opacity: 1;
transform: scale(1.05);
}
70% {
transform: scale(0.9);
}
100% {
transform: scale(1);
}
}
@keyframes shimmer {
0% {
background-position: -1000px 0;
}
100% {
background-position: 1000px 0;
}
}
/*
OVERVIEW
*/
.overview-hero {
margin-bottom: 36px;
padding-bottom: 36px;
border-bottom: 1px solid var(--border);
}
.overview-eyebrow {
display: flex;
align-items: center;
gap: 7px;
font-size: 10.5px;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
color: var(--accent-2);
margin-bottom: 16px;
opacity: .85;
}
.overview-eyebrow svg {
width: 13px;
height: 13px;
}
.overview-title {
font-size: 30px;
font-weight: 800;
line-height: 1.15;
letter-spacing: -.03em;
margin-bottom: 12px;
background: linear-gradient(135deg, var(--text-1) 40%, var(--accent-2) 120%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.overview-desc {
font-size: 14px;
color: var(--text-2);
line-height: 1.75;
max-width: 540px;
}
.overview-meta {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 18px;
}
.overview-pill {
display: flex;
align-items: center;
gap: 6px;
font-size: 11.5px;
font-family: var(--font-mono);
padding: 5px 12px;
background: var(--bg-2);
border: 1px solid var(--border-2);
border-radius: 99px;
color: var(--text-2);
}
.overview-pill svg {
width: 12px;
height: 12px;
}
/* Stats */
.overview-stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12px;
margin-bottom: 36px;
}
.overview-stat {
background: var(--bg-1);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 20px 16px;
text-align: center;
position: relative;
overflow: hidden;
transition: border-color .2s, transform .2s var(--ease);
}
.overview-stat::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, var(--accent) 0%, #8b5cf6 50%, #06b6d4 100%);
opacity: 0;
transition: opacity .2s;
}
.overview-stat:hover::before {
opacity: 1;
}
.overview-stat:hover {
border-color: var(--border-2);
transform: translateY(-1px);
}
.overview-stat-value {
font-size: 28px;
font-weight: 800;
color: var(--text-1);
line-height: 1;
letter-spacing: -.03em;
}
.overview-stat-label {
font-size: 10.5px;
font-weight: 600;
color: var(--text-3);
margin-top: 6px;
text-transform: uppercase;
letter-spacing: .07em;
}
/* Overview section */
.overview-section-title {
font-size: 10.5px;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
color: var(--text-3);
margin: 32px 0 14px;
}
/* Security badges - Enhanced */
.security-badges {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.security-badge {
display: flex;
align-items: center;
gap: 7px;
font-size: 12px;
font-weight: 600;
padding: 7px 13px;
background: var(--bg-2);
border: 1px solid var(--border-2);
border-radius: var(--radius-md);
color: var(--text-2);
transition: all var(--duration-base) var(--ease-smooth));
cursor: pointer;
position: relative;
overflow: hidden;
}
.security-badge::before {
content: '';
position: absolute;
inset: 0;
background: var(--gradient-subtle);
opacity: 0;
transition: opacity var(--duration-base) var(--ease-smooth));
z-index: -1;
}
.security-badge svg {
width: 13px;
height: 13px;
transition: transform var(--duration-base) var(--ease-smooth));
}
button.security-badge:hover {
border-color: var(--accent);
color: var(--accent-2);
background: var(--accent-dim);
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(99,102,241,.2);
}
button.security-badge:hover svg {
transform: rotate(12deg) scale(1.15);
}
/* Overview group cards - Enhanced */
.overview-group-card {
background: var(--bg-1);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
margin-bottom: 14px;
overflow: hidden;
transition: all var(--duration-base) var(--ease-smooth);
box-shadow: 0 1px 3px var(--overlay);
}
.overview-group-card:hover {
border-color: var(--border-2);
box-shadow: var(--shadow-sm);
transform: translateY(-2px);
}
.overview-group-card-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 18px;
font-size: 13px;
font-weight: 700;
border-bottom: 1px solid var(--border);
background: linear-gradient(90deg, var(--bg-2) 0%, transparent 100%);
letter-spacing: -.01em;
}
.overview-group-routes {
}
.overview-route-row {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 18px;
cursor: pointer;
transition: all var(--duration-fast) var(--ease-smooth);
border-bottom: 1px solid var(--border);
position: relative;
}
.overview-route-row::before {
content: '';
position: absolute;
inset: 0;
background: var(--gradient-subtle);
opacity: 0;
transition: opacity var(--duration-fast) var(--ease-smooth);
z-index: -1;
}
.overview-route-row:last-child {
border-bottom: none;
}
.overview-route-row:hover {
transform: translateX(2px);
}
.overview-route-row:hover::before {
opacity: 1;
}
.method-badge {
font-family: var(--font-mono);
font-size: 9px;
font-weight: 800;
padding: 3px 8px;
border-radius: var(--radius-sm);
flex-shrink: 0;
background: color-mix(in srgb, var(--method-color, var(--m-default)) 18%, transparent);
color: var(--method-color, var(--m-default));
min-width: 50px;
text-align: center;
letter-spacing: .04em;
border: 1px solid color-mix(in srgb, var(--method-color, var(--m-default)) 30%, transparent);
transition: all var(--duration-fast) var(--ease-smooth);
}
.overview-route-row:hover .method-badge {
background: color-mix(in srgb, var(--method-color, var(--m-default)) 28%, transparent);
border-color: color-mix(in srgb, var(--method-color, var(--m-default)) 50%, transparent);
}
.route-path {
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
flex-shrink: 0;
color: var(--text-1);
letter-spacing: -.01em;
}
.route-summary {
font-size: 12px;
color: var(--text-2);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
}
.route-arrow {
width: 16px;
height: 16px;
color: var(--text-3);
flex-shrink: 0;
margin-left: auto;
transition: all var(--duration-fast) var(--ease-smooth);
opacity: 0;
}
.overview-route-row:hover .route-arrow {
opacity: 1;
color: var(--accent-2);
transform: translateX(4px);
}
/*
ENDPOINT DETAIL
*/
.endpoint-header {
margin-bottom: 32px;
padding-bottom: 28px;
border-bottom: 1px solid var(--border);
}
.breadcrumb {
display: flex;
align-items: center;
gap: 6px;
font-size: 11.5px;
color: var(--text-3);
margin-bottom: 14px;
}
.breadcrumb svg {
width: 13px;
height: 13px;
}
.breadcrumb .current {
color: var(--text-2);
}
.request-line {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 14px;
padding: 12px 16px;
background: var(--bg-1);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
border-left: 3px solid var(--method-color, var(--accent));
}
.endpoint-path {
font-family: var(--font-mono);
font-size: 14px;
font-weight: 500;
color: var(--text-1);
letter-spacing: -.01em;
flex: 1;
}
.copy-route-btn {
width: 28px;
height: 28px;
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-3);
transition: background .12s, color .12s;
flex-shrink: 0;
}
.copy-route-btn svg {
width: 14px;
height: 14px;
}
.copy-route-btn:hover {
background: var(--bg-3);
color: var(--text-1);
}
.endpoint-summary {
font-size: 22px;
font-weight: 800;
letter-spacing: -.03em;
margin-bottom: 8px;
line-height: 1.2;
}
.endpoint-description {
font-size: 13.5px;
color: var(--text-2);
line-height: 1.75;
}
.deprecated-banner {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 16px;
margin: 14px 0;
background: color-mix(in srgb, #fbbf24 8%, transparent);
border: 1px solid color-mix(in srgb, #fbbf24 25%, transparent);
border-radius: var(--radius-md);
font-size: 12px;
color: #fbbf24;
}
.deprecated-banner svg {
width: 14px;
height: 14px;
flex-shrink: 0;
}
/* Sections */
.section {
margin-bottom: 32px;
}
.section-title {
font-size: 10.5px;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
color: var(--text-3);
margin-bottom: 14px;
display: flex;
align-items: center;
gap: 8px;
}
.count {
font-size: 10px;
font-family: var(--font-mono);
padding: 0 7px;
height: 17px;
line-height: 17px;
background: var(--bg-3);
border-radius: 99px;
color: var(--text-2);
font-weight: 600;
}
/* Param table */
.param-table {
width: 100%;
border-collapse: collapse;
font-size: 12.5px;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
overflow: hidden;
}
.param-table thead th {
text-align: left;
padding: 9px 14px;
font-size: 10px;
font-weight: 700;
letter-spacing: .09em;
text-transform: uppercase;
color: var(--text-3);
background: var(--bg-1);
border-bottom: 1px solid var(--border);
}
.param-table tbody tr {
border-bottom: 1px solid var(--border);
transition: background .1s;
}
.param-table tbody tr:last-child {
border-bottom: none;
}
.param-table tbody tr:hover {
background: var(--bg-2);
}
.param-table td {
padding: 10px 14px;
vertical-align: top;
}
.param-name {
font-family: var(--font-mono);
font-size: 12.5px;
font-weight: 600;
}
.param-required {
color: #f87171;
margin-left: 2px;
font-size: 14px;
line-height: 1;
}
.param-loc {
display: inline-block;
padding: 2px 7px;
font-size: 9.5px;
font-weight: 700;
background: var(--bg-3);
border-radius: var(--radius-xs);
color: var(--text-2);
font-family: var(--font-mono);
letter-spacing: .03em;
}
.param-type {
font-family: var(--font-mono);
font-size: 11px;
color: var(--accent-2);
}
.param-desc {
color: var(--text-2);
font-size: 12px;
}
/* Schema box */
.schema-box {
background: var(--code-bg);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 16px 20px;
font-family: var(--font-mono);
font-size: 12px;
line-height: 1.85;
white-space: pre-wrap;
overflow-x: auto;
}
.schema-key {
color: #93c5fd;
}
.schema-type {
color: var(--accent-2);
}
.schema-comment {
color: var(--text-3);
font-style: italic;
}
.schema-punct {
color: var(--text-3);
}
.schema-required-mark {
color: #f87171;
}
.schema-nullable-mark {
color: #fbbf24;
}
/* Response blocks */
.response-block {
margin-bottom: 10px;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
overflow: hidden;
transition: border-color .15s;
}
.response-block:hover {
border-color: var(--border-2);
}
.response-block-header {
display: flex;
align-items: center;
gap: 12px;
padding: 11px 16px;
background: var(--bg-1);
}
.response-block-body {
padding: 14px 16px;
border-top: 1px solid var(--border);
background: var(--bg-0);
}
/* Status pills - Enhanced */
.status-pill {
display: inline-flex;
align-items: center;
justify-content: center;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 700;
padding: 4px 10px;
border-radius: var(--radius-md);
flex-shrink: 0;
letter-spacing: .04em;
border: 1px solid;
transition: all var(--duration-fast) var(--ease-smooth));
}
.status-2xx {
background: color-mix(in srgb, #10b981 16%, transparent);
color: #10b981;
border-color: color-mix(in srgb, #10b981 30%, transparent);
}
.status-2xx:hover {
background: color-mix(in srgb, #10b981 25%, transparent);
border-color: #10b981;
box-shadow: 0 0 8px rgba(16,185,129,.2);
}
.status-4xx {
background: color-mix(in srgb, #f59e0b 16%, transparent);
color: #f59e0b;
border-color: color-mix(in srgb, #f59e0b 30%, transparent);
}
.status-4xx:hover {
background: color-mix(in srgb, #f59e0b 25%, transparent);
border-color: #f59e0b;
box-shadow: 0 0 8px rgba(245,158,11,.2);
}
.status-5xx {
background: color-mix(in srgb, #ef4444 16%, transparent);
color: #ef4444;
border-color: color-mix(in srgb, #ef4444 30%, transparent);
}
.status-5xx:hover {
background: color-mix(in srgb, #ef4444 25%, transparent);
border-color: #ef4444;
box-shadow: 0 0 8px rgba(239,68,68,.2);
}
.response-desc {
font-size: 13px;
color: var(--text-2);
}
/*
TRY-IT PANE
*/
.try-empty {
text-align: center;
padding: 70px 28px;
color: var(--text-3);
font-size: 13px;
line-height: 1.75;
}
.try-empty svg {
width: 28px;
height: 28px;
margin: 0 auto 14px;
display: block;
opacity: .3;
}
.try-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
padding-bottom: 14px;
border-bottom: 1px solid var(--border);
}
.try-title {
font-size: 11px;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
color: var(--text-2);
display: flex;
align-items: center;
gap: 8px;
}
.live-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--method-color, var(--accent));
box-shadow: 0 0 8px var(--method-color, var(--accent));
animation: pulse-dot 2.2s ease-in-out infinite;
}
@keyframes pulse-dot {
0%, 100% {
opacity: 1;
transform: scale(1);
box-shadow: 0 0 12px color-mix(in srgb, var(--method-color, var(--accent)) 100%, transparent);
}
50% {
opacity: 0.6;
transform: scale(0.8);
box-shadow: 0 0 20px color-mix(in srgb, var(--method-color, var(--accent)) 60%, transparent);
}
}
/* Try tabs */
.try-tabs {
display: flex;
gap: 2px;
margin-bottom: 16px;
background: var(--bg-2);
border-radius: var(--radius-md);
padding: 3px;
border: 1px solid var(--border);
}
.try-tab {
flex: 1;
height: 27px;
font-size: 12px;
font-weight: 600;
border-radius: calc(var(--radius-md) - 2px);
color: var(--text-3);
transition: background .12s, color .12s, box-shadow .12s;
}
.try-tab.active {
background: var(--bg-1);
color: var(--text-1);
box-shadow: var(--shadow-sm);
}
.try-tab:hover:not(.active) {
color: var(--text-2);
background: var(--bg-3);
}
/* Auth banner */
.auth-banner {
display: flex;
align-items: center;
gap: 9px;
padding: 10px 14px;
border-radius: var(--radius-md);
font-size: 12px;
margin-bottom: 14px;
}
.auth-banner svg {
width: 14px;
height: 14px;
flex-shrink: 0;
}
.auth-set {
background: color-mix(in srgb, #34d399 10%, transparent);
border: 1px solid color-mix(in srgb, #34d399 22%, transparent);
color: #34d399;
}
.auth-missing {
background: color-mix(in srgb, #fbbf24 10%, transparent);
border: 1px solid color-mix(in srgb, #fbbf24 22%, transparent);
color: #fbbf24;
}
.auth-banner-link {
margin-left: auto;
font-size: 11.5px;
font-weight: 700;
text-decoration: underline;
background: none;
border: none;
cursor: pointer;
color: inherit;
opacity: .85;
flex-shrink: 0;
}
.auth-banner-link:hover {
opacity: 1;
}
/* Mock toggle */
.mock-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
padding: 9px 14px;
background: var(--bg-2);
border: 1px solid var(--border);
border-radius: var(--radius-md);
font-size: 12px;
margin-bottom: 14px;
cursor: pointer;
transition: border-color .13s;
}
.mock-toggle-row:hover {
border-color: var(--border-2);
}
.mock-toggle-label {
color: var(--text-2);
}
/* Switch */
.switch {
position: relative;
display: inline-block;
width: 34px;
height: 19px;
flex-shrink: 0;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.switch-slider {
position: absolute;
inset: 0;
cursor: pointer;
background: var(--bg-4);
border-radius: 99px;
transition: background .2s;
}
.switch-slider::before {
content: '';
position: absolute;
width: 13px;
height: 13px;
border-radius: 50%;
left: 3px;
top: 3px;
background: #fff;
transition: transform .2s var(--ease);
box-shadow: 0 1px 4px rgba(0,0,0,.3);
}
.switch input:checked + .switch-slider {
background: var(--accent);
}
.switch input:checked + .switch-slider::before {
transform: translateX(15px);
}
/* Field groups */
.field-group {
margin-bottom: 14px;
}
.field-label {
font-size: 10.5px;
font-weight: 700;
letter-spacing: .08em;
text-transform: uppercase;
color: var(--text-3);
margin-bottom: 9px;
}
.field-sublabel {
font-size: 12px;
font-weight: 500;
color: var(--text-2);
margin-bottom: 5px;
display: flex;
align-items: center;
gap: 7px;
}
.type-hint {
font-family: var(--font-mono);
font-size: 10px;
color: var(--text-3);
}
.req-star {
color: #f87171;
}
.field-input {
width: 100%;
background: var(--bg-2);
border: 1px solid var(--border-2);
border-radius: var(--radius-md);
padding: 8px 12px;
font-size: 12.5px;
color: var(--text-1);
transition: border-color .15s, box-shadow .15s;
}
.field-input:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-dim);
outline: none;
}
textarea.field-input {
min-height: 120px;
font-family: var(--font-mono);
font-size: 12px;
resize: vertical;
line-height: 1.7;
}
/* Send button */
.send-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
width: 100%;
height: 40px;
font-size: 13px;
font-weight: 700;
letter-spacing: -.01em;
background: var(--method-color, var(--accent));
color: #fff;
border-radius: var(--radius-md);
margin-top: 6px;
transition: opacity .14s, transform .1s var(--ease), box-shadow .14s;
box-shadow: 0 2px 12px color-mix(in srgb, var(--method-color, var(--accent)) 45%, transparent);
position: relative;
overflow: hidden;
}
.send-btn::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgba(255,255,255,.15) 0%, transparent 100%);
}
.send-btn svg {
width: 16px;
height: 16px;
position: relative;
z-index: 1;
}
.send-btn span {
position: relative;
z-index: 1;
}
.send-btn:hover {
opacity: .88;
transform: translateY(-1px);
box-shadow: 0 4px 18px color-mix(in srgb, var(--method-color, var(--accent)) 55%, transparent);
}
.send-btn:active {
transform: scale(.98);
}
.send-btn:disabled {
opacity: .4;
cursor: not-allowed;
transform: none;
}
/* Code language tabs */
.code-lang-tabs {
display: flex;
gap: 2px;
margin-bottom: 12px;
overflow-x: auto;
background: var(--bg-2);
border-radius: var(--radius-md);
padding: 3px;
border: 1px solid var(--border);
}
.code-lang-tab {
padding: 4px 12px;
font-size: 11px;
font-weight: 600;
border-radius: calc(var(--radius-md) - 2px);
color: var(--text-3);
white-space: nowrap;
transition: background .12s, color .12s;
}
.code-lang-tab.active {
background: var(--accent-dim);
color: var(--accent-2);
}
.code-lang-tab:hover:not(.active) {
background: var(--bg-3);
color: var(--text-2);
}
.curl-header-row {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 9px;
}
.curl-box {
background: var(--code-bg);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 16px;
font-family: var(--font-mono);
font-size: 11.5px;
line-height: 1.85;
overflow-x: auto;
white-space: pre;
}
.curl-flag {
color: #38bdf8;
}
.curl-string {
color: #86efac;
}
/* Response panel */
.response-panel {
margin-top: 14px;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
overflow: hidden;
animation: fade-up .18s var(--ease);
}
.response-meta {
display: flex;
align-items: center;
gap: 9px;
padding: 9px 14px;
background: var(--bg-2);
border-bottom: 1px solid var(--border);
}
.response-time {
display: flex;
align-items: center;
gap: 5px;
font-size: 11px;
color: var(--text-3);
font-family: var(--font-mono);
}
.response-time svg {
width: 12px;
height: 12px;
}
.mock-badge {
display: flex;
align-items: center;
gap: 4px;
font-size: 10.5px;
font-weight: 600;
padding: 2px 8px;
border-radius: 99px;
background: color-mix(in srgb, var(--accent) 14%, transparent);
color: var(--accent-2);
}
.response-body {
padding: 16px;
font-family: var(--font-mono);
font-size: 12px;
line-height: 1.75;
white-space: pre-wrap;
word-break: break-all;
max-height: 400px;
overflow-y: auto;
background: var(--code-bg);
}
.response-error {
color: #f87171;
}
/* JSON highlighting */
.json-key {
color: #93c5fd;
}
.json-string {
color: #86efac;
}
.json-number {
color: #fdba74;
}
.json-boolean {
color: #f9a8d4;
}
.json-null {
color: var(--text-3);
}
/* Copy button */
.copy-btn {
display: flex;
align-items: center;
gap: 5px;
height: 27px;
padding: 0 9px;
font-size: 11px;
font-weight: 600;
background: var(--bg-3);
border: 1px solid var(--border-2);
border-radius: var(--radius-sm);
color: var(--text-2);
transition: background .12s, color .12s, border-color .12s;
}
.copy-btn svg {
width: 12px;
height: 12px;
}
.copy-btn:hover {
background: var(--bg-4);
color: var(--text-1);
border-color: var(--border-3);
}
/* Spinner - Enhanced */
.spinner {
display: inline-block;
width: 16px;
height: 16px;
border: 2.5px solid rgba(99,102,241,.15);
border-top-color: var(--accent);
border-radius: 50%;
animation: spin 0.8s cubic-bezier(.8,.2,.2,.8) infinite;
box-shadow: 0 0 8px rgba(99,102,241,.2);
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
/* History */
.history-empty {
padding: 28px 16px;
text-align: center;
color: var(--text-3);
font-size: 12px;
line-height: 1.75;
}
.history-item {
padding: 10px;
border-bottom: 1px solid var(--border);
cursor: pointer;
transition: background .1s;
border-radius: var(--radius-sm);
margin-bottom: 2px;
}
.history-item:hover {
background: var(--bg-2);
}
.history-item-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 4px;
}
.history-item-time {
font-size: 11px;
color: var(--text-3);
margin-left: auto;
font-family: var(--font-mono);
}
.history-item-path {
font-family: var(--font-mono);
font-size: 11px;
color: var(--text-2);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/*
MODAL - Premium with Glassmorphism
*/
.modal-backdrop {
position: fixed;
inset: 0;
z-index: 1000;
background: rgba(0,0,0,.5);
backdrop-filter: blur(8px) saturate(1.5);
-webkit-backdrop-filter: blur(8px) saturate(1.5);
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
animation: fade-in var(--duration-base) var(--ease-smooth));
}
.modal-box {
background: var(--bg-1);
border: 1px solid var(--border-2);
border-radius: var(--radius-xl);
background: linear-gradient(135deg, var(--bg-1) 0%, color-mix(in srgb, var(--bg-1) 95%, var(--accent)) 100%);
box-shadow: 0 10px 40px rgba(0,0,0,.3), 0 0 1px rgba(99,102,241,.2) inset;
width: 100%;
max-width: 490px;
max-height: 82vh;
display: flex;
flex-direction: column;
overflow: hidden;
animation: modal-in var(--duration-base) var(--ease-smooth));
}
.modal-box:before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(99,102,241,.05) 0%, transparent 100%);
pointer-events: none;
z-index: -1;
}
.modal-wide {
max-width: 660px;
}
.modal-head {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 24px;
border-bottom: 1px solid var(--border);
flex-shrink: 0;
background: linear-gradient(90deg, var(--bg-2) 0%, transparent 100%);
}
.modal-title {
font-size: 16px;
font-weight: 700;
letter-spacing: -.01em;
background: linear-gradient(135deg, var(--text-1) 40%, var(--accent-2) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.modal-close {
width: 30px;
height: 30px;
border-radius: var(--radius-md);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-3);
transition: background .12s, color .12s;
}
.modal-close:hover {
background: var(--bg-3);
color: var(--text-1);
}
.modal-close svg {
width: 15px;
height: 15px;
}
.modal-body {
overflow-y: auto;
padding: 20px 22px;
flex: 1;
}
/* Auth card - Enhanced */
.auth-scheme-card {
background: var(--bg-2);
border: 1px solid var(--border-2);
border-radius: var(--radius-lg);
padding: 18px;
margin-bottom: 14px;
transition: all var(--duration-base) var(--ease-smooth));
position: relative;
overflow: hidden;
}
.auth-scheme-card::before {
content: '';
position: absolute;
inset: 0;
background: var(--gradient-subtle);
opacity: 0;
transition: opacity var(--duration-base) var(--ease-smooth));
z-index: -1;
}
.auth-scheme-card:hover {
border-color: var(--accent);
box-shadow: var(--shadow-sm);
transform: translateY(-2px);
}
.auth-scheme-card:hover::before {
opacity: 1;
}
.auth-scheme-head {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 14px;
}
.auth-scheme-name {
font-size: 13.5px;
font-weight: 700;
}
.auth-scheme-type {
font-size: 9.5px;
font-weight: 700;
padding: 2px 7px;
border-radius: var(--radius-xs);
background: var(--bg-3);
color: var(--text-2);
font-family: var(--font-mono);
letter-spacing: .04em;
text-transform: uppercase;
}
.auth-scheme-status {
width: 9px;
height: 9px;
border-radius: 50%;
background: var(--bg-5);
margin-left: auto;
flex-shrink: 0;
transition: background .25s, box-shadow .25s;
}
.auth-scheme-status.set {
background: #34d399;
box-shadow: 0 0 8px rgba(52,211,153,.5);
}
.auth-scheme-desc {
font-size: 12px;
color: var(--text-2);
margin-bottom: 12px;
line-height: 1.6;
}
.auth-clear-btn {
font-size: 11px;
color: var(--text-3);
margin-top: 8px;
text-decoration: underline;
transition: color .12s;
}
.auth-clear-btn:hover {
color: #f87171;
}
/* Console */
.console-trigger {
display: flex;
gap: 8px;
margin-bottom: 14px;
}
.request-url {
flex: 1;
}
/* Diff */
.diff-summary {
display: flex;
gap: 16px;
padding: 14px 0;
margin-bottom: 18px;
border-bottom: 1px solid var(--border);
flex-wrap: wrap;
}
.diff-row {
display: flex;
align-items: center;
gap: 9px;
font-size: 12.5px;
color: var(--text-2);
margin-bottom: 6px;
}
.diff-tag {
font-family: var(--font-mono);
font-size: 11px;
padding: 2px 8px;
border-radius: var(--radius-sm);
font-weight: 700;
}
.diff-tag-added {
background: color-mix(in srgb, #34d399 14%, transparent);
color: #34d399;
}
.diff-tag-removed {
background: color-mix(in srgb, #f87171 14%, transparent);
color: #f87171;
}
.diff-tag-changed {
background: color-mix(in srgb, #fbbf24 14%, transparent);
color: #fbbf24;
}
/*
DASHBOARD DRAWER - Premium with Glassmorphism
*/
.drawer {
position: fixed;
top: var(--topbar-h);
right: 0;
bottom: 0;
z-index: 90;
width: 420px;
background: var(--bg-1);
border-left: 1px solid var(--border);
box-shadow: -10px 0 40px rgba(0,0,0,.3);
display: flex;
flex-direction: column;
animation: slide-in-right var(--duration-base) var(--ease-smooth));
backdrop-filter: blur(2px);
-webkit-backdrop-filter: blur(2px);
}
@keyframes slide-in-right {
from {
transform: translateX(100%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
.drawer-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 22px;
border-bottom: 1px solid var(--border);
flex-shrink: 0;
background: linear-gradient(90deg, var(--bg-2) 0%, transparent 100%);
}
.drawer-title {
font-size: 16px;
font-weight: 700;
letter-spacing: -.01em;
background: linear-gradient(135deg, var(--text-1) 40%, var(--accent-2) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.drawer-body {
overflow-y: auto;
padding: 22px;
flex: 1;
}
/* Dashboard stat cards - Enhanced */
.stat-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-bottom: 24px;
}
.stat-card {
background: var(--bg-2);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 18px;
text-align: center;
position: relative;
overflow: hidden;
transition: all var(--duration-base) var(--ease-smooth);
cursor: pointer;
}
.stat-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, var(--accent) 0%, #8b5cf6 100%);
}
.stat-card::after {
content: '';
position: absolute;
inset: 0;
background: var(--gradient-subtle);
opacity: 0;
transition: opacity var(--duration-base) var(--ease-smooth);
z-index: -1;
}
.stat-card:hover {
border-color: var(--border-2);
box-shadow: var(--shadow-sm);
transform: translateY(-4px);
}
.stat-card:hover::after {
opacity: 1;
}
.stat-card-err::before {
background: linear-gradient(90deg, #ef4444, #f87171);
}
.stat-card-err .stat-val {
color: #ef4444;
}
.stat-val {
font-size: 26px;
font-weight: 800;
line-height: 1;
color: var(--text-1);
letter-spacing: -.02em;
transition: all var(--duration-fast) var(--ease-smooth);
}
.stat-card:hover .stat-val {
font-size: 28px;
}
.stat-lbl {
font-size: 11px;
font-weight: 600;
color: var(--text-3);
margin-top: 6px;
text-transform: uppercase;
letter-spacing: .08em;
transition: color var(--duration-fast) var(--ease-smooth);
}
.stat-card:hover .stat-lbl {
color: var(--text-2);
}
.dash-section {
margin-bottom: 18px;
background: var(--bg-2);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: 0 1px 2px var(--overlay);
transition: all var(--duration-base) var(--ease-smooth);
}
.dash-section-title {
padding: 13px 16px 0;
font-size: 12px;
font-weight: 700;
color: var(--text-2);
text-transform: uppercase;
letter-spacing: .07em;
}
/* Request items */
.request-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 9px 16px;
border-bottom: 1px solid var(--border);
font-size: 12px;
transition: background .1s;
}
.request-item:last-child {
border-bottom: none;
}
.request-item:hover {
background: var(--bg-3);
}
.request-method {
font-family: var(--font-mono);
font-size: 9.5px;
font-weight: 800;
padding: 2px 7px;
border-radius: var(--radius-xs);
margin-right: 8px;
background: var(--bg-3);
color: var(--text-2);
letter-spacing: .04em;
}
.request-time {
font-size: 11px;
color: var(--text-3);
font-family: var(--font-mono);
}
.request-status-error {
color: #f87171 !important;
}
.request-status-success {
color: #34d399 !important;
}
/*
UTILITIES
*/
code {
font-family: var(--font-mono);
font-size: .9em;
background: var(--bg-3);
border: 1px solid var(--border);
padding: 1px 6px;
border-radius: var(--radius-xs);
}
/**
* ADVANCED REQUEST BUILDER STYLES
* New UI components for enhanced request handling
*/
/* Request Parameter Editor */
.params-editor {
display: flex;
flex-direction: column;
gap: 12px;
padding: 12px;
}
.param-group {
border: 1px solid var(--border);
border-radius: var(--radius-md);
background: var(--bg-2);
overflow: hidden;
}
.param-group-header {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 12px;
background: var(--bg-3);
border-bottom: 1px solid var(--border);
font-size: 12px;
font-weight: 600;
cursor: pointer;
user-select: none;
}
.param-group-header:hover {
background: var(--bg-4);
}
.param-group-chevron {
width: 16px;
height: 16px;
stroke: currentColor;
transition: transform 0.2s;
}
.param-group.collapsed .param-group-chevron {
transform: rotate(-90deg);
}
.param-group.collapsed .param-items {
display: none;
}
.param-items {
display: flex;
flex-direction: column;
}
.param-row {
display: grid;
grid-template-columns: 1fr 2fr 1fr auto;
gap: 8px;
align-items: center;
padding: 10px 12px;
border-bottom: 1px solid var(--border);
}
.param-row:last-child {
border-bottom: none;
}
.param-row.required .param-name::before {
content: '*';
color: #f87171;
margin-right: 4px;
}
.param-name {
font-size: 12px;
font-weight: 500;
color: var(--text-1);
font-family: var(--font-mono);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.param-input {
padding: 6px 8px;
background: var(--bg-1);
border: 1px solid var(--border-2);
border-radius: var(--radius-sm);
color: var(--text-1);
font-family: var(--font-mono);
font-size: 12px;
}
.param-input:focus {
outline: none;
border-color: var(--accent);
box-shadow: 0 0 0 2px var(--accent-dim);
}
.param-type {
font-size: 11px;
color: var(--text-3);
padding: 4px 8px;
background: var(--bg-1);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
}
.param-remove {
width: 24px;
height: 24px;
padding: 4px;
background: none;
border: none;
color: var(--text-3);
cursor: pointer;
border-radius: var(--radius-sm);
transition: all 0.2s;
display: flex;
align-items: center;
justify-content: center;
}
.param-remove:hover {
background: rgba(248, 113, 113, 0.1);
color: #f87171;
}
/* Code Block & Generator */
.code-generator {
display: flex;
flex-direction: column;
gap: 8px;
padding: 12px;
background: var(--bg-2);
border-radius: var(--radius-md);
border: 1px solid var(--border);
}
.code-lang-select {
display: flex;
gap: 6px;
flex-wrap: wrap;
}
.code-lang-btn {
padding: 6px 12px;
background: var(--bg-1);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
font-size: 12px;
color: var(--text-2);
cursor: pointer;
transition: all 0.2s;
font-family: var(--font-mono);
}
.code-lang-btn:hover {
border-color: var(--accent);
color: var(--accent);
}
.code-lang-btn.active {
background: var(--accent);
border-color: var(--accent);
color: white;
}
.code-block {
background: var(--code-bg);
border: 1px solid var(--code-border);
border-radius: var(--radius-lg);
padding: 14px;
font-family: var(--font-mono);
font-size: 12px;
overflow-x: auto;
max-height: 400px;
overflow-y: auto;
white-space: pre;
line-height: 1.6;
transition: all var(--duration-base) var(--ease-smooth));
position: relative;
background: linear-gradient(135deg, var(--code-bg) 0%, color-mix(in srgb, var(--code-bg) 90%, var(--accent)) 100%);
}
.code-block:hover {
border-color: var(--border-3);
box-shadow: 0 4px 12px var(--overlay);
}
.code-block code {
background: none;
border: none;
padding: 0;
color: var(--text-1);
font-size: 12px;
line-height: 1.6;
letter-spacing: -.02em;
}
.code-copy-btn {
align-self: flex-start;
padding: 7px 14px;
background: var(--accent-gradient);
border: none;
border-radius: var(--radius-md);
color: white;
font-size: 12px;
font-weight: 600;
cursor: pointer;
transition: all var(--duration-base) var(--ease-smooth));
box-shadow: 0 2px 8px rgba(99,102,241,.2);
}
.code-copy-btn:hover {
box-shadow: 0 4px 14px rgba(99,102,241,.35);
transform: translateY(-2px);
}
.code-copy-btn:active {
transform: translateY(0);
}
.code-copy-btn.copied {
background: linear-gradient(135deg, #10b981 0%, #34d399 100%);
box-shadow: 0 2px 8px rgba(16,185,129,.3);
}
/* Response Preview - Enhanced */
.response-preview {
margin-top: 12px;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
background: var(--bg-2);
overflow: hidden;
box-shadow: 0 2px 8px var(--overlay);
transition: all var(--duration-base) var(--ease-smooth));
}
.response-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 14px;
background: linear-gradient(90deg, var(--bg-3) 0%, transparent 100%);
border-bottom: 1px solid var(--border);
}
.response-status {
font-size: 13px;
font-weight: 700;
font-family: var(--font-mono);
letter-spacing: -.01em;
}
.response-status.success {
color: #10b981;
text-shadow: 0 0 8px rgba(16,185,129,.2);
}
.response-status.error {
color: #ef4444;
text-shadow: 0 0 8px rgba(239,68,68,.2);
}
.response-timing {
font-size: 11px;
color: var(--text-3);
font-family: var(--font-mono);
font-weight: 500;
opacity: 0.8;
}
.response-tabs {
display: flex;
gap: 0;
border-bottom: 1px solid var(--border);
background: var(--bg-2);
}
.response-tab {
flex: 0 0 auto;
padding: 11px 14px;
background: none;
border: none;
border-bottom: 2px solid transparent;
font-size: 12px;
font-weight: 500;
color: var(--text-2);
cursor: pointer;
transition: all var(--duration-fast) var(--ease-smooth));
position: relative;
}
.response-tab:hover {
color: var(--text-1);
}
.response-tab.active {
color: var(--accent);
border-bottom-color: var(--accent);
}
.response-body {
padding: 12px;
font-family: var(--font-mono);
font-size: 11px;
white-space: pre-wrap;
word-break: break-word;
max-height: 400px;
overflow-y: auto;
color: var(--text-1);
}
/* Workspaces & Collections */
.workspace-panel {
display: flex;
flex-direction: column;
gap: 10px;
padding: 12px;
}
.workspace-selector {
padding: 6px 10px;
background: var(--bg-1);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-1);
font-size: 12px;
cursor: pointer;
}
.workspace-selector:hover {
border-color: var(--accent);
}
.collection-list {
display: flex;
flex-direction: column;
gap: 4px;
}
.collection-item {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 10px;
background: var(--bg-2);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
cursor: pointer;
transition: all 0.2s;
}
.collection-item:hover {
background: var(--bg-3);
border-color: var(--accent);
}
.collection-item.active {
background: var(--accent-dim);
border-color: var(--accent);
}
.collection-icon {
width: 16px;
height: 16px;
flex-shrink: 0;
}
.collection-name {
flex: 1;
font-size: 12px;
color: var(--text-1);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.collection-count {
font-size: 11px;
color: var(--text-3);
padding: 2px 6px;
background: var(--bg-1);
border-radius: var(--radius-xs);
}
/* Request Save Dialog */
.save-request-dialog {
display: flex;
flex-direction: column;
gap: 12px;
}
.dialog-section {
display: flex;
flex-direction: column;
gap: 6px;
}
.dialog-label {
font-size: 12px;
font-weight: 500;
color: var(--text-1);
}
.dialog-input {
padding: 8px 10px;
background: var(--bg-1);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-1);
font-size: 12px;
}
.dialog-input:focus {
outline: none;
border-color: var(--accent);
box-shadow: 0 0 0 2px var(--accent-dim);
}
.dialog-textarea {
padding: 8px 10px;
background: var(--bg-1);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-1);
font-size: 12px;
font-family: var(--font-sans);
min-height: 80px;
resize: vertical;
}
.dialog-textarea:focus {
outline: none;
border-color: var(--accent);
box-shadow: 0 0 0 2px var(--accent-dim);
}
.dialog-buttons {
display: flex;
gap: 8px;
justify-content: flex-end;
}
.btn-primary {
padding: 8px 16px;
background: var(--accent);
border: none;
border-radius: var(--radius-sm);
color: white;
font-size: 12px;
font-weight: 500;
cursor: pointer;
transition: background 0.2s;
}
.btn-primary:hover {
background: var(--accent-2);
}
.btn-secondary {
padding: 8px 16px;
background: var(--bg-3);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-1);
font-size: 12px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.btn-secondary:hover {
border-color: var(--accent);
color: var(--accent);
}
/* Environment Manager */
.env-list {
display: flex;
flex-direction: column;
gap: 6px;
}
.env-item {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 10px;
background: var(--bg-2);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
cursor: pointer;
transition: all 0.2s;
}
.env-item:hover {
background: var(--bg-3);
}
.env-item.active {
background: var(--accent-dim);
border-color: var(--accent);
}
.env-radio {
width: 16px;
height: 16px;
border-radius: 50%;
border: 2px solid currentColor;
cursor: pointer;
}
.env-item.active .env-radio {
background: var(--accent);
border-color: var(--accent);
}
.env-name {
flex: 1;
font-size: 12px;
color: var(--text-1);
}
/* Validation Errors & Warnings */
.validation-error {
display: flex;
align-items: flex-start;
gap: 8px;
padding: 10px;
background: rgba(248, 113, 113, 0.1);
border: 1px solid rgba(248, 113, 113, 0.3);
border-radius: var(--radius-sm);
font-size: 12px;
color: #f87171;
}
.validation-warning {
display: flex;
align-items: flex-start;
gap: 8px;
padding: 10px;
background: rgba(251, 191, 36, 0.1);
border: 1px solid rgba(251, 191, 36, 0.3);
border-radius: var(--radius-sm);
font-size: 12px;
color: #fbbf24;
}
.validation-icon {
width: 14px;
height: 14px;
flex-shrink: 0;
margin-top: 2px;
}
.validation-message {
flex: 1;
}
/* Loading & Skeleton States */
.skeleton-line {
height: 12px;
background: linear-gradient(90deg, var(--bg-3) 0%, var(--bg-4) 50%, var(--bg-3) 100%);
background-size: 200% 100%;
animation: skeleton-loading 1.5s infinite;
border-radius: var(--radius-xs);
}
@keyframes skeleton-loading {
0% {
background-position: 200% 0;
}
100% {
background-position: -200% 0;
}
}
.loading-spinner {
display: inline-block;
width: 16px;
height: 16px;
border: 2px solid var(--border);
border-top-color: var(--accent);
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
/* Keyboard Shortcut Hints */
.kbd {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 20px;
height: 20px;
padding: 0 4px;
background: var(--bg-3);
border: 1px solid var(--border);
border-radius: var(--radius-xs);
font-family: var(--font-mono);
font-size: 10px;
color: var(--text-2);
font-weight: 500;
}
/* Tags */
.tag {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 8px;
background: var(--accent-dim);
border: 1px solid var(--accent);
border-radius: var(--radius-sm);
font-size: 11px;
color: var(--accent);
}
.tag-remove {
display: flex;
align-items: center;
justify-content: center;
width: 12px;
height: 12px;
background: none;
border: none;
color: inherit;
cursor: pointer;
opacity: 0.7;
transition: opacity 0.2s;
}
.tag-remove:hover {
opacity: 1;
}
/* Responsive adjustments */
@media (max-width: 1024px) {
.param-row {
grid-template-columns: 1fr 1fr auto;
}
.param-type {
display: none;
}
}
@media (max-width: 768px) {
.param-row {
grid-template-columns: 1fr;
}
.code-lang-btn {
flex: 1;
}
}
.env-overlay {
position: fixed;
inset: 0;
background: rgba(0,0,0,.65);
backdrop-filter: blur(6px);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
animation: fadeIn .15s ease;
}
.env-modal {
width: min(850px, 92vw);
max-height: 90vh;
overflow: auto;
background: #1f1f23;
color: #fff;
border-radius: 18px;
border: 1px solid #35353a;
box-shadow: 0 24px 80px rgba(0,0,0,.45), 0 0 0 1px rgba(255,255,255,.03);
animation: scaleIn .18s ease;
}
.env-modal-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
padding: 24px;
border-bottom: 1px solid #35353a;
}
.env-modal-header h2 {
margin: 0;
font-size: 22px;
}
.env-subtitle {
margin-top: 6px;
color: #9aa0aa;
font-size: 13px;
}
.env-close-btn {
width: 36px;
height: 36px;
border-radius: 10px;
border: none;
cursor: pointer;
background: transparent;
color: #aaa;
font-size: 16px;
}
.env-close-btn:hover {
background: rgba(255,255,255,.08);
color: white;
}
.env-modal-body {
padding: 24px;
}
.env-section-title {
font-size: 13px;
font-weight: 600;
color: #9aa0aa;
text-transform: uppercase;
letter-spacing: .08em;
margin-bottom: 12px;
}
.env-list {
display: flex;
flex-direction: column;
gap: 12px;
}
.env-card {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px;
border-radius: 14px;
border: 1px solid #35353a;
transition: .15s ease;
cursor: pointer;
}
.env-card:hover {
border-color: #5a9cff;
transform: translateY(-1px);
}
.env-card.active {
border-color: #5a9cff;
background: rgba(90,156,255,.12);
}
.env-card-left {
display: flex;
gap: 14px;
align-items: center;
}
.env-name {
display: flex;
align-items: center;
gap: 10px;
font-weight: 600;
}
.env-url {
margin-top: 4px;
color: #9aa0aa;
font-size: 13px;
}
.env-badge {
padding: 3px 8px;
border-radius: 999px;
font-size: 11px;
background: #5a9cff;
color: white;
}
.env-actions {
display: flex;
gap: 8px;
}
.icon-btn {
width: 34px;
height: 34px;
border-radius: 10px;
border: 1px solid #35353a;
background: transparent;
color: white;
cursor: pointer;
}
.icon-btn:hover {
background: rgba(255,255,255,.08);
}
.icon-btn.danger:hover {
background: rgba(255,80,80,.15);
}
.try-header-main {
display: flex;
flex-direction: column;
gap: 4px;
}
.try-subtitle {
color: var(--text-2);
font-size: 13px;
}
.try-env-bar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
margin-bottom: 16px;
padding: 12px 14px;
border: 1px solid var(--border);
border-radius: 12px;
background: var(--bg-2);
}
.try-env-info {
min-width: 0;
flex: 1;
}
.try-env-label {
font-size: 11px;
text-transform: uppercase;
letter-spacing: .08em;
color: var(--text-2);
margin-bottom: 6px;
}
.try-env-main {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.try-env-badge {
padding: 4px 10px;
border-radius: 999px;
font-size: 12px;
font-weight: 600;
background: rgba(59,130,246,.15);
color: #60a5fa;
border: 1px solid rgba(59,130,246,.25);
}
.try-env-url {
font-family: var(--font-mono);
font-size: 13px;
color: var(--text-2);
overflow: hidden;
text-overflow: ellipsis;
}
.request-target {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 16px;
padding: 10px 12px;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--bg-2);
}
.request-method {
padding: 4px 8px;
border-radius: 6px;
font-size: 12px;
font-weight: 700;
text-transform: uppercase;
color: white;
background: var(--method-color);
}
.request-url {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: var(--font-mono);
color: var(--text-1);
}
.env-divider {
margin: 24px 0;
border-top: 1px solid #35353a;
}
.env-form {
display: grid;
gap: 14px;
}
.field {
display: grid;
gap: 6px;
}
.field label {
font-size: 13px;
color: #9aa0aa;
}
.field input {
height: 42px;
padding: 0 12px;
border-radius: 10px;
border: 1px solid #35353a;
background: #27272c;
color: white;
}
.field input:focus {
outline: none;
border-color: #5a9cff;
}
.env-modal-footer {
display: flex;
justify-content: flex-end;
gap: 10px;
padding: 20px 24px;
border-top: 1px solid #35353a;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes scaleIn {
from {
opacity: 0;
transform: scale(.96);
}
to {
opacity: 1;
transform: scale(1);
}
}