/* ─── GLOBAL STYLES ──────────────────────────────────────────────── */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Calibri', Arial, sans-serif; background-color: #0A1628; color: #ffffff; line-height: 1.6; } .container { max-width: 1200px; margin: 0 auto; padding: 20px; } /* ─── HEADER ───────────────────────────────────────────────────────── */ header { text-align: center; margin-bottom: 30px; padding: 30px 0; background: linear-gradient(135deg, #003366 0%, #0A1628 100%); border-radius: 12px; box-shadow: 0 4px 20px rgba(59, 130, 246, 0.3); } header h1 { font-size: 2.5em; margin-bottom: 10px; color: #FFFFFF; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); } .subtitle { font-size: 1.1em; color: #94A3B8; font-weight: 300; } /* ─── CARD STYLES ──────────────────────────────────────────────────── */ .card { background-color: #1B2A4A; border-radius: 12px; padding: 25px; margin-bottom: 25px; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3); border: 1px solid rgba(59, 130, 246, 0.2); } .card h2 { color: #60A5FA; margin-bottom: 20px; font-size: 1.6em; border-bottom: 2px solid #003366; padding-bottom: 10px; } /* ─── FORM STYLES ───────────────────────────────────────────────────── */ .form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin-bottom: 20px; } .form-group { display: flex; flex-direction: column; } .form-group label { color: #94A3B8; margin-bottom: 8px; font-weight: 500; } .form-group input, .form-group select { background-color: #0A1628; border: 2px solid rgba(59, 130, 246, 0.3); color: #ffffff; padding: 12px; border-radius: 8px; font-size: 16px; transition: all 0.3s ease; } .form-group input:focus, .form-group select:focus { outline: none; border-color: #3B82F6; box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2); } .lookup-result { margin-top: 8px; padding: 8px; background-color: rgba(59, 130, 246, 0.1); border-radius: 6px; font-size: 0.9em; color: #60A5FA; min-height: 24px; } /* ─── BUTTON STYLES ────────────────────────────────────────────────── */ .btn-primary { background-color: #003366; color: white; border: none; padding: 14px 30px; border-radius: 8px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); } .btn-primary:hover { background-color: #2563EB; transform: translateY(-2px); box-shadow: 0 6px 16px rgba(59, 130, 246, 0.4); } .btn-secondary { background-color: rgba(59, 130, 246, 0.2); color: #3B82F6; border: 1px solid #3B82F6; padding: 8px 16px; border-radius: 6px; font-size: 14px; cursor: pointer; transition: all 0.3s ease; } .btn-secondary:hover { background-color: rgba(59, 130, 246, 0.3); } .btn-small { padding: 6px 12px; font-size: 13px; } .btn-danger { background-color: #EF4444; color: white; border: none; padding: 6px 12px; border-radius: 6px; cursor: pointer; font-size: 14px; transition: all 0.3s ease; } .btn-danger:hover { background-color: #DC2626; } .btn-download { background-color: #10B981; color: white; border: none; padding: 10px 20px; border-radius: 8px; cursor: pointer; font-size: 15px; font-weight: 500; transition: all 0.3s ease; } .btn-download:hover { background-color: #059669; } .btn-scan { background: linear-gradient(135deg, #3B82F6 0%, #2563EB 100%); color: white; border: none; padding: 18px 40px; border-radius: 10px; font-size: 18px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 6px 20px rgba(59, 130, 246, 0.4); } .btn-scan:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(59, 130, 246, 0.5); } /* ─── SCAN BAR ─────────────────────────────────────────────────────── */ .scan-bar { text-align: center; margin: 30px 0; padding: 20px; background: linear-gradient(135deg, #1B2A4A 0%, #0F1D36 100%); border-radius: 12px; border: 2px solid rgba(59, 130, 246, 0.3); } /* ─── TABLE STYLES ──────────────────────────────────────────────────── */ .table-wrapper { overflow-x: auto; border-radius: 8px; border: 1px solid rgba(59, 130, 246, 0.2); } table { width: 100%; border-collapse: collapse; background-color: #0A1628; } th { background-color: rgba(59, 130, 246, 0.2); color: #3B82F6; padding: 15px; text-align: left; font-weight: 600; font-size: 15px; } td { padding: 12px 15px; border-bottom: 1px solid rgba(59, 130, 246, 0.1); } tr:hover { background-color: rgba(59, 130, 246, 0.05); } .stof-name { font-weight: 600; color: #60A5FA; } .stof-cas { color: #94A3B8; font-size: 0.9em; } [data-measure] { cursor: pointer !important; } [data-measure]:hover { background: #1E293B !important; } [data-measure]:active { transform: scale(0.99); } .info-btn { background: none; border: none; cursor: pointer; font-size: 12px; vertical-align: middle; padding: 0 2px; opacity: 0.7; transition: opacity 0.2s; } .info-btn:hover { opacity: 1; } .info-item { padding: 6px 8px; background: #0F172A; border-radius: 8px; color: #94A3B8; } .info-item strong { color: #E2E8F0; } .stof-card .table-wrapper { margin-top: 0; } /* Make details/summary look good */ details summary { list-style: none; } details summary::-webkit-details-marker { display: none; } details summary::before { content: '▸ '; transition: transform 0.2s; } details[open] summary::before { content: '▾ '; } /* ─── BADGE STYLES ──────────────────────────────────────────────────── */ .badge { display: inline-block; background-color: #3B82F6; color: white; padding: 4px 10px; border-radius: 20px; font-size: 0.85em; font-weight: 600; vertical-align: middle; margin-left: 10px; } .empty-msg { text-align: center; color: #94A3B8; font-style: italic; padding: 40px; } /* ─── STATUS STYLES ─────────────────────────────────────────────────── */ .status-ok { color: #10B981; font-weight: 600; } .status-warning { color: #F59E0B; font-weight: 600; } .status-danger { color: #EF4444; font-weight: 600; } .status-info { color: #60A5FA; font-weight: 600; } /* ─── SCAN RESULTS ─────────────────────────────────────────────────── */ .result-card { background-color: #0F1D36; border-radius: 8px; padding: 20px; margin-bottom: 20px; border: 1px solid rgba(59, 130, 246, 0.2); } .result-header { color: #3B82F6; margin-bottom: 15px; font-weight: 600; font-size: 1.2em; } .result-table { width: 100%; border-collapse: collapse; margin-bottom: 20px; } .result-table th { background-color: rgba(59, 130, 246, 0.1); padding: 12px; color: #60A5FA; font-size: 14px; } .result-table td { padding: 12px; border-bottom: 1px solid rgba(59, 130, 246, 0.1); } .status-card { display: inline-block; padding: 6px 12px; border-radius: 6px; font-weight: 600; font-size: 0.9em; } .status-card.ok { background-color: rgba(16, 185, 129, 0.2); color: #10B981; } .status-card.warning { background-color: rgba(245, 158, 11, 0.2); color: #F59E0B; } .status-card.danger { background-color: rgba(239, 68, 68, 0.2); color: #EF4444; } /* ─── SUMMARY GRID ─────────────────────────────────────────────────── */ .summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-bottom: 30px; } .summary-item { background-color: #0F1D36; border-radius: 8px; padding: 20px; border: 1px solid rgba(59, 130, 246, 0.2); } .summary-item h3 { color: #3B82F6; margin-bottom: 10px; font-size: 1.1em; } .summary-item p { color: #94A3B8; margin-bottom: 5px; } /* ─── MEASURES SECTION ──────────────────────────────────────────────── */ .measures-section { margin-top: 30px; } .measure-level { background-color: #0F1D36; border-radius: 8px; padding: 20px; margin-bottom: 15px; border: 1px solid rgba(59, 130, 246, 0.2); } .measure-level h3 { color: #3B82F6; margin-bottom: 15px; font-size: 1.2em; } .measure-list { margin-left: 20px; } .measure-list li { color: #94A3B8; margin-bottom: 5px; line-height: 1.4; } /* ─── LOADING SPINNER ──────────────────────────────────────────────── */ .loading { display: inline-block; width: 20px; height: 20px; border: 3px solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: #3B82F6; animation: spin 1s ease-in-out infinite; margin-left: 10px; } @keyframes spin { to { transform: rotate(360deg); } } /* ─── RESPONSIVE ───────────────────────────────────────────────────── */ @media (max-width: 768px) { .container { padding: 10px; } header h1 { font-size: 2em; } .form-grid { grid-template-columns: 1fr; } .scan-bar { padding: 15px; } .btn-scan { padding: 14px 30px; font-size: 16px; } .summary-grid { grid-template-columns: 1fr; } } /* ─── LOOKUP HINT ─────────────────────────────────────────────────── */ .lookup-hint { color: #94A3B8; font-size: 13px; margin: 0 0 15px 0; } .lookup-result { margin: 0 0 15px 0; padding: 10px 14px; background-color: rgba(59,130,246,0.1); border-radius: 6px; font-size: 0.9em; color: #60A5FA; min-height: 0; } /* ─── INPUT ROW ────────────────────────────────────────────────────── */ .input-row { display: flex; gap: 8px; } .input-row input { flex: 1; } /* ─── CHECKBOX ROW ─────────────────────────────────────────────────── */ .checkbox-row { display: flex; gap: 20px; margin-top: 10px; flex-wrap: wrap; } .checkbox-label { display: flex; align-items: center; gap: 6px; color: #94A3B8; font-size: 14px; cursor: pointer; padding: 8px 12px; background-color: #0A1628; border-radius: 6px; border: 1px solid rgba(59,130,246,0.2); transition: all 0.2s ease; } .checkbox-label:hover { border-color: #3B82F6; } .checkbox-label input[type="checkbox"] { width: 16px; height: 16px; accent-color: #3B82F6; } /* ─── FOOTER ────────────────────────────────────────────────────────── */ footer { text-align: center; padding: 20px; margin-top: 20px; color: #475569; font-size: 0.85em; } /* ─── TOAST NOTIFICATION ──────────────────────────────────────────── */ .toast { position: fixed; bottom: 20px; right: 20px; background: #1B2A4A; border: 1px solid #3B82F6; color: white; padding: 14px 20px; border-radius: 8px; font-size: 14px; z-index: 1000; box-shadow: 0 4px 20px rgba(0,0,0,0.4); animation: slideIn 0.3s ease; } .toast.error { border-color: #EF4444; } .toast.success { border-color: #10B981; } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* ─── PRINT STYLES ─────────────────────────────────────────────────── */ @media print { body { background-color: white; color: black; } .card { background-color: white; border: 1px solid #ddd; box-shadow: none; } .btn-primary, .btn-secondary, .btn-download, .btn-scan { display: none; } } /* === INFO POPUP === */ .info-popup { position:fixed; top:0; left:0; width:100%; height:100%; z-index:9999; display:flex; align-items:center; justify-content:center; } .info-popup-overlay { position:absolute; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.6); backdrop-filter:blur(4px); } .info-popup-content { position:relative; background:#1E293B; border:1px solid #334155; border-radius:12px; max-width:520px; width:90%; max-height:80vh; overflow-y:auto; box-shadow:0 20px 60px rgba(0,0,0,0.5); animation:popupIn 0.2s ease-out; } @keyframes popupIn { from { opacity:0; transform:scale(0.95) translateY(10px); } to { opacity:1; transform:scale(1) translateY(0); } } .info-popup-header { display:flex; align-items:center; padding:16px 20px; border-bottom:1px solid #334155; }