/* ================= 小程序五页面互动展览 =================
   两层结构，严格分开（这是上一版没做对的地方）：

     外部展览容器 .ex-viewport / .ex-stage
       占满桌面宽度，负责横向排列、切换、两侧露出邻页。

     内部小程序页面 .ex-page
       固定 **375 × 812pt** 的竖屏视口（原工程设计基准），
       内部一律按 pt 绝对布局，**不跟随外部容器宽度重排**；
       整页靠 JS 设置 transform:scale() 统一缩放，宽高同比。

   原工程基准（核对结果，见 exhibition-data.js 注释）：
     ui格式.psd / 收藏室.psd = 1125 × 2436（iPhone X 三倍图）
     → 375pt × 812pt，微信 750rpx，**1rpx = 0.5pt**
   源码里的 rpx 数值一律 ×0.5 得到这里的 pt 值。

   只做电脑端；侧页本轮只整体缩小 + 轻微压暗，取消旋转。 */

.ex-section{
  position:relative;
  padding:clamp(48px,6vh,88px) var(--gutter) clamp(36px,4.5vh,64px);
  background:var(--black-absolute);
  z-index:5;
}
.ex-inner{max-width:var(--content-max);margin:0 auto}

/* ---------- 上方：精简介绍 ---------- */
.ex-head{max-width:78ch;margin:0 0 clamp(22px,3vh,38px)}
.ex-name{
  margin:0 0 12px;
  font-family:var(--font-display-cn);
  font-weight:700;
  font-size:clamp(26px,2.8vw,42px);
  line-height:1.18;
  letter-spacing:-.02em;
  color:var(--text-primary);
}
.ex-intro{
  margin:0 0 16px;
  font-family:var(--font-ui);
  font-size:15px;
  line-height:1.9;
  color:var(--text-secondary);
}
.ex-role{margin:0;font-family:var(--font-ui);font-size:13px;line-height:1.8;color:var(--text-secondary)}
.ex-role b{color:var(--text-primary);font-weight:500}

/* ---------- 中间：展览区 ---------- */
.ex-viewport{
  position:relative;
  overflow:hidden;
  padding:clamp(14px,2vh,26px) 0;
  cursor:grab;
  touch-action:pan-y;
  user-select:none;
}
.ex-viewport.is-dragging{cursor:grabbing}
/* 页面内部可滚动区域用默认游标，和"拖动切页"区分 */
.ex-scroll{cursor:default}

/* 舞台高度由 JS 按可用高度写入 --stage-h；页面尺寸也由 JS 算 */
.ex-stage{
  position:relative;
  height:var(--stage-h,520px);
  /* 必须是 flat：preserve-3d 会让命中区与可见区错位（实测差 310px） */
  transform-style:flat;
}

/* ---------- 竖屏页面：固定 375×812pt，整体缩放 ---------- */
.ex-page{
  position:absolute;
  top:50%;
  left:0;
  /* 设计尺寸固定；缩放由 --scale 决定，宽高同比，不做独立拉伸 */
  width:375px;
  height:812px;
  margin-top:-406px;                 /* 812 / 2，垂直居中 */
  transform-origin:center center;
  transform:scale(var(--scale,0.64));
  border-radius:16px;
  overflow:hidden;
  background:#E0F2FE;
  box-shadow:0 0 0 5px #15161a,0 0 0 6px rgba(236,234,228,.1),
             0 30px 60px -30px rgba(0,0,0,.95);
  transition:transform 560ms cubic-bezier(.22,1,.36,1),
             left 560ms cubic-bezier(.22,1,.36,1),
             opacity 380ms linear;
}
/* 页面内部：所有定位都以这层为参照，尺寸就是 375×812 */
.ex-page-inner{
  position:absolute;
  inset:0;
  width:375px;
  height:812px;
  overflow:hidden;
}
/* 非当前页暂停持续动画（沿用原工程的 animation-play-state:paused） */
.ex-page.is-paused *{animation-play-state:paused !important}

/* 页面内可滚动区域 */
.ex-scroll{
  overflow-y:auto;
  overscroll-behavior:contain;
  scrollbar-width:none;
}
.ex-scroll::-webkit-scrollbar{width:0;height:0}

