@charset "UTF-8";
:root{--ink:#243f40;--muted:#738582;--line:#e4eae5;--paper:#f9fbf7;--accent:#227465;--orange:#d18359;--teaching:#b4c4a7;--admin:#e5c083;--life:#8ebbbb;font-family:"Microsoft JhengHei","PingFang TC",sans-serif;color:var(--ink);font-synthesis:none}
*{box-sizing:border-box}body{margin:0;overflow:hidden;background:#92c3c0}button,input,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid #d18359;outline-offset:3px}button{border:0}button:disabled{opacity:.5;cursor:default}button:hover{filter:brightness(.97)}button:active{transform:translateY(1px)}[hidden]{display:none!important}.topbar{height:86px;background:var(--paper);display:flex;align-items:center;justify-content:space-between;padding:0 32px;border-bottom:1px solid #dfe6df;position:relative;z-index:20}.brand{display:flex;gap:13px;align-items:center;text-decoration:none;color:inherit}.school-mark{background:#29675d;color:#fff;height:47px;width:47px;border-radius:50% 50% 13px 13px;text-align:center;line-height:25px;padding-top:3px;font-family:serif;font-size:20px;letter-spacing:2px;transform:rotate(-5deg)}.school-mark span{display:block;font-size:13px;line-height:13px;letter-spacing:0}.brand strong{display:block;font-family:"DFKai-SB","KaiTi",serif;font-size:25px;font-weight:500;letter-spacing:6px}.brand div>span{display:block;font-size:8px;letter-spacing:1.65px;margin-top:5px}.header-title{font-family:"DFKai-SB","KaiTi",serif;font-size:21px;letter-spacing:2px}.header-title span{font-family:sans-serif;font-size:10px;letter-spacing:2px;color:var(--muted);border-left:1px solid #c9d5cb;padding-left:20px;margin-left:20px}.quiet-button{font-size:12px;background:transparent;letter-spacing:.5px}.quiet-button span{padding-left:12px}main{height:calc(100dvh - 86px);position:relative;overflow:hidden}#map{position:absolute;inset:0;touch-action:none}#map canvas{display:block;width:100%;height:100%;outline:none}#loading{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--paper);padding:20px 26px;border-radius:16px;z-index:5}#labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}.map-label{position:absolute;left:0;top:0;white-space:nowrap;background:#fffef4f5;border:1px solid #fff;border-radius:22px;padding:7px 12px 7px 8px;font-size:12px;font-weight:700;box-shadow:0 3px 8px #2b57551c;pointer-events:auto;display:flex;gap:6px;align-items:center;transition:background .18s;will-change:transform}.map-label em{font-family:Georgia,serif;font-style:normal;font-size:11px;color:#a96946;font-weight:bold}.map-label.selected{background:#246c5e;color:white;border-color:#246c5e;z-index:4}.map-label.selected em{color:#f8d8a4}.map-label:hover{background:#fff;z-index:5}.map-label.selected:hover{background:#246c5e}.explorer{position:absolute;left:24px;top:24px;bottom:70px;width:302px;background:#f9fbf7f7;border-radius:20px;box-shadow:0 12px 32px #355f5820;display:flex;flex-direction:column;overflow:hidden;z-index:10;border:1px solid #ffffffaa}.explorer-head{padding:27px 23px 19px}.eyebrow{font-size:9px;letter-spacing:2.2px;color:#5b7e72;font-weight:700}h1{font-family:"DFKai-SB","KaiTi",serif;font-size:26px;letter-spacing:1px;font-weight:500;margin:12px 0 9px}.explorer-head p{font-size:11px;color:var(--muted);margin:0;letter-spacing:.5px}.search-wrap{display:flex;align-items:center;margin:0 18px;background:#fff;border:1px solid #d7e1d9;border-radius:10px;padding:0 10px;gap:8px;height:45px;flex-shrink:0}.search-wrap>span{font-size:27px;line-height:1;color:#56786d}.search-wrap input{width:100%;min-width:0;border:0;background:transparent;outline:0;font:inherit;font-size:12px;color:var(--ink)}.search-wrap:focus-within{border-color:#387b69;box-shadow:0 0 0 2px #387b6918}.search-wrap kbd{border:1px solid #e0e7e0;border-radius:3px;color:#9aa69b;padding:1px 4px;font-size:10px}.filters{display:flex;gap:3px;margin:15px 18px 13px;padding-bottom:16px;border-bottom:1px solid var(--line)}.filters button{flex:1;white-space:nowrap;background:transparent;border-radius:7px;font-size:11px;padding:7px 3px;color:#7a897e}.filters button.active{background:#e2ede2;color:#28654e;font-weight:bold}.list-heading{display:flex;justify-content:space-between;padding:0 24px 10px;color:#7b8c80;font-size:10px;letter-spacing:1px}.results{overflow-y:auto;flex:1;padding:0 12px 15px;scrollbar-width:thin;scrollbar-color:#ccd9ce transparent}.place-row{display:flex;text-align:left;align-items:center;width:100%;background:transparent;border-radius:10px;padding:12px 10px;gap:12px;border:1px solid transparent}.place-row:hover{background:#edf2e9}.place-row.active{background:#e7eee1;border-color:#d2dfcc}.place-icon{width:35px;height:35px;display:grid;place-items:center;border-radius:10px;flex-shrink:0;background:#e6eddf;color:#638066;font-size:17px}.place-icon.admin{background:#f3ead8;color:#ad8753}.place-icon.life{background:#e0ece7;color:#52867d}.row-copy{flex:1;min-width:0}.row-copy strong{display:block;font-size:13px;letter-spacing:.5px;font-weight:600}.row-copy small{display:block;font-size:10px;margin-top:5px;color:#809080;line-height:1.5}.row-arrow{color:#8da08f;font-size:15px}.panel-footer{padding:15px 20px;background:#f1f5ee;font-size:9px;color:#80927e;border-top:1px solid var(--line);letter-spacing:.4px}.status-dot{display:inline-block;width:5px;height:5px;background:#79a183;border-radius:50%;margin-right:7px}.empty{padding:24px 12px;font-size:12px;line-height:1.9;color:var(--muted)}.view-switch{position:absolute;left:352px;top:24px;display:flex;background:#f8fbf3dd;border:1px solid #ffffffa1;padding:4px;border-radius:12px;z-index:5;gap:4px}.view-switch button{font-size:12px;background:transparent;color:#5c7b74;border-radius:8px;padding:9px 17px}.view-switch button.active{background:#fff;box-shadow:0 2px 5px #3b655918;color:#286453}.map-caption{position:absolute;right:31px;top:28px;text-align:right;pointer-events:none}.map-caption>span{font-family:"DFKai-SB","KaiTi",serif;font-size:26px;letter-spacing:4px;color:#346d64}.map-caption p{font-size:10px;letter-spacing:2px;color:#4f867b;margin-top:8px}.map-tools{position:absolute;right:26px;bottom:132px;display:flex;flex-direction:column;padding:5px;background:#f9fcf5ed;border:1px solid #fff8;border-radius:13px;box-shadow:0 4px 18px #406a5620;z-index:6}.map-tools button{width:36px;height:36px;background:transparent;font-size:22px;display:grid;place-items:center;border-radius:7px}.map-tools #labels-toggle{font-size:15px}.map-tools div{height:1px;background:#dbe5da;margin:4px}.orientation{position:absolute;right:90px;bottom:72px;text-align:center;color:#346e66;pointer-events:none}.orientation>span{display:block;font-size:37px;line-height:40px;font-family:serif;transform-origin:center}.orientation small{font-size:9px;letter-spacing:1px}.bottom-bar{position:absolute;left:352px;right:26px;bottom:24px;display:flex;justify-content:space-between;align-items:center;gap:15px;pointer-events:none}.legend{display:flex;gap:17px;align-items:center;background:#f8fbf1dc;padding:12px 18px;border:1px solid #ffffff80;border-radius:10px;font-size:10px;color:#567468}.legend span{display:flex;gap:6px;align-items:center;white-space:nowrap}.legend i{width:8px;height:8px;border-radius:2px}.teaching{background:var(--teaching)}.admin{background:var(--admin)}.life{background:var(--life)}.mouse-hint{font-size:10px;color:#346f68;letter-spacing:.5px}.mouse-hint b{padding:0 6px;font-weight:normal}.detail{position:absolute;right:82px;top:104px;bottom:105px;max-height:590px;width:300px;background:#fbfcf7;border:1px solid #fff9;border-radius:18px;box-shadow:0 12px 40px #2c554631;overflow:auto;z-index:12;scrollbar-width:thin}.detail-image{height:155px;width:100%;object-fit:cover;display:block}.close-button{position:absolute;right:12px;top:12px;background:#fffffff0;width:28px;height:28px;border-radius:50%;font-size:22px;line-height:1;z-index:1}.detail-body{padding:23px}.detail-topline{font-size:9px;letter-spacing:1.8px;color:#80937a}.detail h2{font-family:"DFKai-SB","KaiTi",serif;font-size:29px;font-weight:500;margin:9px 0 11px;letter-spacing:2px}.detail-description{font-size:11px;color:#7a8a78;line-height:1.85;margin-bottom:17px}.detail-location{font-size:11px;padding:11px 12px;background:#eaf0e4;border-radius:8px;line-height:1.8;margin:12px 0}.detail h3{font-size:11px;letter-spacing:1px;margin-top:20px}.floor-tabs{display:flex;flex-wrap:wrap;gap:5px}.floor-tabs button{padding:6px 10px;background:#eef2e8;border-radius:6px;font-size:11px}.floor-tabs button.active{background:#3a7564;color:#fff}.room-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.room-chip{font-size:11px;border:1px solid #dde5d5;border-radius:6px;padding:6px 8px;background:white;text-align:left;line-height:1.5}.room-chip.matched{background:#f1dba9;border-color:#d7b779;color:#68531d}.detail small{display:block;font-size:9px;color:#9aa58e;line-height:1.8;margin-top:15px}.focus-button{width:100%;background:#2d705e;color:#fff;padding:11px;border-radius:8px;font-size:11px;margin-top:18px}.photo-caption{font-size:9px;position:absolute;top:132px;right:10px;background:#fff9;padding:4px 7px;border-radius:4px;color:#46644c}#mobile-toggle{display:none}#notice{position:absolute;bottom:85px;left:calc(50% + 140px);transform:translateX(-50%);background:#285e51e8;color:#fff;border-radius:20px;padding:10px 20px;font-size:12px;opacity:0;pointer-events:none;transition:opacity .2s;z-index:30}#notice.show{opacity:1}dialog{border:1px solid #dae2d3;border-radius:20px;padding:35px;max-width:510px;color:var(--ink);background:#fbfcf7;box-shadow:0 15px 60px #214e4c3a}dialog::backdrop{background:#254e4b66;backdrop-filter:blur(5px)}dialog h2{font-size:25px;font-family:"DFKai-SB","KaiTi",serif;font-weight:500;margin:15px 0 23px}dialog p{font-size:12px;color:#71816d;line-height:1.95}.about-actions a{display:inline-block;margin-top:12px;font-size:12px;color:#286b56;text-underline-offset:5px}
#map{left:300px}
@media(min-width:1600px){#map{left:336px}.explorer{width:326px;left:32px;top:32px}.view-switch{left:384px;top:32px}.bottom-bar{left:384px}.place-row{padding:15px 12px}.explorer-head{padding-top:33px}}
@media(max-width:1100px){.header-title{display:none}.explorer{width:270px;left:18px}.explorer-head{padding-left:20px}.view-switch{left:308px}.bottom-bar{left:308px}.mouse-hint{display:none}.map-caption>span{font-size:22px}.detail{right:75px;width:280px}}
@media(max-width:700px){.topbar{height:68px;padding:0 17px}.brand{gap:9px}.school-mark{width:36px;height:39px;font-size:17px;line-height:22px}.brand strong{font-size:20px;letter-spacing:4px}.brand div>span{font-size:6px;letter-spacing:1px}.quiet-button{font-size:10px}.quiet-button span{padding-left:3px}main{height:calc(100dvh - 68px)}.explorer{left:12px;right:12px;top:auto;bottom:73px;width:auto;max-height:55%;display:none;border-radius:17px}.explorer.mobile-open{display:flex}.explorer-head{padding:18px 20px 12px}.eyebrow{font-size:8px}h1{font-size:22px;margin:6px 0}.explorer-head p,.panel-footer{display:none}.filters{margin-top:10px;margin-bottom:8px;padding-bottom:9px}.results{min-height:85px}.place-row{padding:10px}.view-switch{left:16px;top:17px}.view-switch button{font-size:11px;padding:8px 12px}.map-caption{top:22px;right:17px}.map-caption>span{font-size:18px;letter-spacing:1px}.map-caption p{display:none}.map-tools{right:13px;bottom:110px}.map-tools button{width:31px;height:33px}.orientation{right:61px;bottom:104px}.orientation small{font-size:8px}.bottom-bar{left:14px;bottom:21px;right:14px;justify-content:center}.legend{padding:10px 12px;font-size:9px;gap:14px}#mobile-toggle{display:block;position:absolute;left:16px;bottom:70px;background:#fbfcf5;padding:12px 18px;border-radius:22px;box-shadow:0 3px 15px #315a5330;font-size:12px;z-index:15}.detail{left:12px;right:12px;top:auto;bottom:73px;width:auto;max-height:58%;z-index:18}.detail-image{height:140px}.detail-body{padding:20px}.detail h2{font-size:24px}.detail-description{margin-bottom:8px}.photo-caption{top:116px}.detail h3{margin-top:12px}#notice{left:50%;bottom:88px;white-space:nowrap;font-size:11px}dialog{max-width:calc(100% - 28px);padding:27px}}
@media(max-width:1100px){#map{left:270px}}
@media(max-width:700px){#map{left:0}}
.pin-caption{position:absolute;left:0;top:0;z-index:6;max-width:min(230px,calc(100% - 24px));padding:9px 14px;background:#fffaf7f5;border:1px solid #e9aaa1;border-radius:10px;box-shadow:0 4px 16px #743d3224;text-align:center;pointer-events:none;will-change:transform}
.pin-caption::after{content:"";position:absolute;bottom:-5px;left:calc(50% - 4px);width:8px;height:8px;background:#fffaf7;border-right:1px solid #e9aaa1;border-bottom:1px solid #e9aaa1;transform:rotate(45deg)}
.pin-caption strong{display:block;color:#bc342f;font-size:13px;font-weight:700;line-height:1.55;overflow-wrap:anywhere}
.pin-caption small{display:block;font-size:10px;line-height:1.6;color:#8b6256;margin-top:2px;overflow-wrap:anywhere}
@media(max-width:700px){.pin-caption{max-width:190px;padding:7px 11px}.pin-caption strong{font-size:12px}.pin-caption small{font-size:9px}}
.origin-controls{margin:0 18px 13px;flex-shrink:0}.origin-controls>label{font-size:11px;font-weight:bold;display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.origin-controls>label>span{font-size:9px;font-weight:normal;color:#829582}.origin-inputs{display:flex;gap:5px}.origin-inputs select{font:inherit;font-size:11px;color:#365f60;background:#fff;border:1px solid #d7e1d9;border-radius:7px;padding:8px 4px;width:100%;min-width:0}.origin-inputs select:focus-visible{outline:2px solid #2487be;outline-offset:2px}.origin-inputs button{flex-shrink:0;font-size:10px;border-radius:7px;padding:8px;background:#e4eef1;color:#237699}.origin-inputs button.active{background:#267fae;color:white}.origin-help{display:flex;justify-content:space-between;align-items:center;gap:5px;font-size:9px;color:#78918b;line-height:1.6;margin-top:7px}.origin-help button{flex-shrink:0;padding:0;background:transparent;font-size:9px;color:#6d8785;text-decoration:underline;text-underline-offset:2px}.route-summary{margin:12px 18px 0;padding:12px;background:#e9f2f3;border:1px solid #c8dfe4;border-radius:10px;flex-shrink:0;max-height:220px;overflow-y:auto;scrollbar-width:thin}.route-summary-heading{display:flex;align-items:center;justify-content:space-between;gap:6px}.route-summary-heading strong{font-size:12px;color:#236c93}.route-summary-heading button{font-size:9px;color:#6e8792;background:transparent;padding:0;text-decoration:underline;text-underline-offset:3px}.route-summary p{font-size:10px;line-height:1.7;margin:7px 0;color:#456b7b;overflow-wrap:anywhere}.route-summary small{display:block;font-size:9px;color:#819395;line-height:1.7;margin-top:9px}#route-actions{display:flex;gap:6px}#route-actions button{font-size:10px;padding:7px 8px;border-radius:6px;background:#fff;color:#237699}#route-directions{font-size:10px;color:#52727e;margin-top:8px}#route-directions summary{cursor:pointer}#route-steps{line-height:1.8;padding-left:18px;margin:8px 0 0}.current-caption{position:absolute;left:0;top:0;z-index:7;padding:7px 10px;background:#f4fbfff2;border:1px solid #8bbcd7;box-shadow:0 3px 8px #2b57551c;border-radius:20px;color:#116d9e;font-size:10px;font-weight:bold;max-width:220px;pointer-events:none;will-change:transform}.pick-banner{position:absolute;top:82px;left:calc(50% + 120px);transform:translateX(-50%);z-index:18;background:#f4fbfff5;border:1px solid #8bbcd7;border-radius:12px;padding:13px 17px;box-shadow:0 5px 20px #2b57552c;white-space:nowrap;font-size:12px;color:#216d91}.pick-banner button{margin-left:12px;padding:5px 9px;background:#e2edf4;border-radius:6px;font-size:10px}.picking-origin canvas{cursor:crosshair!important}.picking-origin .map-label{border-color:#70a9c9}.explorer-head{padding-top:22px;padding-bottom:15px}.results{min-height:85px}
@media(max-width:700px){.explorer{max-height:calc(100% - 92px)}.explorer-head{padding:15px 20px 12px}.origin-controls{margin-bottom:10px}.route-summary{padding:10px;margin-top:10px;max-height:158px}.pick-banner{left:50%;top:73px;font-size:11px;padding:10px 11px}.current-caption{max-width:180px;font-size:9px}.origin-help{font-size:8px}}
@media(max-height:790px) and (min-width:701px){.explorer-head{padding-top:17px;padding-bottom:12px}.explorer-head h1{font-size:23px;margin:7px 0}.explorer-head .eyebrow{font-size:8px}.explorer-head p{display:none}.route-summary{max-height:160px}.filters{margin-top:10px;padding-bottom:10px;margin-bottom:9px}.panel-footer{padding:10px 18px}.origin-controls{margin-bottom:10px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
