Files
mek-tech-consulting/style.css
T

490 lines
30 KiB
CSS

@import url('neon.css');
:root {
--bg: #0a1628; --bg-card: #0f1f3a; --bg-nav: #0c1a30;
--border: rgba(0,212,255,0.15); --border-light: rgba(0,212,255,0.08);
--text: #e8f4ff; --text-muted: #7eb8d4; --text-dim: #4a7a99;
--accent: #00d4ff; --accent-hover: #4de8ff;
--green: #00ff88; --green-bg: #0a2a1a;
--red: #ff6b8a; --red-bg: #2a0a14;
--orange: #ffb347; --orange-bg: #2a1a0a;
--purple: #a855f7; --purple-bg: #1a0a2a;
--cyan: #00d4ff; --cyan-bg: #0a1a2a;
--pink: #ff6ec7; --pink-bg: #2a0a1f;
--radius: 8px; --radius-lg: 14px;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Inter', -apple-system, sans-serif; background: var(--bg); color: var(--text); line-height: 1.5; min-height: 100vh; }
.container { max-width: 960px; margin: 0 auto; padding: 1.5rem; }
/* Navbar - Premium Redesign */
.navbar { background: var(--bg-nav); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 100; backdrop-filter: blur(8px); }
.nav-inner { max-width: 100%; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; padding: .35rem 1rem; min-height: 46px; flex-wrap: wrap; gap: .35rem; }
.nav-brand { display: flex; align-items: center; gap: .4rem; color: var(--text); text-decoration: none; font-weight: 700; font-size: .85rem; flex-shrink: 0; }
.nav-brand:hover { color: var(--accent); transition: color .2s; }
.nav-logo { height: 28px; width: auto; }
.login-logo-img { height: 80px; width: auto; margin-bottom: .5rem; }
.nav-links { display: flex; gap: 1px; align-items: center; flex-wrap: wrap; }
.nav-link {
display: inline-flex; align-items: center; gap: .35rem;
padding: .32rem .55rem; border-radius: 7px; color: var(--text-muted);
text-decoration: none; font-size: .72rem; font-weight: 500; transition: all .18s;
border-bottom: 2px solid transparent; position: relative;
}
.nav-link svg { width: 14px; height: 14px; flex-shrink: 0; }
.nav-link:hover { color: var(--text); background: var(--border-light); }
.nav-link.active { color: var(--text); background: var(--border-light); font-weight: 600; border-bottom-color: var(--accent); }
.nav-link.logout { color: var(--red); }
.nav-link.logout:hover { background: var(--red-bg); color: var(--red); }
.nav-link.logout.active { border-bottom-color: var(--red); }
/* Colorful nav-link accents */
.nav-link.cl-dash:hover,.nav-link.cl-dash.active { border-bottom-color: var(--accent); color: var(--accent); }
.nav-link.cl-clients:hover,.nav-link.cl-clients.active { border-bottom-color: var(--green); color: var(--green); }
.nav-link.cl-eng:hover,.nav-link.cl-eng.active { border-bottom-color: var(--purple); color: var(--purple); }
.nav-link.cl-fin:hover,.nav-link.cl-fin.active { border-bottom-color: var(--orange); color: var(--orange); }
.nav-link.cl-market:hover,.nav-link.cl-market.active { border-bottom-color: var(--cyan); color: var(--cyan); }
.nav-link.cl-tasks:hover,.nav-link.cl-tasks.active { border-bottom-color: var(--pink); color: var(--pink); }
.nav-link.cl-data:hover,.nav-link.cl-data.active { border-bottom-color: var(--green); color: var(--green); }
.nav-link.cl-settings:hover,.nav-link.cl-settings.active { border-bottom-color: var(--text-muted); color: var(--text); }
.nav-icon-btn{display:inline-flex;align-items:center;gap:.3rem;padding:.25rem .45rem;font-size:.68rem;text-decoration:none;color:var(--text-muted);border-radius:6px;background:transparent;border:none;cursor:pointer;font-family:inherit;transition:all .15s}
.nav-icon-btn:hover{color:var(--text);background:var(--border-light)}
.nav-icon-btn svg{width:15px;height:15px}
/* Dashboard */
.dash-header { margin-bottom: 1.5rem; }
.dash-header h1 { font-size: 1.5rem; color: var(--text); font-weight: 600; }
.stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: .75rem; margin-bottom: 1.5rem; }
.stat-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem; }
.stat-number { font-size: 1.75rem; font-weight: 700; color: var(--accent); }
.stat-card.green .stat-number { color: var(--green); }
.stat-card.orange .stat-number { color: var(--orange); }
.stat-card.purple .stat-number { color: var(--purple); }
.stat-label { font-size: .75rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .3px; margin-top: 2px; }
/* Client grid */
.client-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: .75rem; }
.client-card {
background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius);
padding: 1rem; text-decoration: none; color: inherit; transition: all .15s;
}
.client-card:hover { border-color: var(--text-dim); }
.client-card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: .5rem; }
.client-card-header h4 { font-size: .9rem; color: var(--text); font-weight: 600; }
.client-meta { font-size: .8rem; color: var(--text-muted); }
.client-meta.warn { color: var(--orange); }
.client-meta.small { font-size: .7rem; }
/* Status badges */
.status-badge { display: inline-block; padding: .15rem .5rem; border-radius: 999px; font-size: .65rem; font-weight: 500; border: 1px solid transparent; }
.status-badge.lead { border-color: var(--accent); color: var(--accent); }
.status-badge.active { border-color: var(--green); color: var(--green); }
.status-badge.paused { border-color: var(--orange); color: var(--orange); }
.status-badge.archived { border-color: var(--text-dim); color: var(--text-dim); }
.status-badge.planned { border-color: var(--accent); color: var(--accent); }
.status-badge.in_progress { border-color: var(--green); color: var(--green); }
.status-badge.completed { border-color: var(--purple); color: var(--purple); }
.status-badge.on_hold { border-color: var(--orange); color: var(--orange); }
.status-badge.todo { border-color: var(--text-dim); color: var(--text-dim); }
.status-badge.done { border-color: var(--green); color: var(--green); }
/* Engagement type */
.engagement-type { display: inline-block; padding: .1rem .45rem; border-radius: 3px; font-size: .65rem; font-weight: 500; }
.engagement-type.assessment { background: var(--cyan-bg); color: var(--cyan); }
.engagement-type.architecture { background: var(--purple-bg); color: var(--purple); }
.engagement-type.implementation { background: var(--green-bg); color: var(--green); }
.engagement-type.monitoring { background: var(--orange-bg); color: var(--orange); }
.engagement-type.consulting { background: var(--pink-bg); color: var(--pink); }
.engagement-type.training { background: var(--red-bg); color: var(--red); }
/* Tables */
.data-table { width: 100%; border-collapse: collapse; }
.data-table th {
text-align: left; padding: .5rem .75rem; font-size: .7rem; color: var(--text-muted);
text-transform: uppercase; letter-spacing: .3px;
border-bottom: 1px solid var(--border); background: var(--bg-card);
}
.data-table td { padding: .5rem .75rem; border-bottom: 1px solid var(--border-light); font-size: .8rem; }
.data-table tr:hover td { background: var(--border-light); }
/* Engagement list */
.engagement-list { display: flex; flex-direction: column; gap: .35rem; }
.engagement-row {
display: flex; align-items: center; gap: .75rem;
background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius);
padding: .6rem .75rem; text-decoration: none; color: inherit; transition: all .15s;
}
.engagement-row:hover { border-color: var(--text-dim); }
.engagement-title { flex: 1; font-weight: 500; color: var(--text); font-size: .85rem; }
.engagement-client { color: var(--text-muted); font-size: .8rem; }
.engagement-date { color: var(--text-dim); font-size: .75rem; }
/* Page header */
.page-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.25rem; }
.page-header h1 { font-size: 1.3rem; color: var(--text); font-weight: 600; }
.header-actions { display: flex; gap: .5rem; align-items: center; }
.back-link { color: var(--text-muted); text-decoration: none; font-size: .8rem; display: inline-block; margin-bottom: .35rem; transition: all .12s; }
.back-link:hover { color: var(--accent); padding-left: 2px; }
.back-link svg { width: 14px; height: 14px; vertical-align: middle; margin-right: 2px; }
.breadcrumb { display: flex; align-items: center; gap: .35rem; font-size: .75rem; color: var(--text-dim); margin-bottom: .75rem; flex-wrap: wrap; }
.breadcrumb a { color: var(--text-muted); text-decoration: none; transition: color .12s; }
.breadcrumb a:hover { color: var(--accent); }
.breadcrumb .sep { color: var(--border); font-size: .6rem; }
.breadcrumb .current { color: var(--text); font-weight: 500; }
/* Detail grid */
.detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: .75rem; margin-bottom: 1.5rem; }
@media (max-width: 640px) { .detail-grid { grid-template-columns: 1fr; } }
.detail-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem; }
.detail-card h3 { font-size: .75rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .3px; margin-bottom: .75rem; }
/* Forms */
.form-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.25rem; }
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: .75rem; }
@media (max-width: 640px) { .form-grid { grid-template-columns: 1fr; } }
.form-actions { display: flex; gap: .5rem; margin-top: 1rem; }
input, textarea, select {
width: 100%; padding: .45rem .6rem; background: var(--bg);
border: 1px solid var(--border); border-radius: var(--radius);
color: var(--text); font-size: .85rem; font-family: inherit; transition: border-color .15s;
}
input:focus, textarea:focus, select:focus {
outline: none; border-color: var(--accent); box-shadow: 0 0 0 2px rgba(88,166,255,.15);
}
select { cursor: pointer; }
select option { background: var(--bg); color: var(--text); }
/* Alerts */
.alert { padding: .5rem .75rem; border-radius: var(--radius); margin-bottom: .75rem; font-size: .8rem; }
.alert-error { background: var(--red-bg); border: 1px solid var(--red); color: var(--red); }
/* Advice */
.advice-list { display: flex; flex-direction: column; gap: .35rem; }
.advice-card {
display: flex; align-items: flex-start; gap: .5rem;
background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius);
padding: .6rem .75rem; border-left: 3px solid var(--border);
}
.advice-card.critical { border-left-color: var(--red); }
.advice-card.high { border-left-color: var(--orange); }
.advice-card.medium { border-left-color: var(--accent); }
.advice-card.low { border-left-color: var(--green); }
.advice-prio {
font-size: .55rem; font-weight: 600; text-transform: uppercase;
padding: .1rem .35rem; border-radius: 3px; white-space: nowrap;
}
.advice-prio.critical { background: var(--red-bg); color: var(--red); }
.advice-prio.high { background: var(--orange-bg); color: var(--orange); }
.advice-prio.medium { background: var(--cyan-bg); color: var(--cyan); }
.advice-prio.low { background: var(--green-bg); color: var(--green); }
.advice-body { flex: 1; }
.advice-body p { font-size: .8rem; color: var(--text); }
/* Tasks */
.task-list { display: flex; flex-direction: column; gap: .35rem; }
.task-item {
display: flex; align-items: center; gap: .5rem;
background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius);
padding: .5rem .75rem;
}
.task-item.done { opacity: .5; }
.task-item.done .task-title { text-decoration: line-through; }
.task-status-form select { width: auto; padding: .2rem .4rem; font-size: .7rem; }
.task-body { flex: 1; display: flex; flex-direction: column; gap: .1rem; }
.task-title { font-size: .85rem; color: var(--text); font-weight: 500; }
.task-desc { font-size: .75rem; color: var(--text-muted); }
.task-meta { font-size: .7rem; color: var(--accent); }
.task-prio { font-size: .55rem; font-weight: 600; text-transform: uppercase; padding: .1rem .35rem; border-radius: 3px; }
.task-prio.critical { background: var(--red-bg); color: var(--red); }
.task-prio.high { background: var(--orange-bg); color: var(--orange); }
.task-prio.medium { background: var(--cyan-bg); color: var(--cyan); }
.task-prio.low { background: var(--green-bg); color: var(--green); }
.task-due { font-size: .7rem; color: var(--text-muted); }
.task-due.overdue { color: var(--red); font-weight: 500; }
.task-form { margin-bottom: .75rem; }
.task-form-grid { display: flex; gap: .35rem; align-items: flex-end; flex-wrap: wrap; }
.task-form-grid input, .task-form-grid select { width: auto; min-width: 120px; flex: 1; }
.section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: .75rem; }
/* Assessment list */
.assess-list { display: flex; flex-direction: column; gap: .35rem; }
.assess-item { display: flex; align-items: center; gap: .75rem; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: .6rem .75rem; }
.assess-date { font-size: .8rem; color: var(--text-muted); }
.assess-id { font-weight: 500; color: var(--text); flex: 1; font-size: .85rem; }
/* Empty state */
.empty-state { text-align: center; padding: 2.5rem 1rem; color: var(--text-muted); }
.empty-state p { font-size: .85rem; }
/* Status form */
.status-form { display: flex; gap: .35rem; align-items: center; }
.status-form select { width: auto; }
/* Buttons */
.btn {
padding: .45rem .9rem; border: none; border-radius: var(--radius);
font-size: .8rem; font-weight: 500; cursor: pointer; transition: all .15s;
text-decoration: none; display: inline-block; text-align: center; line-height: 1.4;
}
.btn-primary { background: #238636; color: #fff; }
.btn-primary:hover { background: #2ea043; }
.btn-secondary { background: var(--border-light); color: var(--text-muted); border: 1px solid var(--border); }
.btn-secondary:hover { background: var(--border); color: var(--text); }
.btn-accent { background: var(--accent); color: #fff; }
.btn-accent:hover { background: var(--accent-hover); }
.btn-full { width: 100%; }
.btn-small {
padding: .2rem .5rem; border: none; border-radius: 4px;
font-size: .7rem; cursor: pointer; background: var(--border-light); color: var(--text-muted);
text-decoration: none; display: inline-block;
}
.btn-small:hover { background: var(--border); color: var(--text); }
.btn-small.danger { background: var(--red-bg); color: var(--red); }
.btn-small.danger:hover { background: #4d1a1c; }
/* Login */
.login-container { display: flex; justify-content: center; align-items: center; min-height: 100vh; padding: 1.5rem; }
.login-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 2rem; width: 100%; max-width: 360px; }
.login-logo { text-align: center; margin-bottom: 1.5rem; }
.login-logo h1 { font-size: 1.25rem; color: var(--text); }
/* Header */
.header { margin-bottom: 1.5rem; }
.logo { display: flex; align-items: center; gap: .75rem; margin-bottom: 1rem; }
.logo-icon { font-size: 1.5rem; font-weight: 800; color: var(--accent); }
.logo h1 { font-size: 1.25rem; font-weight: 600; color: var(--text); }
.subtitle { font-size: .8rem; color: var(--text-muted); }
/* Progress bar */
.progress-bar { width: 100%; height: 3px; background: var(--border-light); border-radius: 2px; overflow: hidden; margin-bottom: 1rem; }
.progress-fill { height: 100%; background: var(--accent); transition: width .3s; border-radius: 2px; }
/* Assessment steps */
.step { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.5rem; }
.step-header { margin-bottom: 1rem; }
.step-number { font-size: .7rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .5px; }
.step-header h2 { font-size: 1.1rem; font-weight: 600; color: var(--text); margin-top: .15rem; }
.fields { display: flex; flex-direction: column; gap: .75rem; }
.field label { display: block; font-size: .8rem; font-weight: 500; color: var(--text-muted); margin-bottom: .25rem; }
.step-actions { display: flex; justify-content: space-between; margin-top: 1.5rem; }
/* Report */
.report-header { text-align: center; padding: 1.5rem 0; border-bottom: 1px solid var(--border); margin-bottom: 1.5rem; }
.report-org { margin-bottom: 1rem; }
.report-org h1 { font-size: 1.5rem; color: var(--text); }
.report-title-block h2 { font-size: 1.3rem; color: var(--text); margin-bottom: .35rem; }
.report-client, .report-date { color: var(--text-muted); font-size: .85rem; }
.section { margin-bottom: 1.5rem; }
.section-title {
font-size: 1rem; font-weight: 600; color: var(--text);
margin-bottom: .75rem; padding-bottom: .35rem;
border-bottom: 2px solid var(--accent); display: inline-block;
}
.card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: .75rem; }
.card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: .75rem; }
.info-table { width: 100%; border-collapse: collapse; }
.info-table td { padding: .4rem .6rem; border-bottom: 1px solid var(--border-light); font-size: .8rem; }
.info-table tr:last-child td { border-bottom: none; }
.info-table td:first-child { width: 35%; color: var(--text-muted); }
.badge { display: inline-block; padding: .15rem .6rem; border-radius: 999px; font-size: .7rem; font-weight: 500; }
.badge.Starter { background: var(--green-bg); color: var(--green); }
.badge.Standard { background: var(--cyan-bg); color: var(--cyan); }
.badge.Advanced { background: var(--purple-bg); color: var(--purple); }
.badge.Enterprise { background: var(--red-bg); color: var(--red); }
.diagram { background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius); padding: .75rem; overflow-x: auto; }
.ascii-diagram { font-family: 'Courier New', monospace; font-size: .65rem; line-height: 1.3; color: var(--text-muted); }
.phase { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: .75rem; margin-bottom: .75rem; }
.phase h4 { color: var(--purple); margin-bottom: .5rem; font-size: .9rem; }
.phase ul { list-style: none; }
.phase li { padding: .25rem 0; color: var(--text); font-size: .85rem; }
.phase li::before { content: '→ '; color: var(--accent); }
.tech-stack { display: flex; flex-direction: column; gap: .35rem; }
.tech-item { display: flex; justify-content: space-between; align-items: center; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: .5rem .75rem; }
.tech-label { color: var(--text-muted); font-size: .8rem; }
.tech-val { color: var(--text); font-weight: 500; font-size: .85rem; text-align: right; }
.report-footer { text-align: center; padding: 1.5rem 0; border-top: 1px solid var(--border); margin-top: 1.5rem; }
.report-footer p { color: var(--text-muted); font-size: .75rem; margin-bottom: .75rem; }
.link { color: var(--accent); text-decoration: none; }
.link:hover { text-decoration: underline; }
/* Rack */
.rack-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: .75rem; }
.rack-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem; text-decoration: none; color: inherit; display: flex; gap: .75rem; transition: all .15s; }
.rack-card:hover { border-color: var(--text-dim); }
.rack-mini { width: 20px; display: flex; flex-direction: column; gap: 2px; }
.rack-mini-u { width: 100%; height: 5px; background: var(--border); border-radius: 1px; }
.rack-mini-u.filled { background: var(--accent); }
.rack-card-body h4 { font-size: .9rem; color: var(--text); }
.rack-layout { display: flex; gap: 1.5rem; align-items: flex-start; }
@media (max-width: 768px) { .rack-layout { flex-direction: column; } }
.rack-view { flex-shrink: 0; width: 240px; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.rack-header { background: var(--bg-nav); padding: .35rem .75rem; font-size: .75rem; color: var(--text-muted); text-align: center; border-bottom: 1px solid var(--border); }
.rack-body { display: flex; flex-direction: column; }
.rack-empty { display: flex; align-items: center; padding: 0 .4rem; height: 28px; border-bottom: 1px solid var(--border-light); background: var(--bg); }
.rack-u { width: 22px; font-size: .55rem; color: var(--text-dim); flex-shrink: 0; text-align: right; margin-right: .35rem; }
.rack-device { display: flex; align-items: center; padding: 0 .4rem; gap: .25rem; border-bottom: 1px solid var(--border-light); cursor: pointer; transition: all .15s; font-size: .6rem; overflow: hidden; }
.rack-device:hover { filter: brightness(1.15); }
.rack-device.server { background: linear-gradient(90deg, var(--cyan-bg), var(--bg)); border-left: 2px solid var(--accent); }
.rack-device.switch { background: linear-gradient(90deg, var(--purple-bg), var(--bg)); border-left: 2px solid var(--purple); }
.rack-device.storage { background: linear-gradient(90deg, var(--green-bg), var(--bg)); border-left: 2px solid var(--green); }
.rack-device.firewall { background: linear-gradient(90deg, var(--red-bg), var(--bg)); border-left: 2px solid var(--red); }
.rack-device.patch_panel { background: linear-gradient(90deg, var(--orange-bg), var(--bg)); border-left: 2px solid var(--orange); }
.rack-device.pdu { background: linear-gradient(90deg, var(--cyan-bg), var(--bg)); border-left: 2px solid var(--cyan); }
.rack-device.ups { background: linear-gradient(90deg, var(--purple-bg), var(--bg)); border-left: 2px solid var(--purple); }
.rack-device-name { flex: 1; font-weight: 500; color: var(--text); white-space: nowrap; font-size: .65rem; }
/* Modal */
.modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,.7); z-index: 1000; display: flex; align-items: center; justify-content: center; }
.modal-content { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.25rem; width: 90%; max-width: 560px; max-height: 80vh; overflow-y: auto; }
.modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: .75rem; }
.modal-header h3 { color: var(--text); font-size: 1rem; }
/* Network */
.device-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: .5rem; }
.device-card { display: flex; align-items: center; gap: .5rem; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: .75rem; text-decoration: none; color: inherit; transition: all .15s; }
.device-card:hover { border-color: var(--text-dim); }
.device-icon { width: 32px; height: 32px; border-radius: var(--radius); display: flex; align-items: center; justify-content: center; font-size: 1rem; flex-shrink: 0; }
.device-card.switch .device-icon { background: var(--purple-bg); color: var(--purple); }
.device-card.router .device-icon { background: var(--cyan-bg); color: var(--cyan); }
.device-card.firewall .device-icon { background: var(--red-bg); color: var(--red); }
.device-info { flex: 1; display: flex; flex-direction: column; gap: .1rem; }
.device-info strong { font-size: .85rem; color: var(--text); }
.media-badge { display: inline-block; padding: .1rem .35rem; border-radius: 3px; font-size: .65rem; font-weight: 500; }
.media-badge.copper { background: var(--orange-bg); color: var(--orange); }
.media-badge.sfp, .media-badge.sfp\+ { background: var(--cyan-bg); color: var(--cyan); }
.media-badge.qsfp { background: var(--purple-bg); color: var(--purple); }
.media-badge.dac { background: var(--green-bg); color: var(--green); }
.media-badge.fiber { background: var(--pink-bg); color: var(--pink); }
.conn-list { display: flex; flex-direction: column; gap: .35rem; }
.conn-item { background: var(--bg); border: 1px solid var(--border-light); border-radius: var(--radius); padding: .5rem .6rem; }
.conn-name { font-size: .8rem; color: var(--text); font-weight: 500; }
.conn-path { font-size: .7rem; color: var(--text-muted); }
.conn-meta { font-size: .65rem; color: var(--accent); }
/* Diagram grid */
.diagram-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: .75rem; }
.diagram-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem; text-decoration: none; color: inherit; display: flex; gap: .75rem; transition: all .15s; position: relative; }
.diagram-card:hover { border-color: var(--text-dim); }
.diagram-card .diagram-card-body { padding-bottom: 1.5rem; }
.diagram-card-type { width: 36px; height: 36px; border-radius: var(--radius); display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: .7rem; flex-shrink: 0; }
.diagram-card-type.data_architecture { background: var(--cyan-bg); color: var(--cyan); }
.diagram-card-type.network_topology { background: var(--purple-bg); color: var(--purple); }
.diagram-card-type.system_architecture { background: var(--green-bg); color: var(--green); }
.diagram-card-body h4 { font-size: .85rem; color: var(--text); }
code { background: var(--border-light); padding: .1rem .3rem; border-radius: 3px; font-size: .75rem; color: var(--accent); }
@media print {
body { background: #fff; color: #000; }
.navbar { display: none; }
.step, .card, .phase, .tech-item, .diagram, .detail-card, .client-card, .advice-card, .engagement-row, .task-item, .assess-item, .stat-card, .data-table { background: #f5f5f5; border-color: #ddd; }
.report-header { border-bottom-color: #ddd; }
.section-title { border-bottom-color: #58a6ff; }
.logo h1, .step-header h2, .report-title-block h2, .report-org h1, .phase h4, .tech-val, .detail-card h3 { color: #000; }
.btn, .nav-links, .header-actions, .btn-small { display: none; }
.info-table td { border-bottom-color: #ddd; }
.ascii-diagram { color: #333; }
}
/* 🔥 PREMIUM ANIMATIONS */
@keyframes pulse { 0%,100% { opacity:1 } 50% { opacity:.7 } }
@keyframes pulse-glow { 0%,100% { box-shadow:0 0 0 0 rgba(88,166,255,.15) } 50% { box-shadow:0 0 15px 4px rgba(88,166,255,.08) } }
@keyframes shimmer { 0% { background-position:-200% 0 } 100% { background-position:200% 0 } }
@keyframes fadeInUp { from { opacity:0; transform:translateY(12px) } to { opacity:1; transform:translateY(0) } }
@keyframes fadeIn { from { opacity:0 } to { opacity:1 } }
@keyframes slideInLeft { from { opacity:0; transform:translateX(-8px) } to { opacity:1; transform:translateX(0) } }
@keyframes gradientShift { 0% { background-position:0% 50% } 50% { background-position:100% 50% } 100% { background-position:0% 50% } }
@keyframes float { 0%,100% { transform:translateY(0) } 50% { transform:translateY(-4px) } }
@keyframes borderGlow { 0%,100% { border-color:var(--border) } 50% { border-color:rgba(88,166,255,.3) } }
.pulse { animation: pulse 2s ease-in-out infinite }
.pulse-glow { animation: pulse-glow 3s ease-in-out infinite }
.fade-in { animation: fadeIn .4s ease-out }
.fade-in-up { animation: fadeInUp .5s ease-out }
.slide-in { animation: slideInLeft .4s ease-out }
.gradient-text {
background: linear-gradient(135deg, var(--accent), var(--purple), var(--accent));
background-size: 200% auto;
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
background-clip: text;
animation: gradientShift 4s ease infinite;
}
.gradient-border {
position:relative;
background:var(--bg-card); border:1px solid transparent;
background-clip:padding-box;
}
.gradient-border::before {
content:''; position:absolute; inset:0; margin:-1px; border-radius:inherit;
background:linear-gradient(135deg,var(--accent),transparent 40%,var(--purple) 60%,transparent);
z-index:-1; opacity:.3; transition:opacity .3s;
}
.gradient-border:hover::before { opacity:.6 }
/* Card premium hover */
.card-hover {
transition: all .25s cubic-bezier(.4,0,.2,1);
}
.card-hover:hover {
transform: translateY(-2px);
box-shadow: 0 8px 30px rgba(0,0,0,.12), 0 0 0 1px var(--accent);
border-color: var(--accent);
}
/* KPI pulse dots */
.kpi-dot {
width:8px;height:8px;border-radius:50%;display:inline-block;
background:var(--green);animation:pulse-glow 2s ease-in-out infinite;
}
/* Shimmer loading */
.shimmer {
background:linear-gradient(90deg,var(--border-light) 25%,var(--border) 50%,var(--border-light) 75%);
background-size:200% 100%; animation:shimmer 2s infinite;
border-radius:var(--radius); height:16px;
}
/* Theme toggle */
.theme-toggle {
width:44px;height:24px;border-radius:12px;background:var(--border);
cursor:pointer;position:relative;transition:all .3s;border:none;flex-shrink:0;
}
.theme-toggle::after {
content:'';position:absolute;top:2px;left:2px;width:20px;height:20px;
border-radius:50%;background:var(--accent);transition:all .3s;
box-shadow:0 1px 3px rgba(0,0,0,.2);
}
.theme-toggle.light { background:var(--accent) }
.theme-toggle.light::after { left:22px; background:#fff }
/* Light mode overrides */
body.light-mode {
--bg: #f8f9fa; --bg-card: #ffffff; --bg-nav: #ffffff;
--border: #e0e4e8; --border-light: #f0f2f5;
--text: #1a1d21; --text-muted: #5a5f66; --text-dim: #8b9098;
--accent: #0969da; --accent-hover: #0550ae;
--green: #1a7f37; --green-bg: #dafbe1;
--red: #cf222e; --red-bg: #ffebe9;
--orange: #953800; --orange-bg: #fff1e5;
--purple: #8250df; --purple-bg: #fbefff;
--cyan: #0550ae; --cyan-bg: #ddf4ff;
--pink: #bf3989; --pink-bg: #ffeff7;
}
body.light-mode .navbar { box-shadow: 0 1px 3px rgba(0,0,0,.04), 0 1px 6px rgba(0,0,0,.03) }
body.light-mode .sidebar { box-shadow: 1px 0 3px rgba(0,0,0,.03) }
body.light-mode .card-hover:hover { box-shadow: 0 4px 20px rgba(0,0,0,.06), 0 0 0 1px var(--accent) }
body.light-mode .kpi-card { box-shadow: 0 1px 2px rgba(0,0,0,.02) }
body.light-mode .kpi-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,.06) }
/* Smooth transitions for theme switch */
body, .navbar, .sidebar, .card, .kpi-card, .client-card, .data-table, input, select, textarea, .btn {
transition: background-color .3s ease, color .3s ease, border-color .3s ease, box-shadow .3s ease;
}