/* 卡片版信息流（1.5.0-cards，1.5.1 操作区改为一行淡色小字，1.5.2 卡片占满屏幕高度）。只在 feed-cards.js 接管后生效（.cards-on），没有脚本时仍是列表。 */
/* 1.5.2：卡片高度跟屏幕走（德荣 04:31、04:32）。--deck-top/--ctl-h/--player-h 由 feed-cards.js 量好；减法用动态视口高度。 */
.cards-on .feed-stack{--deck-top:230px;--ctl-h:32px;--player-h:0px;--peek:6px;--fit:calc(100vh - var(--deck-top) - var(--ctl-h) - var(--player-h) - var(--peek) - 8px - env(safe-area-inset-bottom,0px));--stack-h:clamp(220px,var(--fit),900px);position:relative;max-width:640px;margin:4px auto 0}
@supports (height:100dvh){.cards-on .feed-stack{--fit:calc(100dvh - var(--deck-top) - var(--ctl-h) - var(--player-h) - var(--peek) - 8px - env(safe-area-inset-bottom,0px))}}
@media (min-width:601px){.cards-on .swipe-card .prose{font-size:17px;line-height:1.8}}
.cards-on .feed-deck{position:relative;height:var(--stack-h);touch-action:none;overscroll-behavior:none;user-select:none;-webkit-user-select:none}
.cards-on .swipe-card{position:absolute;inset:0;display:flex;flex-direction:column;margin:0;padding:clamp(14px,4.2vw,24px) clamp(15px,4.6vw,26px) clamp(12px,3.4vw,18px);background:var(--sheet,#fbf8f1);border:1px solid var(--rule,#e2dbcb);border-radius:14px;box-shadow:0 4px 18px #2b2b2b0d;transform-origin:50% 50%;will-change:transform;transition:transform .22s ease-out,opacity .22s ease-out;touch-action:none;cursor:grab;overflow:hidden}
.cards-on .swipe-card.is-dragging{cursor:grabbing;box-shadow:0 12px 30px #2b2b2b22}
.cards-on .swipe-card.is-top{z-index:4}
.cards-on .swipe-card.is-flying{z-index:5;pointer-events:none}
.cards-on .swipe-card.is-next{z-index:2;transform:translateY(4px) scale(.98);pointer-events:none}
.cards-on .swipe-card.is-third{z-index:1;transform:translateY(8px) scale(.96);pointer-events:none}
/* 卡片不透明，底下第三张只露边，不透字 */
.cards-on .swipe-card.is-third>*{opacity:0}
.cards-on .swipe-card.is-gone{display:none}
.cards-on .swipe-card:not(.is-top) .prose{overflow:hidden}
.cards-on .swipe-card .insight-meta{flex:none}
/* 长正文：卡片内上下滚，底部渐隐提示还有内容 */
.cards-on .swipe-card .prose{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;touch-action:none;-webkit-overflow-scrolling:touch;padding-right:4px;user-select:none;-webkit-user-select:none}
.cards-on .swipe-card.has-more::after{content:"";position:absolute;left:1px;right:1px;bottom:1px;height:44px;border-radius:0 0 13px 13px;background:linear-gradient(#fbf8f100,var(--sheet,#fbf8f1));pointer-events:none}
.cards-on .swipe-card.feed-audio-current::before{display:none}
.cards-on .swipe-card.feed-audio-current{border-color:var(--mark,#e7c64b)}
/* 1.5.1：操作区只是一行淡色小字，没有边框和底色（德荣 04:20） */
.feed-swipe-controls{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:0 2px;margin-top:var(--peek,6px);color:var(--faint,#8f887b);opacity:.85;transition:opacity .6s ease,color .6s ease}
.feed-swipe-controls:hover,.feed-swipe-controls:focus-within{opacity:1}
.feed-swipe-controls.is-intro{opacity:1;color:var(--soft,#625c51)}
.feed-swipe-btn{display:inline-flex;align-items:center;min-height:44px;padding:12px 10px;margin:-6px 0;border:0;background:none;color:inherit;font:12.5px/1 var(--f-ui,system-ui);letter-spacing:.02em;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.feed-swipe-btn:hover:not(:disabled){color:var(--head,#2b2b2b)}
.feed-swipe-btn:focus-visible{outline:1.5px solid var(--mark-ink,#8a6a12);outline-offset:-4px;border-radius:6px}
.feed-swipe-btn:disabled{opacity:.4;cursor:default}
.feed-swipe-sep{font-size:12px;opacity:.6;user-select:none}
/* 第一次来的提示浮在卡片底部，不占行；淡出后不留空白 */
.feed-swipe-tip{position:absolute;left:50%;bottom:14px;z-index:7;max-width:calc(100% - 32px);margin:0;padding:6px 14px;transform:translateX(-50%);border-radius:999px;background:#fbf8f1f0;box-shadow:0 2px 12px #2b2b2b1f;color:var(--soft,#625c51);font:12.5px/1.4 var(--f-ui,system-ui);white-space:nowrap;text-align:center;pointer-events:none;transition:opacity .6s ease,visibility 0s linear 0s}
.feed-stack:not(.is-intro) .feed-swipe-tip{opacity:0;visibility:hidden;transition:opacity .6s ease,visibility 0s linear .6s}
.feed-stack-end{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;height:var(--stack-h);border:1px dashed var(--rule-2,#cec5b2);border-radius:14px;padding:24px}
.feed-stack-end[hidden],.feed-deck[hidden],.feed-liked[hidden],.feed-stack[hidden]{display:none}
.feed-stack-end-title{margin:0 0 6px;font-size:18px;color:var(--head,#2b2b2b)}
.feed-stack-end-sub{margin:0 0 18px;font-size:14px;color:var(--faint,#736c60)}
.feed-stack-end-actions{display:flex;gap:18px}
.feed-stack-end-actions .feed-tool{font-size:14px;border-bottom:1px solid var(--rule-2,#cec5b2)}
.feed-liked-head{display:flex;align-items:baseline;justify-content:space-between;padding:10px 0 4px;border-bottom:1px solid var(--rule,#e2dbcb)}
.feed-liked-head h2{margin:0;font-size:16px;font-weight:500;color:var(--soft,#5c564c)}
.feed-liked-empty{color:var(--faint,#736c60);font-size:14px;padding:24px 0}
.feed-liked-tool[aria-pressed="true"]{color:var(--mark-ink,#8a6a12)}
.feed-liked-row{display:flex;flex-direction:column;border-bottom:1px solid var(--rule,#e2dbcb)}
.feed-liked-row .feed-liked-item{border-bottom:0;padding-bottom:4px}
.feed-unlike{align-self:flex-end;margin:0 0 10px;font-size:13px;min-height:44px;padding:8px 4px}
@media (max-width:600px){
  .cards-on .swipe-card{border-radius:12px}
  .cards-on .swipe-card .prose{font-size:clamp(15px,4.1vw,16.5px);line-height:1.72}
  .feed-swipe-controls{gap:0 6px}
  .feed-swipe-btn{padding:12px clamp(8px,3vw,14px)}
}
@media (prefers-reduced-motion:reduce){.cards-on .swipe-card{transition:none}}
/* 1.5.1 沉浸：卡片上方「收藏 · 连续播放」也淡一点、小一点 */
.cards-on .feed-tools{font-size:12.5px;margin-bottom:0;padding-block:0}
.cards-on .feed-tools .feed-tool{color:var(--faint,#8f887b)}
.cards-on .feed-tools .feed-tool:hover,.cards-on .feed-tools .feed-tool[aria-pressed="true"]{color:var(--soft,#625c51)}
/* 很矮的屏幕（横屏手机）：卡片按整屏高度算，下滑一点即满屏 */
.cards-on .feed-stack.is-short{scroll-margin-top:8px}
@media (max-height:500px) and (orientation:landscape){.cards-on .swipe-card .prose{font-size:16px;line-height:1.65}}
/* 1.5.2 很矮的屏幕（横屏手机）：头部不再吸顶，否则滚到卡片时人名和日期被头部盖住 */
@media (max-height:500px){body:has(.feed-stack) header.site{position:static}}
/* 1.6.2 首页一屏放完、整页不滚（德荣 10:0x）：feed-cards.js 只在首页卡片视图加 .feed-locked；页脚不显示；卡片高度按剩下的空间算，矮屏也不溢出。 */
html.feed-locked,html.feed-locked body{height:100%;overflow:hidden;overscroll-behavior:none}
/* 1.6.4 iPhone Safari：右滑时卡片移出右边，页面变宽，整页跟着往右拖（左滑出界在左边，不会变宽，所以没事）。
   有卡片的页面横向一律裁掉（clip 不产生滚动容器，旧 Safari 退回 hidden），并关掉横向回弹；只让卡片自己动。 */
html.feed-locked,html.feed-locked body,html:has(.cards-on),html:has(.cards-on) body{overflow-x:hidden;overflow-x:clip;overscroll-behavior-x:none;max-width:100%}
html.feed-locked body{position:relative;touch-action:pan-y pinch-zoom}
/* 手机上卡片的横向出界在 main（全宽）这一层就裁掉，body 不再变宽（body 是 hidden 滚动容器，iOS 仍可能被拖动）。桌面 main 居中不全宽，不裁，免得飞出去的卡片被切。 */
@media (max-width:760px),(pointer:coarse){main.cards-on{overflow-x:hidden;overflow-x:clip}}
html.feed-locked .foot{display:none}
html.feed-locked .cards-on .feed-stack{--stack-h:clamp(120px,var(--fit),900px)}
html.feed-locked .feed{padding-bottom:0}
@media (max-height:500px){html.feed-locked header.site .in{height:44px}html.feed-locked .company-bar{padding-block:0}html.feed-locked .feed-tools{min-height:28px;margin-block:2px -2px}}
@media (max-height:500px){html.feed-locked body.feed-audio-open .company-bar,html.feed-locked body.feed-audio-open .feed-tools{display:none}}
.feed-undo-icon{display:block;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
/* 1.6.4 卡片正文两端对齐（德荣）：中文按字均匀分配（text-justify: inter-character，不支持的浏览器用默认两端对齐），最后一行靠左；
   英文长词允许断开，避免一行里空隙太大。只作用于卡片正文，文章页不变。 */
.cards-on .swipe-card .prose :is(p,li,blockquote){text-align:justify;text-justify:inter-character;text-align-last:start;-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word;word-break:normal;line-break:strict}
/* 1.6.4 卡片是一整块（德荣）：长按不能选字、不弹拷贝菜单、点按没有文字高亮；按下时整张卡轻轻缩一点、阴影变浅，松开复原。
   评论面板在卡片外面，输入框照样能选能改。 */
.cards-on .swipe-card,.cards-on .swipe-card *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
.cards-on .swipe-card.is-top.is-pressed:not(.is-dragging){transform:scale(.98);box-shadow:0 2px 10px #2b2b2b14;transition:transform .12s ease-out,box-shadow .12s ease-out}
@media (prefers-reduced-motion:reduce){.cards-on .swipe-card.is-top.is-pressed:not(.is-dragging){transform:none}}


/* 1.6.5 上下滑（feed-cards.js 顶部说明）：要去的图标随拖动距离变红（主反馈），旁边一圈很淡的红晕（次要）；落进去时心填满轻弹 / 垃圾桶掀盖。
   只动 transform / opacity / color。 */
.cards-on .swipe-card.is-flying{will-change:transform,opacity}
.feed-swipe-controls{gap:0 clamp(18px,7vw,34px)}
/* 拖动 / 飞走的卡片从图标下面过，图标始终看得见、红色看得见 */
.cards-on .feed-swipe-controls,.cards-on .feed-tools{position:relative;z-index:8}
.cards-on .feed-tint.is-warm,.cards-on .feed-tint.is-catch{background:var(--ground,#F6F2E8);border-radius:999px;box-shadow:0 0 0 4px var(--ground,#F6F2E8)}
.feed-swipe-controls.is-live{opacity:1}
.feed-swipe-btn{position:relative}
.feed-swipe-btn.is-trash{min-width:48px;justify-content:center}
.feed-tint{--k:0;transition:color .32s ease-out}
html.feed-dragging .feed-tint{transition-duration:.05s}
.feed-tint svg{position:relative;z-index:1;transform:scale(calc(1 + var(--k) * .12));transition:transform .32s cubic-bezier(.34,1.36,.64,1)}
html.feed-dragging .feed-tint svg{transition-duration:.08s}
.feed-tint.is-armed svg{transform:scale(1.2)}
.feed-tint::before{content:"";position:absolute;left:50%;top:50%;width:40px;height:40px;margin:-20px 0 0 -20px;border-radius:50%;background:radial-gradient(closest-side,color-mix(in srgb,var(--dr-red) 22%,transparent),transparent);opacity:calc(var(--k) * .8);transform:scale(calc(.6 + var(--k) * .5));pointer-events:none;transition:opacity .32s ease-out,transform .32s ease-out}
.feed-liked-tool.feed-tint::before{left:calc(2px + 9px);}
html.feed-dragging .feed-tint::before{transition-duration:.05s}
.feed-trash-icon,.feed-fav-icon{display:block;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;overflow:visible}
.feed-fav-icon{transition:fill .25s ease-out}
.feed-trash-lid{transform-box:view-box;transform-origin:19px 7px}
.feed-liked-tool{position:relative;gap:6px}
.feed-tint.is-catch{color:var(--dr-red)!important}
.feed-liked-tool.is-catch .feed-fav-icon{fill:var(--dr-red)}
.feed-liked-tool.is-catch svg{animation:feed-fav-pop .42s cubic-bezier(.34,1.36,.64,1)}
.is-trash.is-catch .feed-trash-lid{animation:feed-lid-nudge .46s cubic-bezier(.34,1.36,.64,1)}
.is-trash.is-catch svg{animation:feed-trash-gulp .4s ease-out}
@keyframes feed-fav-pop{0%{transform:scale(1.2)}40%{transform:scale(1.42)}100%{transform:scale(1)}}
@keyframes feed-lid-nudge{0%{transform:rotate(0)}35%{transform:rotate(16deg) translateY(-1.5px)}70%{transform:rotate(-4deg)}100%{transform:rotate(0)}}
@keyframes feed-trash-gulp{0%{transform:scale(1.2)}45%{transform:scale(.9,1.06)}100%{transform:scale(1)}}
.feed-bloom{position:absolute;left:50%;top:50%;width:46px;height:46px;border-radius:50%;pointer-events:none;will-change:transform,opacity}
.feed-bloom.is-like,.feed-bloom.is-trash{background:radial-gradient(closest-side,color-mix(in srgb,var(--dr-red) 30%,transparent),transparent)}
.feed-liked-tool .feed-bloom{left:11px}
.feed-bloom.is-fav{width:64px;height:64px;background:radial-gradient(closest-side,color-mix(in srgb,var(--dr-red) 18%,transparent),transparent)}
/* 1.6.5 收藏夹浮层：从顶上入口展开，面板自己滚，整页不滚；后面一层遮罩。 */
.feed-liked-backdrop{position:fixed;inset:0;z-index:60;background:rgba(43,43,43,.22);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.feed-liked.is-sheet{position:fixed;z-index:61;top:var(--sheet-top,64px);left:max(10px,calc(50% - 320px));right:max(10px,calc(50% - 320px));bottom:calc(10px + env(safe-area-inset-bottom,0px));margin:0;padding:0 clamp(14px,4vw,22px) 12px;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;background:var(--sheet,#fbf8f1);border:1px solid var(--rule,#e2dbcb);border-radius:14px;box-shadow:0 18px 48px #2b2b2b33;will-change:transform,opacity}
.feed-liked.is-sheet .feed-liked-head{position:sticky;top:0;z-index:1;background:var(--sheet,#fbf8f1);padding-top:12px}
.feed-liked-backdrop[hidden],.feed-liked.is-sheet[hidden]{display:none}
@media (prefers-reduced-motion:reduce){.feed-tint,.feed-tint svg,.feed-tint::before{transition:none}.feed-tint.is-catch svg,.feed-tint.is-catch .feed-trash-lid{animation:none}}
