:root{--ink:#234d70;--muted:#677f94;--blue:#428ac0;--border:#dbe7ef}*{box-sizing:border-box}body{margin:0;background:#f1f7fb;color:var(--ink);font:16px/1.6 system-ui,-apple-system,'Noto Sans TC',sans-serif}header{max-width:1000px;margin:18px auto 0;padding:26px 30px;background:#c5e8f6;border-radius:25px;position:relative;overflow:hidden}header h1{font-size:clamp(25px,5vw,38px);margin:6px 0}header p{margin:0;color:#426f93}header small{letter-spacing:2px}.balloon{position:absolute;right:16%;top:28px;background:#428ac0;border-radius:50% 50% 45% 45%;width:50px;height:65px;font-size:50px;line-height:55px;text-align:center;color:#fff;transform:rotate(-9deg);opacity:.65}.b2{right:6%;top:60px;background:#e9954e;transform:rotate(15deg);width:35px;height:48px;font-size:35px;line-height:40px}.cloud{position:absolute;right:20%;bottom:-5px;width:100px;height:32px;border-radius:40px;background:#effaff}.c2{right:3%;width:80px}main{max-width:1000px;margin:auto;padding:18px}.card{background:#fffdf9;border:1px solid var(--border);border-radius:22px;margin-bottom:18px;padding:22px;box-shadow:0 4px 15px #234d7005}h2{font-size:21px;margin:0 0 12px}.heading{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.heading h2{margin:0}p{margin:10px 0}.muted,small,.foot{color:var(--muted)}button,a{touch-action:manipulation}button{border:1px solid var(--border);border-radius:12px;padding:9px 14px;background:#eef5fa;color:var(--ink);font:inherit;cursor:pointer}button:hover{background:#dcecf7}button:disabled{opacity:.5;cursor:wait}a{color:#2479ad;text-decoration:none}a:hover{text-decoration:underline}nav{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px;align-items:center;font-size:14px}nav a{padding:8px}.countdown{display:flex;justify-content:space-between;align-items:center;background:#fff9ef}.countdown strong{font-size:48px;color:#e07a52;padding:0 10px}.countdown span{text-align:right}.help{border:0;padding:0;width:25px;height:25px;border-radius:50%;font-size:14px;background:#e4edf5;vertical-align:middle}.dates{display:flex;align-items:center;gap:4px}.dates input{width:145px;padding:7px;font:inherit}.dates button{padding:6px 11px}label{display:block;font-weight:500;margin:12px 0}input,select,textarea{display:block;width:100%;padding:10px;margin-top:5px;border:1px solid #c5d6e2;border-radius:10px;font:inherit;background:white;color:var(--ink)}input[type=checkbox]{display:inline;width:auto;margin-right:10px}textarea{min-height:90px}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:14px 0 22px}.circle-card{background:#fffdf9;text-align:center;padding:18px 8px;border-radius:20px;box-shadow:0 5px 0 #e2eaf2;border:1px solid var(--border);min-width:0}.circle-card .name{font-weight:650;font-size:16px;min-height:29px}.icon{display:inline-flex;justify-content:center;align-items:center;margin-right:5px;font-size:22px}.ring{width:112px;height:112px;border-radius:50%;margin:12px auto 6px;display:grid;place-items:center;position:relative;background:conic-gradient(var(--col) calc(var(--pct)*1%),#e8edf3 0)}.ring:before{content:'';position:absolute;inset:9px;background:#fffdf9;border-radius:50%}.ring span{z-index:1;color:var(--col);font-size:24px;font-weight:650}.ring.info{background:var(--tint)}.ring.info:before{inset:2px;background:var(--tint)}.caption{font-size:12px;min-height:20px;color:var(--muted)}summary{cursor:pointer;font-weight:650;font-size:20px}summary small{font-size:13px;font-weight:400;margin-left:8px}.toolbar{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.timeline{border-left:3px solid #d7e6f1;padding-left:16px;margin:14px 0}.timeline .time{color:var(--blue);font-weight:650}.timeline h3{margin:0;font-size:17px}.timeline p{margin:0;font-size:14px}.official{background:#fff4df}.official summary{font-size:16px}.official-row{display:flex;gap:12px;border-bottom:1px solid #efdfbd;padding:8px 0;font-size:14px}.official-row.next{font-weight:700;color:#ad672c}.ganttwrap{overflow:auto}.gantt-inner{min-width:530px}.gantt-axis,.gantt-row{display:grid;grid-template-columns:140px 1fr;gap:12px;margin-bottom:12px}.gantt-axis .ticks{display:flex;justify-content:space-between;font-size:12px}.gantt-row .gname{font-size:14px;text-align:left;border:0;padding:0;background:none}.gtrack{height:30px;background:repeating-linear-gradient(to right,#edf3f8 0,#edf3f8 calc(100%/14 - 1px),#dfe9f2 calc(100%/14));position:relative;border-radius:5px;overflow:hidden}.gbar{position:absolute;top:3px;height:24px;min-width:4px;background:#d9e7f4;border-radius:4px}.gfill{height:100%;background:#e9a23e;border-radius:4px}.gbar.net .gfill{background:#de8350}.gbar.late .gfill{background:#d75963}.todayline{height:100%;width:2px;background:#428ac0;position:absolute;top:0;pointer-events:none}.record{border:1px solid var(--border);padding:15px;border-radius:14px;margin:12px 0}.record h3{margin:0;font-size:18px}.record p{margin:3px 0}.record .actions{display:flex;gap:6px;margin-top:10px}.record button{font-size:14px;padding:6px 10px}.badge{background:#e9f1f8;border-radius:8px;padding:2px 8px;display:inline-block;font-size:13px}.late{color:#bb3744}.statstrip{display:flex;gap:12px;flex-wrap:wrap;margin:16px 0}.statstrip span{padding:12px;background:#edf5fb;border-radius:12px}.statstrip strong{font-size:22px}dialog{border:0;border-radius:20px;max-width:580px;width:calc(100% - 28px);padding:22px;max-height:90vh;overflow:auto;color:var(--ink);box-shadow:0 15px 100px #234d7055}dialog::backdrop{background:#13263865}#map{height:380px;border-radius:15px;z-index:0}.mapnote{font-size:14px}.rowform{display:grid;grid-template-columns:1fr 1fr;gap:12px}.foot{text-align:center;font-size:13px}#notice{font-size:14px;overflow-wrap:anywhere}.error{color:#b33842}.choices{display:grid;gap:10px}.choice{padding:14px;border:1px solid var(--border);border-radius:12px}.choice button{margin:4px}.groupbar{background:#e7edf3;height:8px;border-radius:5px;margin-top:8px}.groupbar div{background:#df6e86;height:8px;border-radius:5px}.leaflet-popup-content{color:var(--ink)}@media(max-width:600px){header{margin:10px 10px 0;padding:22px 18px}header p{font-size:14px}.balloon{right:10%;opacity:.25}main{padding:12px}.card{padding:16px}.cards{gap:9px}.circle-card{padding:13px 4px}.circle-card .name{font-size:14px}.icon{font-size:18px}.ring{width:86px;height:86px}.ring span{font-size:20px}.caption{font-size:11px}.heading>small{font-size:12px}.rowform{grid-template-columns:1fr}.countdown strong{font-size:40px}h2{font-size:19px}.dates input{width:140px}}[hidden]{display:none!important}

.balloon{background:linear-gradient(90deg,#428ac0 0 25%,#fffdf8 25% 40%,#428ac0 40% 60%,#fffdf8 60% 75%,#428ac0 75%)}.b2{background:linear-gradient(90deg,#e9954e 0 25%,#fffdf8 25% 40%,#e9954e 40% 60%,#fffdf8 60% 75%,#e9954e 75%)}.balloon:after{content:'';position:absolute;width:14px;height:10px;background:#428ac0;bottom:-14px;left:calc(50% - 7px);border-radius:0 0 3px 3px}.b2:after{background:#e9954e}.cloud:before,.cloud:after{content:'';position:absolute;border-radius:50%;background:#effaff;width:45px;height:45px;top:-16px;left:10px}.cloud:after{left:40px;top:-24px}

#positionMap{height: min(48vh,400px);min-height:250px;border-radius:14px}#confirmPosition{width:100%;font-weight:650;margin-top:8px}

/* Keep iOS map labels and controls from becoming text selections. */
#map,#map *,#positionMap,#positionMap *{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}
#map .leaflet-control-zoom a,#positionMap .leaflet-control-zoom a{width:44px;height:44px;line-height:44px;font-size:26px}

.map-tools{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.map-tools button{min-height:44px;font-size:14px}

.place-search{margin:12px 0;padding:12px;background:#edf5fb;border-radius:14px}.place-search label{margin:0 0 6px;font-size:14px}.place-search-row{display:flex;gap:8px;align-items:center}.place-search-row input{min-width:0;flex:1;margin:0}.place-search-row button{white-space:nowrap;min-height:44px}.place-search>small{display:block;font-size:11px;margin-top:6px}.place-results>button{display:block;width:100%;text-align:left;margin-top:8px;background:white}.place-results small{display:block;font-weight:400;font-size:12px}.place-results p{font-size:14px;margin:8px 0}

.place-go{float:right;color:#2479ad;font-size:13px;font-weight:650;margin-left:8px}.search-locator{display:grid;place-items:center;border:3px solid white;border-radius:50%;background:#ec8743;color:white;box-shadow:0 0 0 4px #ec874344,0 2px 8px #234d7044;font-size:25px;line-height:1}.search-locator-label{border:2px solid #ec8743;color:#854a23;background:#fff8ef;text-align:center;pointer-events:none;white-space:normal;min-width:110px;max-width:220px}.search-locator-label:before{border-top-color:#ec8743!important}.search-locator-label small{color:#9c6944}

.owner-badge{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--owner-col);border-radius:20px;padding:2px 8px;margin:2px 4px 2px 0;background:#fffdf9;color:var(--ink);font-size:13px;line-height:1.5;white-space:nowrap}.owner-badge i{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--owner-col);flex:none}.owner-record{border-left:6px solid var(--owner-col)}.owner-legend{margin:12px 0}.owner-legend>small{display:block;margin-bottom:4px}.owner-legend .owner-badge{font-size:12px;padding:1px 7px}.gantt-hint{font-size:12px;color:var(--muted)}.ganttwrap{overflow:auto;max-height:520px;border:1px solid var(--border);border-radius:12px;overscroll-behavior:contain}.gantt-inner{min-width:0;width:calc(172px + var(--day-count)*44px)}.gantt-axis,.gantt-row{grid-template-columns:172px 1fr;gap:0;margin:0}.gantt-axis{position:sticky;top:0;z-index:5;background:#eaf1f7;align-items:stretch}.glabel{position:sticky;left:0;z-index:6;background:#eaf1f7;padding:12px 8px;font-size:13px;border-right:1px solid var(--border)}.gdates{display:grid;grid-template-columns:repeat(var(--day-count),44px)}.gday{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:6px 0;font-size:12px;border-left:1px solid var(--border)}.gday small{font-size:10px}.gday.is-weekend{background:#f2edf6}.gday.is-today{background:#c5e8f6;font-weight:700}.gday.is-today small{color:#234d70}.gantt-row{min-height:66px;align-items:center;border-top:1px solid var(--border)}.gantt-row .gname{position:sticky;left:0;z-index:2;background:#fffdf9;align-self:stretch;display:flex;flex-direction:column;justify-content:center;border-left:5px solid var(--owner-col);border-right:1px solid var(--border);border-radius:0;padding:7px 8px;font-size:13px;overflow-wrap:anywhere}.gname>small{font-size:11px}.gowner .owner-badge{font-size:11px;padding:0 5px}.gtrack{height:32px;border-radius:0;background:repeating-linear-gradient(to right,#edf3f8 0,#edf3f8 43px,#dfe9f2 43px,#dfe9f2 44px)}.gbar{top:4px;height:24px;border:1px solid;z-index:2;overflow:hidden;min-width:0;box-sizing:border-box;background:#e7edf3}.gbar.late{outline:2px dashed #bb3744;outline-offset:-1px}.gfill{height:100%;border-radius:2px}.todayband{position:absolute;top:0;height:100%;background:#428ac01c;pointer-events:none}.todayline{z-index:3;pointer-events:none}

.work-filters{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0}.work-filters label{flex:1;min-width:130px;margin:0;font-size:13px}.work-filters select{font-size:14px}.record-count{font-size:13px;color:var(--muted)}.record-pager{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:16px 0}.record-pager span{font-size:13px;white-space:nowrap}.task-note summary{font-size:14px;font-weight:500;margin-top:8px}.task-note p{font-size:14px;white-space:pre-wrap}.gantt-navigation{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin:12px 0}.gantt-navigation button{font-size:13px;min-height:44px}.gantt-navigation small{font-size:11px}.ganttwrap{max-height:360px;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;scrollbar-width:auto}.ganttwrap *{-webkit-user-select:none;user-select:none}.ganttwrap::-webkit-scrollbar{height:10px;width:8px}.ganttwrap::-webkit-scrollbar-thumb{background:#a3b9ca;border-radius:8px}.ganttwrap::-webkit-scrollbar-track{background:#edf3f8}
