:root{--bg:#0B0F17;--card:rgba(26,34,52,0.85);--card-solid:#1A2234;--brand:#6366F1;--brand-light:#818CF8;--text:#E2E8F0;--text-muted:#94A3B8;--border:rgba(148,163,184,0.15);--success:#10B981;--warning:#F59E0B}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei','Helvetica Neue',Arial,sans-serif;background:var(--bg);color:var(--text);overflow:hidden;height:100vh;height:100dvh}#graph{width:100vw;height:100vh;height:100dvh}.topbar{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;align-items:center;gap:16px;padding:12px 24px;background:rgba(11,15,23,0.85);backdrop-filter:blur(16px);border-bottom:1px solid var(--border)}.topbar .logo{font-size:20px;font-weight:700;color:var(--brand);letter-spacing:1px;text-decoration:none;white-space:nowrap;font-style:italic}.topbar .logo span{color:var(--text)}.topbar .title{font-size:15px;color:var(--text-muted);white-space:nowrap;font-style:italic;position:relative;top:2px}.topbar .spacer{flex:1}.topbar nav{display:flex;gap:20px}.topbar nav a{color:var(--text-muted);text-decoration:none;font-size:14px;transition:color 0.2s}.topbar nav a:hover{color:var(--text)}.stats-box{position:fixed;top:74px;right:14px;z-index:90;background:rgba(26,34,52,0.8);backdrop-filter:blur(14px);opacity:0.8;border:1px solid var(--border);border-radius:12px;padding:10px 12px;font-size:10.5px;display:flex;flex-direction:column;gap:4px;max-width:200px;pointer-events:none}.stats-box .lh{font-weight:700;color:var(--text);font-size:11px;margin-bottom:2px}.stats-box .lr{display:flex;align-items:center;gap:6px;color:var(--text-muted)}.stats-box .lr .d{width:7px;height:7px;border-radius:50%;flex-shrink:0}.stats-box .lr .n{color:var(--text);font-variant-numeric:tabular-nums;margin-left:auto}.stats-box .layout-btn{margin-top:4px;padding:4px 8px;background:var(--card-solid);border:1px solid var(--border);border-radius:6px;color:var(--text-muted);font-size:10px;cursor:pointer;font-family:inherit;pointer-events:auto;transition:all 0.15s;text-align:center;white-space:nowrap}.stats-box .layout-btn:hover{border-color:var(--brand);color:var(--text)}.stats-box .layout-btn:active{transform:scale(0.96)}.target-careers-divider{height:1px;background:var(--border);margin:0px 0 4px}.target-careers{display:flex;flex-direction:column;gap:3px}.target-career-btn{padding:4px 8px;background:var(--card-solid);border:1px solid var(--border);border-radius:6px;color:var(--text-muted);font-size:10px;cursor:pointer;font-family:inherit;pointer-events:auto;transition:all 0.15s;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.target-career-btn:hover{border-color:var(--brand);color:var(--text)}.target-career-btn:active{transform:scale(0.96)}.target-career-btn.is-default{border-color:var(--brand);color:var(--brand-light);font-weight:600}.target-career-btn.is-login{text-align:center}.camera-ctrl-btn{cursor:pointer;font-size:18px;padding:4px 8px;border-radius:8px;transition:background 0.15s;opacity:0.7}.camera-ctrl-btn:hover{background:rgba(255,255,255,0.1);opacity:1}.search-box{position:relative;width:240px}.search-box input{width:100%;padding:8px 12px 8px 34px;background:transparent;border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:13px;font-family:inherit;outline:none;transition:border-color 0.2s}.search-box input:focus{border-color:var(--brand-light)}.search-box input::placeholder{color:var(--text-muted)}.search-box::before{content:'';position:absolute;left:10px;top:50%;transform:translateY(-50%);width:14px;height:14px;background:var(--text-muted);opacity:0.6;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E") center/contain no-repeat}.bottom-panel{position:fixed;left:50%;transform:translateX(-50%);bottom:22px;width:calc(100% - 32px);max-width:1024px;z-index:50;background:var(--card);border:1px solid var(--border);border-radius:14px;max-height:45vh;display:flex;flex-direction:column;transition:transform 0.3s cubic-bezier(0.4,0,0.2,1)}.bottom-panel.collapsed{max-height:42px;overflow:hidden}.bottom-panel.collapsed .career-tags-section,.bottom-panel.collapsed .detail-content{display:none}.bottom-panel-header{display:flex;align-items:center;gap:12px;padding:6px 20px;flex-shrink:0}.bottom-panel-title{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap}.bottom-panel-toggle{margin-left:auto;width:28px;height:28px;border-radius:50%;background:var(--card-solid);border:1px solid var(--border);color:var(--text);cursor:pointer;font-size:12px;display:grid;place-items:center;transition:background 0.2s;flex-shrink:0}.panel-play-btn{margin-left:auto;width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#F59E0B 0%,#EF4444 50%,#EC4899 100%);border:none;cursor:pointer;display:none;place-items:center;box-shadow:0 0 12px rgba(236,72,153,0.4);transition:box-shadow 0.2s,filter 0.2s;flex-shrink:0}.panel-play-btn:hover{filter:brightness(1.15);box-shadow:0 0 18px rgba(236,72,153,0.6)}.panel-play-btn:active{filter:brightness(0.95)}.bottom-panel.collapsed.has-career .panel-play-btn{display:grid}.bottom-panel.collapsed .bottom-panel-toggle{margin-left:0}.play-icon{display:block;width:0;height:0;border-left:8px solid #fff;border-top:5px solid transparent;border-bottom:5px solid transparent;margin-left:2px}.bottom-panel-toggle:hover{background:var(--brand)}.toggle-arrow{display:block;width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);margin-top:-3px;transition:transform 0.3s}.bottom-panel.collapsed .toggle-arrow{transform:rotate(-135deg);margin-top:3px}.career-tags-section{padding:8px 20px;border-bottom:1px solid var(--border);flex-shrink:0}.career-tags-label{font-size:11px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.8px;margin-bottom:8px}.career-breadcrumb{display:flex;align-items:center;gap:4px;flex:1;font-size:12px;overflow:hidden;min-width:0}.breadcrumb-item{color:var(--text-muted);cursor:pointer;padding:2px 8px;border-radius:6px;transition:all 0.15s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.breadcrumb-item:hover{color:var(--text);background:var(--card-solid)}.breadcrumb-item.active{color:var(--brand-light);font-weight:600}.breadcrumb-sep{color:var(--text-muted);font-size:10px;flex-shrink:0}.career-tags{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px}.career-tag{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:20px;background:var(--card-solid);border:1px solid var(--border);color:var(--text-muted);font-size:12px;cursor:pointer;font-family:inherit;transition:all 0.15s;white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis}#category-tags .career-tag{justify-content:center}#career-tags .career-tag{justify-content:flex-start}.career-tag:hover{border-color:var(--brand);color:var(--text)}.career-tag.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}.career-tag .cat-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.detail-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:16px 20px;position:relative}.start-learn-btn{position:sticky;float:right;margin:0 0 8px 12px;padding:2px 15px;border:none;border-radius:24px;background:linear-gradient(135deg,#F59E0B 0%,#EF4444 50%,#EC4899 100%);color:#fff;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;white-space:nowrap;box-shadow:0 0 16px rgba(236,72,153,0.5),0 4px 12px rgba(239,68,68,0.3);transition:box-shadow 0.2s,filter 0.2s;z-index:10;letter-spacing:0.5px}.start-learn-btn:hover{filter:brightness(1.15);box-shadow:0 0 24px rgba(236,72,153,0.7),0 6px 20px rgba(239,68,68,0.5)}.start-learn-btn:active{filter:brightness(0.95)}.start-learn-btn-blue{background:linear-gradient(135deg,#3B82F6 0%,#6366F1 50%,#8B5CF6 100%);box-shadow:0 0 16px rgba(59,130,246,0.5),0 4px 12px rgba(99,102,241,0.3)}.start-learn-btn-blue:hover{filter:brightness(1.15);box-shadow:0 0 24px rgba(59,130,246,0.7),0 6px 20px rgba(99,102,241,0.5)}.detail-empty{display:grid;place-items:center;height:100%;color:var(--text-muted);font-size:14px;text-align:center}.detail-empty .empty-icon{font-size:36px;margin-bottom:8px;opacity:0.4}.detail-tabs{display:flex;gap:4px;margin-bottom:10px;border-bottom:1px solid var(--border);padding-bottom:0;clear:both;overflow-x:auto;flex-wrap:nowrap;white-space:nowrap;-webkit-overflow-scrolling:touch}.detail-tabs::-webkit-scrollbar{display:none}.detail-tab{padding:6px 14px;border-radius:8px 8px 0 0;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-size:13px;cursor:pointer;font-family:inherit;transition:all 0.15s;flex-shrink:0;white-space:nowrap;display:inline-flex;align-items:center;gap:3px}.detail-tab:hover{color:var(--text)}.detail-tab.active{color:var(--brand-light);border-bottom-color:var(--brand);font-weight:600}.detail-tab.locked{opacity:0.4;cursor:not-allowed}.detail-tab.locked:hover{color:var(--text-muted)}.detail-tab.locked.active{opacity:0.4;color:var(--text-muted);border-bottom-color:transparent}.detail-card{background:var(--card-solid);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:10px}.detail-card-title{font-size:14px;font-weight:600;color:var(--text);margin-bottom:4px}.detail-card-meta{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.detail-meta-tag{font-size:11px;padding:2px 8px;border-radius:6px;background:rgba(99,102,241,0.1);color:var(--brand-light)}.detail-card-desc{font-size:12px;color:var(--text-muted);line-height:1.6}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}@media (max-width:480px){.grid-cards{grid-template-columns:1fr}}@media (min-width:481px) and (max-width:768px){.grid-cards{grid-template-columns:repeat(2,1fr)}}.grid-card{background:var(--card-solid);border:1px solid var(--border);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;position:relative;min-width:0;overflow:hidden}.grid-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:4px}.grid-card-corner{font-size:10px;padding:1px 7px;border-radius:8px;background:rgba(99,102,241,0.1);color:var(--brand-light);white-space:nowrap;flex-shrink:0;line-height:1.5}.grid-card-tags{display:flex;align-items:center;gap:4px;flex-shrink:0}.grid-card-title{font-size:13px;font-weight:600;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid-card-meta{display:flex;flex-wrap:nowrap;gap:4px;margin-bottom:4px;padding-top:4px;overflow:hidden;white-space:nowrap}.grid-card-desc{font-size:11px;color:var(--text-muted);line-height:1.5;flex:1;overflow:hidden}.course-child{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-muted);padding:1px 0;overflow:hidden}.course-child-dot{flex-shrink:0}.course-child-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.course-child-depth{flex-shrink:0;font-size:10px}.skills-layout{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:start}.skills-radar-wrap{display:flex;flex-direction:column;align-items:center;background:var(--card-solid);border:1px solid var(--border);border-radius:10px;padding:12px}.skills-radar-canvas{width:100%;max-width:280px;height:280px}.skills-radar-legend{display:flex;flex-wrap:wrap;gap:6px 12px;justify-content:center;margin-top:8px}.skills-radar-legend-item{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-muted)}.skills-radar-legend-dot{width:8px;height:8px;border-radius:50%;background:var(--brand-light)}@media (max-width:600px){.skills-layout{grid-template-columns:1fr}}.career-desc-box{background:var(--card-solid);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:13px;color:var(--text-muted);line-height:1.7}.career-desc-title{font-size:12px;font-weight:600;color:var(--brand-light);margin-bottom:6px}.career-info-grid{display:grid;grid-template-columns:1fr;gap:10px;margin-top:10px}.career-info-card{background:var(--card-solid);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:12px;color:var(--text-muted);line-height:1.7}.career-info-title{font-size:12px;font-weight:600;color:var(--brand-light);margin-bottom:6px}.career-info-list{list-style:none;padding:0;margin:0}.career-info-list li{font-size:12px;color:var(--text-muted);line-height:1.7;padding-left:14px;position:relative}.career-info-list li::before{content:'·';position:absolute;left:4px;color:var(--brand-light)}.plan-phase{background:var(--card-solid);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:8px;border-left:3px solid var(--brand)}.plan-phase-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.plan-phase-name{font-size:13px;font-weight:600;color:var(--text)}.plan-phase-weeks{font-size:11px;color:var(--text-muted)}.plan-phase-nodes{font-size:11px;color:var(--text-muted);line-height:1.8}.node-detail-header{display:flex;align-items:center;gap:12px;margin-bottom:12px}.search-detail-layout{display:flex;gap:16px;align-items:flex-start}.search-detail-left{flex:0 0 220px;min-width:0}.search-detail-right{flex:1;min-width:0;overflow:hidden}@media (max-width:768px){.search-detail-layout{flex-direction:column}.search-detail-left{flex:0 0 auto;width:100%}}.search-detail-row{display:flex;align-items:center;gap:8px;margin-bottom:4px}.search-detail-name{font-size:14px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-detail-desc{font-size:12px;color:var(--text-muted);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:4px}.search-detail-meta{display:flex;flex-wrap:wrap;gap:4px}.search-detail-conn-title{font-size:11px;color:var(--text-muted);margin-bottom:4px}.search-conn-grid{display:flex;flex-direction:row;flex-wrap:wrap;gap:4px}.search-conn-grid .node-connection-item{flex:0 0 160px;min-width:0;border:1px solid var(--border);border-radius:16px;padding:3px 10px}.search-conn-grid .node-connection-item span:first-of-type{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:480px){.search-conn-grid .node-connection-item{flex:1 0 100%}}@media (min-width:481px) and (max-width:768px){.search-conn-grid .node-connection-item{flex:1 0 calc(50% - 4px)}}.node-detail-badge{display:inline-block;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}.node-detail-name{font-size:20px;font-weight:700}.node-detail-desc{font-size:13px;color:var(--text-muted);line-height:1.6;margin-bottom:12px}.node-connections{display:flex;flex-direction:column;gap:4px}.node-connection-item{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:6px;cursor:pointer;font-size:12px;transition:background 0.15s}.node-connection-item:hover{background:var(--card-solid)}.node-connection-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.toggle-row{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text)}.toggle-switch{width:32px;height:18px;border-radius:9px;background:var(--card-solid);border:1px solid var(--border);position:relative;cursor:pointer;transition:background 0.2s}.toggle-switch.on{background:var(--brand)}.toggle-switch::after{content:'';position:absolute;top:1px;left:1px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform 0.2s}.toggle-switch.on::after{transform:translateX(14px)}.loading-overlay{position:fixed;inset:0;z-index:999;background:var(--bg);display:grid;place-items:center;transition:opacity 0.5s}.loading-overlay.hidden{opacity:0;pointer-events:none}.loading-content{text-align:center}.loading-spinner{width:48px;height:48px;border-radius:50%;border:3px solid var(--border);border-top-color:var(--brand);animation:spin 0.8s linear infinite;margin:0 auto 16px}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{color:var(--text-muted);font-size:14px}.typer-cursor{animation:blink 0.8s step-end infinite;color:var(--brand-light)}@keyframes blink{0%,50%{opacity:1}51%,100%{opacity:0}}.graph-tooltip{position:absolute;pointer-events:none;z-index:200;background:rgba(26,34,52,0.95);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:13px;color:var(--text);box-shadow:0 4px 20px rgba(0,0,0,0.4);max-width:min(260px,calc(100vw - 16px));opacity:0;transition:opacity 0.15s}.graph-tooltip.visible{opacity:1}.graph-tooltip .tt-name{font-weight:600;margin-bottom:2px}.graph-tooltip .tt-type{font-size:11px;color:var(--text-muted)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@media (max-width:768px){.control-panel{width:220px}.info-panel{width:calc(100vw - 32px)}.search-box{width:140px}.topbar nav{display:none}.topbar .title{display:none}}@media (max-width:600px){.stats-box{font-size:9px;padding:6px 8px;max-width:140px}}.grid-card-clickable{cursor:pointer;transition:border-color 0.15s,background 0.15s}.grid-card-clickable:hover{border-color:rgba(99,102,241,0.5);background:rgba(99,102,241,0.05)}.grid-card-clickable:active{transform:scale(0.98)}.course-child-clickable{cursor:pointer;border-radius:4px;padding:1px 4px;transition:background 0.15s,color 0.15s;margin:0 -4px}.course-child-clickable:hover{background:rgba(99,102,241,0.1)}.course-child-clickable:hover .course-child-name{color:var(--brand-light)}.course-child-clickable:active{background:rgba(99,102,241,0.18)}.career-projects{display:flex;flex-direction:column;gap:16px}.proj-section{background:var(--card-solid);border:1px solid var(--border);border-radius:8px;padding:12px 14px}.proj-section-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}.proj-list{display:flex;flex-direction:column;gap:8px}.proj-item{display:flex;flex-direction:column;gap:2px;padding:6px 8px;border-radius:6px;background:rgba(99,102,241,0.04);transition:background 0.15s}.proj-item:hover{background:rgba(99,102,241,0.08)}.proj-item-name{font-size:13px;font-weight:600;color:var(--brand-light)}.proj-item-desc{font-size:12px;color:var(--text-muted);line-height:1.5}.task-table{display:flex;flex-direction:column;gap:4px}.task-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 8px;border-radius:4px;background:rgba(99,102,241,0.03)}.task-row:hover{background:rgba(99,102,241,0.07)}.task-desc{font-size:12px;color:var(--text-muted);flex:1}.task-freq{font-size:11px;font-weight:600;white-space:nowrap;padding:1px 6px;border-radius:3px;background:rgba(255,255,255,0.06)}.deliv-tags{display:flex;flex-wrap:wrap;gap:6px}.deliv-tag{font-size:12px;padding:3px 10px;border-radius:4px;background:rgba(251,191,36,0.12);color:#FBBF24;border:1px solid rgba(251,191,36,0.2)}.collab-tags{display:flex;flex-wrap:wrap;gap:6px}.collab-tag{font-size:12px;padding:3px 10px;border-radius:4px;background:rgba(52,211,153,0.12);color:#34D399;border:1px solid rgba(52,211,153,0.2)}