/* 2026-10-18 polish. Loaded last; keeps the existing layout, palette engine and admin-editable copy.
   Goals: daily entries inside the first desktop screen, readable type sizes, clear primary actions, mobile hero fix. */
:root{--polish-strong:color-mix(in srgb,var(--space-accent,#648e3b),#000 16%);--polish-muted:var(--space-muted,#5a675f)}
body{line-height:1.6}

/* Sidebar and top bar: same structure, larger labels */
html .nav-caption{font-size:11px}
html .nav-link{font-size:14px;height:44px}
html .sidebar-chat{font-size:13px}
html .sidebar-chat small{font-size:11.5px}
html .sidebar-note{font-size:12px}
html .sidebar-domain{font-size:10.5px}
html .topbar{height:72px}
html .breadcrumb,html .top-date{font-size:12.5px}
html .search-button{font-size:12.5px;height:36px}
html kbd{font-size:10.5px}

/* Hero: shorter, one-line title on desktop so both rows of entries fit above the fold */
html main{padding-top:26px}
html .hero{min-height:0;border-radius:20px}
html .hero-content{padding:36px 44px 38px;width:58%}
html .hero h1{font-size:clamp(44px,3.8vw,64px);line-height:1.12;letter-spacing:-1.2px;margin:16px 0 14px}
html .eyebrow{font-size:10.5px;letter-spacing:1.6px}
html .hero-description{font-size:15px;letter-spacing:.3px;line-height:1.85}
html .hero-description>span{font-size:13.5px}
html .hero-description>[data-copy=intro]{font-size:15px}
html .hero-actions{margin-top:22px;gap:22px}
html .hero-art{width:44%}
html .tag-top{top:26px;right:28px;font-size:10px}
html .tag-bottom{bottom:22px;left:3%;font-size:9px}
html .hero-bottom,html .art-coordinate{display:none}
@media(min-width:1100px){html .hero h1 br{display:none}}

/* Primary actions: solid, readable */
html .button-primary,html[data-space-theme] .button-primary{min-height:44px;gap:18px;padding:0 18px;border-radius:10px;font-size:14px;font-weight:600;background:var(--polish-strong);color:var(--space-on-accent,#fff);box-shadow:0 8px 20px color-mix(in srgb,var(--space-accent,#648e3b),transparent 78%)}
html .button-primary:hover,html[data-space-theme] .button-primary:hover{background:var(--space-accent,#648e3b)}
html .button-primary>span{font-size:16px}
html .button-text{font-size:14px}
html .button-text svg{width:14px;height:14px}

/* Section headings */
html .section-block{margin-top:40px}
html .workspace{margin-top:30px}
html .section-header{margin-bottom:16px}
html .section-index{font-size:11px;letter-spacing:1.6px}
html .section-header h2{font-size:22px;font-weight:600;letter-spacing:.3px;margin-top:6px}
html .section-aside{font-size:12.5px;gap:6px}
html .section-aside svg{width:13px;height:13px}

/* Work entries: compact, category next to icon, whole card clickable */
html .work-grid{gap:14px}
html .work-card{min-height:0;padding:18px 20px 19px;border-radius:14px}
html .card-top{justify-content:flex-start;gap:10px}
html .card-icon{width:36px;height:36px;border-radius:10px}
html .card-icon svg{width:19px;height:19px}
.card-tag{font-size:12px;letter-spacing:.3px;color:var(--polish-muted)}
html .card-arrow{margin-left:auto;width:16px;height:16px;opacity:.35;transform:none}
html .work-card:hover .card-arrow{opacity:1;transform:translate(2px,-2px)}
html .work-card h3{font-size:17px;font-weight:600;letter-spacing:.2px;margin:14px 0 4px}
html .work-card p{font-size:13px;line-height:1.6;margin:0}

/* Little things: chat + about */
html .chat-label{font-size:12px}
html .chat-card p{font-size:14px}
html .chat-cta{font-size:13.5px;gap:14px}
html .chat-cta svg{width:14px;height:14px}
html .about-card{padding:26px 200px 26px 29px;overflow:hidden}
html .about-star{display:none}
.about-art{position:absolute;right:14px;bottom:50%;transform:translateY(50%);width:184px;height:auto;pointer-events:none;user-select:none}
html .about-card h2{font-size:22px;font-weight:600;margin:16px 0 12px}
html .about-card p{font-size:14px;line-height:1.85}
html .about-tags>span{font-size:12px;padding:4px 10px;border-radius:999px}

/* Guestbook */
html .guestbook-count{font-size:12px}
html .guest-compose{padding:24px 26px}
html .compose-star{font-size:28px;margin-bottom:10px}
html .guest-compose h3{font-size:19px}
html .guest-intro{font-size:13.5px;line-height:1.8;margin-bottom:12px}
html .guest-compose label{font-size:13px;margin:14px 0 7px}
html .guest-compose input,html .guest-compose textarea{font-size:14px}
html .guest-compose textarea{min-height:112px}
html .message-length{font-size:11.5px}
html .guest-submit,html[data-space-theme] .guest-submit{padding:13px 16px;border-radius:10px;font-size:14px;background:var(--polish-strong);color:var(--space-on-accent,#fff)}
html .guest-submit:hover{filter:none;background:var(--space-accent,#648e3b)}
html .guest-status{font-size:13px}
html .guestbook-empty{min-height:0;padding:30px 28px 34px;gap:2px}
.empty-art{width:150px;height:auto;margin:0 auto 6px;display:block;pointer-events:none;user-select:none}
html .guestbook-empty h3{font-size:18px}
html .guestbook-empty p{font-size:13.5px;line-height:1.9}
html .message-head{font-size:13px}
html .message-head time{font-size:11.5px}
html .message-card p{font-size:14px}
html .messages-more{font-size:13px}

/* Footer and search dialog */
html .footer{font-size:12px}
html .command-hint,html .command-result small{font-size:12px}
html .command-bottom{font-size:11.5px}

@media(min-width:1700px){
 html .hero-content{padding:44px 52px 46px}
 html .hero h1{font-size:68px}
 html .work-card{padding:20px 22px 21px}
 html .work-card h3{font-size:18px}
 html .work-card p{font-size:13.5px}
 .about-art{width:210px}
 html .about-card{padding-right:230px}
}
@media(max-width:1200px){
 html .hero-content{padding:32px 30px 34px;width:60%}
 html .about-card{padding-right:24px}
 .about-art{top:18px;right:16px;bottom:auto;transform:none;width:112px}
 html .about-card h2{padding-right:104px}
}
@media(max-width:950px){
 html .hero-content{width:64%}
 html .hero h1{font-size:46px}
}
@media(max-width:700px){
 html main{padding-top:16px}
 html .topbar{height:56px}
 html .hero{display:flex;flex-direction:column}
 html .hero-content{width:100%;padding:24px 22px 4px}
 html .hero h1{font-size:40px;letter-spacing:-1px;margin:16px 0 12px}
 html .hero-description{font-size:14px}
 html .hero-description>span{font-size:13px}
 html .hero-description>[data-copy=intro]{font-size:14px}
 html .hero-actions{margin-top:20px;gap:18px;flex-wrap:wrap}
 html .button-primary,html[data-space-theme] .button-primary{font-size:14px;min-height:44px}
 html .button-text{font-size:14px}
 html .hero-art{position:relative;inset:auto;top:auto;right:auto;width:100%;height:200px;opacity:1;z-index:0;margin-top:-4px}
 html .orbital-letter{font-size:64px}
 html .section-block{margin-top:30px}
 html .section-header h2{font-size:19px}
 html .section-index{font-size:10.5px}
 html .section-aside{font-size:11.5px;max-width:none;padding-top:22px}
 html .work-grid{gap:10px}
 html .work-card{padding:14px 14px 15px}
 html .card-icon{width:32px;height:32px}
 .card-tag{font-size:11px}
 html .work-card h3{font-size:15px;margin:12px 0 3px}
 html .work-card p{font-size:12.5px;line-height:1.55}
 html .chat-card p{font-size:13px}
 html .about-card{padding:24px 22px}
 .about-art{width:104px;top:16px;right:12px}
 html .about-card h2{font-size:20px}
 html .guest-compose{padding:22px}
 html .footer{font-size:11.5px}
}

/* Follow the admin palette for small accents that light.css had hard-coded in green */
html[data-space-theme] .about-tags>span{color:color-mix(in srgb,var(--space-accent),#000 10%);background:color-mix(in srgb,var(--space-accent),transparent 92%);border-color:color-mix(in srgb,var(--space-accent),transparent 80%)}
html[data-space-theme] .status-dot,html[data-space-theme] .tag-top i{background:var(--space-accent);box-shadow:0 0 10px color-mix(in srgb,var(--space-accent),transparent 70%)}
html[data-space-theme] :is(.tiny-star,.chat-spark,.tag-bottom>span,.chat-small-icon,.small-arrow,.card-arrow){color:var(--space-accent)}
html[data-space-theme] .orbital-tag{border-color:color-mix(in srgb,var(--space-accent),transparent 70%)}

/* 学习站入口条 2026-10-18 */
html .study-strip{display:flex;align-items:center;gap:16px;margin-bottom:15px;padding:16px 20px;border:1px solid color-mix(in srgb,var(--space-accent,#a27842),transparent 70%);border-radius:13px;background:color-mix(in srgb,var(--space-panel,#fff),var(--space-accent,#a27842) 6%);color:var(--space-ink,#2b2b2b);text-decoration:none;transition:border-color .2s,transform .2s}
html .study-strip:hover{border-color:var(--space-accent,#a27842);transform:translateY(-1px)}
html .study-mark{flex:none;display:grid;place-items:center;width:44px;height:44px;border-radius:11px;background:var(--space-accent,#a27842);color:#fff;font-weight:700;font-size:18px}
html .study-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
html .study-text strong{font-size:16px}
html .study-text span{font-size:13px;color:var(--space-muted,#6b6b6b)}
html .study-cta{flex:none;display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--space-accent,#a27842)}
html .study-cta svg{width:14px;height:14px}
@media(max-width:700px){html .study-strip{padding:14px}html .study-cta{display:none}}

/* 2026-10-19 weather: top-bar chip + card in 常用工具 with 7-day forecast (Open-Meteo via /api/weather, Meteocons icons) */
html .top-weather{display:inline-flex;align-items:center;gap:4px;height:36px;padding:0 10px 0 4px;border:1px solid color-mix(in srgb,var(--space-accent,#648e3b),transparent 80%);border-radius:999px;background:var(--space-panel,#fff);color:var(--space-ink,#28322c);font-size:12.5px;font-variant-numeric:tabular-nums}
html .top-weather[hidden]{display:none}
html .top-weather img{width:28px;height:28px}
html .top-weather:hover{border-color:var(--space-accent,#648e3b)}
.weather-card{position:relative;display:grid;grid-template-columns:minmax(270px,.8fr) 2.2fr;gap:22px;margin-bottom:15px;padding:20px 22px;border:1px solid color-mix(in srgb,var(--space-accent,#648e3b),transparent 80%);border-radius:14px;background:var(--space-panel,#fff);scroll-margin-top:90px}
.weather-card.is-loading .wx-days,.weather-card.is-loading .wx-current{opacity:.55}
.wx-now{position:relative;display:flex;flex-direction:column;min-width:0}
.wx-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.wx-head h3{margin:0;font-size:18px;font-weight:600;color:var(--space-ink,#28322c)}
.wx-head h3 small{font-size:13px;font-weight:400;color:var(--space-muted,#5a675f);margin-left:6px}
.wx-change{border:1px solid color-mix(in srgb,var(--space-accent,#648e3b),transparent 72%);background:color-mix(in srgb,var(--space-accent,#648e3b),transparent 93%);color:color-mix(in srgb,var(--space-accent,#648e3b),#000 12%);border-radius:999px;padding:5px 12px;font-size:12.5px}
.wx-change:hover{border-color:var(--space-accent,#648e3b)}
.wx-current{display:flex;align-items:center;gap:10px;margin:8px 0 4px;min-height:96px}
.wx-now-icon{width:96px;height:96px;margin-left:-10px;flex:none}
.wx-now-main{display:flex;flex-direction:column;gap:2px;min-width:0}
.wx-temp{font-size:44px;line-height:1;font-weight:600;color:var(--space-ink,#28322c);letter-spacing:-1px;font-variant-numeric:tabular-nums}
.wx-now-text{font-size:14px;color:var(--space-ink,#28322c);margin-top:6px}
.wx-meta{font-size:12.5px;color:var(--space-muted,#5a675f)}
.wx-skeleton,.wx-status{font-size:13px;color:var(--space-muted,#5a675f)}
.wx-status{margin:0 0 6px;color:#af4e45}
.wx-source{margin:auto 0 0;font-size:11.5px;color:var(--space-muted,#5a675f);opacity:.85}
.wx-picker{position:absolute;z-index:6;top:38px;left:0;right:0;padding:10px;border:1px solid color-mix(in srgb,var(--space-accent,#648e3b),transparent 70%);border-radius:12px;background:var(--space-panel,#fff);box-shadow:0 18px 40px rgba(30,40,30,.16)}
.wx-picker[hidden]{display:none}
.wx-picker input{width:100%;padding:10px 12px;border:1px solid color-mix(in srgb,var(--space-accent,#648e3b),transparent 72%);border-radius:9px;background:var(--space-panel,#fff);color:var(--space-ink,#28322c);font:inherit;font-size:14px;outline:none}
.wx-picker input:focus{border-color:var(--space-accent,#648e3b);box-shadow:0 0 0 3px color-mix(in srgb,var(--space-accent,#648e3b),transparent 88%)}
.wx-results{list-style:none;margin:8px 0 0;padding:0;max-height:260px;overflow:auto;display:grid;gap:2px}
.wx-option{display:flex;justify-content:space-between;align-items:baseline;gap:10px;width:100%;padding:8px 10px;border:0;border-radius:8px;background:none;color:var(--space-ink,#28322c);text-align:left;font-size:14px}
.wx-option small{font-size:12px;color:var(--space-muted,#5a675f);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wx-option:hover,.wx-option:focus-visible{background:color-mix(in srgb,var(--space-accent,#648e3b),transparent 90%);outline:none}
.wx-empty{padding:8px 10px;font-size:13px;color:var(--space-muted,#5a675f)}
.wx-days{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.wx-day{display:flex;flex-direction:column;align-items:center;gap:3px;padding:12px 6px;border-radius:12px;background:color-mix(in srgb,var(--space-bg,#f1f4ec),var(--space-panel,#fff) 40%);text-align:center;min-width:0}
.wx-day:first-child{background:color-mix(in srgb,var(--space-accent,#648e3b),transparent 90%)}
.wx-when{display:flex;flex-direction:column;line-height:1.3}
.wx-when b{font-size:13.5px;font-weight:600;color:var(--space-ink,#28322c)}
.wx-when small{font-size:11.5px;color:var(--space-muted,#5a675f)}
.wx-day img{width:52px;height:52px}
.wx-desc{font-size:12.5px;color:var(--space-ink,#28322c);white-space:nowrap}
.wx-rain{font-size:11.5px;color:#4f7fa3;min-height:17px}
.wx-range{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;font-variant-numeric:tabular-nums}
.wx-range i{font-style:normal;font-size:13px}
.wx-max{order:-1;font-weight:600;color:var(--space-ink,#28322c)}
.wx-min{order:2;color:var(--space-muted,#5a675f)}
.wx-bar{position:relative;width:6px;height:44px;border-radius:3px;background:color-mix(in srgb,var(--space-muted,#5a675f),transparent 86%)}
.wx-bar span{position:absolute;left:0;right:0;bottom:var(--a,0);top:var(--b,0);min-height:4px;border-radius:3px;background:linear-gradient(#e8a34c,#6aa6d8)}
@media(max-width:1200px){.weather-card{grid-template-columns:1fr}.wx-source{margin-top:6px}}
@media(max-width:700px){
 html .top-weather{padding:0 6px 0 2px;height:31px}
 html .top-weather span{font-size:12px}
 .weather-card{padding:16px}
 .wx-days{grid-template-columns:1fr;gap:4px}
 .wx-day{display:grid;grid-template-columns:52px 34px 1fr auto;align-items:center;column-gap:8px;padding:6px 10px;text-align:left}
 .wx-day img{width:34px;height:34px}
 .wx-when b{font-size:13px}
 .wx-desc{grid-column:3;display:flex;flex-direction:column}
 .wx-rain{grid-column:3;grid-row:2;min-height:0}
 .wx-range{grid-column:4;grid-row:1/span 2;flex-direction:row;width:auto;gap:6px}
 .wx-max{order:3}.wx-min{order:1}.wx-bar{order:2}
 .wx-bar{width:56px;height:6px}
 .wx-bar span{top:0;bottom:0;left:var(--a,0);right:var(--b,0);min-height:0;min-width:4px;background:linear-gradient(90deg,#6aa6d8,#e8a34c)}
}

/* 2026-10-20 harmony: one radius / border / shadow / spacing system for every panel; fill empty space instead of leaving holes */
:root{
 --h-radius:16px;
 --h-gap:14px;
 --h-line:color-mix(in srgb,var(--space-accent,#648e3b),transparent 84%);
 --h-line-strong:color-mix(in srgb,var(--space-accent,#648e3b),transparent 60%);
 --h-shadow:0 1px 2px rgba(30,40,30,.04),0 8px 22px rgba(30,40,30,.045);
 --h-shadow-hover:0 2px 4px rgba(30,40,30,.05),0 14px 30px rgba(30,40,30,.08);
 --h-tint:color-mix(in srgb,var(--space-accent,#648e3b),var(--space-panel,#fff) 93%);
}
/* panels share the same skin */
html :is(.work-card,.weather-card,.study-strip,.chat-card,.about-card,.guest-compose,.message-card),
html[data-space-theme] :is(.work-card,.weather-card,.study-strip,.chat-card,.about-card,.guest-compose,.message-card){border:1px solid var(--h-line);border-radius:var(--h-radius);box-shadow:var(--h-shadow)}
html :is(.work-card,.study-strip,.chat-card):hover,html[data-space-theme] :is(.work-card,.study-strip,.chat-card):hover{border-color:var(--h-line-strong);box-shadow:var(--h-shadow-hover)}
html :is(.weather-card,.study-strip,.about-card,.guest-compose,.message-card),html[data-space-theme] :is(.weather-card,.study-strip,.about-card,.guest-compose,.message-card){background:var(--space-panel,#fff)}
html .hero{border-color:var(--h-line);box-shadow:var(--h-shadow)}
/* one spacing step between stacked panels */
html .work-grid,html .bottom-grid{gap:var(--h-gap)}
html .weather-card,html .study-strip{margin-bottom:var(--h-gap)}
html .section-block{margin-top:44px}
html .workspace{margin-top:32px}
/* weather: left column vertically balanced against the 7-day row */
html .weather-card{grid-template-columns:minmax(310px,.9fr) 2.2fr}
html .wx-now{justify-content:space-between;gap:6px}
@media(max-width:1200px){html .weather-card{grid-template-columns:1fr}}
html .wx-current{flex:1;margin:4px 0}
html .wx-now-icon{width:108px;height:108px}
html .wx-temp{font-size:50px}
html .wx-day{background:var(--h-tint);border:1px solid transparent}
html .wx-day:first-child{background:color-mix(in srgb,var(--space-accent,#648e3b),var(--space-panel,#fff) 84%);border-color:var(--h-line)}
/* study strip: same white panel, accent kept on the mark and link */
html .study-strip{padding:14px 20px}
html .study-mark{border-radius:12px}
/* chat + about: equal height, content centred so no empty bottom */
html .bottom-grid{align-items:stretch}
html .chat-card{display:flex;align-items:center;min-height:250px}
html .chat-card-content{padding:26px 30px}
html .chat-illustration{top:50%;transform:translateY(-50%)}
html .about-card{display:flex;flex-direction:column;justify-content:center}
/* guestbook: both columns same height, empty state becomes a calm tinted panel */
html .guestbook-grid{align-items:stretch;gap:var(--h-gap)}
html .guest-compose{position:relative;top:auto}
html .guest-status{min-height:0;margin-top:10px}
html .guest-status:empty{display:none}
/* quieter hero decorations so the title and the ring lead */
html .orbital-tag{opacity:.75}
html .tag-bottom{opacity:.6}
@media(max-width:1200px){html .chat-illustration{transform:translateY(-50%) scale(.85)}}
@media(max-width:700px){
 html .section-block{margin-top:34px}
 html .chat-card{min-height:230px}
 html .chat-illustration{transform:translateY(-50%) scale(.85)}
 html .wx-now-icon{width:88px;height:88px}html .wx-temp{font-size:44px}
}
/* guestbook right column: one tinted panel whatever the message count (0, 1 or many) */
html .guestbook-grid>div:last-child{display:flex;flex-direction:column;padding:16px;border:1px solid var(--h-line);border-radius:var(--h-radius);background:var(--h-tint)}
html .guestbook-empty,html[data-space-theme] .guestbook-empty{flex:1;height:auto;border:0;background:none;padding:20px}
html .message-card:only-child{grid-column:1/-1}
html .message-feed{gap:12px}
html .messages-more{margin-top:14px}
@media(max-width:700px){html .guestbook-grid>div:last-child{padding:12px}}
/* when only a few messages are public, the free space below them shows a faint paper plane instead of a blank block */
html .guestbook-grid>div:last-child::after{content:"";flex:1 1 0;min-height:0;margin-top:12px;background:url(/img/hello-plane.webp) center/min(150px,60%) no-repeat;opacity:.45}
html .guestbook-grid>div:last-child:has(#guestbook-empty:not([hidden]))::after{display:none}
@media(max-width:700px){html .guestbook-grid>div:last-child::after{display:none}}

/* 2026-10-29 ads card + LAN transfer strip */
/* 2026-11-03: ads + merchant evaluation are normal cards, side by side on the third row.
   Desktop uses a 6-track grid: first six cards take 2 tracks (3 per row), the last two take 3 each. */
@media(min-width:701px){
 html .work-grid{grid-template-columns:repeat(6,minmax(0,1fr))}
 html .work-grid>.work-card{grid-column:span 2}
 html .work-grid>:is(.work-card-ad,.work-card-eval){grid-column:span 3}
}
html .work-card-ad .card-icon{color:#c0704a;background:#fdf1ea;border-color:#f5ddd0}
html .work-card-eval .card-icon{color:#a88a2c;background:#fbf6e2;border-color:#efe4bd}
/* LAN transfer strip, 2026-10-30 tech skin: dark console panel, faint grid, a live device link and a one-click share button.
   Every colour is mixed from the palette accent, so sage / ocean / lavender / sand and custom colours keep their own tint. */
html .transfer-strip{--tx-base:color-mix(in srgb,var(--space-accent,#648e3b) 16%,#071016);--tx-glow:color-mix(in srgb,var(--space-accent,#648e3b) 52%,#eafcff);--tx-line:color-mix(in srgb,var(--tx-glow),transparent 76%);--tx-text:#eef5f8;--tx-dim:color-mix(in srgb,#eef5f8,transparent 28%);position:relative;z-index:3;display:flex;align-items:center;gap:18px;margin-bottom:var(--h-gap,14px);padding:16px 20px;border:1px solid var(--tx-line);border-radius:var(--h-radius,16px);background:radial-gradient(120% 170% at 0 0,color-mix(in srgb,var(--space-accent,#648e3b),transparent 58%),transparent 60%),linear-gradient(115deg,var(--tx-base),color-mix(in srgb,var(--tx-base),#000 32%));box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 14px 32px -20px color-mix(in srgb,var(--space-accent,#648e3b),#000 35%);color:var(--tx-text);transition:border-color .2s,box-shadow .2s}
html .transfer-strip:hover{border-color:color-mix(in srgb,var(--tx-glow),transparent 50%);box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 0 0 1px color-mix(in srgb,var(--tx-glow),transparent 86%),0 18px 36px -20px color-mix(in srgb,var(--space-accent,#648e3b),#000 25%)}
/* grid + slow scan line stay clipped to the rounded panel; the share panel itself may hang below it */
html .tx-fx{position:absolute;inset:0;z-index:-1;overflow:hidden;border-radius:inherit;pointer-events:none}
html .tx-fx::before{content:"";position:absolute;inset:0;background-image:linear-gradient(var(--tx-line) 1px,transparent 1px),linear-gradient(90deg,var(--tx-line) 1px,transparent 1px);background-size:22px 22px;-webkit-mask-image:linear-gradient(90deg,#000,rgba(0,0,0,.3) 55%,transparent 90%);mask-image:linear-gradient(90deg,#000,rgba(0,0,0,.3) 55%,transparent 90%)}
html .tx-fx::after{content:"";position:absolute;top:0;bottom:0;left:-30%;width:30%;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--tx-glow),transparent 84%),transparent);animation:tx-scan 6s cubic-bezier(.45,0,.25,1) infinite}
/* laptop ⇄ phone with a moving packet instead of a flat icon tile */
html .transfer-mark{flex:none;display:block;color:var(--tx-glow)}
html .tx-link{display:block;width:92px;height:44px;overflow:visible}
html .tx-link .tx-dev{fill:color-mix(in srgb,var(--tx-glow),transparent 88%);stroke:currentColor;stroke-width:1.6}
html .tx-link .tx-lines{stroke:color-mix(in srgb,var(--tx-glow),transparent 50%);stroke-width:1.4}
html .tx-link .tx-base{stroke:currentColor;stroke-width:2}
html .tx-link .tx-wire{stroke:color-mix(in srgb,var(--tx-glow),transparent 35%);stroke-width:1.6;stroke-dasharray:1.5 4.5;animation:tx-flow 1.1s linear infinite}
html .tx-link .tx-packet{fill:var(--tx-glow);stroke:none;filter:drop-shadow(0 0 4px var(--tx-glow));animation:tx-packet 2.6s ease-in-out infinite alternate}
html .transfer-strip .study-text strong{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;color:var(--tx-text)}
html .transfer-strip .study-text>span{color:var(--tx-dim);text-wrap:pretty}
/* line breaks fall after a comma, never inside 「互传文件」 or 「不用数据线」 */
html .transfer-strip .tx-nw{color:inherit;white-space:nowrap}
html .tx-chip{padding:3px 7px;border:1px solid var(--tx-line);border-radius:6px;background:color-mix(in srgb,var(--tx-glow),transparent 90%);color:var(--tx-glow);font:600 12px/1.2 ui-monospace,Consolas,monospace;letter-spacing:1px}
/* actions: glowing primary, outlined share, quiet LocalSend link */
html .transfer-actions{flex:none;display:flex;align-items:center;gap:8px}
html .transfer-actions>:is(a,button){display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;padding:0 14px;border:1px solid transparent;border-radius:10px;font-family:inherit;font-size:13px;font-weight:600;line-height:1;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background .2s,border-color .2s,color .2s,box-shadow .2s}
html .transfer-actions>:is(a,button) svg{width:14px;height:14px;stroke-width:2}
html .transfer-actions .transfer-primary{background:var(--tx-glow);color:#06141a;box-shadow:0 6px 18px -8px var(--tx-glow)}
html .transfer-actions .transfer-primary:hover{background:color-mix(in srgb,var(--tx-glow),#fff 22%);box-shadow:0 8px 22px -6px var(--tx-glow)}
html .transfer-actions .tx-share{border-color:color-mix(in srgb,var(--tx-glow),transparent 50%);background:color-mix(in srgb,var(--tx-glow),transparent 90%);color:var(--tx-glow)}
html .transfer-actions .tx-share:hover,html .transfer-actions .tx-share[aria-expanded="true"]{border-color:var(--tx-glow);background:color-mix(in srgb,var(--tx-glow),transparent 80%)}
html .tx-share .tx-i-ok,html .tx-share.is-copied .tx-i-link{display:none}
html .tx-share.is-copied .tx-i-ok{display:block}
html .transfer-actions .transfer-secondary{padding:0 8px;background:none;color:var(--tx-dim)}
html .transfer-actions .transfer-secondary:hover{color:var(--tx-text);text-decoration:underline;text-underline-offset:3px}
html .transfer-strip :is(a,button):focus-visible{outline:2px solid var(--tx-glow);outline-offset:2px}
/* share panel: QR code for the phone plus the link, opened by the share button */
html .tx-panel{position:absolute;top:calc(100% + 10px);right:14px;z-index:6;display:grid;grid-template-columns:116px minmax(0,1fr);align-items:center;gap:16px;width:min(400px,calc(100% - 28px));padding:16px;border:1px solid color-mix(in srgb,var(--tx-glow),transparent 60%);border-radius:14px;background:color-mix(in srgb,var(--tx-base),#000 18%);color:var(--tx-text);box-shadow:0 22px 44px -18px rgba(0,0,0,.55)}
html .tx-panel[hidden]{display:none}
html .tx-qr{display:block;border-radius:10px;overflow:hidden;line-height:0}
html .tx-qr-code{display:block;width:116px;height:116px;stroke:none}
html .tx-qr-code rect{fill:#fff}
html .tx-qr-code path{fill:#0b1218}
html .tx-panel strong{display:block;padding-right:28px;font-size:15px;color:var(--tx-text)}
html .tx-panel p{margin:4px 0 0;font-size:12px;line-height:1.5;color:var(--tx-dim)}
html .tx-hint-narrow{display:none}
html .tx-url-row{display:flex;align-items:center;gap:6px;margin-top:10px}
html .tx-url{flex:1;min-width:0;padding:7px 9px;border:1px solid var(--tx-line);border-radius:8px;background:rgba(0,0,0,.28);color:var(--tx-glow);font:12px/1.2 ui-monospace,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:all}
html .tx-copy{flex:none;min-height:30px;padding:0 10px;border:1px solid color-mix(in srgb,var(--tx-glow),transparent 50%);border-radius:8px;background:none;color:var(--tx-glow);font-family:inherit;font-size:12px;font-weight:600;cursor:pointer}
html .tx-copy:hover{background:color-mix(in srgb,var(--tx-glow),transparent 85%)}
html .tx-panel .tx-status{min-height:18px;margin-top:8px;color:var(--tx-glow)}
html .tx-panel .tx-status.is-error{color:#ffb4a6}
html .tx-close{position:absolute;top:8px;right:8px;display:grid;place-items:center;width:28px;height:28px;padding:0;border:0;border-radius:8px;background:none;color:var(--tx-dim);font-size:20px;line-height:1;cursor:pointer}
html .tx-close:hover{background:rgba(255,255,255,.08);color:var(--tx-text)}
html .tx-copy-field{position:fixed;top:0;left:0;width:1px;height:1px;opacity:0;pointer-events:none}
@keyframes tx-scan{0%{transform:translateX(0)}55%,100%{transform:translateX(460%)}}
@keyframes tx-flow{to{stroke-dashoffset:-6}}
@keyframes tx-packet{from{transform:translateX(0)}to{transform:translateX(24px)}}
html body.motion-paused :is(.tx-wire,.tx-packet),html body.motion-paused .tx-fx::after{animation:none}
@media(prefers-reduced-motion:reduce){html :is(.tx-wire,.tx-packet),html .tx-fx::after{animation:none}}
@media(max-width:700px){
 html .transfer-strip{flex-wrap:wrap;gap:14px;padding:14px}
 html .tx-link{width:72px;height:34px}
 html .transfer-strip .study-text{flex:1 1 180px}
 html .transfer-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}
 html .transfer-actions .transfer-secondary{grid-column:1/-1;min-height:32px}
 html .tx-panel{position:relative;top:auto;right:auto;grid-column:1/-1;grid-template-columns:1fr;width:auto;padding:14px}
 html .tx-qr{display:none}
 html .tx-hint-wide{display:none}
 html .tx-hint-narrow{display:inline}
}

/* 2026-10-30 audit: nothing under 12px (project rule), faint fixed-green labels follow the palette, no one-character line ends */
/* these were 9–11.5px after later modules (weather, guestbook, mobile overrides) */
html .brand-name>span,html .nav-caption,html .nav-count,html .sidebar-chat small,html .sidebar-domain,html kbd,html .eyebrow,html .tag-top,html .tag-bottom,html .section-index,html .card-tag,html .wx-source,html .wx-when small,html .wx-rain,html .message-length,html .message-head time,html .command-bottom,html .footer{font-size:12px}
html .eyebrow,html .section-index{letter-spacing:1.4px}
html .tag-bottom{letter-spacing:1px}
@media(max-width:700px){html .section-aside{font-size:12px}}
/* light.css kept these in fixed light greens (about 3:1 contrast, and off-palette on blue/purple/sand); space.css already themes the rest */
html :is(.brand-name>span,.nav-caption,.nav-count,.sidebar-chat small,.sidebar-domain,.section-aside,.top-date,kbd){color:var(--polish-muted)}
/* T-006: last fixed light fills that vanished on a dark custom background */
html .breadcrumb>span:last-child{color:var(--space-ink,#28322c)}
html kbd{background:color-mix(in srgb,var(--space-bg,#f1f4ec),var(--space-panel,#fff) 40%);border-color:var(--h-line)}
html .orbital-tag{background:color-mix(in srgb,var(--space-panel,#fff),transparent 45%)}
/* no orphan last characters (e.g. 「给忙碌留一点空 / 隙」, 「留点温 / 度。」); balance only where any split reads well,
   not on h2 like 「你好，我是 Gavin」, which balance would cut as 「你好，我 / 是 Gavin」 */
html :is(p,small,.card-tag){text-wrap:pretty}
html :is(.sidebar-chat small,.guest-compose h3){text-wrap:balance}
/* 701–1200px: the 0.85fr form column shrank to ~260px; give both guestbook columns equal room, one message per row */
@media(min-width:701px) and (max-width:1200px){
 html .guestbook-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
 html .message-feed{grid-template-columns:1fr}
}
