:root { --ink:#183126; --muted:#647269; --green:#1f5a3f; --deep:#123d2a; --soft:#dce9dc; --cream:#f5f3eb; --paper:#fffefa; --line:#dfe5dd; --amber:#c7803b; --red:#b45b4d; --blue:#577b86; }
* { box-sizing:border-box; }
html { scroll-behavior:smooth; }
body { margin:0; background:var(--cream); color:var(--ink); font-family:"Noto Sans SC","Microsoft YaHei","PingFang SC",system-ui,sans-serif; -webkit-font-smoothing:antialiased; }
button,input,select,textarea { font:inherit; }
button { color:inherit; }

.app-shell { min-height:100vh; display:grid; grid-template-columns:252px minmax(0,1fr); }
.sidebar { position:fixed; inset:0 auto 0 0; width:252px; z-index:20; display:flex; flex-direction:column; padding:30px 22px 22px; background:var(--deep); color:white; overflow:auto; }
.brand { display:flex; align-items:center; gap:12px; color:inherit; text-decoration:none; padding:0 8px 28px; }
.brand-seal { width:38px; height:38px; border-radius:12px 12px 16px 12px; display:grid; place-items:center; background:#e4bd6c; color:var(--deep); font:800 20px "Songti SC",serif; }
.brand strong { display:block; font:700 21px "Songti SC",serif; letter-spacing:.16em; }.brand small { display:block; opacity:.58; font-size:11px; margin-top:2px; }
.side-nav { display:grid; gap:6px; }.nav-label { margin:0 12px 10px; opacity:.42; font-size:10px; letter-spacing:.18em; }
.side-nav button { width:100%; border:0; background:transparent; color:#ffffffad; padding:11px 12px; display:flex; align-items:center; gap:12px; border-radius:11px; cursor:pointer; text-align:left; font-size:14px; }
.side-nav button:hover,.side-nav button.active { background:#ffffff18; color:white; }.side-nav button.active { box-shadow:inset 3px 0 #e4bd6c; }
.nav-mark { width:27px; height:27px; display:grid; place-items:center; border:1px solid #ffffff29; border-radius:8px; font-size:11px; }
.sidebar-note { margin-top:auto; padding:18px; border:1px solid #ffffff1a; border-radius:16px; background:#ffffff0e; }.sidebar-note>span { display:block; color:#e4bd6c; font-size:10px; letter-spacing:.12em; margin-bottom:8px; }.sidebar-note strong { font-size:14px; }.sidebar-note p { margin:7px 0 14px; font-size:11px; line-height:1.65; opacity:.56; }
.week-progress { height:4px; background:#ffffff1a; border-radius:8px; overflow:hidden; }.week-progress i { display:block; width:72%; height:100%; background:#e4bd6c; }.sidebar-note small { display:block; opacity:.5; margin-top:7px; font-size:10px; }
.profile { display:flex; align-items:center; gap:10px; padding:21px 5px 0; }.avatar { width:34px; height:34px; display:grid; place-items:center; background:#3e7258; border-radius:50%; font-weight:700; }.profile strong,.profile small { display:block; }.profile strong { font-size:12px; }.profile small { opacity:.46; font-size:10px; }.profile button { margin-left:auto; border:0; background:none; color:#ffffff80; }

.workspace { grid-column:2; min-width:0; }.topbar { height:112px; display:flex; align-items:center; gap:17px; padding:20px 38px; border-bottom:1px solid #1f5a3f1a; background:#f5f3ebdb; backdrop-filter:blur(18px); position:sticky; top:0; z-index:15; }
.date-chip { width:54px; height:64px; flex:none; border:1px solid #d9dfd7; border-radius:14px; background:var(--paper); display:grid; grid-template-columns:1fr 1fr; place-content:center; padding:8px 7px; }.date-chip span,.date-chip b { font-size:17px; line-height:1; text-align:center; }.date-chip span { color:var(--green); }.date-chip b { border-left:1px solid var(--line); }.date-chip small { grid-column:1/-1; text-align:center; color:var(--muted); font-size:9px; margin-top:7px; }
.topbar-copy p { margin:0 0 4px; color:var(--muted); font-size:12px; }.topbar-copy h1 { margin:0; font:25px "Songti SC",serif; letter-spacing:.05em; }.topbar-actions { margin-left:auto; display:flex; gap:9px; }.mobile-brand { display:none; }
.primary-button,.ghost-button { border:0; border-radius:11px; min-height:42px; padding:0 17px; display:inline-flex; align-items:center; justify-content:center; gap:7px; cursor:pointer; }.primary-button { background:var(--green); color:white; box-shadow:0 8px 20px #1f5a3f2e; }.primary-button:hover { transform:translateY(-1px); }.ghost-button { background:var(--paper); border:1px solid var(--line); color:var(--muted); }
.view-content { max-width:1460px; margin:auto; padding:28px 38px 52px; }
.weather-strip { display:grid; grid-template-columns:1.2fr repeat(3,1fr) auto; align-items:center; gap:18px; padding:19px 24px; background:linear-gradient(110deg,#e3edde,#edf1e6 68%,#f5ead5); border:1px solid #1f5a3f17; border-radius:17px; }.weather-main { display:flex; align-items:center; gap:13px; }.sun-disc { width:38px; height:38px; border-radius:50%; background:#e4ae52; box-shadow:0 0 0 8px #e4ae5224; }.weather-main div { display:flex; align-items:baseline; gap:8px; }.weather-main strong { font:28px Georgia,serif; }.weather-main span { color:var(--muted); font-size:12px; }.weather-detail { padding-left:18px; border-left:1px solid #1f5a3f1f; }.weather-detail span,.weather-detail strong { display:block; }.weather-detail span { color:var(--muted); font-size:10px; margin-bottom:4px; }.weather-detail strong { font-size:13px; }.weather-strip>p { margin:0; color:var(--muted); font-size:9px; }
.stats-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin:18px 0; }.stat-card { position:relative; overflow:hidden; min-height:132px; padding:20px; border:1px solid var(--line); border-radius:15px; background:var(--paper); box-shadow:0 10px 25px #18312609; }.stat-card:after { content:""; position:absolute; width:72px; height:72px; right:-24px; top:-28px; border-radius:50%; opacity:.12; }.stat-green:after{background:var(--green)}.stat-amber:after{background:var(--amber)}.stat-red:after{background:var(--red)}.stat-blue:after{background:var(--blue)}.stat-label { font-size:11px; color:var(--muted); }.stat-value { font:34px/1 Georgia,serif; margin:13px 0 9px; }.stat-value span { font-size:12px; color:var(--muted); }.stat-note { color:var(--muted); font-size:10px; }
.dashboard-grid { display:grid; grid-template-columns:1.2fr .8fr; gap:16px; }.panel { background:var(--paper); border:1px solid var(--line); border-radius:17px; box-shadow:0 12px 30px #1831260a; }.health-panel,.task-panel,.trend-panel,.record-panel { padding:24px; }.panel-heading,.section-heading { display:flex; justify-content:space-between; gap:16px; align-items:flex-start; }.panel-heading h2,.section-heading h2 { margin:3px 0 0; font:18px "Songti SC",serif; }.eyebrow { color:var(--green); font-size:9px; letter-spacing:.14em; }.text-button { border:0; background:none; color:var(--green); font-size:10px; padding:5px 0; cursor:pointer; }
.health-layout { display:grid; grid-template-columns:162px 1fr; align-items:center; gap:25px; padding:25px 8px 18px; }.health-ring { width:142px; height:142px; border-radius:50%; display:grid; place-items:center; background:conic-gradient(var(--green) 0 91%,#e5eae3 91%); position:relative; }.health-ring:after { content:""; position:absolute; inset:12px; background:var(--paper); border-radius:50%; }.health-ring div { position:relative; z-index:1; text-align:center; }.health-ring strong,.health-ring span { display:block; }.health-ring strong { font:38px/1 Georgia,serif; }.health-ring span { color:var(--muted); font-size:9px; margin-top:6px; }.health-metrics { display:grid; gap:12px; }.health-metrics div { display:flex; justify-content:space-between; border-bottom:1px solid #edf0eb; padding-bottom:10px; }.health-metrics span,.health-metrics strong { font-size:10px; }.health-metrics span { color:var(--muted); }.dot { display:inline-block; width:7px; height:7px; border-radius:50%; margin-right:7px; }.dot-green{background:var(--green)}.dot-blue{background:var(--blue)}.dot-amber{background:var(--amber)}.dot-red{background:var(--red)}
.health-tip { display:flex; gap:10px; background:#f2f6ef; padding:12px 14px; border-radius:10px; }.health-tip span { color:var(--green); flex:none; font-size:9px; font-weight:700; }.health-tip p { margin:0; color:var(--muted); font-size:10px; line-height:1.55; }
.count-pill { padding:5px 9px; border-radius:99px; background:var(--soft); color:var(--green); font-size:10px; }.task-list { margin-top:17px; }.task-row { position:relative; display:flex; align-items:center; gap:11px; padding:13px 0; border-bottom:1px solid #edf0eb; cursor:pointer; }.task-row input { position:absolute; opacity:0; }.check-ui { width:21px; height:21px; flex:none; display:grid; place-items:center; border:1px solid #cdd7cf; border-radius:7px; color:transparent; font-size:11px; }.task-row input:checked+.check-ui { background:var(--green); border-color:var(--green); color:white; }.task-copy strong,.task-copy small { display:block; }.task-copy strong { font-size:11px; }.task-copy small { color:var(--muted); font-size:9px; margin-top:3px; }.task-row.done .task-copy { opacity:.48; text-decoration:line-through; }.urgent-tag { margin-left:auto; padding:4px 7px; background:#f5ded7; color:var(--red); font-size:8px; border-radius:5px; }.add-task { width:100%; border:1px dashed #d5ddd5; background:#fafbf8; color:var(--green); border-radius:9px; padding:9px; margin-top:15px; font-size:9px; cursor:pointer; }
.legend { display:flex; gap:12px; color:var(--muted); font-size:9px; }.legend span{display:flex;align-items:center;gap:5px}.bar-key{width:7px;height:10px;background:var(--green);border-radius:2px}.line-key{width:10px;height:2px;background:var(--amber)}.chart-wrap { height:180px; display:flex; gap:10px; margin-top:22px; }.axis-labels { display:flex; flex-direction:column; justify-content:space-between; color:#9aa59d; font-size:8px; padding-bottom:21px; }.bar-chart { flex:1; display:grid; grid-template-columns:repeat(7,1fr); gap:12px; border-bottom:1px solid var(--line); background:repeating-linear-gradient(to bottom,transparent 0,transparent 39px,#edf0eb 40px); }.bar-day { display:grid; grid-template-rows:1fr 20px; text-align:center; }.bar-track { display:flex; align-items:flex-end; justify-content:center; }.bar-track span { width:min(24px,70%); background:linear-gradient(var(--green),#6b9578); border-radius:6px 6px 2px 2px; }.bar-day small { align-self:end; color:var(--muted); font-size:9px; }.chart-caption { margin:14px 0 0; color:var(--muted); font-size:9px; }
.mini-timeline { margin-top:15px; }.mini-record { display:grid; grid-template-columns:14px 1fr; gap:8px; padding:10px 0; border-bottom:1px solid #edf0eb; }.record-dot { width:7px;height:7px;border-radius:50%;margin-top:4px;position:relative}.record-dot:after{content:"";position:absolute;width:1px;height:38px;background:var(--line);left:3px;top:8px}.mini-record:last-child .record-dot:after{display:none}.mini-record div{display:grid;grid-template-columns:1fr auto;gap:3px 8px}.mini-record span{font-size:8px;color:var(--green)}.mini-record strong{grid-column:1;font-size:10px}.mini-record small{grid-column:2;grid-row:1/span 2;align-self:center;color:var(--muted);font-size:8px}
.section-block { margin-top:24px; }.section-heading { margin-bottom:13px; align-items:end; }.tree-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; }.tree-card { position:relative; overflow:hidden; padding:20px; border:1px solid var(--line); border-radius:15px; background:var(--paper); }.tree-card:before { content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--green)}.tree-peach:before{background:#c78068}.tree-berry:before{background:#69758e}.tree-card-head{display:flex;justify-content:space-between;gap:12px}.tree-code{font:9px monospace;color:var(--green)}.tree-card h3{margin:6px 0 4px;font:15px "Songti SC",serif}.tree-card p{margin:0;color:var(--muted);font-size:9px}.stage-pill{align-self:start;padding:5px 8px;border-radius:99px;background:#eff4ec;color:var(--green);font-size:8px;white-space:nowrap}.health-row{display:flex;justify-content:space-between;margin-top:19px;color:var(--muted);font-size:9px}.health-row strong{color:var(--ink)}.meter{height:4px;background:#e9ede8;border-radius:5px;margin:7px 0 17px;overflow:hidden}.meter span{display:block;height:100%;background:var(--green)}.tree-details{display:grid;grid-template-columns:.8fr 1.4fr;gap:10px}.tree-details div{padding-top:9px;border-top:1px solid #edf0eb}.tree-details span,.tree-details strong{display:block}.tree-details span{color:var(--muted);font-size:8px}.tree-details strong{margin-top:4px;font-size:9px}
.inner-view{padding-top:32px}.inner-hero{min-height:190px;display:flex;align-items:center;justify-content:space-between;gap:30px;padding:34px 38px;border-radius:19px;background:linear-gradient(115deg,var(--deep),#2e694c);color:white;position:relative;overflow:hidden}.inner-hero:after{content:"";position:absolute;right:-40px;bottom:-90px;width:290px;height:290px;border:44px solid #ffffff0f;border-radius:50%}.inner-hero>*{position:relative;z-index:1}.inner-hero .eyebrow{color:#e4bd6c}.inner-hero h2{margin:8px 0;font:28px "Songti SC",serif}.inner-hero p{margin:0;opacity:.65;font-size:11px}.inner-hero .primary-button{background:#e4bd6c;color:var(--deep);box-shadow:none}.compact-hero{min-height:155px}.filter-row{display:flex;align-items:center;gap:8px;margin:20px 0 14px}.filter-row button{border:1px solid var(--line);background:var(--paper);padding:8px 13px;border-radius:9px;font-size:9px;cursor:pointer}.filter-row button.active{background:var(--green);color:white}.filter-row i{flex:1}.tree-grid-large{grid-template-columns:repeat(3,1fr)}
.record-layout{display:grid;grid-template-columns:210px 1fr;gap:16px;margin-top:18px;align-items:start}.record-filter{padding:19px;display:grid;gap:5px}.record-filter>strong{font-size:11px;margin-bottom:8px}.record-filter button{display:flex;justify-content:space-between;border:0;background:none;border-radius:8px;padding:9px 10px;font-size:9px;cursor:pointer}.record-filter button.active{background:var(--soft);color:var(--green);font-weight:700}.records-feed{padding:23px}.feed-head{display:flex;justify-content:space-between;padding-bottom:15px;border-bottom:1px solid var(--line)}.feed-head h3{margin:0;font:18px "Songti SC",serif}.feed-head span{color:var(--muted);font-size:9px}.feed-record{display:grid;grid-template-columns:78px 1fr;gap:20px;padding:20px 0;border-bottom:1px solid #edf0eb}.feed-date{padding:10px;border-radius:10px;align-self:start;background:#e8f0e5}.feed-date span,.feed-date small{display:block}.feed-date span{font-size:10px;font-weight:700}.feed-date small{color:var(--muted);font-size:8px;margin-top:4px}.feed-amber{background:#f5e6cf}.feed-blue{background:#e2ebee}.feed-content>div{display:flex;gap:9px;align-items:center}.feed-content strong{font-size:11px}.record-type{padding:4px 7px;background:#f0f3ef;border-radius:5px;color:var(--green);font-size:8px}.feed-content p{margin:9px 0;color:var(--muted);font-size:10px;line-height:1.65}.feed-content button{border:0;background:none;padding:0;color:var(--green);font-size:9px}
.task-board{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;margin-top:18px;align-items:start}.board-column{padding:17px;border-radius:15px;background:#e9ede6;min-height:450px}.board-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:13px}.board-head h3{margin:0;font:16px "Songti SC",serif}.board-head span{width:23px;height:23px;display:grid;place-items:center;background:#ffffff99;border-radius:50%;font-size:9px}.board-task{padding:16px;border:1px solid #1f5a3f14;border-radius:12px;background:var(--paper);margin-bottom:9px;box-shadow:0 7px 18px #1831260a}.board-task.done{opacity:.55}.board-task-top{display:flex;justify-content:space-between}.priority-dot{width:7px;height:7px;border-radius:50%;background:var(--green)}.priority-dot.urgent{background:var(--red)}.board-task-top button{border:0;background:none;color:var(--muted)}.board-task>strong{display:block;font-size:11px;margin-top:10px}.board-task>p{color:var(--muted);font-size:9px;margin:5px 0 14px}.board-task-foot{display:flex;justify-content:space-between;padding-top:10px;border-top:1px solid #edf0eb}.board-task-foot span,.board-task-foot small{color:var(--muted);font-size:8px}
.modal-backdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px;background:#0a1e148c;backdrop-filter:blur(8px)}.record-modal{width:min(520px,100%);background:var(--paper);border-radius:20px;padding:28px;box-shadow:0 30px 80px #00000040}.modal-head{display:flex;justify-content:space-between;align-items:start}.modal-head h2{margin:5px 0 0;font:22px "Songti SC",serif}.modal-head>button{width:34px;height:34px;border:0;border-radius:50%;background:#edf1eb;font-size:20px;cursor:pointer}.record-modal form{display:grid;gap:14px;margin-top:22px}.record-modal label{display:grid;gap:7px;color:var(--muted);font-size:10px}.record-modal select,.record-modal textarea{width:100%;border:1px solid var(--line);border-radius:10px;background:#fafbf8;padding:11px 12px;outline:none}.record-modal textarea{resize:vertical;line-height:1.6}.modal-actions{display:flex;justify-content:flex-end;gap:9px}.mobile-nav{display:none}

@media(max-width:1100px){.app-shell{grid-template-columns:210px minmax(0,1fr)}.sidebar{width:210px;padding-inline:15px}.view-content,.topbar{padding-inline:24px}.weather-strip{grid-template-columns:1.2fr repeat(2,1fr)}.weather-detail:nth-of-type(4),.weather-strip>p{display:none}.stats-grid{grid-template-columns:repeat(2,1fr)}.tree-grid,.tree-grid-large{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.app-shell{display:block}.sidebar{display:none}.workspace{min-height:100vh;padding-bottom:70px}.topbar{height:84px;padding:13px 16px;gap:10px}.mobile-brand{display:flex;align-items:center;gap:8px}.mobile-brand .brand-seal{width:32px;height:32px;font-size:16px}.date-chip,.topbar-copy p,.ghost-button{display:none}.topbar-copy h1{font-size:18px}.topbar-actions{margin-left:auto}.primary-button{min-height:38px;padding-inline:13px;font-size:11px}.view-content{padding:17px 14px 30px}.weather-strip{grid-template-columns:1fr 1fr;gap:13px;padding:16px}.weather-main{grid-column:1/-1}.weather-detail{padding:10px 0 0;border:0;border-top:1px solid #1f5a3f1f}.stats-grid{grid-template-columns:repeat(2,1fr);gap:9px}.stat-card{min-height:118px;padding:16px}.stat-value{font-size:29px}.dashboard-grid{grid-template-columns:1fr}.health-panel,.task-panel,.trend-panel,.record-panel{padding:19px}.health-layout{grid-template-columns:120px 1fr;gap:15px;padding-inline:0}.health-ring{width:112px;height:112px}.health-ring strong{font-size:30px}.tree-grid,.tree-grid-large{grid-template-columns:1fr}.inner-hero{min-height:170px;padding:25px;align-items:flex-start;flex-direction:column}.inner-hero h2{font-size:23px}.filter-row{overflow:auto}.filter-row button{white-space:nowrap}.filter-row i{display:none}.record-layout{grid-template-columns:1fr}.record-filter{display:flex;overflow:auto}.record-filter>strong{display:none}.record-filter button{flex:none;gap:12px}.feed-record{grid-template-columns:65px 1fr;gap:13px}.task-board{grid-template-columns:1fr}.board-column{min-height:auto}.mobile-nav{position:fixed;left:0;right:0;bottom:0;z-index:50;display:grid;grid-template-columns:repeat(4,1fr);padding:7px 7px max(7px,env(safe-area-inset-bottom));background:#fffefaf0;backdrop-filter:blur(18px);border-top:1px solid var(--line)}.mobile-nav button{border:0;background:none;display:grid;place-items:center;gap:2px;padding:4px;color:var(--muted);font-size:8px}.mobile-nav span{width:23px;height:23px;display:grid;place-items:center;border-radius:7px;font-size:9px}.mobile-nav button.active{color:var(--green);font-weight:700}.mobile-nav button.active span{background:var(--soft)}.record-modal{padding:22px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}

/* 气象数据层：在生态视觉中加入少量科技感 */
.live-chip{display:inline-flex;align-items:center;gap:7px;padding:8px 11px;border:1px solid #6b8f9238;border-radius:99px;color:#527278;background:#f8fbf8;font:9px ui-monospace,monospace}.live-chip i{width:6px;height:6px;border-radius:50%;background:#4da681;box-shadow:0 0 0 4px #4da6811f}
.climate-hero{position:relative;overflow:hidden;display:grid;grid-template-columns:1.15fr .42fr 1fr;gap:26px;align-items:center;min-height:245px;padding:34px;border-radius:20px;color:white;background:linear-gradient(120deg,#123d2a,#1c513b 58%,#315e60);box-shadow:0 18px 42px #123d2a20}.climate-hero:after{content:"";position:absolute;inset:0;background-image:linear-gradient(#ffffff09 1px,transparent 1px),linear-gradient(90deg,#ffffff09 1px,transparent 1px);background-size:32px 32px;mask-image:linear-gradient(90deg,transparent 20%,#000)}.climate-hero>*{position:relative;z-index:1}.climate-copy .eyebrow{color:#a9d5d0;font:9px ui-monospace,monospace}.climate-copy h2{margin:10px 0 8px;font:30px "Songti SC",serif}.climate-copy p{margin:0;color:#ffffffb5;font-size:12px;line-height:1.75}.climate-copy small{display:block;margin-top:22px;color:#ffffff6e;font:8px ui-monospace,monospace}.temperature{padding-left:25px;border-left:1px solid #ffffff20}.temperature span,.temperature em{display:block;color:#ffffff8f;font-size:9px;font-style:normal}.temperature strong{display:block;margin:8px 0;font:58px/1 Georgia,serif}.temperature sup{font-size:18px}.sensor-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.sensor-grid div{padding:14px;border:1px solid #ffffff16;border-radius:12px;background:#ffffff0b}.sensor-grid span,.sensor-grid small{display:block;color:#ffffff82;font-size:8px}.sensor-grid strong{display:block;margin:7px 0 5px;font:16px ui-monospace,monospace}.sensor-grid small{color:#b8ddd1}
.forecast-row{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:14px 0 18px}.forecast-row article{display:grid;grid-template-columns:1fr auto;gap:4px 12px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--paper)}.forecast-row article.active{border-color:#6b8f9266;background:#f2f7f2}.forecast-row span,.forecast-row strong{font-size:10px}.forecast-row small,.forecast-row em{color:var(--muted);font-size:8px;font-style:normal}.forecast-row em{grid-column:2;grid-row:2}.advice-panel{padding:24px}.ai-badge{padding:5px 8px;border:1px solid #577b8650;border-radius:99px;color:var(--blue);font:8px ui-monospace,monospace}.advice-list{margin-top:15px}.advice-list article{display:grid;grid-template-columns:31px 1fr auto;gap:12px;padding:14px 0;border-bottom:1px solid #edf0eb}.advice-list b{width:27px;height:27px;display:grid;place-items:center;border:1px solid #6b8f9250;border-radius:8px;color:var(--blue);font:9px ui-monospace,monospace}.advice-list strong{font-size:11px}.advice-list p{margin:5px 0 0;color:var(--muted);font-size:9px;line-height:1.6}.advice-list article>span{padding:4px 7px;border-radius:5px;background:var(--soft);color:var(--green);font-size:8px}.two-tree-grid{grid-template-columns:repeat(2,1fr)}.hero-count{font:64px/1 Georgia,serif;color:#e4bd6c;text-align:center}.hero-count small{display:block;color:#ffffff80;font:8px ui-monospace,monospace;letter-spacing:.25em}
@media(max-width:1100px){.climate-hero{grid-template-columns:1fr .45fr}.sensor-grid{grid-column:1/-1;grid-template-columns:repeat(4,1fr)}}
@media(max-width:760px){.live-chip{display:none}.climate-hero{display:block;padding:24px}.temperature{margin:20px 0;padding:17px 0 0;border-left:0;border-top:1px solid #ffffff20}.temperature strong{font-size:48px}.sensor-grid{grid-template-columns:1fr 1fr}.forecast-row{grid-template-columns:1fr 1fr}.two-tree-grid{grid-template-columns:1fr}.hero-count{font-size:48px}}

/* 科技感提升：高字重、多字体、设备刻度与署名铭牌 */
body{font-weight:600;background-color:var(--cream);background-image:linear-gradient(#577b8608 1px,transparent 1px),linear-gradient(90deg,#577b8608 1px,transparent 1px);background-size:48px 48px}
strong,b,h1,h2,h3{font-weight:800!important}.brand strong,.topbar-copy h1,.panel-heading h2,.section-heading h2,.tree-card h3,.inner-hero h2,.modal-head h2{font-family:"STKaiti","KaiTi","Songti SC",serif;font-weight:900!important}.eyebrow,.tree-code,.nav-label,.live-chip,.ai-badge,.maker,.climate-copy small,.sensor-grid strong{font-family:"Cascadia Mono","JetBrains Mono","Consolas",monospace;font-weight:700}.side-nav button,.task-copy strong,.advice-list strong,.tree-details strong,.feed-content strong{font-weight:800}
.workspace:before{content:"SYS / HOUYIYUAN / 02-TREES";position:fixed;right:18px;bottom:14px;z-index:3;color:#315e6023;font:700 9px "Cascadia Mono",monospace;letter-spacing:.14em;pointer-events:none}.workspace:after{content:"24园艺2班 · 邓王鑫  /  SITE OPERATOR";position:fixed;right:18px;top:8px;z-index:30;padding:7px 11px;border:1px solid #8bb9b04a;border-radius:7px;color:var(--deep);background:#f8fbf5e8;backdrop-filter:blur(10px);box-shadow:0 7px 20px #123d2a18;font:800 9px "Microsoft YaHei",sans-serif;letter-spacing:.05em}
.panel,.tree-card,.forecast-row article{position:relative}.panel:before,.tree-card:after,.forecast-row article:after{content:"";position:absolute;top:-1px;right:-1px;width:15px;height:15px;border-top:2px solid #6da3a0;border-right:2px solid #6da3a0;opacity:.6;border-radius:0 15px 0 0}.climate-hero:before{content:"LIVE ENVIRONMENT FEED";position:absolute;right:18px;bottom:12px;z-index:2;color:#b8ddd172;font:700 8px "Cascadia Mono",monospace;letter-spacing:.18em}.temperature strong{text-shadow:0 0 26px #b8ddd12c}.sensor-grid div{box-shadow:inset 0 0 0 1px #b8ddd108}.nav-mark{font-family:"Cascadia Mono",monospace;font-weight:800}
.maker{z-index:30;display:grid;gap:3px;padding:8px 10px;border:1px solid #8bb9b04a;border-radius:7px;background:#ffffff0a;box-shadow:inset 0 0 18px #8bb9b00b}.maker span{color:#8db9b2;font-size:7px;letter-spacing:.15em}.maker strong{color:#fff;font-family:"Microsoft YaHei","PingFang SC",sans-serif;font-size:9px;letter-spacing:.05em}.maker-left{margin:17px 5px 0}
@media(max-width:760px){body{background-size:32px 32px}.maker-left{position:fixed;left:10px;bottom:68px;display:grid;margin:0;padding:6px 8px;background:#123d2ae8}.maker-left span{display:none}.maker-left strong{font-size:8px}.workspace:after{right:10px;top:4px;padding:5px 7px;font-size:7px}.workspace:before{display:none}.topbar{padding-top:24px}}

/* 首次打开播放一次的天气情绪动效 */
.climate-copy h2:after{content:"  🌿";display:inline-block;font-family:"Segoe UI Emoji",sans-serif;font-size:.72em;animation:leafHello 1.5s ease-out 1 both}.temperature{overflow:visible}.temperature:before{content:"🌱  🌼";position:absolute;left:14px;top:48px;z-index:-1;white-space:pre;font-family:"Segoe UI Emoji",sans-serif;font-size:18px;opacity:0;animation:comfortBloom 2.2s .25s cubic-bezier(.2,.8,.2,1) 1 both}.temperature strong{transform-origin:50% 80%;animation:happyNumber 1.25s .35s ease-in-out 1 both}.temperature em:after{content:"  😊";font-family:"Segoe UI Emoji",sans-serif}.sensor-grid div{position:relative;overflow:hidden}.sensor-grid div:after{position:absolute;right:9px;top:7px;font-family:"Segoe UI Emoji",sans-serif;font-size:15px;opacity:0;animation:emojiPop .8s ease-out 1 forwards}.sensor-grid div:nth-child(1):after{content:"💧";animation-delay:.45s}.sensor-grid div:nth-child(2):after{content:"🌧️";animation-delay:.65s}.sensor-grid div:nth-child(3):after{content:"🍃";animation-delay:.85s}.sensor-grid div:nth-child(4):after{content:"☀️";animation-delay:1.05s}
.forecast-row article{overflow:hidden;padding-right:42px}.forecast-row article:before{position:absolute;right:10px;top:8px;font-family:"Segoe UI Emoji",sans-serif;font-size:20px;transform:translateY(-24px);opacity:0;animation:weatherArrive 1s ease-out 1 forwards}.forecast-row article:nth-child(1):before{content:"🌧️";animation-delay:.35s}.forecast-row article:nth-child(2):before{content:"⛅";animation-delay:.55s}.forecast-row article:nth-child(3):before{content:"⛈️";animation-delay:.75s}.forecast-row article:nth-child(4):before{content:"☁️";animation-delay:.95s}.forecast-row article:nth-child(1){background-image:repeating-linear-gradient(105deg,transparent 0,transparent 8px,#7894a018 9px,#7894a018 10px);animation:rainTint 2.2s ease-out 1 both}.forecast-row article:nth-child(3){animation:stormFlash 1.8s .7s ease-out 1 both}.forecast-row article:nth-child(1) em:after,.forecast-row article:nth-child(3) em:after{content:"  ⋮⋮";display:inline-block;color:#7596a4;font:bold 13px monospace;letter-spacing:2px;animation:rainFall .8s .8s ease-in 2 both}
.advice-list article:nth-child(1) strong:after{content:"  ☔"}.advice-list article:nth-child(2) strong:after{content:"  🔍"}.advice-list article:nth-child(3) strong:after{content:"  🍂"}.task-panel h2:after{content:"  ✅";font-family:"Segoe UI Emoji",sans-serif;font-size:.75em}.tree-card:first-child h3:after{content:"  🌿"}.tree-card:last-child h3:after{content:"  🌸"}
@keyframes leafHello{0%{opacity:0;transform:translate(-7px,8px) rotate(-18deg)}65%{opacity:1;transform:translate(2px,-2px) rotate(9deg)}100%{opacity:1;transform:none}}
@keyframes comfortBloom{0%{opacity:0;transform:scale(.25) translateY(18px)}65%{opacity:.9;transform:scale(1.14) translateY(-4px)}100%{opacity:.72;transform:scale(1) translateY(0)}}
@keyframes happyNumber{0%,100%{transform:none}25%{transform:rotate(-3deg) translateY(-2px)}50%{transform:rotate(3deg) translateY(1px)}75%{transform:rotate(-1deg)}}
@keyframes emojiPop{0%{opacity:0;transform:scale(.25) rotate(-20deg)}75%{opacity:1;transform:scale(1.2) rotate(8deg)}100%{opacity:.9;transform:scale(1)}}
@keyframes weatherArrive{0%{opacity:0;transform:translateY(-24px)}70%{opacity:1;transform:translateY(3px)}100%{opacity:.95;transform:none}}
@keyframes rainFall{0%{opacity:0;transform:translateY(-6px)}50%{opacity:1}100%{opacity:0;transform:translateY(7px)}}
@keyframes rainTint{0%{filter:saturate(.6);box-shadow:inset 0 0 0 50px #81949b18}100%{filter:none;box-shadow:none}}
@keyframes stormFlash{0%,55%,100%{box-shadow:none}60%{box-shadow:inset 0 0 25px #fff5bd70}66%{box-shadow:none}72%{box-shadow:inset 0 0 18px #fff5bd44}}
@media(prefers-reduced-motion:reduce){.climate-copy h2:after,.temperature:before,.temperature strong,.sensor-grid div:after,.forecast-row article,.forecast-row article:before,.forecast-row article em:after{animation:none!important;opacity:1!important;transform:none!important}}

/* 第二版天气剧情：悬停可重播，动作更长、更夸张 */
.temperature{position:relative;isolation:isolate;cursor:pointer;border-radius:18px;padding:18px 12px 18px 25px;transition:color .35s ease,filter .35s ease}.temperature strong{position:relative;z-index:3;display:inline-block;animation:none!important;transition:text-shadow .25s ease}.temperature:before{content:"";position:absolute;inset:-20px -16px;z-index:-2;border-radius:28px;background:radial-gradient(circle at 50% 45%,#ffd9eb 0,#ef9fcf 42%,#c85e9c 74%,transparent 75%);opacity:0;transform:scale(.35) rotate(-8deg);animation:none}.temperature:after{content:"🌸  🌼  ✿  🌷  🌸";position:absolute;inset:4px -24px auto -16px;z-index:2;font-family:"Segoe UI Emoji",sans-serif;font-size:18px;letter-spacing:2px;opacity:0;transform:scale(.3) translateY(26px);pointer-events:none}.temperature strong:before,.temperature strong:after{position:absolute;z-index:-1;font-family:"Segoe UI Emoji",sans-serif;font-size:22px;opacity:0;pointer-events:none}.temperature strong:before{content:"🌺";left:-25px;top:-16px}.temperature strong:after{content:"🌻";right:-29px;bottom:-8px}.temperature:hover{color:#40213a}.temperature:hover span,.temperature:hover em{color:#6d385c}.temperature:hover:before{animation:animePinkBurst 3.2s cubic-bezier(.18,.8,.2,1) 1 both}.temperature:hover:after{animation:flowerCurtain 3.2s .12s cubic-bezier(.18,.8,.2,1) 1 both}.temperature:hover strong{animation:cartoonHappy 2.4s .22s ease-in-out 1 both;text-shadow:0 4px 0 #ffffff80,0 0 24px #fff}.temperature:hover strong:before{animation:sideFlowerLeft 2.7s .35s ease-out 1 both}.temperature:hover strong:after{animation:sideFlowerRight 2.7s .45s ease-out 1 both}.temperature:hover em:after{content:"  ✨😊✨"}
/* 接入实时温度后可直接切换 hot / low 类，表现会自动改变 */
.temperature.hot:hover:before{background:radial-gradient(circle,#ffdb71,#ef5a29 48%,#77180e 76%,transparent 77%);animation:heatBurst 2.8s ease-out 1 both}.temperature.hot:hover:after{content:"🔥  🔥  ♨️  🔥";animation:fireRise 2.8s ease-out 1 both}.temperature.hot:hover strong{color:#fff3bb;animation:heatShake 1.2s ease-in-out 2 both;text-shadow:0 0 8px #fff,0 -8px 22px #ffb128}.temperature.low:hover:before{background:radial-gradient(circle,#736283,#352a47 60%,#191523 76%,transparent 77%);animation:gloomBurst 3s ease-out 1 both}.temperature.low:hover:after{content:"➰  〰️  🌀  ➿";filter:grayscale(1);animation:gloomTangle 3s ease-out 1 both}.temperature.low:hover strong{color:#d8cbe2;animation:gloomDrop 2.6s ease-out 1 both;text-shadow:0 5px 12px #0008}
.forecast-row article:before{animation-duration:2.4s!important}.forecast-row article:nth-child(1) em:after,.forecast-row article:nth-child(3) em:after{animation-duration:1.25s!important;animation-iteration-count:4!important}.forecast-row article:hover:before{animation:weatherReplay 2.8s ease-in-out 1 both!important}.forecast-row article:nth-child(1):hover em:after,.forecast-row article:nth-child(3):hover em:after{animation:rainReplay 1.1s ease-in 5 both!important}.forecast-row article:nth-child(1):hover{animation:rainScene 4.8s ease-out 1 both}.forecast-row article:nth-child(2):hover,.forecast-row article:nth-child(4):hover{animation:cloudScene 4.2s ease-in-out 1 both}.forecast-row article:nth-child(3):hover{animation:stormScene 4.8s ease-out 1 both}
@keyframes animePinkBurst{0%{opacity:0;transform:scale(.25) rotate(-12deg)}18%{opacity:.95;transform:scale(1.08) rotate(3deg)}32%,82%{opacity:.9;transform:scale(1) rotate(0)}100%{opacity:0;transform:scale(1.14)}}
@keyframes flowerCurtain{0%{opacity:0;transform:scale(.2) translateY(30px) rotate(-12deg)}22%{opacity:1;transform:scale(1.18) translateY(-7px) rotate(5deg)}38%,78%{opacity:1;transform:scale(1) translateY(0)}100%{opacity:0;transform:scale(1.1) translateY(-10px)}}
@keyframes cartoonHappy{0%,100%{transform:none}12%{transform:scale(.75,.55) translateY(8px)}24%{transform:scale(1.18,.9) translateY(-9px) rotate(-6deg)}38%{transform:rotate(7deg) translateY(-5px)}52%{transform:rotate(-8deg) translateY(-8px)}66%{transform:rotate(5deg) translateY(-4px)}80%{transform:scale(1.08) rotate(-2deg)}}
@keyframes sideFlowerLeft{0%{opacity:0;transform:scale(0) rotate(-90deg)}25%,80%{opacity:1;transform:scale(1.25) rotate(8deg)}100%{opacity:0;transform:scale(.8) rotate(30deg)}}@keyframes sideFlowerRight{0%{opacity:0;transform:scale(0) rotate(90deg)}25%,80%{opacity:1;transform:scale(1.2) rotate(-8deg)}100%{opacity:0;transform:scale(.8) rotate(-30deg)}}
@keyframes heatBurst{0%{opacity:0;transform:scale(.25)}25%,80%{opacity:.95;transform:scale(1.08)}100%{opacity:0;transform:scale(1.25)}}@keyframes fireRise{0%{opacity:0;transform:translateY(35px) scale(.5)}30%,75%{opacity:1;transform:translateY(-8px) scale(1.15)}100%{opacity:0;transform:translateY(-32px)}}@keyframes heatShake{0%,100%{transform:none}20%{transform:translateX(-3px) skewX(-4deg)}40%{transform:translateX(4px) skewX(5deg)}60%{transform:translateX(-2px)}80%{transform:translateX(2px)}}
@keyframes gloomBurst{0%{opacity:0;transform:scale(.2)}25%,82%{opacity:.95;transform:scale(1.05)}100%{opacity:0;transform:scale(1.12)}}@keyframes gloomTangle{0%{opacity:0;transform:scale(.2) rotate(0)}25%,80%{opacity:.8;transform:scale(1.2) rotate(120deg)}100%{opacity:0;transform:scale(.8) rotate(210deg)}}@keyframes gloomDrop{0%{transform:none}25%,75%{transform:translateY(9px) scaleY(.86)}100%{transform:none}}
@keyframes weatherReplay{0%{opacity:0;transform:translateY(-26px) scale(.7)}22%{opacity:1;transform:translateY(3px) scale(1.12)}42%,80%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:.9;transform:translateY(-2px)}}@keyframes rainReplay{0%{opacity:0;transform:translateY(-9px)}35%{opacity:1}100%{opacity:0;transform:translateY(12px)}}@keyframes rainScene{0%{box-shadow:inset 0 0 0 40px #71899600}25%,80%{box-shadow:inset 0 0 0 40px #71899620}100%{box-shadow:none}}@keyframes cloudScene{0%,100%{background-color:var(--paper)}35%,75%{background-color:#e9eeec}}@keyframes stormScene{0%,35%,48%,62%,100%{box-shadow:none}42%,56%{box-shadow:inset 0 0 28px #fff2a895}}
@media(prefers-reduced-motion:reduce){.temperature:hover:before,.temperature:hover:after,.temperature:hover strong,.temperature:hover strong:before,.temperature:hover strong:after,.forecast-row article:hover,.forecast-row article:hover:before,.forecast-row article:hover em:after{animation:none!important}}

/* 平滑版：动画层缓入缓出，文字层始终独立清晰 */
.climate-copy h2,.climate-copy p,.temperature>span,.temperature>strong,.temperature>em,.sensor-grid span,.sensor-grid strong,.sensor-grid small{position:relative;z-index:6;-webkit-text-stroke:.2px #123d2a;text-shadow:0 1px 2px #071d1490,0 0 5px #123d2a55}.climate-copy h2,.temperature>strong{-webkit-text-stroke:.35px #0a281b;text-shadow:0 2px 3px #071d14b0,0 0 8px #123d2a70}.forecast-row article>span,.forecast-row article>strong,.forecast-row article>small,.forecast-row article>em{position:relative;z-index:5;-webkit-text-stroke:.18px #fff;text-shadow:0 1px 0 #fff,0 0 4px #ffffffd9}.forecast-row article>strong{-webkit-text-stroke:.3px #fff;text-shadow:0 1px 1px #fff,0 0 5px #fff}.sensor-grid div:after,.forecast-row article:before{z-index:2}
.temperature{transition:color .75s cubic-bezier(.22,.7,.25,1),filter .75s ease,background-color .75s ease}.temperature:before{opacity:0;transform:scale(.82);filter:blur(8px);transition:opacity .85s ease,transform 1.1s cubic-bezier(.22,.7,.25,1),filter 1s ease;animation:none!important}.temperature:after{opacity:0;transform:translateY(9px) scale(.88);filter:blur(3px);transition:opacity .8s .12s ease,transform 1.15s .08s cubic-bezier(.22,.7,.25,1),filter .9s ease;animation:none!important}.temperature strong:before,.temperature strong:after{transition:opacity .75s .18s ease,transform 1.1s .12s cubic-bezier(.22,.7,.25,1);animation:none!important}.temperature:hover:before{opacity:.78;transform:scale(1);filter:blur(0);animation:none!important}.temperature:hover:after{opacity:.82;transform:translateY(0) scale(1);filter:blur(0);animation:none!important}.temperature:hover strong:before{opacity:.88;transform:scale(1) rotate(5deg);animation:none!important}.temperature:hover strong:after{opacity:.88;transform:scale(1) rotate(-5deg);animation:none!important}.temperature:hover strong{animation:gentleJoy 3.6s .3s cubic-bezier(.45,.05,.3,1) 1 both!important}.temperature:not(:hover) strong{transition:transform .8s ease,text-shadow .6s ease}
.temperature.hot:hover:before,.temperature.low:hover:before,.temperature.hot:hover:after,.temperature.low:hover:after{animation:none!important}.temperature.hot:hover strong{animation:gentleHeat 3.2s .25s ease-in-out 1 both!important}.temperature.low:hover strong{animation:gentleGloom 3.3s .25s ease-in-out 1 both!important}
.forecast-row article{transition:background-color .85s ease,box-shadow .85s ease,filter .85s ease,transform .7s cubic-bezier(.22,.7,.25,1)}.forecast-row article:hover{transform:translateY(-2px)}.forecast-row article:before{opacity:.78;transform:translateY(0) scale(.94);transition:opacity .65s ease,transform .9s cubic-bezier(.22,.7,.25,1),filter .8s ease;animation:none!important}.forecast-row article:hover:before{opacity:1;transform:translateY(2px) scale(1.04);filter:drop-shadow(0 4px 5px #60747a38);animation:weatherFloat 4.8s .35s ease-in-out 1 both!important}.forecast-row article:nth-child(1):hover,.forecast-row article:nth-child(2):hover,.forecast-row article:nth-child(3):hover,.forecast-row article:nth-child(4):hover{animation:none!important}.forecast-row article:nth-child(1) em:after,.forecast-row article:nth-child(3) em:after{animation:slowRain 1.55s 1s ease-in 3 both!important}.forecast-row article:nth-child(1):hover em:after,.forecast-row article:nth-child(3):hover em:after{animation:slowRain 1.55s .35s ease-in 3 both!important}
@keyframes gentleJoy{0%,100%{transform:none}18%{transform:translateY(-2px) rotate(-1.5deg)}38%{transform:translateY(1px) rotate(1.8deg)}58%{transform:translateY(-2px) rotate(-1.2deg)}78%{transform:translateY(0) rotate(.7deg)}}@keyframes gentleHeat{0%,100%{transform:none}25%{transform:translateY(-1px) skewX(-1.5deg)}50%{transform:translateY(-2px) skewX(1.5deg)}75%{transform:translateY(-1px) skewX(-1deg)}}@keyframes gentleGloom{0%,100%{transform:none}35%,72%{transform:translateY(4px) scaleY(.96)}}
@keyframes weatherFloat{0%,100%{transform:translateY(2px) scale(1.04)}30%{transform:translate(-2px,-1px) scale(1.05)}62%{transform:translate(2px,1px) scale(1.03)}}@keyframes slowRain{0%{opacity:0;transform:translateY(-5px)}25%,65%{opacity:.9}100%{opacity:0;transform:translateY(8px)}}
@media(prefers-reduced-motion:reduce){.temperature:before,.temperature:after,.temperature strong:before,.temperature strong:after,.forecast-row article,.forecast-row article:before{transition:none!important}.temperature:hover strong,.forecast-row article:hover:before,.forecast-row article em:after{animation:none!important}}

/* 温度光晕去边界；四项即时气象支持悬停反馈 */
.temperature:before{inset:-34px -42px;background:radial-gradient(ellipse at 48% 50%,#f4a7d244 0,#ef9fcf2b 32%,#d97fb51a 54%,transparent 78%)!important;border-radius:45%;filter:blur(16px)!important;transform:scale(.9)!important}.temperature:hover:before{opacity:.72;filter:blur(11px)!important;transform:scale(1.05)!important}.temperature:after{filter:drop-shadow(0 3px 5px #8d4f7628);opacity:0}.temperature:hover:after{opacity:.7}
.sensor-grid div{cursor:default;transition:background-color .7s ease,border-color .7s ease,transform .65s cubic-bezier(.22,.7,.25,1),box-shadow .7s ease}.sensor-grid div:hover{transform:translateY(-2px);border-color:#b8ddd150;background:#ffffff13;box-shadow:inset 0 0 20px #b8ddd10d,0 7px 15px #071d141c}.sensor-grid div:after{opacity:.76;transform:none;animation:none!important;transition:opacity .55s ease,transform .75s cubic-bezier(.22,.7,.25,1),filter .65s ease}.sensor-grid div:nth-child(1):hover:after{animation:humidityFloat 3.6s ease-in-out 1 both!important}.sensor-grid div:nth-child(2):hover:after{animation:probabilityRain 3.8s ease-in-out 1 both!important}.sensor-grid div:nth-child(3):hover:after{animation:windGlide 3.4s ease-in-out 1 both!important}.sensor-grid div:nth-child(4):hover:after{animation:uvBreathe 3.6s ease-in-out 1 both!important}.sensor-grid div:nth-child(1):hover{background:linear-gradient(135deg,#ffffff12,#74b9d615)}.sensor-grid div:nth-child(2):hover{background:linear-gradient(135deg,#ffffff10,#718b9b1d)}.sensor-grid div:nth-child(3):hover{background:linear-gradient(135deg,#ffffff10,#8fc7ae16)}.sensor-grid div:nth-child(4):hover{background:linear-gradient(135deg,#ffffff10,#ffd47818)}
.sensor-grid div:nth-child(1):before,.sensor-grid div:nth-child(2):before,.sensor-grid div:nth-child(3):before,.sensor-grid div:nth-child(4):before{position:absolute;right:8px;bottom:5px;z-index:1;font-family:"Segoe UI Emoji",sans-serif;font-size:10px;opacity:0;transition:opacity .55s ease,transform 1s ease}.sensor-grid div:nth-child(1):before{content:"·  ·  ·";color:#82bfd5}.sensor-grid div:nth-child(2):before{content:"⋮  ⋮  ⋮";color:#9fb8c2}.sensor-grid div:nth-child(3):before{content:"～  ～";color:#9dd0bb}.sensor-grid div:nth-child(4):before{content:"✦  ·  ✦";color:#ffe4a3}.sensor-grid div:hover:before{opacity:.72}.sensor-grid div:nth-child(1):hover:before{animation:microDrops 2.5s ease-in-out 1 both}.sensor-grid div:nth-child(2):hover:before{animation:microRain 1.4s ease-in 2 both}.sensor-grid div:nth-child(3):hover:before{animation:microWind 3s ease-in-out 1 both}.sensor-grid div:nth-child(4):hover:before{animation:microSpark 3s ease-in-out 1 both}
@keyframes humidityFloat{0%,100%{transform:none;filter:none}35%{transform:translateY(-4px) scale(1.05);filter:drop-shadow(0 4px 4px #6bb8d04a)}70%{transform:translateY(1px) scale(.98)}}@keyframes probabilityRain{0%,100%{transform:none}25%{transform:translateY(-2px)}55%{transform:translateY(4px)}80%{transform:translateY(1px)}}@keyframes windGlide{0%,100%{transform:none}28%{transform:translateX(-5px) rotate(-5deg)}62%{transform:translateX(4px) rotate(5deg)}}@keyframes uvBreathe{0%,100%{transform:scale(1);filter:none}45%{transform:scale(1.14) rotate(7deg);filter:drop-shadow(0 0 8px #ffd65d99)}}
@keyframes microDrops{0%,100%{opacity:0;transform:translateY(-4px)}35%,72%{opacity:.7;transform:translateY(1px)}}@keyframes microRain{0%{opacity:0;transform:translateY(-5px)}35%{opacity:.75}100%{opacity:0;transform:translateY(8px)}}@keyframes microWind{0%,100%{opacity:0;transform:translateX(-8px)}30%,75%{opacity:.7;transform:translateX(2px)}}@keyframes microSpark{0%,100%{opacity:0;transform:scale(.8)}40%,70%{opacity:.8;transform:scale(1.12)}}
@media(prefers-reduced-motion:reduce){.sensor-grid div,.sensor-grid div:before,.sensor-grid div:after{animation:none!important;transition:none!important}}

/* 天气预报图标：悬停时轻快蹦两下，再平稳落回 */
.forecast-row article:hover:before{transform-origin:50% 100%;animation:forecastBounce 1.45s cubic-bezier(.28,.72,.3,1) 1 both!important}
@keyframes forecastBounce{0%{transform:translateY(0) scale(1);filter:drop-shadow(0 2px 3px #60747a20)}16%{transform:translateY(-10px) scale(.96,1.06);filter:drop-shadow(0 10px 6px #60747a28)}30%{transform:translateY(1px) scale(1.08,.9)}43%{transform:translateY(-6px) scale(.98,1.03)}58%{transform:translateY(0) scale(1.04,.94)}72%{transform:translateY(-2px) scale(1)}100%{transform:translateY(0) scale(1);filter:drop-shadow(0 3px 4px #60747a28)}}
@media(prefers-reduced-motion:reduce){.forecast-row article:hover:before{animation:none!important}}

/* WordPress 模板中的链接式导航 */
.side-nav a{width:100%;color:#ffffffad;padding:11px 12px;display:flex;align-items:center;gap:12px;border-radius:11px;text-decoration:none;font-size:14px;font-weight:800}.side-nav a:hover,.side-nav a.active{background:#ffffff18;color:#fff}.primary-button,.add-task{text-decoration:none}.mobile-nav a{border:0;background:none;display:grid;place-items:center;gap:2px;padding:4px;color:var(--muted);font-size:8px;text-decoration:none}.mobile-nav a span{width:23px;height:23px;display:grid;place-items:center;border-radius:7px;font-size:9px}.mobile-nav a:first-child{color:var(--green);font-weight:800}.mobile-nav a:first-child span{background:var(--soft)}

/* WordPress 实时天气图标由接口天气代码决定 */
.forecast-row article:before{content:none!important}.forecast-symbol{position:absolute;right:10px;top:8px;font-family:"Segoe UI Emoji",sans-serif;font-size:20px;font-style:normal;transform-origin:50% 100%}.forecast-row article:hover .forecast-symbol{animation:forecastBounce 1.45s cubic-bezier(.28,.72,.3,1) 1 both}.temperature.hot:after{content:"🔥  🔥  ♨️  🔥"}.temperature.low:after{content:"➰  〰️  🌀  ➿"}
@media(prefers-reduced-motion:reduce){.forecast-row article:hover .forecast-symbol{animation:none!important}}