/* ================= 海滩（按源码逐值换算） =================
   bottom: calc(safe-area + 320rpx) → 160pt
   ocean-area height: 35vh → 812 × 0.35 = 284pt
   float-bottle: 38 × 95（源码就是 px，直接用）
   bottom-actions: bottom 90px、padding 0 24px、gap 16px
   top-header: top 60px、padding 0 24px
   greeting-title: 32px/900；greeting-sub: 16px/bold
   star-dust-badge: padding 10rpx 28rpx(5/14pt)、radius 40rpx(20pt) */
.ex-beach{position:absolute;inset:0;background:#E0F2FE;overflow:hidden}

.ex-beach-swiper{position:absolute;top:0;left:0;width:375px;height:812px;z-index:0}
.ex-beach-poster,
.ex-beach-video{
  position:absolute;inset:0;
  width:375px;height:812px;
  object-fit:cover;
  object-position:center top;        /* 沿用源码 background-position:center top */
  display:block;
}
.ex-beach-poster{z-index:1}
.ex-beach-video{z-index:2}

/* top-header：top 60pt、左右 24pt */
.ex-beach-head{
  position:absolute;
  top:60px;left:0;
  width:375px;
  padding:0 24px;
  box-sizing:border-box;
  z-index:10;
  pointer-events:none;
}
.ex-dust{
  display:inline-flex;align-items:center;gap:5px;
  background:#fff;
  padding:5px 14px;
  border-radius:20px;
  box-shadow:0 2px 7.5px rgba(0,0,0,.08);
  margin-bottom:12px;                /* .status-bar margin-bottom:24rpx */
}
.ex-dust img{width:16px;height:16px;object-fit:contain}
.ex-dust span{font-family:var(--font-ui);font-size:13px;color:#3a3a3a}
.ex-zone{display:flex;flex-direction:column;align-items:flex-start}
.ex-zone b{
  font-family:var(--font-display-cn);
  font-size:32px;font-weight:900;
  color:#fff;
  letter-spacing:2px;
  text-shadow:0 2px 10px rgba(0,0,0,.3);
  margin-bottom:8px;
}
.ex-zone i{
  font-family:var(--font-ui);
  font-size:16px;font-weight:700;font-style:normal;
  color:rgba(255,255,255,.95);
  letter-spacing:1px;
  text-shadow:0 2px 6px rgba(0,0,0,.4);
}

/* ocean-area：bottom 160pt、高 284pt、pointer-events:none */
.ex-ocean{
  position:absolute;
  bottom:160px;left:0;
  width:375px;height:284px;
  z-index:5;
  pointer-events:none;
}

/* float-bottle：38 × 95，命中区自身开启 */
.ex-bottle{
  position:absolute;
  width:38px;height:95px;
  padding:0;border:0;background:none;
  pointer-events:auto;
  cursor:pointer;
  transform-origin:50% 88%;
  animation-duration:4.6s;
  animation-timing-function:ease-in-out;
  animation-iteration-count:infinite;
  animation-play-state:inherit;
}
/* 源码 .float-bottle image：
   ① -webkit-mask-image: linear-gradient(to bottom, #000 80%, transparent 95%)
      —— 这就是"半遮罩"的真实实现，瓶身下部自然淡出
   ② 贴图 z-index:2 */
.ex-bottle img{
  position:relative;
  z-index:2;
  width:100%;height:100%;
  object-fit:contain;
  display:block;
  -webkit-mask-image:linear-gradient(to bottom,#000 80%,transparent 95%);
  mask-image:linear-gradient(to bottom,#000 80%,transparent 95%);
}
/* 源码 .float-bottle::after：瓶底的椭圆水光
   bottom 5px、left 50% margin-left -20px、40×10、rgba(255,255,255,.4) + 白光 */
.ex-bottle::after{
  content:'';
  position:absolute;
  bottom:5px;left:50%;
  margin-left:-20px;
  width:40px;height:10px;
  background:rgba(255,255,255,.4);
  border-radius:50%;
  box-shadow:0 0 10px rgba(255,255,255,.6);
  z-index:1;
  pointer-events:none;
}
/* 有回信的瓶子：源码 reply-badge 的红橙渐变胶囊 + floatBadge 动画
   top -30rpx(-15pt)、padding 4rpx 14rpx(2/7pt)、radius 20rpx(10pt)、字号 18rpx(9pt) */
.ex-bottle.is-reply::before{
  content:'💌';
  position:absolute;
  top:-15px;left:50%;
  transform:translateX(-50%);
  display:flex;align-items:center;justify-content:center;
  min-width:22px;height:14px;
  background:linear-gradient(135deg,#EF4444,#F59E0B);
  border-radius:10px;
  border:1px solid #fff;
  box-shadow:0 2px 5px rgba(239,68,68,.5);
  font-size:9px;line-height:1;
  z-index:10;
  animation:ex-float-badge 2.8s infinite ease-in-out;
}
@keyframes ex-float-badge{
  0%,100%{transform:translateX(-50%) translateY(0)}
  50%{transform:translateX(-50%) translateY(-2px)}   /* -4rpx = -2pt */
}

/* 源码三条浮动动画：名字与数值一致（rotate 角度是原设计，不是变形） */
.ex-bob1{animation-name:ex-bob1}
.ex-bob2{animation-name:ex-bob2}
.ex-bob3{animation-name:ex-bob3}
@keyframes ex-bob1{
  0%,100%{transform:translateY(0) rotate(-11deg)}
  50%{transform:translateY(-4px) rotate(-8deg)}
}
@keyframes ex-bob2{
  0%,100%{transform:translateY(0) rotate(10deg)}
  50%{transform:translateY(-4px) rotate(14deg)}
}
@keyframes ex-bob3{
  0%,100%{transform:translateY(0) rotate(-14deg)}
  50%{transform:translateY(-4px) rotate(-10deg)}
}

/* bottom-actions：bottom 90pt、padding 0 24pt、gap 16pt */
.ex-beach-actions{
  position:absolute;
  bottom:90px;left:0;
  width:375px;
  padding:0 24px;
  box-sizing:border-box;
  display:flex;gap:16px;
  z-index:20;
}
/* action-btn：padding 18pt 0、radius 20pt */
.ex-action{
  flex:1;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:18px 0;
  border:0;border-radius:20px;
  font-family:var(--font-ui);
  font-size:15px;font-weight:700;color:#fff;
  background:rgba(255,255,255,.92);
  cursor:pointer;
  transition:transform 130ms ease-out;
}
.ex-action b{font-size:12px;font-weight:400;opacity:.75;margin-top:2px}
.ex-action.is-primary{
  background:linear-gradient(145deg,#FDE047,#F59E0B);
  box-shadow:0 8px 20px rgba(245,158,11,.25);
  color:#fff;
}
.ex-action:not(.is-primary){color:#3a3a3a}
.ex-action:active{transform:scale(.97)}

/* 悬浮按钮组：right 30rpx(15pt)、top 25%、gap 75rpx(37.5pt) */
.ex-floats{
  position:absolute;
  right:15px;top:25%;
  display:flex;flex-direction:column;gap:37.5px;
  z-index:100;
}
.ex-float-btn{
  width:32px;height:32px;
  border:0;background:none;padding:0;
  cursor:pointer;
}
.ex-float-btn img{width:100%;height:100%;object-fit:contain;display:block}

/* 刷新按钮：right 30rpx(15pt)、top 52%、64rpx(32pt) 圆 */
.ex-refresh{
  position:absolute;
  right:15px;top:52%;
  width:32px;height:32px;
  border-radius:50%;
  border:0;
  display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.88);
  color:#64748B;
  font-size:20px;font-weight:700;line-height:1;
  box-shadow:0 4px 11px rgba(15,23,42,.12);
  cursor:pointer;
  z-index:95;
}

/* ================= 弹窗（示例内容） =================
   modal-mask：rgba(15,23,42,.5) + blur(4pt)；纸面 #FAFAFA */
.ex-modal{position:absolute;inset:0;z-index:60;display:flex;align-items:center;justify-content:center}
.ex-modal[hidden]{display:none}
.ex-modal-mask{position:absolute;inset:0;background:rgba(15,23,42,.5);backdrop-filter:blur(4px)}
.ex-sheet{
  position:relative;
  width:300px;                        /* 约屏宽 80% */
  max-height:640px;
  display:flex;flex-direction:column;
  background:#FAFAFA;
  border-radius:20px;
  padding:18px;
  box-shadow:0 12px 28px rgba(0,0,0,.24);
  animation:ex-sheet-in .26s cubic-bezier(.22,1,.36,1);
  z-index:1;
}
@keyframes ex-sheet-in{from{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}
.ex-sheet-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:13px}
.ex-sheet-title{font-family:var(--font-ui);font-size:15px;font-weight:600;color:#33383d}
.ex-sheet-close{
  width:28px;height:28px;border:0;border-radius:50%;
  background:#E2E8F0;color:#64748B;font-size:15px;line-height:1;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.ex-paper{
  background:#fff;border:1px solid #EFEFEF;border-radius:12px;padding:16px;
  box-shadow:0 4px 16px rgba(0,0,0,.03);
  max-height:380px;overflow-y:auto;
}
/* 源码 .original-quote：灰底 + 左侧青色竖条（6rpx = 3pt） */
.ex-quote{
  background:rgba(0,0,0,.03);
  border-left:3px solid #76c3c4;
  padding:8px 10px;border-radius:4px;margin-bottom:12px;
}
.ex-quote b{display:block;font-family:var(--font-ui);font-size:11px;color:#76c3c4;margin-bottom:4px}
.ex-quote i{font-family:var(--font-ui);font-size:12px;font-style:italic;color:#666;line-height:1.5}
.ex-author{font-family:var(--font-ui);font-size:13px;font-weight:700;color:#999;margin-bottom:10px}
.ex-text{margin:0;font-family:var(--font-ui);font-size:15px;line-height:1.6;color:#222}
.ex-meta{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-top:14px;padding-top:11px;border-top:1px dashed #EAEAEA;
  font-family:var(--font-ui);font-size:11px;color:#9aa0a6;
}
.ex-meta em{
  font-style:normal;padding:2px 7px;border-radius:100px;
  background:rgba(118,195,196,.14);color:#4f9a9b;font-size:10px;
}
.ex-sheet-ok{
  margin-top:13px;padding:11px;border:0;border-radius:12px;
  background:#2A2A2A;color:#fff;font-family:var(--font-ui);
  font-size:14px;font-weight:600;cursor:pointer;
}

/* ================= 图鉴 =================
   collection-wrapper 100vh；art-bg z-index:1；invisible-grid z-index:5
   背景沿用原工程的整页图（1125×2436，object-fit:cover 不改变构图） */
.ex-collection{position:absolute;inset:0;overflow:hidden;background:#F8FAFC}
.ex-collection-bg{
  position:absolute;inset:0;width:375px;height:812px;
  object-fit:cover;object-position:center top;z-index:1;
}
.ex-shelf{
  position:absolute;
  top:78px;left:20px;right:20px;bottom:20px;
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:12px;
  align-content:start;
  overflow-y:auto;scrollbar-width:none;
  z-index:5;
}
.ex-shelf::-webkit-scrollbar{width:0}
.ex-slot{
  position:relative;
  aspect-ratio:1;
  border-radius:14px;
  background:rgba(255,255,255,.86);
  box-shadow:inset 0 0 0 1px rgba(150,140,120,.18);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:3px;padding:8px;
}
.ex-slot img{width:62%;max-height:56%;object-fit:contain;display:block}
.ex-slot span{font-family:var(--font-ui);font-size:10px;color:#7d7668;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.ex-slot em{font-family:var(--font-ui);font-size:9px;font-style:normal;color:#a8a294}
.ex-slot.is-locked{background:rgba(170,162,148,.18)}
.ex-lock{font-family:var(--font-ui);font-size:11px;font-style:normal;color:#a09884}
/* 稀有度发光：源码 gradePulseS/SS/SSS 的 drop-shadow 逐档数值（rpx→pt 减半） */
.ex-slot[data-grade="S"]{animation:ex-grade-s 2.4s ease-in-out infinite}
.ex-slot[data-grade="SS"]{animation:ex-grade-ss 4s linear infinite}
.ex-slot[data-grade="SSS"]{animation:ex-grade-sss 4s linear infinite}
@keyframes ex-grade-s{
  0%,100%{filter:drop-shadow(0 0 6px rgba(239,68,68,.7))}
  50%{filter:drop-shadow(0 0 10px rgba(248,113,113,.95))}
}
@keyframes ex-grade-ss{
  0%{filter:drop-shadow(0 0 6px rgba(244,114,182,.85))}
  25%{filter:drop-shadow(0 0 8px rgba(250,204,21,.9))}
  50%{filter:drop-shadow(0 0 8px rgba(34,211,238,.9))}
  75%{filter:drop-shadow(0 0 8px rgba(167,139,250,.9))}
  100%{filter:drop-shadow(0 0 6px rgba(244,114,182,.85))}
}
@keyframes ex-grade-sss{
  0%{filter:drop-shadow(0 0 7px rgba(236,72,153,.9))}
  33%{filter:drop-shadow(0 0 10px rgba(250,204,21,.95))}
  66%{filter:drop-shadow(0 0 10px rgba(34,211,238,.95))}
  100%{filter:drop-shadow(0 0 7px rgba(236,72,153,.9))}
}

/* ================= 好友 =================
   friends-container 100vh；page-bg z-index:-2；noise-overlay z-index:-1 opacity .05 */
.ex-friends{position:absolute;inset:0;overflow:hidden;background:#1a1a2e}
.ex-friends-bg{
  position:absolute;inset:0;width:375px;height:812px;
  object-fit:cover;object-position:center top;z-index:0;
}
/* 源码 .noise-overlay：同一份 SVG 噪点，z-index:-1、opacity .05 */
.ex-friends::before{
  content:'';position:absolute;inset:0;z-index:1;opacity:.05;pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
/* list-top-mask：高 120rpx(60pt)，从 list-top-mask 的深色渐隐 */
.ex-friends-mask{
  position:absolute;top:0;left:0;width:375px;height:60px;z-index:2;pointer-events:none;
  background:linear-gradient(to bottom,rgba(26,26,46,.42),rgba(26,26,46,0));
}
.ex-friend-list{
  position:absolute;top:96px;left:20px;right:20px;bottom:20px;
  overflow-y:auto;scrollbar-width:none;z-index:3;
}
.ex-friend-list::-webkit-scrollbar{width:0}
.ex-friend{
  display:flex;align-items:center;gap:12px;width:100%;
  padding:12px 13px;margin-bottom:10px;border:0;text-align:left;
  border-radius:16px;
  background:rgba(255,255,255,.08);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);
  cursor:pointer;
  animation:ex-slide-in .4s cubic-bezier(.22,1,.36,1) both;
}
@keyframes ex-slide-in{from{transform:translateX(30px);opacity:0}to{transform:translateX(0);opacity:1}}
.ex-avatar{
  flex:0 0 auto;width:40px;height:40px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:19px;
  background:linear-gradient(150deg,#3b3b5c,#26263f);
}
.ex-friend-txt{flex:1;min-width:0}
.ex-friend-txt b{display:block;font-family:var(--font-ui);font-size:14px;font-weight:600;color:#eef1f6;margin-bottom:3px}
.ex-friend-txt i{display:block;font-family:var(--font-ui);font-size:11px;font-style:normal;color:rgba(238,241,246,.55)}
.ex-dot{width:8px;height:8px;border-radius:50%;background:#ef4444;flex:0 0 auto}
.ex-friend.is-open{background:rgba(118,195,196,.18);box-shadow:inset 0 0 0 1px rgba(118,195,196,.5)}

/* ================= 盲盒 =================
   puzzle-wrapper 100vh；page-bg z-index:-2；noise-overlay opacity .4 */
.ex-puzzle{position:absolute;inset:0;overflow:hidden;background:#F1F5F9}
.ex-puzzle-bg{
  position:absolute;inset:0;width:375px;height:812px;
  object-fit:cover;object-position:center top;z-index:0;
}
.ex-puzzle::before{
  content:'';position:absolute;inset:0;z-index:1;opacity:.05;pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
.ex-board{
  position:absolute;
  top:110px;left:60px;right:60px;
  display:grid;
  grid-template-columns:repeat(var(--cols,3),1fr);
  gap:4px;
  z-index:5;
}
.ex-piece{
  aspect-ratio:1;border:0;padding:0;border-radius:7px;
  background:rgba(170,162,148,.2);
  background-size:300% 300%;
  cursor:default;
}
.ex-piece.is-owned{cursor:pointer;box-shadow:0 2px 8px -3px rgba(40,40,70,.45)}
.ex-piece:disabled{opacity:.55}
.ex-piece.is-pop{animation:ex-pop .3s cubic-bezier(.34,1.56,.64,1)}
@keyframes ex-pop{from{transform:scale(.5);opacity:.4}to{transform:scale(1);opacity:1}}
.ex-piece.is-owned:hover{transform:scale(1.06);transition:transform .16s}
.ex-puzzle-foot{
  position:absolute;bottom:56px;left:0;width:375px;
  text-align:center;
  font-family:var(--font-ui);font-size:13px;color:#7c8593;
  z-index:5;
}

/* ================= 我的 =================
   me-page min-height:100vh；bg-header z-index:-1 */
.ex-me{position:absolute;inset:0;overflow:hidden;background:#E0F2FE}
.ex-me-bg{
  position:absolute;inset:0;width:375px;height:812px;
  object-fit:cover;object-position:center top;z-index:0;
}
.ex-me-body{
  position:absolute;top:96px;left:20px;right:20px;bottom:20px;
  overflow-y:auto;scrollbar-width:none;z-index:3;
}
.ex-me-body::-webkit-scrollbar{width:0}
.ex-card{
  border-radius:16px;padding:15px;margin-bottom:12px;
  background:rgba(255,255,255,.9);
  box-shadow:0 6px 18px -12px rgba(20,40,70,.5);
  animation:ex-fade-in .4s ease both;
}
@keyframes ex-fade-in{from{opacity:0}to{opacity:1}}
.ex-card-title{
  font-family:var(--font-ui);font-size:12px;font-weight:600;color:#57503f;margin-bottom:11px;
}
.ex-checkin{display:flex;gap:6px}
.ex-day{
  flex:1;text-align:center;padding:8px 0;border-radius:9px;
  font-family:var(--font-ui);font-size:11px;color:#8a8375;
  background:rgba(170,162,148,.16);
}
.ex-day.is-done{background:linear-gradient(180deg,#ffe9a8,#ffd979);color:#5a4308;font-weight:600}
.ex-bars{display:flex;flex-direction:column;gap:10px}
.ex-bar-row{display:flex;align-items:center;gap:9px;font-family:var(--font-ui);font-size:11px;color:#6f6858}
.ex-bar{flex:1;height:6px;border-radius:100px;background:rgba(170,162,148,.22);overflow:hidden}
.ex-bar i{display:block;height:100%;border-radius:100px;background:linear-gradient(90deg,#ffd979,#a8d8ff)}

/* ================= 下方：页面名称与提示 ================= */
.ex-foot{
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  margin-top:clamp(16px,2.2vh,28px);
}
.ex-tabs{display:flex;gap:8px}
.ex-tab{
  display:flex;align-items:center;gap:7px;
  padding:8px 14px;border:1px solid rgba(236,234,228,.14);
  border-radius:100px;background:transparent;
  font-family:var(--font-ui);font-size:12.5px;color:var(--text-secondary);
  cursor:pointer;
  transition:border-color .25s,color .25s,background .25s;
}
.ex-tab img{width:16px;height:16px;object-fit:contain;opacity:.5}
.ex-tab:hover{border-color:rgba(217,223,114,.4);color:var(--text-primary)}
.ex-tab.is-active{border-color:rgba(217,223,114,.6);background:rgba(217,223,114,.1);color:var(--accent)}
.ex-tab.is-active img{opacity:1}
.ex-nav{display:flex;align-items:center;gap:14px}
.ex-hint{font-family:var(--font-ui);font-size:12px;letter-spacing:.04em;color:rgba(236,234,228,.4)}
.ex-arrow{
  width:38px;height:38px;border-radius:50%;
  border:1px solid rgba(236,234,228,.2);background:transparent;
  color:var(--text-primary);font-size:15px;cursor:pointer;
  transition:border-color .25s,color .25s,background .25s;
}
.ex-arrow:hover{border-color:var(--accent);color:var(--accent);background:rgba(217,223,114,.08)}
.ex-arrow:disabled{opacity:.28;cursor:default}

@media(prefers-reduced-motion:reduce){
  .ex-page,.ex-friend,.ex-card{transition:none;animation:none}
  .ex-bob1,.ex-bob2,.ex-bob3{animation:none}
}
