:root{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif;color:#293746;background:#f7f9fc;font-synthesis:none}*{box-sizing:border-box}body{margin:0}h1,h2,h3,p{margin:0}img{display:block;max-width:100%}[hidden]{display:none!important}.board{width:min(100% - 48px,1160px);margin:0 auto;padding:36px 0 44px}.board-header{text-align:center;margin-bottom:30px}.logo{width:min(100%,400px);height:auto;margin:0 auto 20px}h1{font-size:30px;line-height:1.5;font-weight:700;overflow-wrap:anywhere}.section{background:#fff;border-radius:14px;padding:24px;margin-top:22px;box-shadow:0 3px 16px #253b5310;border:1px solid #e7ecf1}h2{font-size:22px;line-height:1.5;font-weight:600;margin-bottom:20px;overflow-wrap:anywhere}.empty-message{text-align:center;padding:60px 16px;color:#6a7683;font-size:16px}.connection-message{text-align:center;font-size:13px;color:#8a5c31;margin-top:20px}
/* The original board sequence: Gantt, stacked countdowns, then schedules. */
.countdown{padding:21px;border:1px solid #dfe6ee;border-radius:10px;background:#fff;margin-bottom:15px;display:flex;gap:18px}.countdown:last-child{margin-bottom:0}.project-image{width:80px;height:80px;flex-shrink:0;border-radius:8px;object-fit:contain;background:#fff}.countdown-content{flex:1;min-width:0}.countdown-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.countdown h3{font-size:21px;line-height:1.5;font-weight:600;overflow-wrap:anywhere}.state{font-size:12px;line-height:1.5;border-radius:5px;padding:4px 8px;background:#edf4fc;color:#426288;white-space:nowrap;flex-shrink:0}.state.upcoming{background:#fff4da;color:#806022}.state.finished{background:#edf0f3;color:#596471}.state.active{background:#eaf4ee;color:#376b4e}.countdown-time{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:4px 0 14px;line-height:1.5;color:#1668b2}.timer-label{font-size:17px}.time-digits{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;font-variant-numeric:tabular-nums}.time-block{display:inline-flex;align-items:baseline;gap:4px}.time-number{font-size:34px;font-weight:600;letter-spacing:-.5px;font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace}.time-unit{font-size:15px}.countdown-dates{font-size:14px;color:#5c6b7a;line-height:1.9;font-variant-numeric:tabular-nums}.countdown-remark{font-size:15px;line-height:1.85;margin-top:10px;color:#425161;white-space:pre-wrap;overflow-wrap:anywhere}.remark-image{max-width:min(100%,400px);max-height:400px;object-fit:contain;object-position:left center;margin-top:14px;border-radius:6px}.countdown.finished{background:#f8f9fb}.countdown.finished .countdown-time{color:#677482}.countdown.urgent{background:#bd2c3c;border-color:#bd2c3c;color:white}.countdown.urgent .countdown-time,.countdown.urgent .countdown-dates,.countdown.urgent .countdown-remark{color:#fff}.countdown.urgent .state{color:#952332;background:#fff}.schedule{padding:17px 20px;border:1px solid #dfe6ee;border-radius:9px;margin-bottom:12px}.schedule:last-child{margin-bottom:0}.schedule h3{font-size:18px;font-weight:600;line-height:1.6;overflow-wrap:anywhere}.schedule-time{font-size:17px;color:#1668b2;font-variant-numeric:tabular-nums;line-height:1.8;margin-top:4px}
#gantt-wrapper{position:relative;width:100%;overflow-x:auto;overflow-y:hidden;border:1px solid #dce3eb;border-radius:8px;scrollbar-width:thin;scrollbar-color:#b8c5d3 #f2f5f8;overscroll-behavior-x:contain}#gantt-wrapper:focus-visible{outline:3px solid #6b8ead;outline-offset:3px}#gantt-chart{position:relative;min-width:100%;background-color:#fcfdff;background-image:linear-gradient(to right,#e9eef4 1px,transparent 1px),linear-gradient(to bottom,#f0f3f7 1px,transparent 1px);background-size:80px 68px;background-position:0 48px}.gantt-scale{position:absolute;top:0;left:0;right:0;height:47px;background:#f6f8fb;border-bottom:1px solid #dce3eb;z-index:3}.gantt-label{position:absolute;top:14px;transform:translateX(-50%);font-size:12px;color:#586b7f;font-variant-numeric:tabular-nums;white-space:nowrap}.gantt-bar{position:absolute;height:56px;border-radius:7px;padding:8px 10px;display:flex;align-items:center;gap:9px;box-shadow:0 2px 5px #29415b10;border:1px solid #0000000d;overflow:hidden;background:#f6dc9c;color:#664913}.gantt-bar.orange{background:#f3c3a4;color:#733d18}.gantt-bar.blue{background:#c2d9f9;color:#254b7c}.gantt-bar.red{background:#efc2c8;color:#7d2f3c}.gantt-bar.gray{background:#e1e6ec;color:#586574}.gantt-bar img{width:36px;height:36px;flex-shrink:0;object-fit:contain;border-radius:5px;background:#ffffffb3}.gantt-bar-content{min-width:0;flex:1}.gantt-bar-name{display:block;font-size:13px;font-weight:600;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gantt-bar-date{display:block;font-size:11px;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}.current-line{position:absolute;top:47px;bottom:0;width:2px;background:#b62a3e;z-index:2;pointer-events:none}.current-label{position:absolute;top:0;left:50%;transform:translateX(-50%);background:#b62a3e;color:#fff;border-radius:0 0 4px 4px;padding:3px 7px;font-size:10px;white-space:nowrap}.gantt-bar.milestone{border-left:3px solid currentColor}
@media(min-width:1700px){.board{width:min(100% - 100px,1440px)}.countdown-time{gap:15px}.time-number{font-size:40px}.countdown h3{font-size:24px}.countdown-dates{font-size:16px}.countdown-remark{font-size:17px}.gantt-bar-name{font-size:14px}}
@media(max-width:768px){.board{width:calc(100% - 28px);padding:24px 0 30px}.board-header{margin-bottom:23px}.logo{width:300px;margin-bottom:16px}h1{font-size:25px}.section{padding:18px;margin-top:17px;border-radius:11px}h2{font-size:20px;margin-bottom:16px}.countdown{padding:16px;gap:13px}.project-image{width:62px;height:62px}.countdown h3{font-size:19px}.countdown-heading{gap:10px}.countdown-time{gap:5px;margin-bottom:10px}.timer-label{font-size:15px}.time-number{font-size:29px}.time-unit{font-size:13px}.time-digits{gap:8px}.countdown-dates{font-size:13px}.countdown-remark{font-size:14px}.state{font-size:11px;padding:3px 6px}.gantt-label{font-size:11px}.schedule h3{font-size:17px}.schedule-time{font-size:16px}}
@media(max-width:480px){.board{width:calc(100% - 20px);padding:20px 0 26px}.logo{width:260px}h1{font-size:22px}.board-header{margin-bottom:20px}.section{padding:14px;margin-top:14px;border-radius:10px}h2{font-size:18px;margin-bottom:14px}.countdown{padding:14px;display:block}.project-image{width:56px;height:56px;margin-bottom:12px}.countdown h3{font-size:18px}.countdown-time{display:block;margin-top:8px}.timer-label{display:block;margin-bottom:3px;font-size:14px}.time-number{font-size:28px}.time-unit{font-size:12px}.time-digits{gap:8px}.time-block{gap:3px}.countdown-dates{font-size:12px;line-height:2}.countdown-remark{font-size:13px}.remark-image{max-height:320px}.state{font-size:10px}.gantt-bar-name{font-size:12px}.gantt-bar-date{font-size:10px}.gantt-bar img{width:32px;height:32px}.empty-message{font-size:14px;padding:42px 12px}.schedule{padding:13px}.schedule h3{font-size:16px}.schedule-time{font-size:15px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
/* Keep the display plain and legible; the countdown already communicates its state. */
.section{border-radius:8px;box-shadow:none}.countdown,.schedule{border-radius:6px}.countdown-dates{font-size:15px}.countdown-remark{font-size:16px}.gantt-bar{border-radius:5px;box-shadow:none}.gantt-bar-name{font-size:15px;line-height:1.6}.gantt-label{font-size:13px}.current-label{font-size:12px}.connection-message{font-size:14px}
@media(max-width:768px){.countdown-dates,.countdown-remark{font-size:15px}.timer-label{font-size:16px}.time-unit{font-size:15px}.gantt-bar-name{font-size:14px}.gantt-label{font-size:12px}}
@media(max-width:480px){.countdown-dates,.countdown-remark{font-size:14px}.countdown h3{font-size:20px}.time-number{font-size:30px}.time-unit{font-size:14px}.gantt-bar-name{font-size:14px}.gantt-label{font-size:12px}.current-label{font-size:12px}.schedule-time{font-size:16px}}
.countdown-source{margin:10px 0 0;font-size:16px}.countdown-source a{color:#245747;text-underline-offset:3px}.countdown-source a:hover{color:#173e32}
