.app{min-height:100vh;position:relative}.app-header{background-color:var(--bg-card);padding:24px 30px;box-shadow:0 2px 8px var(--shadow-sm);margin-bottom:30px;border-radius:10px;display:flex;align-items:center;justify-content:space-between;transition:background-color .4s ease,box-shadow .4s ease;border-left:4px solid #F96302;position:relative;z-index:1}.app-header h1{color:var(--text-primary);font-size:28px;font-weight:700;letter-spacing:-.3px;transition:color .4s ease}.title-accent{color:#f96302;font-weight:800;text-transform:uppercase;letter-spacing:1.5px;font-size:.95em}.title-version{background:linear-gradient(135deg,#f96302,#ff8c42);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:800;font-size:1.05em}.title-separator{color:var(--text-secondary, #999);font-weight:300;margin:0 4px;opacity:.5}.header-controls{display:flex;align-items:center;gap:16px}.loading-indicator{display:inline-block;color:var(--text-link);font-size:14px;font-weight:500}.error-indicator{display:inline-block;color:#e74c3c;font-size:14px;font-weight:500}.countdown-banner{text-align:center;padding:24px 16px}.countdown-label{font-size:16px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--text-primary);margin-bottom:12px}.countdown-timer{display:flex;align-items:baseline;justify-content:center;gap:8px}.countdown-segment{display:flex;flex-direction:column;align-items:center}.countdown-value{font-size:56px;font-weight:800;line-height:1;color:var(--text-primary);font-variant-numeric:tabular-nums}.countdown-unit{font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text-secondary, var(--text-primary));margin-top:4px}.countdown-colon{font-size:48px;font-weight:800;color:var(--text-primary);line-height:1;align-self:flex-start}.env-ribbon{display:flex;align-items:center;justify-content:center;gap:10px;padding:10px 24px;background:linear-gradient(90deg,var(--env-color) 0%,color-mix(in srgb,var(--env-color) 80%,transparent) 100%);color:#fff;font-size:13px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;border-radius:8px;margin:0 0 8px;transition:background .35s ease;box-shadow:0 2px 8px color-mix(in srgb,var(--env-color) 30%,transparent)}.env-ribbon-dot{width:8px;height:8px;border-radius:50%;background:#fff;opacity:.85;animation:pulse 1.5s ease-in-out infinite}.env-ribbon-name{font-weight:800;font-size:15px;letter-spacing:2px}.env-ribbon-sep{opacity:.5;font-weight:300}.env-ribbon-desc{font-weight:400;opacity:.9;letter-spacing:1px;font-size:12px}.countdown-banner--watermark{position:relative;overflow:hidden}.env-watermark{position:fixed;top:0;left:0;width:200vw;height:200vh;transform:rotate(-12deg) translate(-15%,-15%);font-size:clamp(36px,5vw,64px);font-weight:900;text-transform:uppercase;letter-spacing:8px;color:var(--env-color);opacity:.05;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap;line-height:1;z-index:0;transition:color .35s ease,opacity .35s ease;display:flex;flex-direction:column;align-items:flex-start;gap:48px;overflow:hidden}.env-watermark-row{display:flex;gap:60px}.env-watermark-row:nth-child(3n+2){transform:translate(120px)}.env-watermark-row:nth-child(3n+3){transform:translate(240px)}[data-theme=dark] .env-watermark{opacity:.07}.countdown-banner--glow{position:relative;border-radius:12px;margin:0 10px 20px;background:var(--bg-card);box-shadow:0 0 0 2px color-mix(in srgb,var(--env-color) 40%,transparent),0 0 20px color-mix(in srgb,var(--env-color) 20%,transparent),0 0 60px color-mix(in srgb,var(--env-color) 10%,transparent);animation:glowPulse 3s ease-in-out infinite;transition:box-shadow .4s ease}.countdown-banner--glow:before{content:attr(data-env);position:absolute;top:10px;right:16px;font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--env-color);opacity:.7}@keyframes glowPulse{0%,to{box-shadow:0 0 0 2px color-mix(in srgb,var(--env-color) 40%,transparent),0 0 20px color-mix(in srgb,var(--env-color) 20%,transparent),0 0 60px color-mix(in srgb,var(--env-color) 10%,transparent)}50%{box-shadow:0 0 0 2px color-mix(in srgb,var(--env-color) 60%,transparent),0 0 30px color-mix(in srgb,var(--env-color) 30%,transparent),0 0 80px color-mix(in srgb,var(--env-color) 15%,transparent)}}.env-corner-flag{position:fixed;top:0;right:0;width:0;height:0;overflow:visible;pointer-events:none;z-index:0}.env-corner-flag span{position:absolute;display:block;width:700px;padding:16px 120px 16px 0;background:var(--env-color);color:#fff;font-size:18px;font-weight:800;letter-spacing:6px;text-transform:uppercase;text-align:right;top:120px;right:-160px;transform:rotate(45deg);transform-origin:center center;box-shadow:0 3px 10px #00000040;opacity:.8}.countdown-inner{transition:all .35s ease}.style-switcher{display:flex;justify-content:center;gap:6px;margin-top:12px}.style-switch-btn{padding:4px 14px;border:1px solid var(--border-medium);border-radius:6px;background:var(--bg-card);color:var(--text-secondary);font-size:11px;font-weight:600;letter-spacing:.5px;cursor:pointer;transition:all .2s ease}.style-switch-btn:hover{border-color:var(--text-link);color:var(--text-link)}.style-switch-btn.active{background:var(--text-link);color:#fff;border-color:var(--text-link)}.live-indicator{display:inline-flex;align-items:center;color:var(--live-color);font-size:13px;font-weight:500;gap:2px;animation:fadeIn .3s ease-in}.pulse-dot{display:inline-block;animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 20px;text-align:center}.loading-spinner{width:50px;height:50px;border:4px solid var(--spinner-track);border-top:4px solid var(--spinner-fill);border-radius:50%;animation:spin 1s linear infinite;margin-bottom:20px;transition:border-color .4s ease}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading-container p{color:var(--text-secondary);font-size:16px;transition:color .4s ease}.search-bar-container{display:flex;align-items:flex-end;justify-content:space-between;padding:0 10px;margin-bottom:16px;position:relative;z-index:1}.search-bar{display:flex;align-items:center;gap:10px;width:100%;max-width:420px;padding:10px 16px;background-color:var(--bg-card);border:1px solid var(--border-medium);border-radius:10px;box-shadow:0 1px 4px var(--shadow-sm);transition:border-color .2s ease,box-shadow .2s ease,background-color .4s ease}.search-bar:focus-within{border-color:var(--text-link);box-shadow:0 0 0 3px #2196f326}.search-icon{flex-shrink:0;color:var(--text-muted);transition:color .2s ease}.search-bar:focus-within .search-icon{color:var(--text-link)}.search-input{flex:1;border:none;outline:none;background:transparent;font-size:15px;color:var(--text-primary);font-family:inherit}.search-input::placeholder{color:var(--text-muted)}.search-clear{display:flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:none;border-radius:50%;background-color:var(--bg-hover);color:var(--text-secondary);font-size:12px;cursor:pointer;transition:background-color .15s ease,color .15s ease}.search-clear:hover{background-color:var(--border-medium);color:var(--text-primary)}.dashboard-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;padding:0 10px;position:relative;z-index:1}.dashboard-container--collapsible{display:flex;flex-wrap:nowrap;align-items:flex-start;overflow-x:auto}.dashboard-container--collapsible .route-list:not(.route-list--collapsed){flex:1 1 300px;min-width:300px}.dashboard-container--collapsible .route-list--collapsed{flex:0 0 48px}.layout-switcher{display:flex;gap:6px}@media (max-width: 768px){.dashboard-container{grid-template-columns:1fr}.app-header{flex-direction:column;gap:16px;align-items:flex-start}}.flying-rocket{position:fixed;z-index:10000;pointer-events:none;will-change:transform,opacity;animation:crossColumnFlight var(--flight-duration, 1.8s) cubic-bezier(.22,1,.36,1) forwards;filter:drop-shadow(0 0 8px rgba(255,150,40,.45)) drop-shadow(0 0 18px rgba(255,110,20,.18))}.flying-rocket-body{font-size:36px;line-height:1;display:block}@keyframes rocketPulse{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(.9)}}.launch-burst{position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;transform:translate(-50%,-50%);background:radial-gradient(circle,rgba(255,248,224,.65) 0%,rgba(255,198,92,.38) 32%,rgba(255,126,24,.16) 60%,transparent 100%);animation:launchBurst .75s cubic-bezier(.22,1,.36,1) forwards;pointer-events:none}@keyframes launchBurst{0%{width:0;height:0;opacity:0}15%{width:64px;height:64px;opacity:.7}40%{width:96px;height:96px;opacity:.34}to{width:124px;height:124px;opacity:0}}.spark-container{position:absolute;top:50%;left:50%;width:0;height:0;pointer-events:none}.spark{position:absolute;width:2px;height:2px;border-radius:50%;opacity:0}.spark.s1{background:#ffe066;box-shadow:0 0 3px 1px #ffe06673;animation:sparkFly1 .9s .24s ease-out infinite}.spark.s2{background:#fa0;box-shadow:0 0 3px 1px #fa06;animation:sparkFly2 .82s .4s ease-out infinite}.spark.s3{background:#fffae8e6;box-shadow:0 0 4px 1px #fffae873;animation:sparkFly3 .96s .14s ease-out infinite}.spark.s4{background:#f62;box-shadow:0 0 3px 1px #ff662261;animation:sparkFly4 .86s .5s ease-out infinite}@keyframes sparkFly1{0%{opacity:1;transform:translate(0) scale(1)}to{opacity:0;transform:translate(-18px,-22px) scale(0)}}@keyframes sparkFly2{0%{opacity:1;transform:translate(0) scale(1)}to{opacity:0;transform:translate(14px,-26px) scale(0)}}@keyframes sparkFly3{0%{opacity:1;transform:translate(0) scale(1.2)}to{opacity:0;transform:translate(-22px,12px) scale(0)}}@keyframes sparkFly4{0%{opacity:1;transform:translate(0) scale(1)}to{opacity:0;transform:translate(20px,18px) scale(0)}}.contrail{position:absolute;top:50%;left:50%;width:80px;height:3px;transform-origin:right center;transform:translate(-100%,-50%) rotate(-45deg);background:linear-gradient(to left,rgba(255,250,240,.28) 0%,rgba(205,205,205,.16) 40%,transparent 100%);border-radius:2px;filter:blur(1.5px);animation:contrailPulse var(--flight-duration, 1.8s) ease-out forwards;pointer-events:none}@keyframes contrailPulse{0%{opacity:0;width:0}6%{opacity:.6;width:40px}20%{opacity:.5;width:90px}50%{opacity:.35;width:70px}80%{opacity:.2;width:50px}95%{opacity:.05;width:20px}to{opacity:0;width:0}}@keyframes liftoffRumble{0%{transform:translate(0)}5%{transform:translate(-1px,1px)}10%{transform:translate(1px,-1px)}15%{transform:translate(0)}50%{transform:translate(0)}to{transform:translate(0)}}.flying-rocket:before{content:"";position:absolute;top:50%;left:50%;width:55px;height:16px;transform-origin:right center;transform:translate(-100%,-50%) rotate(-45deg);background:linear-gradient(to left,rgba(255,245,204,.78) 0%,rgba(255,214,102,.72) 10%,rgba(255,148,36,.48) 30%,rgba(255,92,24,.24) 55%,rgba(180,40,0,.08) 80%,transparent 100%);border-radius:4px 0 0 4px;filter:blur(2px);animation:flamePulse var(--flight-duration, 1.8s) ease-out forwards}.flame-core{position:absolute;top:50%;left:50%;width:30px;height:6px;transform-origin:right center;transform:translate(-100%,-50%) rotate(-45deg);background:linear-gradient(to left,rgba(255,252,245,.88) 0%,rgba(255,244,190,.72) 25%,rgba(255,205,108,.3) 60%,transparent 100%);border-radius:3px 0 0 3px;filter:blur(1px);animation:flameCoreFlicker var(--flight-duration, 1.8s) ease-out forwards;pointer-events:none}@keyframes flameCoreFlicker{0%{opacity:0;width:0}4%{opacity:1;width:35px}10%{opacity:.9;width:28px}18%{opacity:1;width:32px}35%{opacity:.4;width:18px}55%{opacity:.3;width:14px}70%{opacity:.8;width:28px}85%{opacity:.5;width:16px}95%{opacity:.1;width:6px}to{opacity:0;width:0}}@keyframes flamePulse{0%{opacity:0;width:0;height:16px}4%{opacity:1;width:65px;height:20px}10%{opacity:1;width:60px;height:18px}18%{opacity:1;width:70px;height:18px}35%{opacity:.7;width:42px;height:14px}55%{opacity:.6;width:38px;height:12px}70%{opacity:.95;width:60px;height:18px}85%{opacity:.7;width:44px;height:14px}95%{opacity:.2;width:16px;height:10px}to{opacity:0;width:0;height:6px}}.exhaust-trail{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:0;height:0;pointer-events:none}.exhaust-particle{position:absolute;border-radius:50%;opacity:0}.exhaust-particle.p1{width:8px;height:8px;background:#fc3;box-shadow:0 0 6px 2px #ffc83247;animation:exhaustDrift .62s 0s ease-out infinite}.exhaust-particle.p2{width:6px;height:6px;background:#f80;box-shadow:0 0 5px 2px #ff88003d;animation:exhaustDrift .62s .08s ease-out infinite}.exhaust-particle.p3{width:7px;height:7px;background:#f60;box-shadow:0 0 5px 2px #ff660038;animation:exhaustDrift .62s .16s ease-out infinite}.exhaust-particle.p4{width:5px;height:5px;background:#fa3;box-shadow:0 0 4px 2px #ffaa3338;animation:exhaustDrift .62s .24s ease-out infinite}.exhaust-particle.p5{width:6px;height:6px;background:#f40;box-shadow:0 0 5px 2px #f403;animation:exhaustDrift .62s .32s ease-out infinite}.exhaust-particle.p6{width:4px;height:4px;background:#c60;box-shadow:0 0 4px 2px #cc66002e;animation:exhaustDrift .62s .4s ease-out infinite}@keyframes exhaustDrift{0%{opacity:.9;transform:translate(0) scale(1.1);filter:blur(0)}25%{opacity:.6;transform:translate(-8px,8px) scale(.85);filter:blur(.5px)}50%{opacity:.35;transform:translate(-15px,16px) scale(.55);filter:blur(1px)}to{opacity:0;transform:translate(-26px,28px) scale(.1);filter:blur(2px)}}.flying-rocket:after{content:"";position:absolute;top:50%;left:50%;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:#ffecc4b8;animation:engineGlow var(--flight-duration, 1.8s) ease-out forwards;box-shadow:0 0 8px 3px #ff8c005c,0 0 18px 8px #ff62002e,0 0 32px 14px #ff320014}@keyframes engineGlow{0%{opacity:0;transform:scale(0);background:#fff8eedb;box-shadow:0 0 8px 4px #fff8ee4d,0 0 16px 8px #ffc86029,0 0 28px 12px #ff842014}4%{opacity:.8;transform:scale(1.3);background:#fff6dcd6;box-shadow:0 0 10px 4px #fff6dc57,0 0 18px 9px #ffc8602e,0 0 32px 14px #ff842014}18%{opacity:.72;transform:scale(1.15);background:#ffd870b8;box-shadow:0 0 8px 3px #ffa42047,0 0 16px 8px #ff701224,0 0 28px 12px #ff48000f}35%{opacity:.34;transform:scale(.62);background:#70a2ee57;box-shadow:0 0 5px 2px #70a2ee29,0 0 12px 5px #487adc14,0 0 22px 10px #2850c808}55%{opacity:.26;transform:scale(.45);background:#5c92e847;box-shadow:0 0 4px 2px #5c92e824,0 0 10px 4px #386cd20f,0 0 20px 8px #1e3cb405}70%{opacity:.7;transform:scale(1.05);background:#ffcc54b3;box-shadow:0 0 8px 3px #ff8c0047,0 0 18px 8px #ff540024,0 0 30px 12px #ff32000f}85%{opacity:.38;transform:scale(.6);background:#ffb63675;box-shadow:0 0 6px 2px #ff7a0033,0 0 14px 6px #ff42001a,0 0 24px 10px #ff1e000a}95%{opacity:.2;transform:scale(.2)}to{opacity:0;transform:scale(0)}}@keyframes crossColumnFlight{0.00%{opacity:0;transform:translate(-50%,-50%) translate(calc(0 * var(--dx)),calc(0 * var(--peak-offset-y) + 0 * var(--dy))) scale(.5) rotate(calc(-45deg + 0deg * var(--dir)))}1.00%{opacity:.2;transform:translate(-50%,-50%) translate(calc(.01 * var(--dx)),calc(.0396 * var(--peak-offset-y) + .0001 * var(--dy))) scale(.6) rotate(calc(-45deg + 1.3deg * var(--dir)))}2.00%{opacity:.4;transform:translate(-50%,-50%) translate(calc(.02 * var(--dx)),calc(.0784 * var(--peak-offset-y) + .0004 * var(--dy))) scale(.7) rotate(calc(-45deg + 2.6deg * var(--dir)))}3.00%{opacity:.6;transform:translate(-50%,-50%) translate(calc(.03 * var(--dx)),calc(.1164 * var(--peak-offset-y) + .0009 * var(--dy))) scale(.8) rotate(calc(-45deg + 3.9deg * var(--dir)))}4.00%{opacity:.8;transform:translate(-50%,-50%) translate(calc(.04 * var(--dx)),calc(.1536 * var(--peak-offset-y) + .0016 * var(--dy))) scale(.9) rotate(calc(-45deg + 5.2deg * var(--dir)))}5.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.05 * var(--dx)),calc(.19 * var(--peak-offset-y) + .0025 * var(--dy))) scale(1) rotate(calc(-45deg + 6.5deg * var(--dir)))}6.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.06 * var(--dx)),calc(.2256 * var(--peak-offset-y) + .0036 * var(--dy))) scale(1) rotate(calc(-45deg + 7.8deg * var(--dir)))}7.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.07 * var(--dx)),calc(.2604 * var(--peak-offset-y) + .0049 * var(--dy))) scale(1) rotate(calc(-45deg + 9.1deg * var(--dir)))}8.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.08 * var(--dx)),calc(.2944 * var(--peak-offset-y) + .0064 * var(--dy))) scale(1) rotate(calc(-45deg + 10.4deg * var(--dir)))}9.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.09 * var(--dx)),calc(.3276 * var(--peak-offset-y) + .0081 * var(--dy))) scale(1) rotate(calc(-45deg + 11.7deg * var(--dir)))}10.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.1 * var(--dx)),calc(.36 * var(--peak-offset-y) + .01 * var(--dy))) scale(1) rotate(calc(-45deg + 13deg * var(--dir)))}11.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.11 * var(--dx)),calc(.3916 * var(--peak-offset-y) + .0121 * var(--dy))) scale(1) rotate(calc(-45deg + 14.3deg * var(--dir)))}12.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.12 * var(--dx)),calc(.4224 * var(--peak-offset-y) + .0144 * var(--dy))) scale(1) rotate(calc(-45deg + 15.6deg * var(--dir)))}13.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.13 * var(--dx)),calc(.4524 * var(--peak-offset-y) + .0169 * var(--dy))) scale(1) rotate(calc(-45deg + 16.9deg * var(--dir)))}14.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.14 * var(--dx)),calc(.4816 * var(--peak-offset-y) + .0196 * var(--dy))) scale(1) rotate(calc(-45deg + 18.2deg * var(--dir)))}15.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.15 * var(--dx)),calc(.51 * var(--peak-offset-y) + .0225 * var(--dy))) scale(1) rotate(calc(-45deg + 19.5deg * var(--dir)))}16.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.16 * var(--dx)),calc(.5376 * var(--peak-offset-y) + .0256 * var(--dy))) scale(1) rotate(calc(-45deg + 20.8deg * var(--dir)))}17.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.17 * var(--dx)),calc(.5644 * var(--peak-offset-y) + .0289 * var(--dy))) scale(1) rotate(calc(-45deg + 22.1deg * var(--dir)))}18.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.18 * var(--dx)),calc(.5904 * var(--peak-offset-y) + .0324 * var(--dy))) scale(1) rotate(calc(-45deg + 23.4deg * var(--dir)))}19.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.19 * var(--dx)),calc(.6156 * var(--peak-offset-y) + .0361 * var(--dy))) scale(1) rotate(calc(-45deg + 24.7deg * var(--dir)))}20.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.2 * var(--dx)),calc(.64 * var(--peak-offset-y) + .04 * var(--dy))) scale(1) rotate(calc(-45deg + 26deg * var(--dir)))}21.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.21 * var(--dx)),calc(.6636 * var(--peak-offset-y) + .0441 * var(--dy))) scale(1) rotate(calc(-45deg + 27.3deg * var(--dir)))}22.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.22 * var(--dx)),calc(.6864 * var(--peak-offset-y) + .0484 * var(--dy))) scale(1) rotate(calc(-45deg + 28.6deg * var(--dir)))}23.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.23 * var(--dx)),calc(.7084 * var(--peak-offset-y) + .0529 * var(--dy))) scale(1) rotate(calc(-45deg + 29.9deg * var(--dir)))}24.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.24 * var(--dx)),calc(.7296 * var(--peak-offset-y) + .0576 * var(--dy))) scale(1) rotate(calc(-45deg + 31.2deg * var(--dir)))}25.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.25 * var(--dx)),calc(.75 * var(--peak-offset-y) + .0625 * var(--dy))) scale(1) rotate(calc(-45deg + 32.5deg * var(--dir)))}26.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.26 * var(--dx)),calc(.7696 * var(--peak-offset-y) + .0676 * var(--dy))) scale(1) rotate(calc(-45deg + 33.8deg * var(--dir)))}27.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.27 * var(--dx)),calc(.7884 * var(--peak-offset-y) + .0729 * var(--dy))) scale(1) rotate(calc(-45deg + 35.1deg * var(--dir)))}28.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.28 * var(--dx)),calc(.8064 * var(--peak-offset-y) + .0784 * var(--dy))) scale(1) rotate(calc(-45deg + 36.4deg * var(--dir)))}29.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.29 * var(--dx)),calc(.8236 * var(--peak-offset-y) + .0841 * var(--dy))) scale(1) rotate(calc(-45deg + 37.7deg * var(--dir)))}30.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.3 * var(--dx)),calc(.84 * var(--peak-offset-y) + .09 * var(--dy))) scale(1) rotate(calc(-45deg + 39deg * var(--dir)))}31.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.31 * var(--dx)),calc(.8556 * var(--peak-offset-y) + .0961 * var(--dy))) scale(1) rotate(calc(-45deg + 40.3deg * var(--dir)))}32.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.32 * var(--dx)),calc(.8704 * var(--peak-offset-y) + .1024 * var(--dy))) scale(1) rotate(calc(-45deg + 41.6deg * var(--dir)))}33.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.33 * var(--dx)),calc(.8844 * var(--peak-offset-y) + .1089 * var(--dy))) scale(1) rotate(calc(-45deg + 42.9deg * var(--dir)))}34.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.34 * var(--dx)),calc(.8976 * var(--peak-offset-y) + .1156 * var(--dy))) scale(1) rotate(calc(-45deg + 44.2deg * var(--dir)))}35.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.35 * var(--dx)),calc(.91 * var(--peak-offset-y) + .1225 * var(--dy))) scale(1) rotate(calc(-45deg + 45.5deg * var(--dir)))}36.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.36 * var(--dx)),calc(.9216 * var(--peak-offset-y) + .1296 * var(--dy))) scale(1) rotate(calc(-45deg + 46.8deg * var(--dir)))}37.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.37 * var(--dx)),calc(.9324 * var(--peak-offset-y) + .1369 * var(--dy))) scale(1) rotate(calc(-45deg + 48.1deg * var(--dir)))}38.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.38 * var(--dx)),calc(.9424 * var(--peak-offset-y) + .1444 * var(--dy))) scale(1) rotate(calc(-45deg + 49.4deg * var(--dir)))}39.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.39 * var(--dx)),calc(.9516 * var(--peak-offset-y) + .1521 * var(--dy))) scale(1) rotate(calc(-45deg + 50.7deg * var(--dir)))}40.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.4 * var(--dx)),calc(.96 * var(--peak-offset-y) + .16 * var(--dy))) scale(1) rotate(calc(-45deg + 52deg * var(--dir)))}41.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.41 * var(--dx)),calc(.9676 * var(--peak-offset-y) + .1681 * var(--dy))) scale(1) rotate(calc(-45deg + 53.3deg * var(--dir)))}42.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.42 * var(--dx)),calc(.9744 * var(--peak-offset-y) + .1764 * var(--dy))) scale(1) rotate(calc(-45deg + 54.6deg * var(--dir)))}43.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.43 * var(--dx)),calc(.9804 * var(--peak-offset-y) + .1849 * var(--dy))) scale(1) rotate(calc(-45deg + 55.9deg * var(--dir)))}44.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.44 * var(--dx)),calc(.9856 * var(--peak-offset-y) + .1936 * var(--dy))) scale(1) rotate(calc(-45deg + 57.2deg * var(--dir)))}45.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.45 * var(--dx)),calc(.99 * var(--peak-offset-y) + .2025 * var(--dy))) scale(1) rotate(calc(-45deg + 58.5deg * var(--dir)))}46.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.46 * var(--dx)),calc(.9936 * var(--peak-offset-y) + .2116 * var(--dy))) scale(1) rotate(calc(-45deg + 59.8deg * var(--dir)))}47.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.47 * var(--dx)),calc(.9964 * var(--peak-offset-y) + .2209 * var(--dy))) scale(1) rotate(calc(-45deg + 61.1deg * var(--dir)))}48.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.48 * var(--dx)),calc(.9984 * var(--peak-offset-y) + .2304 * var(--dy))) scale(1) rotate(calc(-45deg + 62.4deg * var(--dir)))}49.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.49 * var(--dx)),calc(.9996 * var(--peak-offset-y) + .2401 * var(--dy))) scale(1) rotate(calc(-45deg + 63.7deg * var(--dir)))}50.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.5 * var(--dx)),calc(1 * var(--peak-offset-y) + .25 * var(--dy))) scale(1) rotate(calc(-45deg + 65deg * var(--dir)))}51.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.51 * var(--dx)),calc(.9996 * var(--peak-offset-y) + .2601 * var(--dy))) scale(1) rotate(calc(-45deg + 66.3deg * var(--dir)))}52.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.52 * var(--dx)),calc(.9984 * var(--peak-offset-y) + .2704 * var(--dy))) scale(1) rotate(calc(-45deg + 67.6deg * var(--dir)))}53.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.53 * var(--dx)),calc(.9964 * var(--peak-offset-y) + .2809 * var(--dy))) scale(1) rotate(calc(-45deg + 68.9deg * var(--dir)))}54.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.54 * var(--dx)),calc(.9936 * var(--peak-offset-y) + .2916 * var(--dy))) scale(1) rotate(calc(-45deg + 70.2deg * var(--dir)))}55.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.55 * var(--dx)),calc(.99 * var(--peak-offset-y) + .3025 * var(--dy))) scale(1) rotate(calc(-45deg + 71.5deg * var(--dir)))}56.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.56 * var(--dx)),calc(.9856 * var(--peak-offset-y) + .3136 * var(--dy))) scale(1) rotate(calc(-45deg + 72.8deg * var(--dir)))}57.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.57 * var(--dx)),calc(.9804 * var(--peak-offset-y) + .3249 * var(--dy))) scale(1) rotate(calc(-45deg + 74.1deg * var(--dir)))}58.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.58 * var(--dx)),calc(.9744 * var(--peak-offset-y) + .3364 * var(--dy))) scale(1) rotate(calc(-45deg + 75.4deg * var(--dir)))}59.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.59 * var(--dx)),calc(.9676 * var(--peak-offset-y) + .3481 * var(--dy))) scale(1) rotate(calc(-45deg + 76.7deg * var(--dir)))}60.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.6 * var(--dx)),calc(.96 * var(--peak-offset-y) + .36 * var(--dy))) scale(1) rotate(calc(-45deg + 78deg * var(--dir)))}61.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.61 * var(--dx)),calc(.9516 * var(--peak-offset-y) + .3721 * var(--dy))) scale(1) rotate(calc(-45deg + 79.3deg * var(--dir)))}62.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.62 * var(--dx)),calc(.9424 * var(--peak-offset-y) + .3844 * var(--dy))) scale(1) rotate(calc(-45deg + 80.6deg * var(--dir)))}63.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.63 * var(--dx)),calc(.9324 * var(--peak-offset-y) + .3969 * var(--dy))) scale(1) rotate(calc(-45deg + 81.9deg * var(--dir)))}64.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.64 * var(--dx)),calc(.9216 * var(--peak-offset-y) + .4096 * var(--dy))) scale(1) rotate(calc(-45deg + 83.2deg * var(--dir)))}65.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.65 * var(--dx)),calc(.91 * var(--peak-offset-y) + .4225 * var(--dy))) scale(1) rotate(calc(-45deg + 84.5deg * var(--dir)))}66.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.66 * var(--dx)),calc(.8976 * var(--peak-offset-y) + .4356 * var(--dy))) scale(1) rotate(calc(-45deg + 85.8deg * var(--dir)))}67.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.67 * var(--dx)),calc(.8844 * var(--peak-offset-y) + .4489 * var(--dy))) scale(1) rotate(calc(-45deg + 87.1deg * var(--dir)))}68.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.68 * var(--dx)),calc(.8704 * var(--peak-offset-y) + .4624 * var(--dy))) scale(1) rotate(calc(-45deg + 88.4deg * var(--dir)))}69.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.69 * var(--dx)),calc(.8556 * var(--peak-offset-y) + .4761 * var(--dy))) scale(1) rotate(calc(-45deg + 89.7deg * var(--dir)))}70.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.7 * var(--dx)),calc(.84 * var(--peak-offset-y) + .49 * var(--dy))) scale(1) rotate(calc(-45deg + 91deg * var(--dir)))}71.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.71 * var(--dx)),calc(.8236 * var(--peak-offset-y) + .5041 * var(--dy))) scale(1) rotate(calc(-45deg + 92.3deg * var(--dir)))}72.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.72 * var(--dx)),calc(.8064 * var(--peak-offset-y) + .5184 * var(--dy))) scale(1) rotate(calc(-45deg + 93.6deg * var(--dir)))}73.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.73 * var(--dx)),calc(.7884 * var(--peak-offset-y) + .5329 * var(--dy))) scale(1) rotate(calc(-45deg + 94.9deg * var(--dir)))}74.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.74 * var(--dx)),calc(.7696 * var(--peak-offset-y) + .5476 * var(--dy))) scale(1) rotate(calc(-45deg + 96.2deg * var(--dir)))}75.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.75 * var(--dx)),calc(.75 * var(--peak-offset-y) + .5625 * var(--dy))) scale(1) rotate(calc(-45deg + 97.5deg * var(--dir)))}76.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.76 * var(--dx)),calc(.7296 * var(--peak-offset-y) + .5776 * var(--dy))) scale(1) rotate(calc(-45deg + 98.8deg * var(--dir)))}77.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.77 * var(--dx)),calc(.7084 * var(--peak-offset-y) + .5929 * var(--dy))) scale(1) rotate(calc(-45deg + 100.1deg * var(--dir)))}78.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.78 * var(--dx)),calc(.6864 * var(--peak-offset-y) + .6084 * var(--dy))) scale(1) rotate(calc(-45deg + 101.4deg * var(--dir)))}79.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.79 * var(--dx)),calc(.6636 * var(--peak-offset-y) + .6241 * var(--dy))) scale(1) rotate(calc(-45deg + 102.7deg * var(--dir)))}80.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.8 * var(--dx)),calc(.64 * var(--peak-offset-y) + .64 * var(--dy))) scale(1) rotate(calc(-45deg + 104deg * var(--dir)))}81.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.81 * var(--dx)),calc(.6156 * var(--peak-offset-y) + .6561 * var(--dy))) scale(1) rotate(calc(-45deg + 105.3deg * var(--dir)))}82.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.82 * var(--dx)),calc(.5904 * var(--peak-offset-y) + .6724 * var(--dy))) scale(1) rotate(calc(-45deg + 106.6deg * var(--dir)))}83.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.83 * var(--dx)),calc(.5644 * var(--peak-offset-y) + .6889 * var(--dy))) scale(1) rotate(calc(-45deg + 107.9deg * var(--dir)))}84.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.84 * var(--dx)),calc(.5376 * var(--peak-offset-y) + .7056 * var(--dy))) scale(1) rotate(calc(-45deg + 109.2deg * var(--dir)))}85.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.85 * var(--dx)),calc(.51 * var(--peak-offset-y) + .7225 * var(--dy))) scale(1) rotate(calc(-45deg + 110.5deg * var(--dir)))}86.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.86 * var(--dx)),calc(.4816 * var(--peak-offset-y) + .7396 * var(--dy))) scale(1) rotate(calc(-45deg + 111.8deg * var(--dir)))}87.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.87 * var(--dx)),calc(.4524 * var(--peak-offset-y) + .7569 * var(--dy))) scale(1) rotate(calc(-45deg + 113.1deg * var(--dir)))}88.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.88 * var(--dx)),calc(.4224 * var(--peak-offset-y) + .7744 * var(--dy))) scale(1) rotate(calc(-45deg + 114.4deg * var(--dir)))}89.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.89 * var(--dx)),calc(.3916 * var(--peak-offset-y) + .7921 * var(--dy))) scale(1) rotate(calc(-45deg + 115.7deg * var(--dir)))}90.00%{opacity:1;transform:translate(-50%,-50%) translate(calc(.9 * var(--dx)),calc(.36 * var(--peak-offset-y) + .81 * var(--dy))) scale(1) rotate(calc(-45deg + 117deg * var(--dir)))}91.00%{opacity:.9;transform:translate(-50%,-50%) translate(calc(.91 * var(--dx)),calc(.3276 * var(--peak-offset-y) + .8281 * var(--dy))) scale(.9) rotate(calc(-45deg + 118.3deg * var(--dir)))}92.00%{opacity:.8;transform:translate(-50%,-50%) translate(calc(.92 * var(--dx)),calc(.2944 * var(--peak-offset-y) + .8464 * var(--dy))) scale(.8) rotate(calc(-45deg + 119.6deg * var(--dir)))}93.00%{opacity:.7;transform:translate(-50%,-50%) translate(calc(.93 * var(--dx)),calc(.2604 * var(--peak-offset-y) + .8649 * var(--dy))) scale(.7) rotate(calc(-45deg + 120.9deg * var(--dir)))}94.00%{opacity:.6;transform:translate(-50%,-50%) translate(calc(.94 * var(--dx)),calc(.2256 * var(--peak-offset-y) + .8836 * var(--dy))) scale(.6) rotate(calc(-45deg + 122.2deg * var(--dir)))}95.00%{opacity:.5;transform:translate(-50%,-50%) translate(calc(.95 * var(--dx)),calc(.19 * var(--peak-offset-y) + .9025 * var(--dy))) scale(.5) rotate(calc(-45deg + 123.5deg * var(--dir)))}96.00%{opacity:.4;transform:translate(-50%,-50%) translate(calc(.96 * var(--dx)),calc(.1536 * var(--peak-offset-y) + .9216 * var(--dy))) scale(.4) rotate(calc(-45deg + 124.8deg * var(--dir)))}97.00%{opacity:.3;transform:translate(-50%,-50%) translate(calc(.97 * var(--dx)),calc(.1164 * var(--peak-offset-y) + .9409 * var(--dy))) scale(.3) rotate(calc(-45deg + 126.1deg * var(--dir)))}98.00%{opacity:.2;transform:translate(-50%,-50%) translate(calc(.98 * var(--dx)),calc(.0784 * var(--peak-offset-y) + .9604 * var(--dy))) scale(.2) rotate(calc(-45deg + 127.4deg * var(--dir)))}99.00%{opacity:.1;transform:translate(-50%,-50%) translate(calc(.99 * var(--dx)),calc(.0396 * var(--peak-offset-y) + .9801 * var(--dy))) scale(.1) rotate(calc(-45deg + 128.7deg * var(--dir)))}100.00%{opacity:0;transform:translate(-50%,-50%) translate(calc(1 * var(--dx)),calc(0 * var(--peak-offset-y) + 1 * var(--dy))) scale(0) rotate(calc(-45deg + 130deg * var(--dir)))}}.auth-loading{display:flex;justify-content:center;align-items:center;min-height:100vh;font-size:1.2rem;color:#666}.sign-out-button{padding:6px 16px;font-size:.85rem;font-weight:600;color:#fff;background:#555;border:none;border-radius:6px;cursor:pointer;transition:background .2s;margin-left:8px}.sign-out-button:hover{background:#f96302}.route-list{background-color:var(--bg-card);border-radius:8px;box-shadow:0 2px 8px var(--shadow-sm);overflow:hidden;display:flex;flex-direction:column;height:fit-content;transition:box-shadow .3s ease,background-color .4s ease}.route-list:hover{box-shadow:0 4px 12px var(--shadow-md)}.route-list-header{padding:20px;border-left:4px solid;display:flex;justify-content:space-between;align-items:center;background-color:var(--bg-card-header);transition:background-color .4s ease}.route-list-header-right{display:flex;align-items:center;gap:8px}.route-list-header h2{font-size:20px;font-weight:600;color:var(--text-primary);margin:0;transition:color .4s ease}.route-count{color:#fff;padding:4px 12px;border-radius:12px;font-size:14px;font-weight:600;min-width:30px;text-align:center}.collapse-column-btn{background:none;border:none;cursor:pointer;color:var(--text-secondary);font-size:11px;padding:2px 4px;border-radius:4px;transition:background-color .15s ease,color .15s ease;line-height:1}.collapse-column-btn:hover{background-color:var(--hover-bg);color:var(--text-primary)}.route-list-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 20px;border-bottom:1px solid var(--border-medium);transition:border-color .4s ease}.route-list-description{color:var(--text-secondary);font-size:14px;margin:0;transition:color .4s ease}.sort-filter-wrapper{position:relative;flex-shrink:0}.sort-filter-button{display:flex;align-items:center;gap:4px;padding:4px 8px;font-size:12px;border:1px solid var(--border-medium);border-radius:6px;background-color:var(--bg-card);color:var(--text-secondary);cursor:pointer;outline:none;transition:border-color .2s ease,background-color .4s ease,color .4s ease}.sort-filter-button:hover,.sort-filter-button.active{border-color:var(--text-link, #4A90E2);color:var(--text-link, #4A90E2)}.sort-filter-button.has-active{border-color:var(--text-link, #4A90E2)}.active-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:700;color:#fff;background-color:var(--text-link, #4A90E2);border-radius:8px;line-height:1}.sort-filter-menu{z-index:1000;min-width:200px;padding:8px 0;background-color:var(--bg-card);border:1px solid var(--border-medium);border-radius:8px;box-shadow:0 8px 24px var(--shadow-md, rgba(0,0,0,.15));animation:menu-fade-in .15s ease}@keyframes menu-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.menu-section{padding:4px 12px}.menu-section-label{display:block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);padding:4px 0}.menu-option{display:flex;align-items:center;gap:6px;width:100%;padding:6px 8px;font-size:13px;color:var(--text-primary);background:none;border:none;border-radius:4px;cursor:pointer;text-align:left;transition:background-color .15s ease}.menu-option:hover{background-color:var(--bg-hover, rgba(0,0,0,.05))}.menu-option.selected{font-weight:600;color:var(--text-link, #4A90E2)}.check-mark{font-size:12px;width:14px}.menu-divider{height:1px;margin:6px 12px;background-color:var(--border-light, #eee)}.service-filter-select{width:100%;padding:6px 8px;margin-top:2px;font-size:13px;border:1px solid var(--border-medium);border-radius:6px;background-color:var(--bg-card);color:var(--text-primary);cursor:pointer;outline:none;transition:border-color .2s ease,background-color .4s ease}.service-filter-select:focus{border-color:var(--text-link, #4A90E2);box-shadow:0 0 0 2px #4a90e233}.menu-reset{display:block;width:calc(100% - 24px);margin:2px 12px 4px;padding:6px 8px;font-size:12px;color:var(--text-secondary);background:none;border:1px dashed var(--border-medium);border-radius:4px;cursor:pointer;text-align:center;transition:color .15s ease,border-color .15s ease}.menu-reset:hover{color:var(--text-link, #4A90E2);border-color:var(--text-link, #4A90E2)}.route-items{padding:10px 0}.route-items ul{list-style:none;padding:0;margin:0}.route-item{border-bottom:1px solid var(--border-light);transition:all .3s ease}.route-item:last-child{border-bottom:none}.route-item.expanded{border:1px solid rgba(249,115,22,.4);border-radius:6px;margin:6px 4px;box-shadow:0 4px 12px #f973160d;overflow:hidden}.route-item.expanded:last-child{border-bottom:1px solid rgba(249,115,22,.4)}.failure-reason-banner{display:flex;align-items:center;gap:6px;padding:6px 0;margin-bottom:8px;font-size:12px}.failure-reason-label{font-weight:600;color:var(--text-secondary);font-size:11px;text-transform:uppercase;letter-spacing:.03em}.failure-tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:600;line-height:1.6}.failure-tag-deployment{background-color:#fee2e2;color:#991b1b}.failure-tag-healthcheck{background-color:#fef3c7;color:#92400e}[data-theme=dark] .failure-tag-deployment{background-color:#7f1d1d;color:#fca5a5}[data-theme=dark] .failure-tag-healthcheck{background-color:#78350f;color:#fcd34d}.route-header{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;transition:background-color .2s ease}.route-header:hover{background-color:var(--bg-hover)}.route-link{flex:1;text-decoration:none;color:inherit;padding:4px 0}.route-name{font-weight:600;color:var(--text-route);font-size:15px;transition:color .2s ease}.route-link:hover .route-name{color:var(--text-link)}.toggle-button{background:none;border:none;cursor:pointer;padding:8px 12px;font-size:12px;color:var(--text-secondary);transition:all .2s ease;border-radius:4px}.toggle-button:hover{background-color:var(--bg-hover);color:var(--text-primary)}.route-details{padding:24px 20px 16px;background-color:var(--bg-dropdown);animation:slideDown .2s ease-out;transition:background-color .4s ease}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.route-metadata{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.metadata-row{display:flex;align-items:flex-start;gap:8px;font-size:12px}.metadata-label{font-weight:600;color:var(--text-secondary);min-width:130px;transition:color .4s ease}.metadata-value{color:var(--text-primary);font-weight:500;transition:color .4s ease;word-break:break-all;overflow-wrap:anywhere}.metrics-links{display:flex;align-items:center;gap:6px;margin-bottom:12px;font-size:12px}.metrics-label{font-weight:600;color:var(--text-secondary);min-width:130px;transition:color .4s ease}.metrics-link-inline{color:var(--text-link);text-decoration:none;font-weight:600;padding:2px 8px;border-radius:3px;transition:all .2s ease;background-color:var(--bg-metrics)}.metrics-link-inline:hover{background-color:var(--bg-metrics-hover);text-decoration:underline}.metrics-separator{color:var(--text-muted);margin:0 4px}.deployment-status-meta{display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:12px}.status-label{font-weight:600;color:var(--text-secondary);min-width:130px;transition:color .4s ease}.status-badge{padding:4px 10px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase;white-space:nowrap;transition:background-color .4s ease,color .4s ease}.status-deployed{background-color:var(--status-success-bg);color:var(--status-success-text)}.status-deployment-failed{background-color:var(--status-danger-bg);color:var(--status-danger-text)}.status-in-progress,.status-pending,.status-processing,.status-validating{background-color:var(--status-info-bg);color:var(--status-info-text)}.status-rolling-back{background-color:var(--status-warn-bg);color:var(--status-warn-text)}.deploy-time-meta{display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:12px}.deploy-time-label{font-weight:600;color:var(--text-secondary);min-width:130px;transition:color .4s ease}.deploy-time-value{color:var(--text-primary);font-weight:500;font-family:monospace;transition:color .4s ease}.health-data{margin-top:8px;display:flex;flex-direction:column;gap:8px}.health-row{display:flex;align-items:center;gap:8px;font-size:12px}.health-label{font-weight:600;color:var(--text-secondary);min-width:130px;transition:color .4s ease}.health-value{padding:3px 10px;background-color:var(--bg-input);border-radius:4px;color:var(--text-primary);font-weight:500;font-size:12px;transition:background-color .4s ease,color .4s ease}.health-value.passing{background-color:var(--status-success-bg);color:var(--status-success-text);font-weight:600}.health-value.failing{background-color:var(--status-danger-bg);color:var(--status-danger-text);font-weight:600}.health-separator{color:var(--text-muted);font-weight:700;margin:0 4px}.empty-state{padding:40px 20px;text-align:center;color:var(--text-muted);font-style:italic;transition:color .4s ease}.show-more-button{width:100%;padding:12px;border:none;border-top:1px solid var(--border-medium);background-color:var(--bg-card-header);color:var(--text-secondary);font-size:14px;font-weight:600;cursor:pointer;transition:background-color .2s ease,color .2s ease}.show-more-button:hover{background-color:var(--border-medium);color:var(--text-primary)}.rocket-landing{position:relative;overflow:visible!important}.rocket-landing>.route-header{animation:routeCardAppear 1s cubic-bezier(.34,1.56,.64,1) both}@keyframes routeCardAppear{0%{opacity:0;transform:scaleY(.1) scaleX(.85);transform-origin:top center}15%{opacity:.5;transform:scaleY(.4) scaleX(.9);transform-origin:top center}30%{opacity:.9;transform:scaleY(1.12) scaleX(1.04);transform-origin:top center}45%{opacity:1;transform:scaleY(.94) scaleX(.98)}58%{transform:scaleY(1.05) scaleX(1.02)}72%{transform:scaleY(.98) scaleX(.995)}85%{transform:scaleY(1.01)}to{opacity:1;transform:scaleY(1) scaleX(1)}}.landing-effect{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center;pointer-events:none;z-index:100;overflow:visible}.landing-flash{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:0;height:0;border-radius:50%;background:radial-gradient(circle,rgba(255,165,0,.5) 0%,rgba(255,100,0,.2) 40%,transparent 70%);animation:landingImpact 1s ease-out forwards;pointer-events:none}@keyframes landingImpact{0%{width:0;height:0;opacity:0}10%{width:50px;height:50px;opacity:.9}25%{width:90px;height:90px;opacity:1}50%{width:140px;height:80px;opacity:.6}to{width:220px;height:40px;opacity:0}}.rocket-landing:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:4px;border-radius:50%;box-shadow:-15px -5px #c8c8c800,15px -8px #c8c8c800,-8px -12px #c8c8c800,8px -3px #c8c8c800,0 -15px #c8c8c800;animation:smokeParticles 1s ease-out forwards;pointer-events:none;z-index:99}@keyframes smokeParticles{0%{box-shadow:0 0 #c8c8c800,0 0 #c8c8c800,0 0 #c8c8c800,0 0 #c8c8c800,0 0 #c8c8c800}10%{box-shadow:-10px -3px 0 2px #dcc8a099,12px -5px 0 2px #dcc8a080,-5px -8px 0 1px #c8c8c866,7px -2px 0 2px #dcc8a080,0 -10px 0 1px #c8c8c84d}30%{box-shadow:-28px -12px 0 4px #c8c8c8a6,30px -16px 0 4px #c8c8c88c,-18px -26px 0 3px #c8c8c873,22px -8px 0 4px #c8c8c88c,0 -30px 0 3px #c8c8c859}60%{box-shadow:-40px -18px 0 2px #c8c8c840,42px -22px 0 2px #c8c8c833,-25px -35px 0 1px #c8c8c826,28px -12px 0 2px #c8c8c833,0 -42px 0 1px #c8c8c81a}to{box-shadow:-55px -24px #c8c8c800,58px -30px #c8c8c800,-34px -46px #c8c8c800,38px -18px #c8c8c800,0 -58px #c8c8c800}}.migration-status-box{background-color:#f3f4f6;border:1px solid #e5e7eb;border-radius:6px;padding:12px;margin-bottom:12px;display:flex;align-items:center;gap:12px;animation:pulse-gray 2s cubic-bezier(.4,0,.6,1) infinite}.dark .migration-status-box{background-color:#374151;border-color:#4b5563}@keyframes pulse-gray{0%,to{opacity:1}50%{opacity:.7}}.migration-status-text{font-weight:500;font-size:14px;color:#374151}.dark .migration-status-text{color:#d1d5db}.migration-status-time{font-family:monospace;background:#0000000d;padding:2px 6px;border-radius:4px;font-size:13px;color:#374151}.dark .migration-status-time{background:#ffffff1a;color:#d1d5db}.route-list--collapsed{min-width:48px;max-width:48px;overflow:visible;cursor:pointer}.collapsed-column-btn{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;width:100%;min-height:160px;padding:14px 0;gap:10px;background:none;border:none;cursor:pointer;border-left:4px solid transparent;border-radius:0 8px 8px 0;transition:background-color .2s ease}.collapsed-column-btn:hover{background-color:var(--hover-bg)}.collapsed-count{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:12px;font-size:11px;font-weight:700;color:#fff}.collapsed-title{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;transition:color .4s ease}.collapsed-chevron{font-size:10px;color:var(--text-secondary);margin-top:auto}.route-tabs{display:flex;gap:6px;padding:10px 12px;border-bottom:1px solid var(--border-medium)}.route-tab-btn{display:flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--border-medium);border-radius:6px;background:none;font-size:12px;font-weight:500;color:var(--text-secondary);cursor:pointer;transition:all .15s ease}.route-tab-btn.active{background:var(--text-primary);border-color:var(--text-primary);color:var(--bg-card)}.route-tab-btn:hover:not(.active){background:var(--hover-bg);color:var(--text-primary)}.route-tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 4px;border-radius:9px;font-size:11px;font-weight:700;background:#80808033}.route-tab-btn.active .route-tab-count{background:#ffffff40}.theme-toggle{background:none;border:none;cursor:pointer;padding:4px;display:flex;align-items:center;outline:none}.toggle-track{position:relative;width:56px;height:28px;border-radius:14px;background:var(--toggle-track-bg);display:flex;align-items:center;justify-content:space-between;padding:0 5px;transition:background .4s cubic-bezier(.4,0,.2,1);box-shadow:inset 0 1px 3px #00000026,0 1px 2px #ffffff0d}.toggle-icon{font-size:13px;line-height:1;z-index:1;transition:opacity .3s ease;-webkit-user-select:none;user-select:none}[data-theme=light] .toggle-sun{opacity:1}[data-theme=light] .toggle-moon,[data-theme=dark] .toggle-sun{opacity:.35}[data-theme=dark] .toggle-moon{opacity:1}.toggle-thumb{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:var(--toggle-thumb-bg);box-shadow:0 1px 4px #0003;transition:transform .4s cubic-bezier(.4,0,.2,1),background .4s cubic-bezier(.4,0,.2,1)}[data-theme=dark] .toggle-thumb{transform:translate(28px)}.theme-toggle:hover .toggle-thumb{box-shadow:0 2px 6px #0000004d}.theme-toggle:active .toggle-thumb{width:26px}[data-theme=dark] .theme-toggle:active .toggle-thumb{transform:translate(24px)}.lifecycle-selector{display:flex;align-items:center;gap:6px}.lifecycle-label{font-size:.7rem;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--text-secondary, #888);-webkit-user-select:none;user-select:none}.lifecycle-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding:5px 28px 5px 10px;font-size:.85rem;font-weight:700;letter-spacing:.5px;border-radius:6px;cursor:pointer;transition:background .25s,border-color .25s,box-shadow .25s;outline:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center}.lifecycle-select:hover{filter:brightness(.88)}.lifecycle-select:focus-visible{box-shadow:0 0 0 3px #ffffff40}.lifecycle-select option{font-weight:600;color:#333;background:#fff}[data-theme=dark] .lifecycle-select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}[data-theme=dark] .lifecycle-select option{color:#eee;background:#2a2a2a}@media (max-width: 768px){.lifecycle-selector{order:-1}.lifecycle-select{font-size:.8rem;padding:4px 24px 4px 8px}}.login-container{display:flex;justify-content:center;align-items:center;min-height:100vh;background:#f5f5f5}[data-theme=dark] .login-container{background:#1e1e2e}.login-card{text-align:center;padding:48px 40px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001a;max-width:400px;width:90%}[data-theme=dark] .login-card{background:#2a2a3e}.login-header h1{font-size:1.4rem;margin-bottom:8px;color:#1a1a2e}[data-theme=dark] .login-header h1{color:#e0e0e0}.login-header p{color:#666;font-size:.9rem;margin-bottom:28px}[data-theme=dark] .login-header p{color:#aaa}.login-error{background:#fdecea;color:#b71c1c;padding:10px 16px;border-radius:8px;margin-bottom:20px;font-size:.85rem}.login-button{padding:12px 28px;font-size:1rem;font-weight:600;color:#fff;background:#2f2f2f;border:none;border-radius:8px;cursor:pointer;transition:background .2s}.login-button:hover{background:#404040}.notification-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9998;background:#00000059;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);animation:backdropFadeIn .3s ease-out forwards}.notification-backdrop.dismissing{animation:backdropFadeOut .4s ease-in forwards}[data-theme=dark] .notification-backdrop{background:#0000008c}.notification-banner{position:fixed;top:28vh;left:50%;transform:translate(-50%);z-index:9999;display:flex;align-items:flex-start;gap:24px;width:calc(100% - 40px);max-width:760px;padding:36px 40px;border-radius:20px;border:1px solid rgba(255,255,255,.15);color:#fff;line-height:1.5;animation:bannerFadeIn .4s cubic-bezier(.16,1,.3,1) forwards}.notification-banner.dismissing{animation:bannerFadeOut .4s ease-in forwards}[data-theme=light] .notification-banner,:root .notification-banner{background:linear-gradient(160deg,#f96302,#e85500);box-shadow:0 24px 72px #f9630266,0 4px 20px #0000001f;animation:bannerFadeIn .4s cubic-bezier(.16,1,.3,1) forwards,bannerGlow 3s ease-in-out 1s infinite}[data-theme=light] .notification-banner.dismissing,:root .notification-banner.dismissing{animation:bannerFadeOut .4s ease-in forwards}[data-theme=dark] .notification-banner{background:linear-gradient(160deg,#1e2436,#1a1f30);border-color:#f963024d;box-shadow:0 24px 72px #0000008c,0 0 0 1px #f9630226,0 4px 20px #00000059;animation:bannerFadeIn .4s cubic-bezier(.16,1,.3,1) forwards,bannerGlowDark 3s ease-in-out 1s infinite}[data-theme=dark] .notification-banner.dismissing{animation:bannerFadeOut .4s ease-in forwards}.notification-banner-icon{display:flex;align-items:center;justify-content:center;width:56px;height:56px;flex-shrink:0;border-radius:14px}.icon-bell{animation:bellRing .6s ease-in-out .5s;transform-origin:top center}.icon-gif{background:transparent!important;overflow:hidden}.notification-banner-gif{width:48px;height:48px;object-fit:contain}[data-theme=light] .notification-banner-icon,:root .notification-banner-icon{background:#ffffff2e}[data-theme=dark] .notification-banner-icon{background:#f9630226;color:#ff8c42}.notification-banner-content{flex:1;min-width:0;text-align:center}.notification-banner-title{font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:1.4px;margin-bottom:8px}[data-theme=light] .notification-banner-title,:root .notification-banner-title{opacity:.8}[data-theme=dark] .notification-banner-title{color:#ff8c42}.notification-banner-message{font-size:20px;font-weight:500;line-height:1.55}[data-theme=light] .notification-banner-message,:root .notification-banner-message{color:#fff}[data-theme=dark] .notification-banner-message{color:#ffffffe0}.notification-banner-close{position:absolute;top:14px;right:14px;display:flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:8px;background:transparent;color:#ffffff80;cursor:pointer;flex-shrink:0;transition:background .15s ease,color .15s ease}.notification-banner-close:hover{background:#ffffff1f;color:#fff}[data-theme=dark] .notification-banner-close{color:#ffffff59}[data-theme=dark] .notification-banner-close:hover{background:#ffffff14;color:#ffffffb3}.notification-banner:before{content:"";position:absolute;left:0;top:20px;bottom:20px;width:4px;border-radius:0 4px 4px 0;animation:accentPulse 2s ease-in-out infinite}[data-theme=light] .notification-banner:before,:root .notification-banner:before{background:#ffffff80}[data-theme=dark] .notification-banner:before{background:#f96302}@keyframes backdropFadeIn{0%{opacity:0}to{opacity:1}}@keyframes backdropFadeOut{0%{opacity:1}to{opacity:0}}@keyframes bannerFadeIn{0%{opacity:0;transform:translate(-50%) translateY(16px) scale(.96)}to{opacity:1;transform:translate(-50%) translateY(0) scale(1)}}@keyframes bannerFadeOut{0%{opacity:1;transform:translate(-50%) translateY(0) scale(1)}to{opacity:0;transform:translate(-50%) translateY(10px) scale(.97)}}@keyframes bellRing{0%{transform:rotate(0)}15%{transform:rotate(14deg)}30%{transform:rotate(-12deg)}45%{transform:rotate(8deg)}60%{transform:rotate(-5deg)}75%{transform:rotate(2deg)}to{transform:rotate(0)}}@keyframes accentPulse{0%,to{opacity:.4}50%{opacity:1}}@keyframes bannerGlow{0%,to{box-shadow:0 24px 72px #f9630266,0 4px 20px #0000001f}50%{box-shadow:0 24px 72px #f963028c,0 0 40px #f9630240,0 4px 20px #0000001f}}@keyframes bannerGlowDark{0%,to{box-shadow:0 24px 72px #0000008c,0 0 0 1px #f9630226,0 4px 20px #00000059;border-color:#f963024d}50%{box-shadow:0 24px 72px #0000008c,0 0 30px #f9630233,0 0 0 1px #f963024d,0 4px 20px #00000059;border-color:#f9630280}}:root,[data-theme=light]{--bg-primary: #f5f5f5;--bg-card: #ffffff;--bg-card-header: #f8f9fa;--bg-hover: #f8f9fa;--bg-input: #f0f0f0;--bg-dropdown: #f4f6f8;--bg-metrics: #f0f7ff;--bg-metrics-hover: #e3f2fd;--text-primary: #333333;--text-secondary: #666666;--text-muted: #999999;--text-link: #2196F3;--text-route: #2c3e50;--border-light: #f0f0f0;--border-medium: #e0e0e0;--shadow-sm: rgba(0, 0, 0, .1);--shadow-md: rgba(0, 0, 0, .15);--status-success-bg: #d4edda;--status-success-text: #155724;--status-danger-bg: #f8d7da;--status-danger-text: #721c24;--status-info-bg: #d1ecf1;--status-info-text: #0c5460;--status-warn-bg: #fff3cd;--status-warn-text: #856404;--spinner-track: #f3f3f3;--spinner-fill: #2196F3;--toggle-track-bg: #d1d5db;--toggle-thumb-bg: #ffffff;--live-color: #1a9c54}[data-theme=dark]{--bg-primary: #0f1117;--bg-card: #1a1d27;--bg-card-header: #22252f;--bg-hover: #262a36;--bg-input: #2a2e3a;--bg-dropdown: #1e2130;--bg-metrics: rgba(33, 150, 243, .1);--bg-metrics-hover: rgba(33, 150, 243, .18);--text-primary: #e1e4ea;--text-secondary: #9ca3af;--text-muted: #6b7280;--text-link: #60a5fa;--text-route: #c9cdd5;--border-light: #2a2e3a;--border-medium: #333844;--shadow-sm: rgba(0, 0, 0, .35);--shadow-md: rgba(0, 0, 0, .5);--status-success-bg: rgba(46, 204, 113, .15);--status-success-text: #6ee7a0;--status-danger-bg: rgba(231, 76, 60, .15);--status-danger-text: #fca5a5;--status-info-bg: rgba(74, 144, 226, .15);--status-info-text: #93c5fd;--status-warn-bg: rgba(241, 196, 15, .15);--status-warn-text: #fde68a;--spinner-track: #2a2e3a;--spinner-fill: #60a5fa;--live-color: #2ECC71;--toggle-track-bg: #374151;--toggle-thumb-bg: #e1e4ea}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--bg-primary);color:var(--text-primary);padding:20px;transition:background-color .4s ease,color .4s ease}#root{max-width:1400px;margin:0 auto}
