svg{background:0 0!important;position:relative}svg rect[fill=white],svg rect[fill="#fff"],svg rect[fill="#ffffff"],svg rect[fill="rgb(255,255,255)"],svg rect[fill="rgb(255, 255, 255)"]{fill:transparent!important;stroke:transparent!important}svg rect:not(.clickable-group rect)[fill*="255"]{fill:transparent!important;stroke:transparent!important}svg .clickable-group rect+rect{display:none!important}@keyframes gradientFlow{0%,to{opacity:.15}50%{opacity:.25}}svg text,svg text tspan{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:geometricPrecision;fill:#f8fafc!important;font-weight:500;letter-spacing:.025em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.8))}code{background:rgba(15,20,32,.9);color:#22d3ee;padding:4px 10px;font-size:13px;border-radius:8px;border:1px solid rgba(34,211,238,.3);backdrop-filter:blur(12px);font-weight:600}svg .clickable-group{cursor:pointer;transition:transform .2s cubic-bezier(.4,0,.2,1),filter .2s cubic-bezier(.4,0,.2,1);transform-origin:center}svg .clickable-group text{pointer-events:none}@keyframes nodeGlow{0%,to{filter:drop-shadow(0 0 8px rgba(59,130,246,.3))}50%{filter:drop-shadow(0 0 16px rgba(59,130,246,.5))}}.clickable-group rect{-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:stroke-width .2s cubic-bezier(.4,0,.2,1),fill .2s cubic-bezier(.4,0,.2,1),stroke .2s cubic-bezier(.4,0,.2,1);rx:16!important;ry:16!important}svg .clickable-group>[fill="rgb(65,53,214)"],svg .clickable-group>[fill="rgb(65, 53, 214)"]{fill:#3b82f62e!important;stroke:#3b82f699!important;stroke-width:2.5px;filter:drop-shadow(0 4px 12px rgba(59,130,246,.3)) drop-shadow(0 0 24px rgba(59,130,246,.15))}svg .clickable-group>[fill="rgb(255,255,0)"],svg .clickable-group>[fill="rgb(255, 255, 0)"]{fill:#f59e0b26!important;stroke:#f59e0b80!important;stroke-width:2.5px;filter:drop-shadow(0 4px 12px rgba(245,158,11,.25)) drop-shadow(0 0 24px rgba(245,158,11,.12))}svg .clickable-group>[fill="rgb(255,229,153)"],svg .clickable-group>[fill="rgb(255, 229, 153)"]{fill:#fbbf241f!important;stroke:#fbbf2466!important;stroke-width:2.5px;filter:drop-shadow(0 3px 10px rgba(251,191,36,.18)) drop-shadow(0 0 20px rgba(251,191,36,.1))}svg .clickable-group>[fill="rgb(153,153,153)"],svg .clickable-group>[fill="rgb(153, 153, 153)"]{fill:#94a3b814!important;stroke:#94a3b84d!important;stroke-width:1.5px;filter:drop-shadow(0 2px 6px rgba(148,163,184,.1))}svg .clickable-group>[fill="rgb(255,255,255)"],svg .clickable-group>[fill="rgb(255, 255, 255)"]{fill:#ffffff0d!important;stroke:#ffffff26!important;stroke-width:1.5px;filter:drop-shadow(0 2px 6px rgba(255,255,255,.05))}svg .clickable-group>[fill="rgb(255,255,221)"],svg .clickable-group>[fill="rgb(255, 255, 221)"]{fill:#fef3c714!important;stroke:#fef3c740!important;stroke-width:1.5px;filter:drop-shadow(0 2px 6px rgba(254,243,199,.1))}svg .clickable-group>[fill="rgb(255,217,102)"],svg .clickable-group>[fill="rgb(255, 217, 102)"]{fill:#f59e0b1f!important;stroke:#f59e0b66!important;stroke-width:2px;filter:drop-shadow(0 2px 8px rgba(245,158,11,.15))}svg .clickable-group:hover{filter:brightness(1.15);transform:translate3d(0,-2px,0);transition:all .2s cubic-bezier(.4,0,.2,1)}svg .clickable-group:hover>[fill*="rgb(65,53,214)"],svg .clickable-group:hover>[fill*="rgb(65, 53, 214)"]{fill:#3b82f640!important;stroke:#3b82f6cc!important;filter:drop-shadow(0 4px 16px rgba(59,130,246,.4))}svg .clickable-group:hover>[fill*="rgb(255,255,0)"],svg .clickable-group:hover>[fill*="rgb(255, 255, 0)"]{fill:#f59e0b33!important;stroke:#f59e0bb3!important;filter:drop-shadow(0 4px 16px rgba(245,158,11,.35))}svg .clickable-group:hover>[fill*="rgb(255,229,153)"],svg .clickable-group:hover>[fill*="rgb(255, 229, 153)"]{fill:#fbbf242e!important;stroke:#fbbf2499!important;filter:drop-shadow(0 4px 16px rgba(251,191,36,.3))}svg .clickable-group:hover>[fill*="rgb(153,153,153)"],svg .clickable-group:hover>[fill*="rgb(153, 153, 153)"]{fill:#94a3b826!important;stroke:#94a3b880!important;filter:drop-shadow(0 4px 12px rgba(148,163,184,.25))}svg .clickable-group:hover>[fill*="rgb(255,255,255)"],svg .clickable-group:hover>[fill*="rgb(255, 255, 255)"]{fill:#ffffff1a!important;stroke:#ffffff4d!important;filter:drop-shadow(0 4px 12px rgba(255,255,255,.15))}svg .clickable-group:hover text{fill:#fff;font-weight:600}@keyframes celebrate{0%,to{transform:scale(1) rotate(0)}25%{transform:scale(1.05) rotate(-2deg)}75%{transform:scale(1.05) rotate(2deg)}}svg .done rect,svg .clickable-group.done rect{fill:#10b9812e!important;stroke:#10b981b3!important;stroke-width:2.5px!important;filter:drop-shadow(0 4px 16px rgba(16,185,129,.4)) drop-shadow(0 0 24px rgba(16,185,129,.2))}svg .done text,svg .clickable-group.done text{text-decoration:line-through;text-decoration-thickness:2px;fill:#34d399e6!important;opacity:.85}svg .clickable-group.done[data-group-id^="check:"] rect{fill:#10b98133!important;stroke:#10b981b3!important;stroke-width:2.5px;filter:drop-shadow(0 3px 12px rgba(16,185,129,.35))}svg .done:hover rect,svg .clickable-group.done:hover rect{fill:#10b98140!important;stroke:#10b981cc!important;filter:drop-shadow(0 4px 16px rgba(16,185,129,.45))}svg .clickable-group[data-group-id*=frontend] rect:not(.done rect){filter:drop-shadow(0 2px 8px rgba(59,130,246,.2))}svg .clickable-group[data-group-id*=frontend]:hover rect{filter:drop-shadow(0 4px 16px rgba(59,130,246,.4))}svg .clickable-group[data-group-id*=backend] rect:not(.done rect){filter:drop-shadow(0 2px 8px rgba(245,158,11,.2))}svg .clickable-group[data-group-id*=backend]:hover rect{filter:drop-shadow(0 4px 16px rgba(245,158,11,.4))}svg .clickable-group[data-group-id*=devops] rect:not(.done rect){filter:drop-shadow(0 2px 8px rgba(16,185,129,.2))}svg .clickable-group[data-group-id*=devops]:hover rect{filter:drop-shadow(0 4px 16px rgba(16,185,129,.4))}svg .clickable-group[data-group-id*=database] rect:not(.done rect){filter:drop-shadow(0 2px 8px rgba(139,92,246,.2))}svg .clickable-group[data-group-id*=database]:hover rect{filter:drop-shadow(0 4px 16px rgba(139,92,246,.4))}svg .clickable-group:active{transform:translateZ(0);transition:all .1s ease}svg .clickable-group:focus{outline:3px solid rgba(59,130,246,.5);outline-offset:4px;border-radius:16px}@keyframes borderGlow{0%,to{border-color:#3b82f61a;box-shadow:0 8px 32px #0006,0 0 0 1px #3b82f614 inset,0 20px 60px #0000004d}50%{border-color:#3b82f640;box-shadow:0 8px 32px #0006,0 0 0 1px #3b82f633 inset,0 20px 60px #0000004d,0 0 40px #3b82f626}}#resource-svg-wrap,.roadmap-container{background:radial-gradient(ellipse at top,rgba(59,130,246,.08)0,transparent 60%),radial-gradient(ellipse at bottom,rgba(139,92,246,.06)0,transparent 60%),linear-gradient(135deg,rgba(10,14,26,.98)0,rgba(15,20,32,.95) 50%,rgba(10,14,26,.98) 100%);border-radius:32px;border:1px solid rgba(59,130,246,.3);backdrop-filter:blur(24px) saturate(200%);box-shadow:0 16px 64px #0009,0 0 0 1px #3b82f640 inset,0 0 80px #3b82f633,0 0 120px #8b5cf61a;overflow:hidden;transition:all .6s cubic-bezier(.4,0,.2,1);position:relative;padding:3rem;min-height:400px;animation:borderGlow 8s ease-in-out infinite}#resource-svg-wrap:before,.roadmap-container:before{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(59,130,246,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(59,130,246,.03) 1px,transparent 1px),radial-gradient(circle at 50% 50%,rgba(59,130,246,.05)0,transparent 70%);background-size:50px 50px,50px 50px,100% 100%;pointer-events:none;opacity:.4;border-radius:32px;animation:gridPulse 4s ease-in-out infinite}@keyframes gridPulse{0%,to{opacity:.3}50%{opacity:.5}}#resource-svg-wrap:after,.roadmap-container:after{content:"";position:absolute;inset:-1px;border-radius:32px;background:linear-gradient(135deg,rgba(59,130,246,.2)0,transparent 20%,transparent 80%,rgba(139,92,246,.2) 100%);pointer-events:none;opacity:1;transition:opacity .6s ease;z-index:-1}#resource-svg-wrap svg,.roadmap-container svg{background:0 0;width:100%;min-height:100vh;display:block;position:relative;z-index:1;overflow:visible;max-width:100%}svg{transform-style:preserve-3d}.error{background:rgba(239,68,68,.08);border:1.5px solid rgba(239,68,68,.3);border-radius:16px;padding:2.5rem;color:#fca5a5;backdrop-filter:blur(12px);max-width:600px;margin:2rem auto;text-align:center;box-shadow:0 8px 24px #ef444433}.error strong{display:block;font-size:1.25rem;color:#ef4444;margin-bottom:.75rem;font-weight:700}@keyframes flowAnimation{0%{stroke-dashoffset:1000}to{stroke-dashoffset:0}}@keyframes connectorGlow{0%,to{stroke:#3b82f633;filter:drop-shadow(0 0 4px rgba(59,130,246,.3))}50%{stroke:#3b82f666;filter:drop-shadow(0 0 8px rgba(59,130,246,.5))}}svg line,svg path:not(.clickable-group *){stroke:#3b82f640;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;transition:all .4s ease;filter:drop-shadow(0 0 6px rgba(59,130,246,.3))}svg line:hover,svg path:hover:not(.clickable-group *){stroke:#3b82f699;stroke-width:3px;filter:drop-shadow(0 0 12px rgba(59,130,246,.6));animation:connectorGlow 2s ease-in-out infinite}svg line[stroke-dasharray],svg path[stroke-dasharray]{stroke:#8b5cf633;stroke-dasharray:8,6;stroke-width:2px;filter:drop-shadow(0 0 4px rgba(139,92,246,.2));animation:dashFlow 20s linear infinite}@keyframes dashFlow{0%{stroke-dashoffset:0}to{stroke-dashoffset:1000}}svg marker{fill:#3b82f666;filter:drop-shadow(0 0 4px rgba(59,130,246,.3))}svg polygon{fill:#3b82f640;stroke:#3b82f666;transition:all .3s ease;filter:drop-shadow(0 0 6px rgba(59,130,246,.2))}svg polygon:hover{fill:#3b82f666;stroke:#3b82f699;filter:drop-shadow(0 0 12px rgba(59,130,246,.4))}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}svg .clickable-group{will-change:transform;backface-visibility:hidden}@keyframes ripple{0%{transform:scale(1);opacity:1}to{transform:scale(1.5);opacity:0}}svg .clickable-group[data-group-id*=important] text,svg .clickable-group[data-group-id*=critical] text{fill:url(#textGradient)!important;font-weight:700}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}svg .done:after{content:"";position:absolute;top:0;left:-100%;width:200%;height:100%;background:linear-gradient(90deg,transparent,rgba(16,185,129,.3),transparent);animation:shimmer 3s infinite;pointer-events:none}@media (max-width:768px){#resource-svg-wrap,.roadmap-container{padding:1rem;border-radius:16px}svg text,svg text tspan{font-size:12px}.clickable-group rect{stroke-width:1.5px}svg .clickable-group:hover{transform:translate3d(0,-1px,0)}}@media (prefers-reduced-motion:reduce){svg .clickable-group,.clickable-group rect,#resource-svg-wrap,.roadmap-container{animation:none!important;transition:none!important}}@media (prefers-contrast:high){svg .clickable-group>rect{stroke-width:3px!important}svg text{fill:#fff!important;font-weight:700!important}}svg .clickable-group:focus-visible{outline:3px solid #3b82f6;outline-offset:6px}[style*=--aspect-ratio]>:first-child{width:100%}[style*=--aspect-ratio]>img{height:auto}@supports (--custom:property){[style*=--aspect-ratio]{position:relative}[style*=--aspect-ratio]:before{content:"";display:block;padding-bottom:calc(100%/(var(--aspect-ratio)))}[style*=--aspect-ratio]>:first-child{position:absolute;top:0;left:0;height:100%}}#topic-overlay:where(.astro-GGIDOI4B),#topic-overlay:where(.astro-GGIDOI4B) :where(.astro-GGIDOI4B):not(svg):not(path):not(circle):not(line):not(rect):not(polyline):not(polygon){box-sizing:border-box}.topic-overlay-panel:where(.astro-GGIDOI4B),#topic-body:where(.astro-GGIDOI4B){background:#0a0e1a!important;border-left:1px solid rgba(255,255,255,.1)!important;box-shadow:-4px 0 24px #00000080!important}.topic-overlay-content:where(.astro-GGIDOI4B),#topic-content:where(.astro-GGIDOI4B){background:0 0!important;color:#ffffffe6!important}#topic-content:where(.astro-GGIDOI4B),#topic-content:where(.astro-GGIDOI4B) :where(.astro-GGIDOI4B){background-color:transparent!important}#topic-content:where(.astro-GGIDOI4B) :where(.astro-GGIDOI4B):not(code):not(pre){color:#fffc!important}.topic-overlay-content:where(.astro-GGIDOI4B) h1{color:#fff!important;font-size:1.875rem;font-weight:800;line-height:1.2;margin-bottom:1rem;margin-top:1.5rem}.topic-overlay-content:where(.astro-GGIDOI4B) h1:first-child{margin-top:0}.topic-overlay-content:where(.astro-GGIDOI4B) h2{color:#fff!important;font-size:1.5rem;font-weight:700;line-height:1.3;margin-bottom:.75rem;margin-top:1.5rem;padding-bottom:.5rem;border-bottom:1px solid rgba(255,255,255,.1)}.topic-overlay-content:where(.astro-GGIDOI4B) h3{color:#fff!important;font-size:1.25rem;font-weight:600;line-height:1.4;margin-bottom:.5rem;margin-top:1rem}.topic-overlay-content:where(.astro-GGIDOI4B) h4,.topic-overlay-content:where(.astro-GGIDOI4B) h5,.topic-overlay-content:where(.astro-GGIDOI4B) h6{color:#fffffff2!important;font-weight:600;margin-bottom:.5rem;margin-top:1rem}.topic-overlay-content:where(.astro-GGIDOI4B) p{margin-top:0;margin-bottom:1rem;line-height:1.7;color:#fffc!important}.topic-overlay-content:where(.astro-GGIDOI4B) a{color:#60a5fa!important;text-decoration:underline;text-decoration-color:#60a5fa4d;text-underline-offset:2px;transition:all .2s}.topic-overlay-content:where(.astro-GGIDOI4B) a:hover{color:#93c5fd!important;text-decoration-color:#93c5fd99}.topic-overlay-content:where(.astro-GGIDOI4B) ul,.topic-overlay-content:where(.astro-GGIDOI4B) ol{margin-top:.5rem;margin-bottom:1rem;padding-left:1.5rem;color:#fffc!important}.topic-overlay-content:where(.astro-GGIDOI4B) li{margin-top:.25rem;margin-bottom:.25rem;line-height:1.7;color:#fffc!important}.topic-overlay-content:where(.astro-GGIDOI4B) ul>li::marker{color:#3b82f6}.topic-overlay-content:where(.astro-GGIDOI4B) ol>li::marker{color:#3b82f6;font-weight:600}.topic-overlay-content:where(.astro-GGIDOI4B) code{background:rgba(59,130,246,.1)!important;color:#60a5fa!important;padding:.125rem .375rem;border-radius:.375rem;font-size:.875em;font-weight:500;border:1px solid rgba(59,130,246,.2)}.topic-overlay-content:where(.astro-GGIDOI4B) pre{background:rgba(0,0,0,.4)!important;border:1px solid rgba(255,255,255,.1);border-radius:.5rem;padding:1rem;margin-top:1rem;margin-bottom:1rem;overflow-x:auto}.topic-overlay-content:where(.astro-GGIDOI4B) pre code{background:0 0!important;border:0!important;padding:0;color:#ffffffe6!important;font-size:.875rem;line-height:1.6}.topic-overlay-content:where(.astro-GGIDOI4B) blockquote{border-left:3px solid #3b82f6!important;background:rgba(59,130,246,.05)!important;padding:.75rem 1rem;margin:1rem 0;border-radius:0 .5rem .5rem 0;color:#ffffffd9!important;font-style:normal}.topic-overlay-content:where(.astro-GGIDOI4B) blockquote p{margin-bottom:0;color:#ffffffd9!important}.topic-overlay-content:where(.astro-GGIDOI4B) table{width:100%;margin-top:1rem;margin-bottom:1rem;border-collapse:collapse;border:1px solid rgba(255,255,255,.1);border-radius:.5rem;overflow:hidden}.topic-overlay-content:where(.astro-GGIDOI4B) thead{background:rgba(59,130,246,.1)}.topic-overlay-content:where(.astro-GGIDOI4B) th{padding:.75rem;text-align:left;font-weight:600;color:#fff;border-bottom:1px solid rgba(255,255,255,.1)}.topic-overlay-content:where(.astro-GGIDOI4B) td{padding:.75rem;border-bottom:1px solid rgba(255,255,255,.05);color:#fffc}.topic-overlay-content:where(.astro-GGIDOI4B) tr:last-child td{border-bottom:none}.topic-overlay-content:where(.astro-GGIDOI4B) tbody tr:hover{background:rgba(255,255,255,.02)}.topic-overlay-content:where(.astro-GGIDOI4B) hr{border:0;height:1px;background:linear-gradient(to right,transparent,rgba(255,255,255,.2),transparent);margin:1.5rem 0}.topic-overlay-content:where(.astro-GGIDOI4B) img{border-radius:.5rem;margin-top:1rem;margin-bottom:1rem;max-width:100%;height:auto;border:1px solid rgba(255,255,255,.1)}.topic-overlay-content:where(.astro-GGIDOI4B) strong{color:#fff!important;font-weight:600}.topic-overlay-content:where(.astro-GGIDOI4B) em{color:#ffffffe6!important}@media (max-width:640px){#mark-topic-done:where(.astro-GGIDOI4B),#mark-topic-pending:where(.astro-GGIDOI4B){padding:.5rem .75rem!important;font-size:.875rem!important;gap:.5rem!important}#mark-topic-done:where(.astro-GGIDOI4B) span:where(.astro-GGIDOI4B),#mark-topic-pending:where(.astro-GGIDOI4B) span:where(.astro-GGIDOI4B){font-size:.875rem!important}#topic-actions:where(.astro-GGIDOI4B){flex-wrap:wrap;gap:.5rem}#topic-actions:where(.astro-GGIDOI4B)>div:where(.astro-GGIDOI4B){flex:1 1 auto;min-width:0}}