/* Block optional navigation until the current spreadsheet settings are known. */
html:not([data-site-navigation="ready"]) .navbtn:not([data-target="home"]),
html:not([data-site-navigation="ready"]) .archive-mobile-nav a:not([href="#home"]),
html:not([data-site-navigation="ready"]) .archive-menu-links a[href^="#"],
html:not([data-site-navigation="ready"]) .page:not(#home),
[data-site-hidden="true"] { display: none !important; }
.archive-site .archive-mobile-nav { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: 1fr; }
/* 網站選單提示卡（載入中／載入失敗）：浮在畫面正中央的直式小卡。
   字是只收卡片用字的手寫字型小檔（fonts/nav-hand.woff，tools/build_nav_font.py 產生；改了 site-navigation.js 的文字要重跑）。 */
@font-face { font-family: 'SoraNavHand'; src: url('./fonts/nav-hand.woff') format('woff'); font-weight: 700; font-display: swap; }
.site-navigation-status {
  position: fixed;
  left: 50%;
  top: 50%;
  z-index: 250;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  width: min(300px, calc(100vw - 32px));
  padding: 8px 22px 18px;
  border: 2px solid #fff;
  border-radius: 30px;
  background:
    radial-gradient(circle at 30% 30%, rgba(184,173,240,.38) 0 1.3px, transparent 1.9px) 0 0 / 18px 18px,
    linear-gradient(180deg, #fdfcff 0%, #f1ecfc 100%);
  box-shadow: 0 0 0 3px #e4dcfa, 0 6px 0 3px rgba(102,90,156,.14), 0 22px 40px rgba(102,90,156,.22);
  color: #4a3f74;
  text-align: center;
  transform: translate(-50%, -50%);
  pointer-events: auto;
  animation: site-nav-pop .4s cubic-bezier(.3,1.5,.5,1) both;
}
html body .site-navigation-status, html body .site-navigation-status * { font-family: 'SoraNavHand', 'Noto Serif SC', serif !important; }
.site-navigation-status[hidden] { display: none !important; }
/* 角落的小星星 */
.site-navigation-status::before,
.site-navigation-status::after { position: absolute; font: 400 14px/1 sans-serif; pointer-events: none; animation: site-nav-twinkle 2.4s ease-in-out infinite; }
.site-navigation-status::before { content: '✦'; left: 18px; top: 16px; color: #c3b6f1; }
.site-navigation-status::after { content: '✦'; right: 20px; top: 34px; font-size: 10px; color: #f2a9c4; animation-delay: -1.2s; }
@keyframes site-nav-twinkle { 0%, 100% { opacity: .35; transform: scale(.75); } 50% { opacity: 1; transform: scale(1.1) rotate(15deg); } }
/* 失敗時的標題：白邊貼紙字 */
.site-navigation-title { display: none; margin: 2px 0 0; color: #2f2846; font-size: 21px; font-weight: 700; letter-spacing: .08em; line-height: 1.4; text-shadow: 2px 0 0 #fff, -2px 0 0 #fff, 0 2px 0 #fff, 0 -2px 0 #fff, 0 4px 0 rgba(102,90,156,.25); }
html[data-site-navigation="error"] .site-navigation-title { display: block; }
.site-navigation-line { display: inline-flex; align-items: center; justify-content: center; flex-wrap: wrap; }
.site-navigation-label { color: #6b5f93; font-size: 15px; font-weight: 700; letter-spacing: .03em; line-height: 1.6; text-wrap: balance; }
/* 載入中的三顆小點，輪流跳 */
.site-navigation-dots { display: inline-flex; gap: 4px; margin-left: 5px; }
.site-navigation-dots i { width: 5px; height: 5px; border-radius: 50%; background: #a99ae6; animation: site-nav-dot 1.1s ease-in-out infinite; }
.site-navigation-dots i:nth-child(2) { animation-delay: .15s; background: #f2a9c4; }
.site-navigation-dots i:nth-child(3) { animation-delay: .3s; background: #9fc6e8; }
@keyframes site-nav-dot { 0%, 60%, 100% { transform: none; } 30% { transform: translateY(-5px); } }
html[data-site-navigation="error"] .site-navigation-dots { display: none; }
/* 「重新載入選單」：圓圓的紫色軟糖按鈕。卡片進場後就不再動，按鈕才點得準 */
.site-navigation-status button {
  margin: 10px 0 0;
  padding: 9px 22px 10px;
  border: 0;
  border-radius: 999px;
  background: linear-gradient(180deg, #b3a5ee 0%, #8c7dcb 100%);
  box-shadow: inset 0 2px 0 rgba(255,255,255,.4), 0 4px 0 #6d5fa6, 0 8px 14px rgba(102,90,156,.28);
  color: #fff;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: .1em;
  text-shadow: 0 1px 0 rgba(77,66,124,.45);
  cursor: pointer;
  transition: transform .15s ease, box-shadow .15s ease;
}
.site-navigation-status button:hover { transform: translateY(-2px); box-shadow: inset 0 2px 0 rgba(255,255,255,.4), 0 6px 0 #6d5fa6, 0 10px 16px rgba(102,90,156,.3); }
.site-navigation-status button:active { transform: translateY(3px); box-shadow: inset 0 2px 0 rgba(255,255,255,.4), 0 1px 0 #6d5fa6, 0 3px 6px rgba(102,90,156,.25); }
.site-navigation-status button:focus-visible { outline: 3px dashed #a99ae6; outline-offset: 3px; }
.site-navigation-status button[hidden] { display: none; }
/* 載入失敗：上面是雙手合十道歉的小天（site-navigation.js 的 mountSorry） */
.site-navigation-art { display: none; }
html[data-site-navigation="error"] .site-navigation-art { position: relative; display: block; width: 150px; height: 150px; margin: -2px auto -4px; }
/* 圖的下緣是切掉的身體，底部淡出才不會有一條硬邊 */
.site-navigation-art img { display: block; width: 100%; height: 100%; max-width: none; pointer-events: none; -webkit-user-select: none; user-select: none; -webkit-mask-image: linear-gradient(180deg, #000 82%, transparent 100%); mask-image: linear-gradient(180deg, #000 82%, transparent 100%); transform-origin: 50% 100%; animation: site-nav-sorry 2.6s ease-in-out infinite; }
/* 合十拜託：只上下點頭（往下拜兩下），不左右晃 */
@keyframes site-nav-sorry {
  0%, 50%, 100% { transform: none; }
  15% { transform: translateY(4%) scale(1.02, .98); }
  30% { transform: translateY(.5%); }
  40% { transform: translateY(3%) scale(1.015, .985); }
}
@keyframes site-nav-pop { from { opacity: 0; transform: translate(-50%, -46%) scale(.9); } to { opacity: 1; transform: translate(-50%, -50%); } }
@media (prefers-reduced-motion: reduce) {
  html[data-site-navigation="error"] .site-navigation-status, .site-navigation-art img { animation: none; }
}
.site-navigation-loader { position: relative; display: block; width: 104px; height: 92px; margin: 16px auto 4px; }
html[data-site-navigation="error"] .site-navigation-loader { display: none; }
/* 600×600 畫布的下 2/3 才有東西：圖片往上超出外框，留出往上跳的空間 */
.site-navigation-jelly { position: absolute; left: 0; right: 0; bottom: 0; height: 104px; transform-origin: 50% 96%; animation: site-nav-hop .9s infinite; }
.site-navigation-jelly img { position: absolute; inset: 0; display: block; width: 100%; height: 100%; max-width: none; pointer-events: none; -webkit-user-select: none; user-select: none; }
.site-navigation-loader::after { content: ''; position: absolute; left: 22%; right: 26%; bottom: -1px; height: 7px; border-radius: 50%; background: rgba(53,49,72,.16); animation: site-nav-hop-shadow .9s infinite; }
.site-navigation-jelly .is-ear-l { transform-origin: 28% 52%; animation: site-nav-ear-l .9s infinite; }
.site-navigation-jelly .is-ear-r { transform-origin: 62% 58%; animation: site-nav-ear-r .9s infinite; }
.site-navigation-jelly .is-tail { transform-origin: 79% 88%; animation: site-nav-tail .45s ease-in-out infinite alternate; }
.site-navigation-jelly .is-face-01 { animation: site-nav-face-01 .9s infinite; }
.site-navigation-jelly .is-face-02 { opacity: 0; animation: site-nav-face-02 .9s infinite; }
/* 落地壓扁 → 拉長起跳 → 最高點 → 落下 → 壓扁回彈 */
@keyframes site-nav-hop {
  0%, 100% { transform: scale(1.16, .84); animation-timing-function: cubic-bezier(.3, 0, .5, 1); }
  16% { transform: translateY(-4%) scale(.9, 1.12); animation-timing-function: cubic-bezier(.2, .7, .4, 1); }
  45% { transform: translateY(-30%) scale(.98, 1.03); animation-timing-function: cubic-bezier(.6, 0, .8, .5); }
  74% { transform: translateY(-3%) scale(.92, 1.1); animation-timing-function: ease-out; }
  84% { transform: scale(1.18, .82); }
  92% { transform: scale(1.06, .95); }
}
@keyframes site-nav-hop-shadow { 0%, 100%, 84% { transform: scale(1.1, 1); opacity: 1; } 45% { transform: scale(.6, .8); opacity: .5; } }
/* 耳朵慢半拍：往上跳時往下壓、落下時往上甩 */
@keyframes site-nav-ear-l { 0%, 100% { transform: rotate(4deg); } 30% { transform: rotate(-10deg); } 70% { transform: rotate(8deg); } }
@keyframes site-nav-ear-r { 0%, 100% { transform: rotate(-4deg); } 30% { transform: rotate(10deg); } 70% { transform: rotate(-8deg); } }
@keyframes site-nav-tail { from { transform: rotate(-10deg); } to { transform: rotate(12deg); } }
@keyframes site-nav-face-01 { 0%, 26%, 66%, 100% { opacity: 1; } 30%, 62% { opacity: 0; } }
@keyframes site-nav-face-02 { 0%, 26%, 66%, 100% { opacity: 0; } 30%, 62% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  html:not([data-site-navigation="error"]) .site-navigation-status, .site-navigation-jelly, .site-navigation-jelly img, .site-navigation-loader::after { animation: none; }
  .site-navigation-jelly .is-face-02 { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .site-navigation-status, .site-navigation-status::before, .site-navigation-status::after, .site-navigation-dots i { animation: none; }
}
