Asset_QR_360 / static /css /scanner.css
ministerchief's picture
Upload 73 files
1e2e946 verified
Raw
History Blame Contribute Delete
28.4 kB
/* ═══════════════════════════════════════════════════════════════════════════
NIELIT AssetQR Enterprise β€” Scanner Module v3.0
Dark Glassmorphism Enterprise UI
═══════════════════════════════════════════════════════════════════════════ */
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
/* ── Variables ─────────────────────────────────────────────────────────── */
:root {
--n950: #030712;
--n900: #070d1f;
--n800: #0d1526;
--n700: #111b35;
--n600: #172040;
--n500: #1e2d56;
--b400: #38bdf8;
--b500: #0ea5e9;
--b600: #0284c7;
--c400: #22d3ee;
--g400: #4ade80;
--g500: #22c55e;
--r400: #f87171;
--r500: #ef4444;
--y400: #fbbf24;
--p400: #a78bfa;
--white: #ffffff;
--sl100: rgba(255,255,255,0.08);
--sl200: rgba(255,255,255,0.12);
--glass: rgba(13, 21, 38, 0.75);
--glass-b: rgba(56,189,248,0.12);
--glass-h: rgba(56,189,248,0.06);
--font: 'Space Grotesk', system-ui, sans-serif;
--mono: 'JetBrains Mono', monospace;
--ease: cubic-bezier(0.4, 0, 0.2, 1);
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
}
/* ── Utility ────────────────────────────────────────────────────────────── */
.d-none { display: none !important; }
.mono { font-family: var(--mono); }
.spin { animation: spin 1s linear infinite; }
/* ── Root Container ─────────────────────────────────────────────────────── */
.enterprise-scanner-root {
font-family: var(--font);
min-height: 100vh;
color: var(--white);
position: relative;
}
/* ── Screen Transition ──────────────────────────────────────────────────── */
.screen-enter {
animation: screenSlide 0.45s var(--ease) forwards;
}
@keyframes screenSlide {
from { opacity: 0; transform: translateY(16px); }
to { opacity: 1; transform: translateY(0); }
}
/* ════════════════════════════════════════════════════════════════════════
SCAN SCREEN
════════════════════════════════════════════════════════════════════════ */
.scan-screen {
min-height: 100vh;
background:
radial-gradient(ellipse 90% 60% at 50% 0%, rgba(14,165,233,0.14) 0%, transparent 60%),
radial-gradient(ellipse 70% 50% at 90% 90%, rgba(34,211,238,0.06) 0%, transparent 50%),
var(--n950);
display: flex;
flex-direction: column;
}
/* Header */
.scan-header {
background: rgba(7, 13, 31, 0.9);
border-bottom: 1px solid var(--glass-b);
backdrop-filter: blur(20px);
position: sticky;
top: 0;
z-index: 50;
}
.scan-header-inner {
max-width: 700px;
margin: 0 auto;
padding: 0 1.5rem;
height: 64px;
display: flex;
align-items: center;
justify-content: space-between;
}
/* Body */
.scan-body {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 2rem 1rem;
}
.scan-center {
width: 100%;
max-width: 420px;
display: flex;
flex-direction: column;
align-items: center;
gap: 1.25rem;
}
/* Status Bar */
.scan-status-bar {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem 1.25rem;
border-radius: 999px;
font-size: 0.82rem;
font-weight: 500;
letter-spacing: 0.02em;
background: rgba(255,255,255,0.06);
border: 1px solid rgba(255,255,255,0.1);
transition: all 0.3s var(--ease);
}
.scan-status-bar.live { background: rgba(74,222,128,0.12); border-color: rgba(74,222,128,0.25); color: var(--g400); }
.scan-status-bar.error { background: rgba(248,113,113,0.12); border-color: rgba(248,113,113,0.25); color: var(--r400); }
.scan-status-bar.info { background: rgba(56,189,248,0.10); border-color: rgba(56,189,248,0.2); color: var(--b400); }
/* Camera Viewport */
.camera-viewport {
width: 320px;
height: 320px;
position: relative;
border-radius: 20px;
overflow: hidden;
background: #000;
box-shadow:
0 0 0 1px rgba(56,189,248,0.2),
0 0 40px rgba(56,189,248,0.08),
0 20px 60px rgba(0,0,0,0.5);
}
/* Corner brackets */
.corner-tl, .corner-tr, .corner-bl, .corner-br {
position: absolute;
width: 32px;
height: 32px;
z-index: 10;
}
.corner-tl { top: 0; left: 0; border-top: 3px solid var(--b400); border-left: 3px solid var(--b400); border-radius: 4px 0 0 0; }
.corner-tr { top: 0; right: 0; border-top: 3px solid var(--b400); border-right: 3px solid var(--b400); border-radius: 0 4px 0 0; }
.corner-bl { bottom: 0; left: 0; border-bottom: 3px solid var(--b400); border-left: 3px solid var(--b400); border-radius: 0 0 0 4px; }
.corner-br { bottom: 0; right: 0; border-bottom: 3px solid var(--b400); border-right: 3px solid var(--b400); border-radius: 0 0 4px 0; }
/* Laser line */
.laser-line {
position: absolute;
left: 4px;
right: 4px;
height: 2px;
background: linear-gradient(90deg, transparent, var(--b400), var(--c400), var(--b400), transparent);
box-shadow: 0 0 12px var(--b400), 0 0 24px var(--c400);
z-index: 10;
top: 0;
opacity: 0;
border-radius: 2px;
}
.laser-line.active {
opacity: 1;
animation: laserScan 2.2s ease-in-out infinite;
}
@keyframes laserScan {
0% { top: 8px; }
50% { top: calc(100% - 10px); }
100% { top: 8px; }
}
/* Camera feed container */
#cameraFeed {
width: 100%;
height: 100%;
position: absolute;
inset: 0;
}
#cameraFeed video {
width: 100% !important;
height: 100% !important;
object-fit: cover !important;
border-radius: 0 !important;
}
#cameraFeed img { display: none !important; }
.scan-overlay-text {
position: absolute;
bottom: 12px;
left: 0;
right: 0;
text-align: center;
font-size: 0.72rem;
color: rgba(255,255,255,0.5);
z-index: 10;
letter-spacing: 0.04em;
}
/* Pulse rings */
.scan-pulse-rings {
position: relative;
width: 320px;
height: 0;
display: flex;
justify-content: center;
}
.pulse-ring {
position: absolute;
border-radius: 50%;
border: 1px solid rgba(56,189,248,0.3);
top: -20px;
animation: pulseOut 3s ease-out infinite;
}
.pulse-ring.r1 { width: 340px; height: 340px; margin-left: -10px; animation-delay: 0s; }
.pulse-ring.r2 { width: 380px; height: 380px; margin-left: -30px; animation-delay: 0.8s; }
.pulse-ring.r3 { width: 420px; height: 420px; margin-left: -50px; animation-delay: 1.6s; }
@keyframes pulseOut {
0% { opacity: 0.6; transform: scale(0.92); }
100% { opacity: 0; transform: scale(1.08); }
}
/* Manual Input */
.manual-input-bar {
display: flex;
align-items: center;
gap: 0.5rem;
width: 100%;
background: var(--glass);
border: 1px solid var(--glass-b);
border-radius: 12px;
padding: 0.6rem 0.75rem;
backdrop-filter: blur(12px);
}
.mi-icon { color: var(--b400); font-size: 1rem; flex-shrink: 0; }
.mi-input {
flex: 1;
background: none;
border: none;
outline: none;
color: var(--white);
font-family: var(--mono);
font-size: 0.78rem;
min-width: 0;
}
.mi-input::placeholder { color: rgba(255,255,255,0.3); }
.mi-btn {
background: var(--b500);
border: none;
border-radius: 8px;
color: white;
padding: 0.35rem 0.6rem;
cursor: pointer;
font-size: 1rem;
transition: background 0.2s;
flex-shrink: 0;
}
.mi-btn:hover { background: var(--b400); }
/* Scan Instructions */
.scan-instructions {
display: flex;
gap: 1rem;
flex-wrap: wrap;
justify-content: center;
}
.si-item {
display: flex;
align-items: center;
gap: 0.4rem;
font-size: 0.75rem;
color: rgba(255,255,255,0.45);
}
.si-item i { color: var(--b400); }
/* ════════════════════════════════════════════════════════════════════════
SHARED HEADER for result screens
════════════════════════════════════════════════════════════════════════ */
.result-screen {
min-height: 100vh;
background:
radial-gradient(ellipse 80% 40% at 50% 0%, rgba(14,165,233,0.1) 0%, transparent 55%),
var(--n950);
display: flex;
flex-direction: column;
}
.rs-header {
background: rgba(7, 13, 31, 0.92);
border-bottom: 1px solid var(--glass-b);
backdrop-filter: blur(20px);
position: sticky;
top: 0;
z-index: 50;
}
.rsh-inner {
max-width: 960px;
margin: 0 auto;
padding: 0 1.5rem;
height: 64px;
display: flex;
align-items: center;
justify-content: space-between;
}
.header-actions { display: flex; align-items: center; gap: 0.75rem; }
.icon-btn {
background: rgba(255,255,255,0.06);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 8px;
color: rgba(255,255,255,0.7);
padding: 0.45rem 0.65rem;
cursor: pointer;
font-size: 1rem;
transition: all 0.2s;
}
.icon-btn:hover { background: rgba(56,189,248,0.12); border-color: var(--b400); color: var(--b400); }
/* Brand block */
.brand-block {
display: flex;
align-items: center;
gap: 0.75rem;
}
.brand-icon {
width: 38px; height: 38px;
background: linear-gradient(135deg, var(--b500), var(--c400));
border-radius: 10px;
display: flex; align-items: center; justify-content: center;
font-size: 1.1rem;
flex-shrink: 0;
}
.brand-icon.verified {
background: linear-gradient(135deg, var(--g500), var(--g400));
box-shadow: 0 0 20px rgba(74,222,128,0.3);
}
.brand-title { font-size: 0.95rem; font-weight: 600; letter-spacing: 0.01em; }
.brand-sub { font-size: 0.72rem; color: rgba(255,255,255,0.4); }
/* Live badge */
.live-badge {
display: flex;
align-items: center;
gap: 0.35rem;
background: rgba(74,222,128,0.12);
border: 1px solid rgba(74,222,128,0.25);
border-radius: 999px;
padding: 0.2rem 0.65rem;
font-size: 0.68rem;
font-weight: 700;
letter-spacing: 0.08em;
color: var(--g400);
}
.live-dot {
width: 6px; height: 6px;
background: var(--g400);
border-radius: 50%;
animation: livePulse 1.2s ease infinite;
}
@keyframes livePulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}
.header-meta { display: flex; align-items: center; gap: 0.75rem; }
.header-user { font-size: 0.8rem; color: rgba(255,255,255,0.5); display: flex; align-items: center; gap: 0.3rem; }
.scan-again-btn {
display: flex;
align-items: center;
gap: 0.4rem;
padding: 0.45rem 1rem;
background: rgba(56,189,248,0.1);
border: 1px solid rgba(56,189,248,0.25);
border-radius: 8px;
color: var(--b400);
font-size: 0.82rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
white-space: nowrap;
}
.scan-again-btn:hover { background: rgba(56,189,248,0.2); }
/* ════════════════════════════════════════════════════════════════════════
LOADING SCREEN
════════════════════════════════════════════════════════════════════════ */
.loading-body {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 2rem;
}
.loading-card {
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
}
.loading-spinner {
position: relative;
width: 80px;
height: 80px;
margin-bottom: 0.5rem;
}
.spinner-ring {
width: 80px; height: 80px;
border: 3px solid rgba(56,189,248,0.15);
border-top-color: var(--b400);
border-radius: 50%;
animation: spin 0.9s linear infinite;
position: absolute;
}
.spinner-icon {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.6rem;
color: var(--b400);
}
.loading-title { font-size: 1.3rem; font-weight: 600; }
.loading-sub { font-size: 0.85rem; color: rgba(255,255,255,0.45); }
.loading-steps {
display: flex;
flex-direction: column;
gap: 0.6rem;
margin-top: 1rem;
width: 260px;
}
.ls-step {
display: flex;
align-items: center;
gap: 0.6rem;
padding: 0.6rem 1rem;
border-radius: 8px;
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.06);
font-size: 0.82rem;
color: rgba(255,255,255,0.35);
transition: all 0.3s;
}
.ls-step.active {
background: rgba(74,222,128,0.1);
border-color: rgba(74,222,128,0.2);
color: var(--g400);
}
.ls-step i { font-size: 0.9rem; }
/* ════════════════════════════════════════════════════════════════════════
INVALID QR SCREEN
════════════════════════════════════════════════════════════════════════ */
.invalid-body {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 2rem 1rem;
}
.invalid-card {
background: var(--glass);
border: 1px solid rgba(248,113,113,0.2);
border-radius: 24px;
padding: 3rem 2.5rem;
text-align: center;
max-width: 420px;
width: 100%;
backdrop-filter: blur(16px);
box-shadow: 0 0 60px rgba(248,113,113,0.08), 0 20px 60px rgba(0,0,0,0.4);
}
.invalid-icon-wrap {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
margin-bottom: 1.5rem;
}
.invalid-icon {
width: 80px; height: 80px;
background: rgba(248,113,113,0.12);
border: 2px solid rgba(248,113,113,0.3);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 2.2rem;
color: var(--r400);
position: relative;
z-index: 2;
}
.invalid-rings { position: absolute; inset: -20px; }
.inv-ring {
position: absolute;
inset: 0;
border-radius: 50%;
border: 1px solid rgba(248,113,113,0.2);
animation: invPulse 2s ease-out infinite;
}
.inv-ring.r2 { inset: -14px; animation-delay: 0.7s; }
@keyframes invPulse {
0% { opacity: 0.6; transform: scale(0.95); }
100% { opacity: 0; transform: scale(1.2); }
}
.invalid-title { font-size: 1.5rem; font-weight: 700; color: var(--r400); margin-bottom: 0.5rem; }
.invalid-sub { font-size: 0.88rem; color: rgba(255,255,255,0.45); margin-bottom: 1.5rem; line-height: 1.6; }
.invalid-meta { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 2rem; }
.im-item { font-size: 0.8rem; color: rgba(255,255,255,0.35); display: flex; align-items: center; gap: 0.4rem; justify-content: center; }
.im-item i { color: var(--r400); }
.invalid-actions { display: flex; flex-direction: column; gap: 0.75rem; }
/* ════════════════════════════════════════════════════════════════════════
ASSET SCREEN
════════════════════════════════════════════════════════════════════════ */
.asset-body {
max-width: 960px;
margin: 0 auto;
padding: 1.5rem;
display: flex;
flex-direction: column;
gap: 1.25rem;
}
/* Verify Banner */
.verify-banner {
background: rgba(34,197,94,0.08);
border: 1px solid rgba(34,197,94,0.2);
border-radius: 14px;
padding: 1rem 1.5rem;
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
flex-wrap: wrap;
}
.vb-left { display: flex; align-items: center; gap: 0.75rem; }
.vb-check { font-size: 1.4rem; color: var(--g500); }
.vb-title { font-size: 0.95rem; font-weight: 600; color: var(--g400); }
.vb-time { font-size: 0.78rem; color: rgba(255,255,255,0.4); margin-top: 0.1rem; }
/* Asset Status Badges */
.asset-status-badge {
padding: 0.3rem 1rem;
border-radius: 999px;
font-size: 0.78rem;
font-weight: 600;
letter-spacing: 0.04em;
}
.status-active { background: rgba(34,197,94,0.15); color: var(--g400); border: 1px solid rgba(34,197,94,0.25); }
.status-repair { background: rgba(251,191,36,0.15); color: var(--y400); border: 1px solid rgba(251,191,36,0.25); }
.status-maint { background: rgba(56,189,248,0.12); color: var(--b400); border: 1px solid rgba(56,189,248,0.2); }
.status-lost { background: rgba(248,113,113,0.12); color: var(--r400); border: 1px solid rgba(248,113,113,0.2); }
.status-disposed { background: rgba(100,116,139,0.15); color: #94a3b8; border: 1px solid rgba(100,116,139,0.2); }
.status-warranty { background: rgba(167,139,250,0.12); color: var(--p400); border: 1px solid rgba(167,139,250,0.2); }
.status-no-warranty { background: rgba(251,191,36,0.1); color: var(--y400); border: 1px solid rgba(251,191,36,0.15); }
/* Asset ID Card */
.asset-id-card {
background: var(--glass);
border: 1px solid var(--glass-b);
border-radius: 18px;
padding: 1.5rem;
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
backdrop-filter: blur(16px);
flex-wrap: wrap;
}
.aic-left { display: flex; align-items: center; gap: 1rem; }
.aic-icon {
width: 56px; height: 56px;
background: linear-gradient(135deg, rgba(56,189,248,0.15), rgba(34,211,238,0.1));
border: 1px solid rgba(56,189,248,0.2);
border-radius: 14px;
display: flex; align-items: center; justify-content: center;
font-size: 1.5rem;
color: var(--b400);
flex-shrink: 0;
}
.aic-name { font-size: 1.2rem; font-weight: 700; }
.aic-id { font-family: var(--mono); font-size: 0.8rem; color: var(--b400); margin-top: 0.15rem; }
.aic-cat { font-size: 0.78rem; color: rgba(255,255,255,0.45); margin-top: 0.1rem; }
.aic-qr-tag {
display: flex; align-items: center; gap: 0.5rem;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 8px;
padding: 0.5rem 0.75rem;
font-family: var(--mono);
font-size: 0.72rem;
color: rgba(255,255,255,0.5);
}
/* Details Grid */
.details-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1rem;
}
.dg-card {
background: var(--glass);
border: 1px solid var(--glass-b);
border-radius: 14px;
overflow: hidden;
backdrop-filter: blur(12px);
}
.dg-card-header {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.85rem 1.25rem;
background: rgba(255,255,255,0.03);
border-bottom: 1px solid var(--glass-b);
font-size: 0.82rem;
font-weight: 600;
color: var(--b400);
letter-spacing: 0.02em;
}
.dg-rows { padding: 0.5rem 0; }
.dg-row {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.6rem 1.25rem;
border-bottom: 1px solid rgba(255,255,255,0.03);
gap: 1rem;
}
.dg-row:last-child { border-bottom: none; }
.dg-lbl { font-size: 0.78rem; color: rgba(255,255,255,0.4); flex-shrink: 0; }
.dg-val { font-size: 0.85rem; font-weight: 500; text-align: right; word-break: break-all; }
/* ════════════════════════════════════════════════════════════════════════
INSPECTION FORM
════════════════════════════════════════════════════════════════════════ */
.inspection-form-card {
background: var(--glass);
border: 1px solid var(--glass-b);
border-radius: 18px;
overflow: hidden;
backdrop-filter: blur(16px);
}
.ifc-header {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 1.25rem 1.5rem;
background: rgba(56,189,248,0.05);
border-bottom: 1px solid var(--glass-b);
font-size: 1.2rem;
color: var(--b400);
}
.ifc-title { font-size: 1rem; font-weight: 600; color: var(--white); }
.ifc-sub { font-size: 0.78rem; color: rgba(255,255,255,0.4); margin-top: 0.1rem; }
.ifc-body { padding: 1.5rem; }
.form-grid-2 {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 1.25rem;
}
.fg-field { display: flex; flex-direction: column; gap: 0.45rem; }
.fg-field.full { grid-column: 1 / -1; }
.fg-label {
font-size: 0.78rem;
font-weight: 500;
color: rgba(255,255,255,0.5);
display: flex;
align-items: center;
gap: 0.35rem;
letter-spacing: 0.02em;
}
.fg-label i { color: var(--b400); }
.fg-input, .fg-select, .fg-textarea {
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 10px;
padding: 0.7rem 0.9rem;
color: var(--white);
font-family: var(--font);
font-size: 0.88rem;
transition: border-color 0.2s, background 0.2s;
outline: none;
width: 100%;
}
.fg-input:focus, .fg-select:focus, .fg-textarea:focus {
border-color: var(--b400);
background: rgba(56,189,248,0.06);
}
.fg-select option { background: #0d1526; color: #fff; }
.fg-textarea { min-height: 90px; resize: vertical; }
/* GPS field */
.gps-field { display: flex; gap: 0.5rem; }
.gps-field .fg-input { flex: 1; }
.gps-refresh {
background: rgba(56,189,248,0.1);
border: 1px solid rgba(56,189,248,0.2);
border-radius: 10px;
color: var(--b400);
padding: 0 0.75rem;
cursor: pointer;
font-size: 0.9rem;
transition: all 0.2s;
flex-shrink: 0;
}
.gps-refresh:hover { background: rgba(56,189,248,0.2); }
/* Photo upload */
.photo-upload-zone {
border: 2px dashed rgba(56,189,248,0.2);
border-radius: 12px;
padding: 2rem;
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
cursor: pointer;
transition: all 0.2s;
}
.photo-upload-zone:hover { border-color: var(--b400); background: rgba(56,189,248,0.04); }
.photo-upload-zone.has-photo { border-style: solid; border-color: var(--g500); }
.photo-upload-zone > i { font-size: 2rem; color: rgba(255,255,255,0.25); }
.puz-text { font-size: 0.85rem; color: rgba(255,255,255,0.45); }
.puz-sub { font-size: 0.75rem; color: rgba(255,255,255,0.25); }
.puz-btn {
display: flex; align-items: center; gap: 0.4rem;
padding: 0.45rem 1rem;
background: rgba(56,189,248,0.1);
border: 1px solid rgba(56,189,248,0.2);
border-radius: 8px;
color: var(--b400);
font-size: 0.8rem;
cursor: pointer;
transition: all 0.2s;
margin-top: 0.25rem;
}
.puz-btn:hover { background: rgba(56,189,248,0.2); }
.photo-preview {
width: 100%;
max-height: 200px;
object-fit: cover;
border-radius: 8px;
margin-top: 0.5rem;
}
/* Inspection Actions */
.inspection-actions {
display: flex;
gap: 0.75rem;
flex-wrap: wrap;
margin-top: 1.5rem;
}
/* ════════════════════════════════════════════════════════════════════════
ENTERPRISE BUTTONS
════════════════════════════════════════════════════════════════════════ */
.btn-enterprise {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.65rem 1.25rem;
border-radius: 10px;
font-family: var(--font);
font-size: 0.88rem;
font-weight: 500;
cursor: pointer;
border: none;
transition: all 0.2s var(--ease);
text-decoration: none;
white-space: nowrap;
}
.btn-enterprise.primary {
background: linear-gradient(135deg, var(--b600), var(--b500));
color: white;
box-shadow: 0 4px 20px rgba(14,165,233,0.3);
}
.btn-enterprise.primary:hover {
background: linear-gradient(135deg, var(--b500), var(--b400));
box-shadow: 0 6px 28px rgba(14,165,233,0.4);
transform: translateY(-1px);
}
.btn-enterprise.primary.large { padding: 0.85rem 1.75rem; font-size: 0.95rem; }
.btn-enterprise.primary.saved { background: linear-gradient(135deg, var(--g500), var(--g400)); }
.btn-enterprise.green {
background: rgba(34,197,94,0.12);
border: 1px solid rgba(34,197,94,0.25);
color: var(--g400);
}
.btn-enterprise.green:hover { background: rgba(34,197,94,0.2); }
.btn-enterprise.blue {
background: rgba(56,189,248,0.1);
border: 1px solid rgba(56,189,248,0.2);
color: var(--b400);
}
.btn-enterprise.blue:hover { background: rgba(56,189,248,0.2); }
.btn-enterprise.outline {
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.12);
color: rgba(255,255,255,0.65);
}
.btn-enterprise.outline:hover { background: rgba(255,255,255,0.08); color: white; }
.btn-enterprise:disabled { opacity: 0.6; cursor: not-allowed; transform: none !important; }
/* ════════════════════════════════════════════════════════════════════════
SUCCESS TOAST
════════════════════════════════════════════════════════════════════════ */
.success-toast {
position: fixed;
bottom: 2rem;
right: 2rem;
background: rgba(13,21,38,0.95);
border: 1px solid rgba(34,197,94,0.3);
border-radius: 14px;
padding: 1rem 1.25rem;
display: flex;
align-items: center;
gap: 0.75rem;
z-index: 1000;
backdrop-filter: blur(20px);
box-shadow: 0 8px 32px rgba(0,0,0,0.4), 0 0 24px rgba(34,197,94,0.1);
transform: translateX(120%);
transition: transform 0.4s var(--ease-spring);
}
.success-toast.show { transform: translateX(0); }
.st-icon { font-size: 1.4rem; color: var(--g400); }
.st-title { font-size: 0.9rem; font-weight: 600; color: var(--g400); }
.st-sub { font-size: 0.75rem; color: rgba(255,255,255,0.4); margin-top: 0.1rem; }
/* ── Keyframes ──────────────────────────────────────────────────────────── */
@keyframes spin { to { transform: rotate(360deg); } }
/* ── Responsive ─────────────────────────────────────────────────────────── */
@media (max-width: 600px) {
.camera-viewport { width: 300px; height: 300px; }
.rsh-inner, .scan-header-inner { padding: 0 1rem; }
.asset-body { padding: 1rem; }
.inspection-actions { flex-direction: column; }
.btn-enterprise { width: 100%; justify-content: center; }
.asset-id-card { flex-direction: column; }
.details-grid { grid-template-columns: 1fr; }
}