:root { color-scheme: dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
* { box-sizing: border-box; }
body { margin: 0; min-width: 320px; background: #07141e; color: #eef6fa; }
.login-layout { min-height: 100vh; display: grid; grid-template-columns: minmax(420px, 46%) 1fr; }
.login-panel { position: relative; z-index: 2; display: flex; flex-direction: column; justify-content: center; padding: 58px clamp(42px, 9vw, 150px); background: #fff; color: #182633; }
.brand { position: absolute; top: 42px; left: clamp(42px, 9vw, 150px); display: flex; align-items: center; gap: 10px; color: #112b3c; font-size: 1.08rem; font-weight: 750; letter-spacing: -.02em; }
.brand-mark { display: grid; place-items: center; width: 31px; height: 31px; border-radius: 9px; background: #0aaf8c; color: white; font-size: 1.35rem; font-weight: 800; transform: rotate(-24deg); }
.intro { max-width: 420px; }
.eyebrow { margin: 0 0 14px; color: #08a17e; font-weight: 750; font-size: .78rem; letter-spacing: .13em; text-transform: uppercase; }
h1 { margin: 0; color: #102939; font-size: clamp(2.35rem, 4vw, 3.35rem); line-height: 1.04; letter-spacing: -.055em; }
.intro > p:last-child { margin: 19px 0 34px; color: #70808a; line-height: 1.55; font-size: .96rem; }
form { width: min(100%, 390px); }
label { display: block; margin: 19px 0 8px; color: #425562; font-size: .82rem; font-weight: 700; }
input { width: 100%; height: 48px; border: 1px solid #dbe4e8; border-radius: 9px; padding: 0 14px; color: #193243; background: #fbfdfe; outline: none; font: inherit; transition: border-color .2s, box-shadow .2s; }
input:focus { border-color: #0aaf8c; box-shadow: 0 0 0 4px #0aaf8c20; }
.password-field { position: relative; }.password-field input { padding-right: 48px; }.password-field button { position: absolute; top: 6px; right: 5px; width: 37px; height: 37px; border: 0; border-radius: 7px; background: transparent; color: #60747e; cursor: pointer; font-size: 1.3rem; }.password-field button:hover { background: #eff5f5; }
.error { min-height: 19px; margin: 12px 0 0; color: #c64545; font-size: .82rem; }.submit { width: 100%; height: 50px; margin-top: 9px; border: 0; border-radius: 9px; display: flex; align-items: center; justify-content: space-between; padding: 0 17px; background: #0aaf8c; color: #fff; font: inherit; font-weight: 750; cursor: pointer; box-shadow: 0 8px 18px #0aaf8c3b; transition: transform .2s, background .2s; }.submit:hover { transform: translateY(-1px); background: #069b7b; }.submit:disabled { opacity: .7; cursor: wait; }
.security-note { margin: 30px 0 0; color: #84939b; font-size: .77rem; }.security-note span { color: #0aaf8c; font-size: .62rem; vertical-align: 1px; }
.traffic-scene { position: relative; overflow: hidden; min-height: 620px; background: radial-gradient(circle at 66% 20%, #216681 0, #123a4c 30%, #092532 66%, #061820 100%); }.scene-copy { position: absolute; z-index: 3; top: 12%; left: 11%; }.scene-copy p { margin: 0 0 12px; color: #64e1c5; font-weight: 700; font-size: .78rem; letter-spacing: .14em; text-transform: uppercase; }.scene-copy h2 { margin: 0; font-size: clamp(2rem, 4vw, 3.6rem); line-height: 1.03; letter-spacing: -.06em; }
.sky-glow { position: absolute; right: -8%; top: 16%; width: 46vw; height: 32vw; border-radius: 50%; background: #3db6bf1c; filter: blur(12px); animation: glow 5s ease-in-out infinite alternate; }.mobility-grid { position: absolute; inset: 0; opacity: .22; background-image: linear-gradient(#77d9d025 1px, transparent 1px), linear-gradient(90deg, #77d9d025 1px, transparent 1px); background-size: 42px 42px; mask-image: linear-gradient(to bottom, transparent 4%, black 30%, black 80%, transparent); }
.sensor-map { position: absolute; z-index: 2; right: -8%; bottom: -4%; width: 93%; height: 75%; overflow: visible; }.map-link { fill: none; stroke: #174d5a; stroke-width: 15; stroke-linecap: round; opacity: .95; }.street-main { stroke: #1d5f6d; stroke-width: 19; }.sensor-map > path { filter: drop-shadow(0 0 5px #42d6c735); }.sensor-node circle:first-child { fill: #73f0d2; filter: drop-shadow(0 0 6px #42e7c3); transition: fill .2s, filter .2s; }.node-ring { fill: none; stroke: #6af0d2; stroke-width: 1.5; opacity: 0; }.sensor-node.is-active circle:first-child { fill: #e5fff7; filter: drop-shadow(0 0 13px #74ffe0); }.sensor-node.is-active .node-ring { animation: node-ping .85s ease-out; }.traffic-dot { filter: drop-shadow(0 0 6px currentColor); }.traffic-mint { fill: #71f0d1; color: #71f0d1; }.traffic-blue { fill: #68c9ff; color: #68c9ff; }.traffic-lime { fill: #e7ff82; color: #e7ff82; }
.metric-card { position: absolute; z-index: 4; top: 30%; right: 14%; width: min(76%, 272px); padding: 18px 19px 15px; border: 1px solid #a1eee642; border-radius: 15px; background: #0d3442bc; box-shadow: 0 14px 38px #001b2980; backdrop-filter: blur(13px); }.metric-card > div:first-child { display: grid; gap: 4px; }.metric-card span { color: #78e9d1; font-size: .62rem; font-weight: 800; letter-spacing: .13em; }.metric-card strong { font-size: 2rem; letter-spacing: -.05em; }.metric-card small { color: #b0ced2; font-size: .72rem; }.metric-trend { position: absolute; top: 21px; right: 18px; color: #78e9d1; font-size: .73rem; }.metric-bars { height: 27px; margin-top: 14px; display: flex; align-items: end; gap: 5px; }.metric-bars i { flex: 1; border-radius: 3px 3px 1px 1px; background: linear-gradient(#6be6ce, #169e8e); animation: chart-rise 1.9s ease-in-out infinite alternate; }.metric-bars i:nth-child(1) { height: 34%; }.metric-bars i:nth-child(2) { height: 58%; animation-delay: -.6s; }.metric-bars i:nth-child(3) { height: 46%; animation-delay: -1.1s; }.metric-bars i:nth-child(4) { height: 87%; animation-delay: -.3s; }.metric-bars i:nth-child(5) { height: 68%; animation-delay: -1.5s; }.metric-bars i:nth-child(6) { height: 95%; animation-delay: -.8s; }.metric-bars i:nth-child(7) { height: 72%; animation-delay: -1.3s; }.scene-caption { position: absolute; z-index: 4; right: 8%; bottom: 8%; padding: 11px 15px; border: 1px solid #8ee6d63d; border-radius: 99px; background: #0b2d3b9e; backdrop-filter: blur(6px); color: #d9f4f0; font-size: .78rem; }.pulse { display: inline-block; width: 7px; height: 7px; margin-right: 6px; border-radius: 50%; background: #55e5ae; box-shadow: 0 0 0 0 #55e5ae80; animation: pulse 1.6s infinite; }
@keyframes glow { to { transform: scale(1.15); opacity: .85; } } @keyframes pulse { 70% { box-shadow: 0 0 0 9px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } } @keyframes node-ping { 0%, 20% { transform: scale(.15); opacity: .9; } 70%, 100% { transform: scale(1.45); opacity: 0; } } @keyframes chart-rise { to { transform: scaleY(.68); opacity: .65; } }
@media (max-width: 780px) { .login-layout { display: block; }.traffic-scene { display: none; }.login-panel { min-height: 100vh; padding: 110px 28px 48px; }.brand { top: 30px; left: 28px; } }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; } }
