/* 1536 × 1024 reference: LayerLab layers.json. Dynamic text and progress stay in DOM. */
.page-student-map .content{padding:16px 22px 28px}
.page-student-map .shell-heading b{font-size:24px}
.km-page{max-width:1360px;margin:0 auto;color:#172b4c}
.km-page *{box-sizing:border-box}
.km-page button{font:inherit;cursor:pointer}
.km-page button:focus-visible{outline:3px solid #75aaff;outline-offset:3px}
.km-title-row{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin:0 0 10px}
.km-title-row h1{font-size:26px;letter-spacing:-.035em;line-height:1.1;margin:0 0 4px}
.km-title-row p{margin:0;color:#7385a0;font-size:12px}
.km-view-switch{border:1px solid #d8e2f0;border-radius:8px;background:white;color:#536b8e;padding:8px 11px;font-size:11px;font-weight:750;white-space:nowrap}
.km-view-switch:hover{border-color:#3676e6;color:#1768f2}
.km-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 19px}
.km-metrics>div{height:66px;border:1px solid #dce6f3;border-radius:9px;background:#fff;display:flex;align-items:center;gap:13px;padding:11px 15px;min-width:0}
.km-metrics>div>.svg-icon{flex:none;color:#1768f2}
.km-metrics span{min-width:0;display:grid;gap:2px}
.km-metrics small{font-size:10px;color:#71849f;font-weight:750;white-space:nowrap}
.km-metrics b{font-size:18px;line-height:1.15;letter-spacing:-.02em;white-space:nowrap}
.km-metrics em{font-size:11px;font-style:normal;font-weight:650;color:#637b9b}
.km-layout{display:grid;grid-template-columns:minmax(0,1fr) 278px;gap:18px;align-items:start}
.km-main{min-width:0}
.km-section-heading{display:flex;justify-content:space-between;align-items:baseline;gap:15px;margin:0 0 10px}
.km-section-heading h2,.km-route-head h2{margin:0;color:#172b4c;font-size:19px;letter-spacing:-.025em}
.km-section-heading h2 small{font-size:11px;color:#8192ac;font-weight:600;letter-spacing:0}
.km-section-heading p{margin:0;font-size:11px;color:#8b9bb0;white-space:nowrap}
.km-matrix{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}
.km-matrix-column{display:grid;grid-template-rows:54px repeat(5,76px);gap:5px;min-width:0}
.km-column-head{border:1px solid #e1e8f3;border-radius:8px;background:var(--tone-bg);display:flex;justify-content:center;align-items:center;gap:9px;color:#203754;min-width:0}
.km-column-head span{color:var(--tone);width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:#ffffffbd}
.km-column-head b{font-size:13px;white-space:nowrap}
.km-set-cell{min-width:0;display:flex;flex-direction:column;justify-content:space-between;padding:8px 9px 7px;border:1px solid #dfe7f2;border-radius:7px;background:#fff;transition:border-color .15s,background .15s}
.km-set-cell.selected{border:2px solid #1768f2;padding:7px 8px 6px;background:#f7fbff}
.km-set-cell:hover{border-color:#8db6f4}
.km-set-select{border:0;background:transparent;text-align:left;padding:0;min-width:0;color:#1d3354;display:grid;gap:2px}
.km-set-select b{font-size:11px;line-height:1.1}
.km-set-select span{font-size:10px;line-height:1.25;color:#62789a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-set-footer{display:flex;align-items:center;justify-content:space-between;gap:4px}
.km-set-dots{display:flex;align-items:center;gap:2px;min-width:0}
.km-set-dot{display:block;flex:0 0 7px;width:7px;height:7px;border:1px solid #b9cae2;border-radius:50%;background:#f5f8fc;padding:0!important}
.km-set-dot.current{background:#1768f2;border-color:#1768f2}
.km-set-dot.done{background:#2bb076;border-color:#2bb076}
.km-set-dot:hover,.km-set-dot.km-hovered{transform:scale(1.6);box-shadow:0 0 0 2px #d6e7ff}
.km-set-footer>small{font-size:9px;color:#7890b2;white-space:nowrap}
.km-set-cell.selected .km-set-footer>small{color:#1768f2}
.km-route-section{border:1px solid #dfe7f2;border-radius:9px;background:#fff;margin-top:14px;padding:16px 21px 13px;min-height:337px}
.km-route-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.km-route-head span{font-size:10px;color:#8192ad;white-space:nowrap}
.km-route{height:267px;position:relative;margin:5px 0 0}
.km-route-line{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.km-route-line path{stroke:#7ba4e8;stroke-width:1.3;fill:none}
.km-route-row{position:absolute;left:0;right:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));justify-items:center;text-align:center}
.km-route-top{top:10px}
.km-route-bottom{top:167px}
.km-root-node{position:relative;border:0;background:transparent;display:grid;justify-items:center;align-content:start;width:100%;max-width:150px;padding:0 3px;color:#1a3151;min-width:0}
.km-root-circle{width:67px;height:67px;border-radius:50%;border:1.5px solid #9aaac0;background:#fff;display:grid;place-items:center;position:relative;color:#344d74;transition:border-color .15s,box-shadow .15s,transform .15s}
.km-root-circle>span:not(:first-child){font-size:29px;font-weight:700;line-height:1}
.km-root-circle small{position:absolute;top:-10px;left:50%;transform:translateX(-50%);border:1px solid #aebed3;border-radius:50%;width:20px;height:20px;line-height:18px;background:#fff;color:#344d74;font-size:10px;font-weight:800}
.km-root-node.current .km-root-circle{border-color:#1768f2;color:#1768f2;background:conic-gradient(#1768f2 0 var(--node-progress),#fff var(--node-progress) 100%);box-shadow:inset 0 0 0 3px white}
.km-root-node.current .km-root-circle small{border-color:#1768f2;color:#1768f2}
.km-root-node.done .km-root-circle{border-color:#2bb076;color:#229964}
.km-root-node.selected .km-root-circle{border-width:3px;box-shadow:0 0 0 5px #e7f1ff,inset 0 0 0 3px white}
.km-root-node:hover .km-root-circle,.km-root-node.km-hovered .km-root-circle{transform:translateY(-2px);box-shadow:0 0 0 5px #e7f1ff}
.km-root-node strong{font-size:12px;margin-top:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.km-root-node em{font-style:normal;font-size:10px;color:#6680a1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.km-side{display:grid;gap:10px;min-width:0}
.km-detail-panel,.km-side-section{border:1px solid #dfe7f2;border-radius:9px;background:#fff;padding:15px}
.km-detail-head{display:flex;justify-content:space-between;align-items:center;gap:5px}
.km-detail-head b{font-size:11px}.km-detail-head small{font-size:10px;color:#1768f2;background:#eef5ff;padding:6px 8px;border-radius:6px;white-space:nowrap}
.km-detail-panel h2{font-size:34px;line-height:1;margin:12px 0 3px;color:#1768f2}
.km-detail-panel>p{font-size:15px;font-weight:800;color:#354966;margin:0 0 12px}
.km-detail-art{height:158px;display:grid;place-items:center;overflow:hidden}
.km-detail-art img{width:100%;height:100%;object-fit:contain}
.km-detail-count{display:flex;justify-content:space-between;margin:11px 0 7px;font-size:13px;color:#536f95;font-weight:700}
.km-detail-count small{font-size:10px;color:#8497b0}
.km-progress{height:9px;border-radius:99px;background:#e6ebf3;overflow:hidden}
.km-progress i{display:block;height:100%;background:#1768f2;border-radius:inherit}
.km-primary{width:100%;height:43px;border:0;border-radius:6px;background:#2469eb;color:white;font-weight:800;font-size:13px;margin-top:14px}
.km-primary:hover{background:#1253c7}
.km-side-section{padding:13px 15px}
.km-side-section h3{display:flex;justify-content:space-between;font-size:12px;margin:0 0 9px}
.km-side-section h3 small{font-size:10px;color:#8ca0bb;font-weight:500}
.km-side-stage{height:31px;display:flex;align-items:center;gap:9px;font-size:11px;color:#536b8c}
.km-side-stage>span{display:grid;place-items:center;width:19px;height:19px;border-radius:50%;background:#edf2fa;color:#647fa8;font-weight:800;font-size:10px}
.km-side-stage:first-of-type>span{background:#1768f2;color:white}
.km-side-stage .svg-icon{color:#4771b0}
.km-side-stage b{font-weight:700}
.km-side-legend>div{display:flex;align-items:center;gap:5px;flex-wrap:wrap;color:#71849e;font-size:10px}
.km-side-legend i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-left:8px}
.km-side-legend i:first-child{margin-left:0}.km-side-legend .done{background:#2bb076}.km-side-legend .current{background:#1768f2}.km-side-legend .future{background:#b8c5d7}
.km-popover{position:fixed;z-index:1000;width:356px;padding:17px 18px 12px;background:white;border:1px solid #bbcff0;border-radius:10px;box-shadow:0 12px 32px #2446762d;color:#172b4c}
.km-popover[hidden]{display:none}
.km-popover::after{content:"";position:absolute;bottom:-8px;left:var(--pointer-x);width:14px;height:14px;background:#fff;border-right:1px solid #bbcff0;border-bottom:1px solid #bbcff0;transform:rotate(45deg)}
.km-popover.below::after{bottom:auto;top:-8px;transform:rotate(225deg)}
.km-pop-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.km-pop-head b{font-size:18px;line-height:1.2}.km-pop-head p{font-size:13px;font-weight:800;margin:5px 0 0}
.km-pop-head>span{font-size:11px;font-weight:800;border-radius:99px;background:#e9f2ff;color:#1768f2;padding:5px 9px;white-space:nowrap}
.km-pop-head>span.done{background:#e6f8ef;color:#239c68}.km-pop-head>span.future{background:#f1f4f8;color:#75869f}
.km-pop-art{height:150px;border:1px solid #e3eaf4;border-radius:7px;margin:13px 0 11px;overflow:hidden;display:grid;place-items:center}
.km-pop-art img{width:100%;height:100%;object-fit:cover;object-position:center 46%}
.km-pop-count{display:flex;justify-content:space-between;gap:5px;align-items:center;margin-bottom:8px}.km-pop-count b{font-size:13px}.km-pop-count small{font-size:11px;color:#6482a9}
.km-pop-stages{display:flex;justify-content:space-between;align-items:center;gap:3px;border-top:1px solid #e6ecf5;margin:15px 0 9px;padding-top:12px}
.km-stage{display:grid;justify-items:center;gap:3px;min-width:0;color:#42649c}.km-stage i{font-style:normal}.km-stage b{font-size:9px;white-space:nowrap}
.km-pop-continue{width:100%;height:34px;border:1px solid #c6d9f5;border-radius:6px;background:#f5f9ff;color:#1768f2;font-size:12px;font-weight:800}
.km-pop-continue:hover{background:#e8f2ff}
.km-empty{max-width:480px;margin:75px auto;padding:35px;text-align:center;border:1px solid #dfe7f2;border-radius:12px;background:#fff}.km-empty h1{font-size:21px;margin:0 0 8px}.km-empty p{color:#71849e;font-size:13px}.km-empty button{border:0;border-radius:7px;background:#2469eb;color:#fff;padding:10px 20px;font-weight:750}
@media(max-width:1180px){.km-layout{grid-template-columns:1fr}.km-side{grid-template-columns:1fr 1fr 1fr}.km-detail-art{height:125px}.km-matrix{grid-template-columns:repeat(6,minmax(145px,1fr));overflow-x:auto}.km-matrix-section{overflow-x:auto}}
@media(max-width:760px){.page-student-map .content{padding:14px}.km-title-row h1{font-size:22px}.km-title-row p{font-size:11px}.km-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.km-metrics>div{height:58px;padding:9px}.km-metrics b{font-size:15px}.km-section-heading{display:block}.km-section-heading p{margin-top:5px;white-space:normal}.km-route-section{overflow-x:auto}.km-route{min-width:720px}.km-side{grid-template-columns:1fr}.km-popover{width:min(356px,calc(100vw - 24px))}}

/* Dashboard alignment from the LayerLab 1536 × 1024 reference. */
@media(min-width:1181px){
  .page-student-map .topbar{height:102px;padding-inline:27px;gap:16px}
  .page-student-map .topbar .shell-heading{flex:1 1 395px;min-width:290px}
  .page-student-map .topbar .shell-heading img{display:none}
  .page-student-map .topbar .shell-heading b{font-size:28px;color:#102c67}
  .page-student-map .topbar .shell-heading span{font-size:13px;color:#6882b2}
  .page-student-map .topbar-right{margin-left:0;gap:9px;flex:none}
  .page-student-map .streak{display:none}
  .page-student-map .content{padding:11px 16px 28px 10px}
  .page-student-map .km-page{max-width:none}
  .page-student-map .km-metrics{display:grid;grid-template-columns:178px 136px 128px 122px;gap:10px;flex:none;margin:0}
  .page-student-map .km-metrics>div{height:61px;padding:8px 10px;gap:9px}
  .page-student-map .km-metrics b{font-size:17px}
  .page-student-map .km-layout{grid-template-columns:minmax(0,1fr) 282px;gap:18px}
  .page-student-map .km-matrix{margin-left:48px}
  .page-student-map .km-matrix-column{grid-template-rows:56px repeat(5,80px)}
  .page-student-map .km-route-section{margin-top:12px;min-height:344px}
  .page-student-map .km-detail-art{height:200px;margin-top:0}
  .page-student-map .km-main{padding-top:5px}
  .page-student-map .km-section-heading{margin-left:8px}
}
.km-matrix-column:first-child{counter-reset:km-row}
.km-matrix-column:first-child .km-set-cell{position:relative}
.km-matrix-column:first-child .km-set-cell::before{counter-increment:km-row;content:counter(km-row);position:absolute;left:-38px;top:50%;transform:translateY(-50%);font-size:14px;font-weight:700;color:#2d5a9c}
.km-root-node.current .km-root-circle{background:conic-gradient(#1768f2 0 var(--node-progress),#f8fbff var(--node-progress) 100%);box-shadow:none}
.km-root-node.current .km-root-circle::before{content:"";position:absolute;inset:5px;border-radius:50%;background:#fff}
.km-root-circle>span,.km-root-circle>.svg-icon{position:relative;z-index:1}
.km-root-circle small{z-index:2}
.km-root-node.selected .km-root-circle{box-shadow:0 0 0 5px #e7f1ff}
.km-page .km-root-node:focus-visible{outline:0}
.km-root-node:focus-visible .km-root-circle{outline:3px solid #75aaff;outline-offset:4px}
.km-side-stage{height:50px;gap:10px}
.km-side-stage>div{display:grid;gap:3px}
.km-side-stage>div small{font-size:10px;color:#8093b4}
.km-side-legend{min-height:116px}
.km-side-legend>div{padding-top:9px;gap:9px}
@media(max-width:1180px) and (min-width:761px){
  .page-student-map .topbar{height:auto;min-height:84px;flex-wrap:wrap;padding-block:10px}
  .page-student-map .km-metrics{order:3;width:100%;margin:0;grid-template-columns:repeat(4,minmax(0,1fr))}
  .page-student-map .topbar-right{margin-left:auto}
}
@media(max-width:760px){
  .page-student-map .topbar{height:auto;min-height:62px;flex-wrap:wrap;padding-block:8px}
  .page-student-map .topbar-right{margin-left:auto}
  .page-student-map .km-metrics{display:grid;order:3;flex:0 0 100%;grid-template-columns:repeat(2,minmax(0,1fr));margin:5px 0 0}
  .page-student-map .km-metrics>div{height:58px}
  .page-student-map .km-matrix{margin-left:0}
  .km-matrix-column:first-child .km-set-cell::before{display:none}
}
