/* 星布谷地小工具 · 样式 */
:root{
  --cream:#FBF4E2;
  --paper:#FFFDF7;
  --ink:#3B332A;
  --ink-2:#7A6C5B;
  --ink-3:#A2947F;
  --line:#EBDFC6;
  --line-2:#F3EAD6;
  --accent:#F2B84B;
  --accent-2:#E39A28;
  --accent-soft:#FDF0D2;
  --green:#7FA96A;
  --shadow-sm:0 1px 2px rgba(94,74,40,.06), 0 2px 8px rgba(94,74,40,.05);
  --shadow-md:0 4px 10px rgba(94,74,40,.08), 0 14px 34px rgba(94,74,40,.10);
  --radius:16px;
  --q-s:#FCDB78;
  --q-a:#C3B0CB;
  --q-b:#9CC2C2;
  --t1:#F6F1E5; --t1b:#D6C9AF; --t1i:#6B5B43;
  --t2:#E3EEF8; --t2b:#A3C2DF; --t2i:#31597C;
  --t3:#F0E5F8; --t3b:#C6A9DF; --t3i:#5C3B78;
  --t4:#FBEBC8; --t4b:#E3BF7B; --t4i:#7A5312;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  font-family:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei","Noto Sans SC","Source Han Sans SC",system-ui,sans-serif;
  color:var(--ink);
  background:
    radial-gradient(900px 420px at 12% -10%, #FFF6DC 0%, rgba(255,246,220,0) 60%),
    radial-gradient(700px 380px at 100% 0%, #F6F1FF 0%, rgba(246,241,255,0) 62%),
    var(--cream);
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,p,ul,ol,figure{margin:0}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}
input{font:inherit}
img{display:block;max-width:100%}
a{color:inherit}

/* ---------- 顶栏 ---------- */
.topbar{
  position:sticky;top:0;z-index:30;
  background:rgba(251,244,226,.86);
  backdrop-filter:saturate(150%) blur(14px);
  -webkit-backdrop-filter:saturate(150%) blur(14px);
  border-bottom:1px solid var(--line);
}
.topbar__inner{
  max-width:1180px;margin:0 auto;padding:12px 20px;
  display:flex;align-items:center;gap:18px;justify-content:space-between;
}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.brand__mark{width:34px;height:34px;flex:0 0 auto;border-radius:11px;object-fit:cover;box-shadow:0 1px 3px rgba(120,90,40,.18)}
.brand__title{font-size:16px;font-weight:700;letter-spacing:.3px;white-space:nowrap}
.brand__title small{display:block;font-size:11px;font-weight:500;color:var(--ink-3);letter-spacing:1.5px;margin-top:1px}
.tabs{
  display:flex;gap:4px;padding:4px;background:#F1E5CB;border-radius:999px;
  box-shadow:inset 0 1px 2px rgba(120,95,50,.10);
}
.tab{
  padding:8px 20px;border-radius:999px;font-size:14px;font-weight:600;color:var(--ink-2);
  transition:background .18s, color .18s, box-shadow .18s;
  white-space:nowrap;
}
.tab:hover{color:var(--ink)}
.tab[aria-selected="true"]{background:var(--paper);color:var(--ink);box-shadow:var(--shadow-sm)}

/* ---------- 主体 ---------- */
.main{max-width:1180px;margin:0 auto;padding:22px 20px 72px}
.view[hidden]{display:none}
.toolbar{display:flex;flex-direction:column;gap:12px;margin-bottom:14px}

.search{position:relative;display:flex;align-items:center}
.search__icon{position:absolute;left:16px;width:18px;height:18px;color:var(--ink-3);pointer-events:none}
.search input{
  width:100%;padding:14px 44px 14px 44px;
  background:var(--paper);border:1px solid var(--line);border-radius:14px;
  font-size:15px;color:var(--ink);outline:none;
  box-shadow:var(--shadow-sm);
  transition:border-color .18s, box-shadow .18s;
}
.search input::placeholder{color:var(--ink-3)}
.search input:focus{border-color:var(--accent);box-shadow:0 0 0 4px rgba(242,184,75,.18)}
.search__clear{
  position:absolute;right:10px;width:28px;height:28px;border-radius:50%;
  display:none;align-items:center;justify-content:center;color:var(--ink-2);
  background:#F3ECDC;
}
.search__clear:hover{background:#EADFC8}
.search__clear[hidden]{display:none}
.search.has-value .search__clear{display:flex}

.filters{display:flex;flex-direction:column;gap:8px}
.fgroup{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fgroup__label{font-size:12px;color:var(--ink-3);flex:0 0 auto;width:32px;letter-spacing:.5px}
.chip{
  display:inline-flex;align-items:center;
  padding:6px 13px;border-radius:999px;background:var(--paper);
  border:1px solid var(--line);font-size:13px;color:var(--ink-2);
  transition:all .16s;
}
.chip--q::before{
  content:"";width:7px;height:7px;border-radius:50%;margin-right:6px;background:var(--dot,var(--ink-3));
}
.chip--q-gold{--dot:var(--t4b)}
.chip--q-purple{--dot:var(--t3b)}
.chip--q-blue{--dot:var(--t2b)}
.chip--q-white{--dot:var(--t1b)}
.chip:hover{border-color:var(--accent);color:var(--ink)}
.chip[aria-pressed="true"]{
  background:var(--ink);border-color:var(--ink);color:#FBF4E2;font-weight:600;
}
.chip__n{opacity:.55;margin-left:4px;font-size:11px}

.result-line{font-size:12.5px;color:var(--ink-3);margin:2px 2px 12px}
.result-line b{color:var(--ink-2);font-weight:600}

/* ---------- 主页 ---------- */
.home-figure{margin:0;display:flex;flex-direction:column;align-items:center;text-align:center}
.home-figure__img{
  display:block;width:100%;max-width:720px;height:auto;border-radius:20px;
  box-shadow:0 16px 44px rgba(60,44,20,.18);
}
.home-figure__cap{
  margin:30px 0 0;font-size:21px;line-height:1.8;
  color:var(--ink-2);letter-spacing:1px;
}
.home-figure__line{display:block}
.home-figure__sign{
  display:block;margin-top:8px;font-size:17px;color:var(--ink-3);
  letter-spacing:2px;transform:translateX(2.2em);
}

/* ---------- 菜谱卡片 ---------- */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(292px,1fr));gap:12px}
.rcard{
  display:flex;gap:12px;align-items:center;text-align:left;width:100%;
  padding:10px;background:var(--paper);border:1px solid var(--line);
  border-radius:var(--radius);box-shadow:var(--shadow-sm);
  transition:transform .18s ease, box-shadow .18s ease, border-color .18s;
}
.rcard:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:#E2D2B0}
.rcard__img{
  position:relative;flex:0 0 auto;width:64px;height:64px;border-radius:12px;
  background:var(--tint,var(--accent-soft));overflow:hidden;
  display:flex;align-items:center;justify-content:center;
}
.rcard__img img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:4px}
.rcard__img .ph{font-size:20px;color:#B9A582;font-weight:700;line-height:1}
.rcard__body{min-width:0;flex:1}
.rcard__top{display:flex;align-items:center;gap:6px}
.rcard__top h3{
  flex:1 1 auto;min-width:0;
  font-size:14.5px;font-weight:650;letter-spacing:.2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.q{
  flex:0 0 auto;font-size:10px;font-weight:700;line-height:1;letter-spacing:.2px;
  padding:4px 6px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;
  white-space:nowrap;
}
.q--gold{background:var(--t4);color:var(--t4i);border:1px solid var(--t4b)}
.q--purple{background:var(--t3);color:var(--t3i);border:1px solid var(--t3b)}
.q--blue{background:var(--t2);color:var(--t2i);border:1px solid var(--t2b)}
.q--white{background:var(--t1);color:var(--t1i);border:1px solid var(--t1b)}
.rcard__meta{display:flex;flex-wrap:wrap;gap:8px;font-size:11.5px;color:var(--ink-3);margin-top:5px}
.rcard__meta span{display:inline-flex;align-items:center;gap:3px}
.rcard__tags{font-size:11.5px;color:var(--ink-2);margin-top:3px;opacity:.85;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rcard__ings{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.rcard__ings i{
  font-style:normal;font-size:11px;color:var(--ink-2);
  background:#F7EFDC;border-radius:6px;padding:1.5px 6px;
}
.rcard__attrs{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;font-size:11px;color:var(--ink-3);margin-top:5px}
.rcard__attrs b{font-weight:600;color:var(--ink-2)}

/* 字母索引 */
.letterbar{display:flex;flex-wrap:wrap;gap:2px;align-items:center}
.letterbar__label{font-size:11.5px;color:var(--ink-3);margin-right:6px;flex:0 0 auto}
.letter{
  min-width:24px;height:24px;padding:0 5px;border-radius:7px;
  font-size:11.5px;font-weight:700;color:var(--ink-2);
  transition:background .15s, color .15s;
}
.letter:hover:not(:disabled){background:var(--accent-soft);color:#8A6216}
.letter[aria-pressed="true"]{background:var(--ink);color:#FBF4E2}
.letter:disabled{opacity:.28;cursor:default}

.empty{padding:56px 0;text-align:center;color:var(--ink-3);font-size:14px}

/* ---------- 弹窗 ---------- */
.modal{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:20px}
.modal[hidden]{display:none}
.modal__backdrop{position:absolute;inset:0;background:rgba(48,38,24,.42);backdrop-filter:blur(3px)}
.modal__panel{
  position:relative;width:min(560px,100%);max-height:min(86vh,780px);overflow:auto;
  background:var(--paper);border-radius:22px;box-shadow:0 24px 60px rgba(60,44,20,.28);
  animation:pop .22s ease;
}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
.modal__close{
  position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:50%;
  background:rgba(255,253,247,.9);display:flex;align-items:center;justify-content:center;
  color:var(--ink-2);z-index:2;box-shadow:var(--shadow-sm)
}
.detail__hero{
  display:flex;gap:16px;align-items:center;padding:24px 24px 16px;
  background:linear-gradient(180deg,var(--tint,#FDF0D2),rgba(255,253,247,0));
}
.detail__img{
  position:relative;
  width:96px;height:96px;flex:0 0 auto;border-radius:18px;background:rgba(255,255,255,.6);
  display:flex;align-items:center;justify-content:center;overflow:hidden;
}
.detail__img img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:6px}
.detail__img .ph{font-size:30px;color:#B9A582;font-weight:700;line-height:1}
.detail__head{min-width:0}
.detail__no{font-size:11.5px;color:var(--ink-3);letter-spacing:1.4px}
.detail__name{font-size:21px;font-weight:700;margin-top:2px}
.detail__tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.tag{font-size:11px;padding:3px 9px;border-radius:999px;background:#F2E9D6;color:var(--ink-2)}
.detail__body{padding:0 24px 26px}
.detail__desc{font-size:13.5px;line-height:1.75;color:var(--ink-2);padding:4px 0 14px}
.sect{margin-top:6px}
.sect__title{font-size:12px;font-weight:700;letter-spacing:1.2px;color:var(--ink-3);margin-bottom:8px}
.ing{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:12px;background:#FCF7EA;margin-bottom:6px;flex-wrap:wrap}
.ing img{width:30px;height:30px;object-fit:contain}
.ing__name{font-size:13.5px;font-weight:600}
.ing__note{flex:1 0 100%;font-size:11px;color:var(--ink-3);line-height:1.6;margin-top:2px}
.kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin-top:8px}
.kv div{background:#FCF7EA;border-radius:12px;padding:8px 11px}
.kv dt{font-size:10.5px;color:var(--ink-3);letter-spacing:.6px}
.kv dd{margin:2px 0 0;font-size:13.5px;font-weight:600}
.buff{
  margin-top:8px;padding:12px 14px;border-radius:14px;
  background:linear-gradient(135deg,#FDF3DC,#F8EEDB);border:1px solid #EFDFC0;
}
.buff__name{font-size:13.5px;font-weight:700;display:flex;align-items:center;gap:8px}
.buff__tier{font-size:10.5px;padding:2px 8px;border-radius:999px;background:#fff;border:1px solid #E7D3AC;color:var(--ink-2)}
.buff__desc{font-size:12.5px;color:var(--ink-2);line-height:1.7;margin-top:6px}
.buff__eff{font-size:12.5px;color:var(--ink);margin-top:6px;font-weight:600}

/* ---------- 花朵 ---------- */
.grid--flowers{grid-template-columns:repeat(auto-fill,minmax(348px,1fr))}
.fcard{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:16px 16px 14px;display:flex;flex-direction:column}
.fcard__head{display:flex;align-items:center;gap:8px;margin-bottom:2px}
.fcard__head h3{font-size:16px;font-weight:700}
.badge{font-size:10.5px;padding:3px 9px;border-radius:999px;letter-spacing:.5px}
.badge--planet{background:#EAF2E1;color:#4E6B3C}
.badge--sea{background:#E3EEF8;color:#31597C}
.fcard__sub{font-size:11.5px;color:var(--ink-3);margin-top:4px}
.rules{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:10px}
.rule{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.op{color:var(--ink-3);font-size:15px;font-weight:700;min-width:16px;text-align:center;padding-bottom:15px}
.op--eq{color:var(--ink-2);font-size:16px}
/* 花色小卡：图片 + 名字，底色/描边表示品质 */
.fitem{display:flex;flex-direction:column;align-items:center;gap:4px;width:66px;flex:0 0 auto}
.fitem__img{
  width:58px;height:58px;border-radius:16px;border:1.5px solid var(--c-b);
  background:var(--c-bg);display:flex;align-items:center;justify-content:center;overflow:hidden;
}
.fitem__img img{width:52px;height:52px;object-fit:contain;display:block}
.fitem__name{font-size:11.5px;font-weight:650;color:var(--c-i);line-height:1;white-space:nowrap}
.fitem__ph{font-size:22px;color:var(--c-i);opacity:.45}
.fitem--out .fitem__img{box-shadow:0 3px 10px rgba(90,70,30,.14);border-width:2px}
.fitem--sm{width:50px}
.fitem--sm .fitem__img{width:42px;height:42px;border-radius:12px}
.fitem--sm .fitem__img img{width:38px;height:38px}
.fitem--sm .fitem__name{font-size:10px}
.qc--white{--c-bg:var(--t1);--c-b:var(--t1b);--c-i:var(--t1i)}
.qc--blue{--c-bg:var(--t2);--c-b:var(--t2b);--c-i:var(--t2i)}
.qc--purple{--c-bg:var(--t3);--c-b:var(--t3b);--c-i:var(--t3i)}
.qc--gold{--c-bg:var(--t4);--c-b:var(--t4b);--c-i:var(--t4i)}
.fcard__foot{margin-top:auto;padding-top:14px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:11.5px;color:var(--ink-3)}
.dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:var(--t1b)}

/* 集色 */
.fcard__act{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line-2);flex-wrap:wrap}
.fcard__act p{flex:1;min-width:0;font-size:11.5px;color:var(--ink-3);line-height:1.5}
.fcard__act p b{color:var(--ink-2);font-weight:650}
.btn-mini{
  flex:0 0 auto;font-size:11.5px;font-weight:650;padding:5px 11px;border-radius:999px;
  background:var(--accent-soft);color:#8A6216;border:1px solid #EFDDB8;transition:.15s;
}
.btn-mini:hover{background:#FBE9C2;border-color:#E7CE9A}
.badge--special{background:#E2F0F7;color:#2C6A86}

.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;margin-top:14px}
.tile{
  position:relative;display:flex;flex-direction:column;align-items:center;gap:3px;
  padding:9px 6px 8px;border-radius:14px;border:1px solid var(--line);
  background:#FCF7EA;transition:transform .15s, border-color .15s, box-shadow .15s, background .15s;
}
.tile:hover{transform:translateY(-2px);border-color:#E2D2B0}
.tile img{width:52px;height:52px;object-fit:contain}
.tile__ph{width:52px;height:52px;border-radius:50%;background:#F1E6CE;display:flex;align-items:center;justify-content:center;color:#B9A582}
.tile__name{font-size:12.5px;font-weight:650;letter-spacing:.2px}
.tile__q{font-size:9px;padding:2px 6px;border-radius:999px;border:1px solid var(--c-b,var(--line));background:var(--c-bg,#F3EAD6);color:var(--c-i,var(--ink-2))}
.tile[aria-pressed="true"]{border-color:var(--accent);background:#FFF5DC;box-shadow:0 0 0 3px rgba(242,184,75,.16)}
.tile__check{
  position:absolute;top:6px;right:6px;width:16px;height:16px;border-radius:50%;
  background:var(--accent-2);color:#fff;font-size:10px;font-weight:800;
  display:none;align-items:center;justify-content:center;
}
.tile[aria-pressed="true"] .tile__check{display:flex}

.hint{
  margin-top:14px;padding:12px 14px;border-radius:14px;font-size:13px;line-height:1.75;
  background:linear-gradient(135deg,#FDF3DC,#FAEFD9);border:1px solid #EFDFC0;color:var(--ink-2);
}
.hint b{color:var(--ink);font-weight:700}
.hint__step{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px;font-size:13px}
.entry{
  margin-top:10px;padding:12px 14px;border-radius:14px;background:#FCF7EA;
  border:1px solid var(--line);font-size:12.5px;line-height:1.75;color:var(--ink-2);
}
.entry__name{font-size:13px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:8px}
.entry__meta{font-size:11px;color:var(--ink-3);margin-left:auto;font-weight:500}
.collect__bar{display:flex;gap:8px;align-items:center;margin-top:16px;flex-wrap:wrap}
.collect__bar .btn-mini{margin-left:auto}
.tile-grid-empty{font-size:12px;color:var(--ink-3);margin-top:12px}

.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--ink-3);margin:0 2px 12px}
.legend span{display:inline-flex;align-items:center;gap:5px}

.panel{background:var(--paper);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow-sm);padding:20px 22px;margin-top:22px}
.panel__title{font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px}
.panel__sub{font-size:12px;color:var(--ink-3);margin-top:4px}
.boards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:22px;margin-top:18px}
.board{display:flex;flex-direction:column;align-items:center;gap:10px}
.board figcaption{font-size:12.5px;color:var(--ink-2);text-align:center;line-height:1.5}
.board__grid{display:grid;grid-template-columns:repeat(3,44px);grid-template-rows:repeat(3,44px);gap:6px}
.cell{
  border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:800;color:#5B4722;
}
.cell--a{background:linear-gradient(160deg,#FBE1A6,#F4CE7C);box-shadow:inset 0 0 0 1px rgba(160,120,40,.15)}
.cell--b{background:linear-gradient(160deg,#CFE9E2,#A9D3C9);color:#26544C;box-shadow:inset 0 0 0 1px rgba(40,110,95,.15)}
.cell--e{background:transparent;border:1.5px dashed #E3D6BB}
.notes{list-style:none;padding:0;margin:14px 0 0;display:flex;flex-direction:column;gap:9px}
.notes li{position:relative;padding-left:26px;font-size:12.5px;line-height:1.7;color:var(--ink-2)}
.notes li::before{
  content:attr(data-n);position:absolute;left:0;top:1px;
  width:18px;height:18px;border-radius:50%;background:var(--accent-soft);color:#9A6E1C;
  font-size:10.5px;font-weight:800;display:flex;align-items:center;justify-content:center;
}
.notes b{color:var(--ink);font-weight:700}

/* 滚动条 */
.modal__panel::-webkit-scrollbar{width:8px}
.modal__panel::-webkit-scrollbar-thumb{background:#E4D5B8;border-radius:8px}

@media (max-width:720px){
  .topbar__inner{padding:10px 14px;gap:10px}
  .brand__title{font-size:14px}
  .brand__title small{display:none}
  .brand__mark{width:28px;height:28px}
  .tab{padding:7px 14px;font-size:13px}
  .main{padding:16px 14px 60px}
  .grid{grid-template-columns:1fr 1fr;gap:9px}
  .grid--flowers{grid-template-columns:1fr}
  .rcard{flex-direction:column;align-items:stretch;gap:8px;padding:9px}
  .rcard__img{width:100%;height:auto;aspect-ratio:4/3;border-radius:11px}
  .detail__hero{padding:20px 18px 12px;gap:14px}
  .detail__img{width:76px;height:76px}
  .detail__body{padding:0 18px 22px}
  .panel{padding:16px;border-radius:16px}
  .home-figure__img{border-radius:14px}
  .home-figure__cap{margin-top:20px;font-size:17px}
  .home-figure__sign{font-size:14px;transform:translateX(2em)}
  .modal{padding:0;align-items:flex-end}
  .modal__panel{width:100%;max-height:92vh;border-radius:22px 22px 0 0}
}
@media (max-width:560px){
  .brand__title{display:block;font-size:13px}
  .brand__title small{display:none}
  .topbar__inner{gap:8px;padding:9px 12px}
  .tabs{padding:3px;gap:2px}
  .tab{padding:7px 13px;font-size:12.5px}
  .fgroup{gap:7px}
  .fgroup__label{width:28px;font-size:11.5px}
  .chip{padding:5px 11px;font-size:12.5px}
  .main{padding:14px 12px 56px}
  .letterbar{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}
  .letter{flex:0 0 auto}
  .letterbar::-webkit-scrollbar{height:4px}
  .letterbar::-webkit-scrollbar-thumb{background:#E4D5B8;border-radius:4px}
}
@media (max-width:400px){
  .grid{grid-template-columns:1fr}
  .rcard{flex-direction:row}
  .rcard__img{width:76px;height:76px;aspect-ratio:auto}
}

/* ================= 动效 ================= */
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes zoomIn{from{opacity:0;transform:scale(.965)}to{opacity:1;transform:none}}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}

/* 切换栏目时整块淡入 */
.view.is-enter{animation:fadeUp .38s cubic-bezier(.22,.61,.36,1) both}

/* 主页：图片缩放淡入，文字随后浮上来 */
.home-figure__img{animation:zoomIn .75s cubic-bezier(.22,.61,.36,1) both}
.home-figure__cap{animation:fadeUp .7s .18s cubic-bezier(.22,.61,.36,1) both}

/* 卡片：花朵卡进入视口时依次浮现（菜谱卡之前会闪，已经回退成静态） */
html.js-anim .fcard{opacity:0;transform:translateY(12px)}
html.js-anim .fcard.is-in{
  opacity:1;transform:none;
  transition:opacity .45s ease var(--d,0ms), transform .45s ease var(--d,0ms);
}

/* 悬停细节 */
.fitem{transition:transform .22s ease}
.fitem:hover{transform:translateY(-3px)}
.fitem__img img{transition:transform .25s ease}
.fitem:hover .fitem__img img{transform:scale(1.06)}
.btn-mini,.btn-main,.btn-line{transition:transform .16s ease, background .16s ease, box-shadow .16s ease, border-color .16s ease}
.btn-mini:hover,.btn-main:hover,.btn-line:hover{transform:translateY(-1px)}
.btn-mini:active,.btn-main:active,.btn-line:active{transform:translateY(0) scale(.98)}
.tab:active{transform:scale(.97)}
.modal__backdrop{animation:fadeIn .2s ease both}

/* 品牌小花轻轻呼吸 */
.brand__mark{animation:floaty 6s ease-in-out infinite}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  html.js-anim .fcard{opacity:1;transform:none}
}

/* ================= 页头 / 筛选开关 ================= */
.page-head{margin:2px 2px 16px}
.page-title{font-size:24px;font-weight:800;letter-spacing:2px}
.page-sub{font-size:13px;color:var(--ink-3);margin-top:6px;line-height:1.6}

.filter-toggle{
  display:none;align-items:center;gap:6px;align-self:flex-start;
  padding:8px 14px;border-radius:999px;border:1px solid var(--line);
  background:var(--paper);font-size:13px;font-weight:650;color:var(--ink-2);
  box-shadow:var(--shadow-sm);
}
.filter-toggle__n{
  min-width:18px;height:18px;padding:0 5px;border-radius:999px;
  background:var(--accent);color:#4A3413;font-size:11px;font-weight:800;
  display:inline-flex;align-items:center;justify-content:center;
}
.filter-toggle__n[hidden]{display:none}

/* ================= 算种 ================= */
.calc-species{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.calc-panel{background:var(--paper);border:1px solid var(--line);border-radius:20px;padding:20px;box-shadow:var(--shadow-sm)}
.calc-head{display:flex;gap:12px;justify-content:space-between;align-items:flex-start;flex-wrap:wrap}
.calc-name{font-size:19px;font-weight:750;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.calc-sub{font-size:12px;color:var(--ink-3);margin-top:4px}
.calc-tools{display:flex;gap:6px}
.calc-progress{height:8px;border-radius:999px;background:#F2E8D3;overflow:hidden;margin:16px 0 6px}
.calc-progress span{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#F6C25E,#E8A33D);transition:width .4s ease}
.calc-progress__text{font-size:11.5px;color:var(--ink-3)}
.calc-tiles{margin-top:14px}
.calc-hint{margin-top:16px;padding:14px;border-radius:16px;background:linear-gradient(135deg,#FDF3DC,#FAEFD9);border:1px solid #EFDFC0}
.calc-hint--done{background:#EAF4E4;border-color:#CFE3C4;color:#4E6B3C;font-weight:650}
.calc-hint__title{font-size:12px;font-weight:700;letter-spacing:1px;color:#8A6216}
.calc-steps{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.calc-step{display:flex;align-items:center;gap:2px;padding:6px 8px;border-radius:12px;background:rgba(255,255,255,.6)}
.calc-hint__more{font-size:11.5px;color:var(--ink-3);margin-top:8px}
.calc-missing{margin-top:10px;font-size:12.5px;color:var(--ink-2);display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.calc-missing__c{padding:2px 8px;border-radius:999px;background:#F3E9D4;font-size:11.5px}
.calc-entry{margin-top:12px;padding:12px 14px;border-radius:14px;background:#FCF7EA;border:1px solid var(--line);font-size:12.5px;color:var(--ink-2);line-height:1.7}
.calc-entry__name{font-size:13px;font-weight:700;color:var(--ink);display:flex;gap:8px;align-items:center}
.calc-entry__meta{margin-left:auto;font-size:11px;color:var(--ink-3);font-weight:500}
.calc-entry__muted{color:var(--ink-3)}

/* ================= 移动端 ================= */
@media (max-width:720px){
  .topbar__inner{flex-wrap:wrap;gap:8px;padding:8px 12px}
  .brand{flex:0 0 auto}
  .tabs{
    order:3;width:100%;padding:3px;gap:2px;overflow-x:auto;
    scrollbar-width:none;-webkit-overflow-scrolling:touch;
  }
  .tabs::-webkit-scrollbar{display:none}
  .tab{flex:0 0 auto;padding:6px 11px;font-size:12.5px}
  .main{padding-bottom:64px}
  .filter-toggle{display:inline-flex}
  .filters{display:none}
  .filters.is-open{display:flex}
  .page-title{font-size:21px}
  .calc-panel{padding:16px;border-radius:16px}
  .calc-name{font-size:17px}
  .calc-tools{width:100%}
  .calc-tools .btn-mini{flex:1;text-align:center}
  .calc-steps{gap:8px}
}

@media (min-width:721px){
  .filter-toggle{display:none!important}
  .filters{display:flex!important}
}

@media (max-width:560px){
  .brand__title{display:block;font-size:13px}
  .brand__title small{display:none}
  .topbar__inner{gap:8px;padding:9px 12px}
  .tabs{padding:3px;gap:2px}
  .tab{padding:7px 13px;font-size:12.5px}
  .fgroup{gap:7px}
  .fgroup__label{width:28px;font-size:11.5px}
  .chip{padding:5px 11px;font-size:12.5px}
  .main{padding:14px 12px 56px}
  .letterbar{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}
  .letter{flex:0 0 auto}
  .letterbar::-webkit-scrollbar{height:4px}
  .letterbar::-webkit-scrollbar-thumb{background:#E4D5B8;border-radius:4px}
}
@media (max-width:400px){
  .grid{grid-template-columns:1fr}
  .rcard{flex-direction:row}
  .rcard__img{width:76px;height:76px;aspect-ratio:auto}
}

/* ================= 动效 ================= */
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes zoomIn{from{opacity:0;transform:scale(.965)}to{opacity:1;transform:none}}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}

/* 切换栏目时整块淡入 */
.view.is-enter{animation:fadeUp .38s cubic-bezier(.22,.61,.36,1) both}

/* 主页：图片缩放淡入，文字随后浮上来 */
.home-figure__img{animation:zoomIn .75s cubic-bezier(.22,.61,.36,1) both}
.home-figure__cap{animation:fadeUp .7s .18s cubic-bezier(.22,.61,.36,1) both}

/* 卡片：花朵卡进入视口时依次浮现（菜谱卡之前会闪，已经回退成静态） */
html.js-anim .fcard{opacity:0;transform:translateY(12px)}
html.js-anim .fcard.is-in{
  opacity:1;transform:none;
  transition:opacity .45s ease var(--d,0ms), transform .45s ease var(--d,0ms);
}

/* 悬停细节 */
.fitem{transition:transform .22s ease}
.fitem:hover{transform:translateY(-3px)}
.fitem__img img{transition:transform .25s ease}
.fitem:hover .fitem__img img{transform:scale(1.06)}
.btn-mini,.btn-main,.btn-line{transition:transform .16s ease, background .16s ease, box-shadow .16s ease, border-color .16s ease}
.btn-mini:hover,.btn-main:hover,.btn-line:hover{transform:translateY(-1px)}
.btn-mini:active,.btn-main:active,.btn-line:active{transform:translateY(0) scale(.98)}
.tab:active{transform:scale(.97)}
.modal__backdrop{animation:fadeIn .2s ease both}

/* 品牌小花轻轻呼吸 */
.brand__mark{animation:floaty 6s ease-in-out infinite}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  html.js-anim .fcard{opacity:1;transform:none}
}
