/* Final visual pass: calm editorial hierarchy. Glass stays on controls and content, never the landscape. */
:root{--finish-border:rgba(255,255,255,.82);--finish-shadow:0 18px 45px rgba(43,66,53,.08);--finish-shadow-hover:0 24px 54px rgba(43,66,53,.13)}
.view[hidden]{display:none!important}
.tabbar{position:relative;isolation:isolate}.tabbar:before{content:"";position:absolute;z-index:-1;inset:1px;border-radius:inherit;background:linear-gradient(135deg,rgba(255,255,255,.5),rgba(226,238,229,.2));pointer-events:none}.tab{position:relative;letter-spacing:.01em}.tab.active:after{content:"";position:absolute;left:17px;right:17px;bottom:5px;height:2px;border-radius:99px;background:currentColor;opacity:.42}
.review-toolbar,.calendar-glass,.stats-title,.settings-layout{animation:finishEnter .42s ease both}@keyframes finishEnter{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.calendar-glass,.setting-card,.stat-card,.word-detail-dialog,.learning-track-dialog{border-color:var(--finish-border)!important}.calendar-glass{box-shadow:var(--finish-shadow),inset 0 1px 0 rgba(255,255,255,.7)}.calendar-heading small,.stats-title span{letter-spacing:.08em;text-transform:uppercase}
.review-date-slot{overflow:hidden}.review-date-slot.has-review:before{content:"";position:absolute;top:0;left:20%;right:20%;height:3px;border-radius:0 0 99px 99px;background:linear-gradient(90deg,#8eb59a,#d5c18b);opacity:.72}.review-date-slot.today:before{background:linear-gradient(90deg,#578c70,#86ad7d);opacity:1}.review-date-slot.has-review .review-date-count{font-variant-numeric:tabular-nums}
.stats-title{width:fit-content;min-width:min(100%,360px);margin-left:auto!important;margin-right:auto!important;padding:10px 16px;border:1px solid var(--finish-border);border-radius:999px;background:rgba(255,255,255,.36);box-shadow:0 8px 28px rgba(43,66,53,.05)}.stat-card{position:relative;overflow:hidden;transition:transform .2s ease,box-shadow .2s ease}.stat-card:before{content:"";position:absolute;top:0;left:0;width:100%;height:2px;background:linear-gradient(90deg,transparent,rgba(102,151,121,.45),transparent)}.today-metrics span{border:1px solid rgba(255,255,255,.52)}
.settings-cover{overflow:hidden}.settings-cover:after{content:"";position:absolute;right:-42px;bottom:-58px;width:156px;height:156px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.55),transparent 67%);pointer-events:none}.settings-menu-row{transition:background .18s,color .18s,transform .18s}.setting-card-head{padding-bottom:14px;border-bottom:1px solid rgba(107,137,117,.11)}.preference-row:last-child{border-bottom:0}
.word-detail-dialog,.learning-track-dialog{box-shadow:0 34px 100px rgba(27,46,35,.28),inset 0 1px 0 rgba(255,255,255,.82)}.word-detail-close,.learning-track-close{transition:transform .18s ease,background .18s ease}button:active:not(:disabled){transform:scale(.975)}
.word-delete-modal{position:fixed;z-index:240;inset:0;display:grid;place-items:center;padding:22px}.word-delete-modal[hidden]{display:none}.word-delete-backdrop{position:absolute;inset:0;background:rgba(24,39,31,.46);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.word-delete-dialog{position:relative;width:min(420px,calc(100vw - 36px));padding:28px;border:1px solid rgba(255,255,255,.82);border-radius:25px;background:linear-gradient(145deg,rgba(255,253,251,.96),rgba(248,238,231,.91));box-shadow:0 28px 80px rgba(25,34,28,.3),inset 0 1px 0 #fff;color:var(--ink)}.word-delete-close{position:absolute;top:14px;right:14px;display:grid;place-items:center;width:32px;height:32px;border:0;border-radius:50%;color:#786c65;background:rgba(255,255,255,.7);font-size:22px;cursor:pointer}.word-delete-kicker{display:block;color:#a16b57;font-size:10px;font-weight:900;letter-spacing:.14em}.word-delete-dialog h2{margin:10px 0 7px;font-size:22px}.word-delete-dialog p{margin:0;color:var(--text-2);font-size:13px;line-height:1.7}.word-delete-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:23px}.word-delete-actions button{min-height:42px;border:1px solid rgba(126,114,105,.17);border-radius:13px;color:#627168;background:rgba(255,255,255,.78);font-weight:850;cursor:pointer}.word-delete-actions .danger{border-color:transparent;color:#fff;background:linear-gradient(135deg,#c17262,#a85d55)}
.book-current-control{display:grid;width:100%;grid-template-columns:46px minmax(0,1fr) auto;align-items:center;gap:13px;padding:15px 16px;border:1px solid rgba(255,255,255,.78);border-radius:19px;color:var(--ink);background:linear-gradient(120deg,rgba(234,244,237,.85),rgba(255,255,255,.72) 58%,rgba(247,239,225,.7));box-shadow:inset 0 1px 0 rgba(255,255,255,.82),0 10px 25px rgba(45,76,57,.07);text-align:left;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.book-current-mark{display:grid;place-items:center;width:46px;height:52px;border-radius:14px;color:#fff;background:linear-gradient(150deg,#5d9071,#9abe78);box-shadow:0 8px 18px rgba(70,126,93,.2);font-size:20px}.book-current-copy{display:flex;min-width:0;flex-direction:column;gap:3px}.book-current-copy small{color:#6c8973;font-size:9px;font-weight:900;letter-spacing:.1em;text-transform:uppercase}.book-current-copy strong{overflow:hidden;font-size:17px;text-overflow:ellipsis;white-space:nowrap}.book-current-copy em{overflow:hidden;color:var(--text-3);font-size:10px;font-style:normal;line-height:1.45;text-overflow:ellipsis;white-space:nowrap}.book-current-action{display:inline-flex;align-items:center;gap:7px;padding:8px 10px;border-radius:999px;color:#4f7b61;background:rgba(255,255,255,.64);font-size:10px;font-weight:850;white-space:nowrap}.book-current-action i{font-size:15px;font-style:normal;line-height:1}.book-library-modal{position:fixed;z-index:250;inset:0;display:grid;place-items:center;padding:24px}.book-library-modal[hidden]{display:none}.book-library-backdrop{position:absolute;inset:0;background:rgba(29,46,37,.46);backdrop-filter:blur(12px) saturate(.85);-webkit-backdrop-filter:blur(12px) saturate(.85)}.book-library-dialog{position:relative;display:flex;overflow:hidden;width:min(820px,94vw);max-height:min(760px,88vh);flex-direction:column;padding:30px;border:1px solid rgba(255,255,255,.82);border-radius:30px;color:var(--ink);background:radial-gradient(circle at 92% 0,rgba(236,217,177,.38),transparent 29%),linear-gradient(145deg,rgba(249,253,250,.97),rgba(232,242,236,.94));box-shadow:0 35px 110px rgba(20,34,26,.35),inset 0 1px 0 rgba(255,255,255,.94)}.book-library-dialog:before{content:"";position:absolute;right:-70px;bottom:-100px;width:270px;height:270px;border:1px solid rgba(117,159,125,.15);border-radius:48% 52% 46% 54%;pointer-events:none;transform:rotate(26deg)}.book-library-handle{display:none}.book-library-header{position:relative;display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.book-library-header small{color:#77917d;font-size:9px;font-weight:900;letter-spacing:.16em}.book-library-header h2{margin:5px 0 5px;font-size:25px;letter-spacing:-.04em}.book-library-header p{margin:0;color:var(--text-3);font-size:12px}.book-library-close{display:grid;place-items:center;width:36px;height:36px;flex:none;border:0;border-radius:50%;color:#607369;background:rgba(255,255,255,.78);font-size:24px;cursor:pointer}.book-library-search{position:relative;display:flex;align-items:center;margin-top:21px;padding:0 13px;border:1px solid rgba(119,149,126,.18);border-radius:14px;background:rgba(255,255,255,.64);box-shadow:inset 0 1px 0 rgba(255,255,255,.86)}.book-library-search span{color:#74907a;font-size:23px;line-height:1}.book-library-search input{width:100%;min-height:44px;border:0;outline:0;color:var(--ink);background:transparent;font:inherit;font-size:13px}.book-library-search input::placeholder{color:#a9b4ac}.book-library-filters{display:flex;overflow-x:auto;gap:7px;margin:14px -2px 0;padding:2px;scrollbar-width:none}.book-filter{flex:none;padding:7px 10px;border:1px solid transparent;border-radius:999px;color:#748178;background:rgba(223,233,225,.58);font-size:10px;font-weight:850;cursor:pointer;transition:.18s}.book-filter.active{border-color:rgba(94,144,106,.38);color:#44704f;background:rgba(255,255,255,.92);box-shadow:0 5px 12px rgba(58,88,67,.08)}.book-library-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:15px 0 9px;color:#839189;font-size:10px}.book-library-meta span:first-child{color:#557964;font-weight:850}.book-library-results{position:relative;display:grid;overflow:auto;min-height:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:3px 2px 5px}.book-library-item{display:grid;min-height:116px;grid-template-columns:38px minmax(0,1fr);align-items:stretch;gap:12px;padding:11px;border:1px solid rgba(160,182,164,.17);border-radius:18px;color:var(--ink);background:rgba(255,255,255,.5);text-align:left;cursor:pointer;transition:transform .18s ease,background .18s ease,border-color .18s ease,box-shadow .18s ease}.book-library-item.active{border-color:rgba(91,143,101,.52);background:linear-gradient(135deg,rgba(231,243,224,.92),rgba(255,253,240,.8));box-shadow:0 9px 20px rgba(69,110,69,.1)}.book-spine{display:flex;overflow:hidden;align-items:center;justify-content:space-between;min-height:92px;flex-direction:column;padding:8px 4px;border-radius:11px;color:rgba(255,255,255,.94);background:linear-gradient(160deg,#618e77,#a5bd83);box-shadow:inset 2px 0 rgba(255,255,255,.24)}.book-spine.full{background:linear-gradient(160deg,#6d91ad,#a4bfca)}.book-spine i{font-size:7px;font-style:normal;font-weight:900;letter-spacing:.08em;writing-mode:vertical-rl}.book-spine b{font-size:9px;letter-spacing:.03em;writing-mode:vertical-rl}.book-library-copy{display:flex;min-width:0;flex-direction:column}.book-library-copy small{color:#719078;font-size:9px;font-weight:850}.book-library-copy strong{overflow:hidden;margin-top:4px;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.book-library-copy em{display:-webkit-box;overflow:hidden;margin-top:6px;color:#849189;font-size:10px;font-style:normal;line-height:1.55;-webkit-box-orient:vertical;-webkit-line-clamp:2}.book-library-state{display:flex;align-items:center;gap:5px;align-self:flex-end;margin-top:5px;color:#6a8870;font-size:9px;font-weight:850}.book-library-state i{display:grid;place-items:center;width:16px;height:16px;border-radius:50%;color:#fff;background:#7fa35c;font-size:10px;font-style:normal}.book-library-item:not(.active) .book-library-state i{color:#6a8870;background:rgba(222,232,223,.72)}.book-library-empty{grid-column:1/-1;padding:42px 16px;color:#829087;text-align:center;font-size:13px}.book-library-empty small{font-size:10px}
.book-setting-card .book-picker{display:block!important;width:100%}.book-current-control{min-height:96px;grid-template-columns:52px minmax(0,1fr) auto;padding:18px 20px}.book-current-mark{width:52px;height:58px;font-size:22px}.book-current-copy strong{font-size:19px}.book-current-copy em{overflow:visible;text-overflow:clip;white-space:normal}.book-current-control[aria-expanded="true"]{border-color:rgba(92,142,103,.45);box-shadow:0 13px 30px rgba(45,92,63,.13),inset 0 1px 0 rgba(255,255,255,.9)}.book-library-item.is-selecting{pointer-events:none;opacity:.72}.book-library-item.is-selecting .book-library-state i{animation:bookLibraryLoading .9s linear infinite}@keyframes bookLibraryLoading{to{transform:rotate(360deg)}}
.book-library-item{min-height:128px;grid-template-columns:46px minmax(0,1fr) max-content;align-items:center}.book-spine{min-height:104px}.book-library-copy{grid-column:2}.book-library-state{grid-column:3;align-self:center;margin:0;padding:7px 9px;border:1px solid rgba(105,145,112,.14);border-radius:999px;background:rgba(235,244,236,.7);white-space:nowrap}.book-library-item.active .book-library-state{color:#4d7c57;background:rgba(220,239,211,.82)}.book-library-notice{position:relative;margin:0 0 10px;padding:10px 12px 10px 34px;border:1px solid rgba(102,153,111,.24);border-radius:12px;color:#4c7656;background:rgba(230,243,226,.72);font-size:11px;font-weight:750;line-height:1.45}.book-library-notice:before{content:"✓";position:absolute;left:12px;top:50%;display:grid;place-items:center;width:15px;height:15px;border-radius:50%;color:#fff;background:#78a35e;font-size:9px;font-weight:900;transform:translateY(-50%)}
.favorite-action{position:relative;isolation:isolate;overflow:visible;color:#60746c;background:linear-gradient(145deg,rgba(255,255,255,.82),rgba(239,244,239,.58));transition:transform .18s ease,background .18s ease,color .18s ease,box-shadow .18s ease}.favorite-action .favorite-icon{position:relative;z-index:1;width:22px;height:22px;fill:none!important;stroke:currentColor;stroke-linejoin:round;stroke-width:1.8;transition:transform .22s cubic-bezier(.2,1.4,.4,1),fill .18s ease}.favorite-action:before{content:"";position:absolute;z-index:-1;inset:5px;border-radius:inherit;background:radial-gradient(circle,rgba(255,213,92,.42),transparent 68%);opacity:0;transform:scale(.55);transition:opacity .18s ease,transform .24s ease}.favorite-action.active{color:#ae7410;border-color:rgba(226,178,66,.55);background:linear-gradient(145deg,rgba(255,248,213,.96),rgba(255,225,139,.72));box-shadow:0 8px 22px rgba(175,121,20,.18),inset 0 1px 0 rgba(255,255,255,.86)}.favorite-action.active:before{opacity:1;transform:scale(1)}.favorite-action.active .favorite-icon{fill:currentColor!important;stroke:#a26b0d;transform:scale(1.08)}.favorite-action.is-just-favorited{animation:favoriteSaved .52s cubic-bezier(.2,1.35,.4,1)}@keyframes favoriteSaved{0%{transform:scale(.84)}42%{transform:scale(1.16)}72%{transform:scale(.96)}100%{transform:scale(1)}}.detail-favorite{display:inline-flex;align-items:center;gap:7px;min-height:38px;white-space:nowrap;transition:transform .18s ease,background .18s ease,box-shadow .18s ease}.detail-favorite .favorite-icon{width:16px;height:16px;fill:none;stroke:currentColor;stroke-linejoin:round;stroke-width:1.8}.detail-favorite.active{box-shadow:0 7px 18px rgba(175,121,20,.12)}.detail-favorite.active .favorite-icon{fill:currentColor}.detail-favorite.is-just-favorited{animation:favoriteSaved .52s cubic-bezier(.2,1.35,.4,1)}
.utility-action{position:relative;isolation:isolate;overflow:visible;background:linear-gradient(145deg,rgba(255,255,255,.84),rgba(238,244,239,.55));transition:transform .18s ease,background .18s ease,color .18s ease,border-color .18s ease,box-shadow .18s ease}.utility-action:before{content:"";position:absolute;z-index:-1;inset:5px;border-radius:inherit;opacity:0;transform:scale(.55);transition:opacity .18s ease,transform .24s ease}.utility-action svg{position:relative;z-index:1;transition:transform .22s cubic-bezier(.2,1.4,.4,1),fill .18s ease,stroke .18s ease}.delete-word{color:#ad6b62;border-color:rgba(207,139,127,.28);background:linear-gradient(145deg,rgba(255,248,246,.92),rgba(250,227,222,.66))}.delete-word:before{background:radial-gradient(circle,rgba(227,126,108,.34),transparent 68%)}.learning-track-action{color:#4f7f7d;border-color:rgba(93,151,146,.26);background:linear-gradient(145deg,rgba(244,252,250,.93),rgba(215,238,234,.66))}.learning-track-action:before{background:radial-gradient(circle,rgba(74,159,151,.32),transparent 68%)}.utility-action:active{animation:utilityActionPress .36s cubic-bezier(.2,1.35,.4,1)}.utility-action:active:before{opacity:1;transform:scale(1)}.utility-action:active svg{transform:scale(1.12)}@keyframes utilityActionPress{0%{transform:scale(.86)}50%{transform:scale(1.12)}100%{transform:scale(1)}}
.defer-toggle{position:relative;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:7px 13px;border:1px solid rgba(99,132,109,.2);border-radius:16px;color:#587066;background:linear-gradient(145deg,rgba(255,255,255,.85),rgba(234,242,235,.63));box-shadow:0 7px 18px rgba(52,83,62,.06),inset 0 1px 0 rgba(255,255,255,.82);cursor:pointer;user-select:none;transition:transform .18s ease,background .18s ease,color .18s ease,border-color .18s ease,box-shadow .18s ease}.defer-toggle input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.defer-toggle-indicator{display:grid;place-items:center;flex:none;width:27px;height:27px;border-radius:10px;color:#638870;background:rgba(217,235,218,.7);font-size:17px;font-weight:900;line-height:1;transition:transform .22s cubic-bezier(.2,1.4,.4,1),background .18s ease,color .18s ease}.defer-toggle-copy,.defer-session-badge>span{display:flex;flex-direction:column;gap:2px;line-height:1.08}.defer-toggle-copy b,.defer-session-badge b{font-size:12px;font-weight:900}.defer-toggle-copy small,.defer-session-badge small{color:#839289;font-size:9px;font-weight:750}.defer-toggle.active{color:#895d13;border-color:rgba(215,164,52,.5);background:linear-gradient(145deg,rgba(255,250,224,.96),rgba(249,224,145,.74));box-shadow:0 9px 23px rgba(169,121,22,.18),inset 0 1px 0 rgba(255,255,255,.88)}.defer-toggle.active .defer-toggle-indicator{color:#fff;background:linear-gradient(135deg,#c28a21,#9e6f14);transform:rotate(-18deg) scale(1.06)}.defer-toggle:focus-within{outline:3px solid rgba(112,166,129,.24);outline-offset:2px}.defer-session-badge{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:7px 13px;border:1px solid rgba(211,170,68,.38);border-radius:16px;color:#8d6a18;background:linear-gradient(145deg,rgba(255,250,229,.92),rgba(252,236,177,.68));box-shadow:0 7px 18px rgba(151,117,38,.1)}.defer-session-badge i{display:grid;place-items:center;width:27px;height:27px;border-radius:10px;color:#fff;background:linear-gradient(135deg,#c28a21,#9e6f14);font-size:17px;font-style:normal;font-weight:900;line-height:1}.defer-session-badge small{color:#9c7b37}
/* Large fullscreen uses the height as well as the width: calendar rows and dashboards breathe instead of clustering at the top. */
@media(min-width:1181px) and (min-height:800px){
  #app.is-fullscreen{grid-template-rows:86px minmax(0,1fr);padding:0 clamp(42px,5vw,104px) clamp(28px,3vh,52px)}
  #app.is-fullscreen .topbar{padding-inline:12px}
  #app.is-fullscreen #viewReview:not([hidden]){padding:clamp(8px,1.5vh,20px) 0}
  #app.is-fullscreen #viewReview:not([hidden]):has(.calendar-glass){display:flex;align-items:center}
  #app.is-fullscreen #viewReview:not([hidden]):has(.calendar-glass) .review-list{display:flex;width:100%;max-width:1320px;max-height:100%;margin:0 auto}
  #app.is-fullscreen #viewReview:not([hidden]) .calendar-glass{display:flex;flex-direction:column;width:100%;min-height:min(1320px,calc(100vh - 150px));margin:0 auto;padding:clamp(26px,3.2vh,46px) clamp(28px,3.3vw,54px) clamp(22px,2.5vh,38px)}
  #app.is-fullscreen .calendar-week{flex:none;margin-bottom:clamp(8px,1.2vh,16px)}
  #app.is-fullscreen .review-calendar{flex:1;grid-template-rows:repeat(5,minmax(0,1fr));gap:clamp(9px,1vw,16px)}
  #app.is-fullscreen .review-date-slot,#app.is-fullscreen .calendar-blank{min-height:0}
  #app.is-fullscreen .review-date-slot{justify-content:space-between;padding:clamp(10px,1.2vh,17px) 10px}
  #app.is-fullscreen .calendar-summary{flex:none;margin-top:clamp(12px,1.5vh,20px);padding-top:clamp(11px,1.2vh,16px);border-top:1px solid rgba(255,255,255,.36)}
  #app.is-fullscreen #viewStats:not([hidden]){display:grid;place-items:center;padding:clamp(8px,1.5vh,20px) 0}
  #app.is-fullscreen #viewStats:not([hidden]) .stats-page{display:flex;width:min(100%,1420px);min-height:min(1280px,calc(100vh - 150px));margin:0 auto;padding:0;flex-direction:column}
  #app.is-fullscreen #viewStats:not([hidden]) .stats-grid{min-height:0;flex:1;grid-template-rows:.82fr .9fr 1.18fr;align-content:stretch;gap:clamp(18px,1.5vw,26px)}
  #app.is-fullscreen #viewStats:not([hidden]) .stat-card{min-height:0}
  #app.is-fullscreen #viewStats:not([hidden]) .schedule-card,#app.is-fullscreen #viewStats:not([hidden]) .trends-card{display:flex;flex-direction:column}
  #app.is-fullscreen #viewStats:not([hidden]) .schedule-chart,#app.is-fullscreen #viewStats:not([hidden]) .trends-chart{height:auto;min-height:170px;flex:1}
}
@media(hover:hover){.tab:not(.active):hover{transform:translateX(2px)}.review-date-slot.has-review:hover{box-shadow:var(--finish-shadow-hover)}.stat-card:hover,.setting-card:hover{transform:translateY(-2px);box-shadow:var(--finish-shadow-hover),inset 0 1px 0 rgba(255,255,255,.78)}.settings-menu-row:not(.active):hover{transform:translateX(3px)}.word-detail-close:hover,.learning-track-close:hover{transform:rotate(8deg);background:#fff}.favorite-action:hover{color:#a26b0d;border-color:rgba(226,178,66,.46);transform:translateY(-2px) scale(1.04);box-shadow:0 9px 22px rgba(133,104,40,.16)}.favorite-action:hover .favorite-icon{transform:scale(1.12)}.detail-favorite:hover{transform:translateY(-1px);box-shadow:0 8px 18px rgba(175,121,20,.12)}.utility-action:hover{transform:translateY(-2px) scale(1.04);box-shadow:0 9px 22px rgba(58,84,72,.14)}.utility-action:hover:before{opacity:1;transform:scale(1)}.utility-action:hover svg{transform:scale(1.12)}.delete-word:hover{color:#fff;border-color:transparent;background:linear-gradient(135deg,#c67769,#a95850);box-shadow:0 9px 22px rgba(174,85,72,.22)}.learning-track-action:hover{color:#fff;border-color:transparent;background:linear-gradient(135deg,#4f938e,#73afa5);box-shadow:0 9px 22px rgba(57,126,118,.2)}.defer-toggle:hover{transform:translateY(-2px);border-color:rgba(99,132,109,.4);box-shadow:0 10px 24px rgba(52,83,62,.13)}.defer-toggle:hover .defer-toggle-indicator{transform:rotate(-14deg) scale(1.08)}.defer-toggle.active:hover{border-color:rgba(194,137,33,.65);box-shadow:0 11px 25px rgba(169,121,22,.23)}.defer-toggle.active:hover .defer-toggle-indicator{transform:rotate(-24deg) scale(1.12)}}
@media(max-width:759px), (min-width:760px) and (max-width:1180px) and (orientation:portrait){.stats-title{justify-content:center;min-width:0;padding:8px 12px}.tab.active:after{left:28%;right:28%;bottom:2px}.review-date-slot.has-review:before{left:27%;right:27%}.setting-card-head{padding-bottom:11px}}
@media(max-width:759px), (min-width:760px) and (max-width:1180px) and (orientation:portrait){.book-current-control{grid-template-columns:40px minmax(0,1fr);gap:10px;padding:12px}.book-current-mark{width:40px;height:44px;border-radius:13px;font-size:17px}.book-current-copy strong{font-size:15px}.book-current-copy em{font-size:9px}.book-current-action{grid-column:2;justify-self:start;margin-top:3px;padding:5px 8px;font-size:9px}.book-library-modal{align-items:end;padding:0}.book-library-dialog{width:100%;max-height:min(82dvh,720px);padding:18px 16px calc(18px + env(safe-area-inset-bottom));border-radius:28px 28px 0 0}.book-library-handle{display:block;width:42px;height:4px;margin:0 auto 15px;border-radius:99px;background:rgba(101,125,108,.25)}.book-library-header h2{font-size:21px}.book-library-header p{font-size:11px}.book-library-search{margin-top:16px}.book-library-meta span:last-child{display:none}.book-library-results{grid-template-columns:1fr;gap:8px}.book-library-item{min-height:92px;grid-template-columns:33px minmax(0,1fr);gap:10px;padding:9px}.book-spine{min-height:74px}.book-library-copy em{-webkit-line-clamp:1}.book-library-state{grid-column:2;justify-self:start;align-self:auto;margin:2px 0 0}.book-library-item{grid-template-rows:minmax(0,1fr) auto}.book-spine{grid-row:1/3}.book-library-close{width:33px;height:33px;font-size:21px}}
@media(max-width:759px), (min-width:760px) and (max-width:1180px) and (orientation:portrait){.book-current-control{min-height:116px;grid-template-columns:45px minmax(0,1fr);padding:15px}.book-current-mark{width:45px;height:50px;font-size:19px}.book-current-copy{gap:4px}.book-current-copy strong{overflow:visible;font-size:17px;white-space:normal}.book-current-copy em{display:block;overflow:visible;font-size:10px;text-overflow:clip;white-space:normal}.book-current-action{min-height:30px;margin-top:6px;padding:7px 10px;font-size:10px}}
@media(max-width:759px), (min-width:760px) and (max-width:1180px) and (orientation:portrait){.book-library-item{min-height:96px;grid-template-columns:36px minmax(0,1fr);align-items:start}.book-spine{min-height:78px}.book-library-state{margin:2px 0 0;padding:5px 8px}.book-library-notice{margin-bottom:8px;font-size:10px}}
@media(hover:hover){.book-current-control:hover{border-color:rgba(87,140,101,.44);transform:translateY(-2px);box-shadow:0 15px 32px rgba(45,92,63,.13),inset 0 1px 0 rgba(255,255,255,.9)}.book-library-item:not(:disabled):hover{border-color:rgba(93,144,104,.4);background:rgba(255,255,255,.8);transform:translateY(-2px);box-shadow:0 12px 24px rgba(53,82,61,.1)}.book-library-item.active:hover{background:linear-gradient(135deg,rgba(226,242,217,.96),rgba(255,253,240,.9))}}

/* Phone card rebuild: the word gets a full row; controls no longer steal its reading width. */
@media(max-width:759px), (min-width:760px) and (max-width:1180px) and (orientation:portrait){
  .word-card{inset:4px 7px;padding:14px 13px 18px;border-radius:22px}
  .word-row{display:block;width:100%;padding-right:0;text-align:left}
  .word-row>div:first-child{min-width:0}
  .word-card .word{max-width:100%;font-size:clamp(38px,12vw,52px);line-height:1.06;letter-spacing:-.045em;overflow-wrap:anywhere;word-break:normal}
  .card-tools{display:flex;width:100%;justify-content:flex-start;margin:10px 0 0}
  .defer-toggle,.defer-session-badge{min-height:42px;padding:7px 11px}
  .defer-toggle-copy small,.defer-session-badge small{display:none}
  .defer-toggle-copy b,.defer-session-badge b{font-size:11px}
  .word-card .phon{margin:10px 0 8px;font-size:13px;text-align:left}
  .card-side-actions{position:static!important;display:flex!important;align-self:stretch;flex-direction:row;justify-content:flex-end;width:100%;margin:0 0 10px;gap:8px}
  .side-action{width:42px;height:42px;min-width:42px;min-height:42px}
  .sense-panel{margin:0 0 10px;padding:10px 7px 8px}
  .sense-panel-head{align-items:center;min-height:44px}
  .sense-panel .senses{height:126px;max-height:126px;overflow-y:auto;overflow-x:hidden;padding-right:6px;overscroll-behavior:contain;touch-action:pan-y}
  .examples{height:136px;max-height:136px;overflow-y:auto;overflow-x:hidden;margin-top:9px;padding:13px 14px;overscroll-behavior:contain;touch-action:pan-y}
  .card-hint{margin-top:6px;padding-top:8px}
  .card-actions{margin-top:10px;padding-bottom:2px}
}

/* 手机沉浸模式保持当前屏幕方向，不触发浏览器原生全屏的自动转屏。 */
html.phone-device #app.is-fullscreen{position:fixed;inset:0;z-index:100;height:100dvh!important;min-height:100dvh!important;max-height:100dvh;overflow:auto}

/* 词书弹层：只有结果区可以压缩和滚动，筛选栏始终保持可点。 */
.book-library-header,.book-library-search,.book-library-filters,.book-library-meta,.book-library-notice{flex:none}
.book-library-results{flex:1 1 auto}

/* iPad 词书架：文字使用完整一列，操作放到底部，避免双列卡片被按钮挤窄。 */
@media(min-width:760px) and (max-width:1180px){
  .book-library-modal{place-items:center;padding:16px}
  .book-library-dialog{box-sizing:border-box;width:min(920px,100%);max-height:calc(100dvh - 32px);padding:22px;border-radius:26px}
  .book-library-handle{display:none}
  .book-library-header{gap:12px}
  .book-library-header h2{font-size:24px;line-height:1.3}
  .book-library-header p{font-size:12px;line-height:1.6}
  .book-library-search{margin-top:14px}
  .book-library-filters{min-height:40px;align-items:center;margin:10px 0 0;padding:4px 2px 6px}
  .book-filter{min-height:30px;line-height:1.4;padding:6px 12px}
  .book-library-meta{flex-wrap:wrap;margin:8px 0}
  .book-library-results{grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;gap:12px;padding:4px 3px 8px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
  .book-library-item{min-height:154px;grid-template-columns:42px minmax(0,1fr);grid-template-rows:1fr auto;gap:10px 12px;align-items:start;padding:13px}
  .book-library-item .book-spine{grid-column:1;grid-row:1/3;align-self:stretch;min-height:120px}
  .book-library-item .book-library-copy{grid-column:2;grid-row:1;align-self:start}
  .book-library-item .book-library-copy strong{overflow:visible;white-space:normal;overflow-wrap:anywhere;text-overflow:clip;font-size:16px;line-height:1.35}
  .book-library-item .book-library-copy em{font-size:11px;line-height:1.5;-webkit-line-clamp:2}
  .book-library-item .book-library-state{grid-column:2;grid-row:2;justify-self:end;align-self:end;margin:0;min-height:30px;padding:6px 10px;font-size:10px}
}

/* 全屏按钮不参与通用图标的旋转交互，触屏浏览器的粘滞 hover 也不会把它卡歪。 */
.fullscreen-btn,.fullscreen-btn:hover,.fullscreen-btn:active{transform:none!important}

@media(max-width:759px){
  .book-library-dialog{max-height:88dvh}
  .book-library-filters{min-height:34px;margin-top:10px}
  .book-library-meta{margin:10px 0 7px}
  .book-library-item{min-height:88px;grid-template-columns:34px minmax(0,1fr) auto;grid-template-rows:1fr;align-items:center;gap:9px;padding:8px}
  .book-spine{grid-column:1;grid-row:1;min-height:72px}
  .book-library-copy{grid-column:2;grid-row:1;align-self:center}
  .book-library-copy strong{margin-top:2px}
  .book-library-copy em{margin-top:3px;line-height:1.4;-webkit-line-clamp:1}
  .book-library-state{grid-column:3;grid-row:1;align-self:end;justify-self:end;margin:0;padding:5px 7px;font-size:9px}
}

/* 横向 iPad：固定各信息区高度，把工具收回卡片流，认识/不认识始终留在首屏。 */
@media(min-width:760px) and (max-width:1180px) and (orientation:landscape){
  .app{grid-template-rows:64px minmax(0,1fr);padding:0 16px 10px}
  .topbar{padding:0 2px}
  .tabbar{height:48px}
  .tab{width:38px;height:36px}
  .cards-stage{min-height:0}
  .word-card{padding:16px 26px 14px;overflow:hidden}
  .card-progress-wrap{margin-bottom:9px}
  .word-card .word{font-size:48px}
  .word-card .phon{margin:6px auto 6px}
  .card-side-actions{position:static!important;display:flex!important;align-self:stretch;flex-direction:row;justify-content:flex-end;width:100%;margin:0 0 6px;gap:7px}
  .side-action{width:38px;height:38px;min-width:38px;min-height:38px}
  .sense-panel{margin:0 0 6px;padding:6px 12px 5px}
  .sense-panel-head{min-height:36px;margin-bottom:2px}
  .sense-panel-head .sense-panel-meta small{min-height:32px;padding:6px 9px;font-size:10px}
  .meaning-reveal-btn{min-width:96px;min-height:32px;padding:6px 11px;font-size:11px}
  .sense-panel .senses{height:104px;max-height:104px}
  .examples{height:118px;max-height:118px;flex:0 0 118px;margin-top:6px;padding:9px 12px;overflow-y:auto}
  .examples .ex-item{padding:3px 0;font-size:12px;line-height:1.35}
  .examples .ex-item .cn,.examples .ex-item .src{font-size:10px}
  .card-hint{margin-top:3px;padding-top:4px;font-size:10px}
  .card-actions{margin-top:7px}
  .card-actions button{min-height:42px;font-size:14px}
}

@media(prefers-reduced-motion:reduce){.review-toolbar,.calendar-glass,.stats-title,.settings-layout,.favorite-action.is-just-favorited,.detail-favorite.is-just-favorited,.utility-action:active{animation:none}button:active:not(:disabled),.stat-card,.setting-card,.tab,.settings-menu-row{transform:none!important}}

/* 统计页入场：标题先接管视线，卡片与图表随后依次展开。 */
@keyframes statsTitleEnter{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes statsCardEnter{from{opacity:0;transform:translateY(20px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes statsChartRise{from{opacity:.15;transform:scaleY(.12)}to{opacity:1;transform:scaleY(1)}}
#viewStats.stats-entering .stats-grid{animation:statsTitleEnter .4s cubic-bezier(.22,.8,.24,1) both}
#viewStats.stats-entering .stat-card{animation:statsCardEnter .5s cubic-bezier(.22,.8,.24,1) both}
#viewStats.stats-entering .stat-card:nth-child(1){animation-delay:70ms}#viewStats.stats-entering .stat-card:nth-child(2){animation-delay:120ms}#viewStats.stats-entering .stat-card:nth-child(3){animation-delay:170ms}#viewStats.stats-entering .stat-card:nth-child(4){animation-delay:220ms}#viewStats.stats-entering .stat-card:nth-child(5){animation-delay:270ms}#viewStats.stats-entering .stat-card:nth-child(6){animation-delay:320ms}#viewStats.stats-entering .stat-card:nth-child(7){animation-delay:370ms}
#viewStats.stats-entering .distribution-chart i,#viewStats.stats-entering .bar-pair i,#viewStats.stats-entering .trend-stack i{transform-origin:bottom;animation:statsChartRise .46s cubic-bezier(.22,.8,.24,1) both;animation-delay:430ms}
@media(prefers-reduced-motion:reduce){#viewStats.stats-entering .stats-grid,#viewStats.stats-entering .stat-card,#viewStats.stats-entering .distribution-chart i,#viewStats.stats-entering .bar-pair i,#viewStats.stats-entering .trend-stack i{animation:none}}

/* 快速刷完成页：将单一按钮升级为清晰、可庆祝的收尾状态。 */
@keyframes quickCompleteEnter{from{opacity:0;transform:translateY(18px) scale(.975)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes quickCompleteBadge{0%{transform:scale(.72) rotate(-10deg);opacity:0}58%{transform:scale(1.08) rotate(3deg);opacity:1}100%{transform:scale(1) rotate(0)}}
@keyframes quickCompleteConfetti{from{opacity:0;transform:translate(0,0) rotate(0)}to{opacity:1;transform:translate(var(--confetti-x),var(--confetti-y)) rotate(145deg)}}
.quick-complete{position:relative;display:flex;align-items:center;flex-direction:column;justify-content:center;min-height:100%;box-sizing:border-box;padding:42px 24px;text-align:center;overflow:hidden;animation:quickCompleteEnter .52s cubic-bezier(.22,.8,.24,1) both}.quick-complete:before{content:"";position:absolute;width:min(78vw,540px);height:min(78vw,540px);border-radius:50%;background:radial-gradient(circle,rgba(173,215,181,.34),rgba(238,230,184,.14) 43%,transparent 70%);filter:blur(7px);pointer-events:none}.quick-complete>*{position:relative;z-index:1}.quick-complete-badge{display:grid;place-items:center;width:74px;height:74px;margin-bottom:17px;border:1px solid rgba(255,255,255,.88);border-radius:28px;color:#fff;background:linear-gradient(145deg,#6f9c7f,#94bd95);box-shadow:inset 0 1px 0 rgba(255,255,255,.46),0 16px 30px rgba(71,117,82,.2);font-size:38px;font-weight:900;animation:quickCompleteBadge .68s .08s cubic-bezier(.22,.8,.24,1) both}.quick-complete-kicker{margin:0 0 7px;color:#6c9377;font-size:10px;font-weight:900;letter-spacing:.17em}.quick-complete h2{margin:0;color:#294536;font-size:clamp(28px,4vw,38px);letter-spacing:-.04em}.quick-complete-copy{max-width:310px;margin:11px 0 17px;color:#77867c;font-size:14px;line-height:1.65}.quick-complete-summary{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;margin-bottom:24px}.quick-complete-summary span{padding:7px 11px;border:1px solid rgba(255,255,255,.74);border-radius:999px;color:#65796b;background:rgba(255,255,255,.52);box-shadow:0 6px 18px rgba(56,83,64,.06);font-size:11px;font-weight:750}.quick-complete-summary b{margin-right:3px;color:#457b58;font-size:15px}.quick-complete-again{display:grid;grid-template-columns:1fr auto;align-items:center;min-width:min(100%,330px);padding:14px 15px 14px 21px;border:1px solid rgba(255,255,255,.82);border-radius:18px;color:#fff;background:linear-gradient(135deg,#5e9274,#85ad88);box-shadow:0 13px 25px rgba(65,111,79,.2),inset 0 1px 0 rgba(255,255,255,.35);font:800 17px/1 inherit;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.quick-complete-again span{text-align:left}.quick-complete-again small{grid-column:1;color:rgba(255,255,255,.76);font-size:10px;font-weight:700;text-align:left;margin-top:4px}.quick-complete-again b{grid-column:2;grid-row:1/3;display:grid;place-items:center;width:38px;height:38px;border-radius:13px;background:rgba(255,255,255,.18);font-size:22px;transition:transform .25s ease}.quick-complete-again:hover{transform:translateY(-3px);box-shadow:0 17px 30px rgba(65,111,79,.27),inset 0 1px 0 rgba(255,255,255,.44)}.quick-complete-again:hover b{transform:rotate(145deg)}.quick-complete-hint{margin:13px 0 0;color:#89958d;font-size:11px}.quick-complete-confetti{position:absolute;inset:50% 0 auto;z-index:0;pointer-events:none}.quick-complete-confetti i{position:absolute;width:8px;height:13px;border-radius:3px;background:#f0bc54;animation:quickCompleteConfetti .72s .18s cubic-bezier(.22,.8,.24,1) both}.quick-complete-confetti i:nth-child(1){left:30%;--confetti-x:-38px;--confetti-y:-92px;background:#ec8c76}.quick-complete-confetti i:nth-child(2){left:38%;--confetti-x:-18px;--confetti-y:-122px;background:#efbd57}.quick-complete-confetti i:nth-child(3){left:50%;--confetti-x:8px;--confetti-y:-104px;background:#72a986}.quick-complete-confetti i:nth-child(4){left:60%;--confetti-x:31px;--confetti-y:-113px;background:#8ab0cf}.quick-complete-confetti i:nth-child(5){left:69%;--confetti-x:48px;--confetti-y:-75px;background:#db8aa2}@media(max-width:759px){.quick-complete{padding:30px 18px}.quick-complete-badge{width:66px;height:66px;border-radius:24px;font-size:33px}.quick-complete h2{font-size:30px}.quick-complete-copy{margin-top:8px;margin-bottom:14px}.quick-complete-summary{margin-bottom:19px}.quick-complete-again{min-width:min(100%,300px);border-radius:16px}}@media(prefers-reduced-motion:reduce){.quick-complete,.quick-complete-badge,.quick-complete-confetti i{animation:none}.quick-complete-again:hover,.quick-complete-again:hover b{transform:none}}

.background-library-item{position:relative}

/* Device-aware background library: the main settings card stays calm while the full collection remains discoverable. */
.background-more-btn{position:relative;display:grid!important;min-height:132px;place-content:center;gap:4px;border:1px dashed rgba(92,139,103,.42)!important;border-radius:16px!important;color:#50775c!important;background:linear-gradient(145deg,rgba(233,245,234,.84),rgba(250,246,232,.84))!important;text-align:center;cursor:pointer;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease,background .18s ease}.background-more-btn i{display:grid;place-items:center;width:34px;height:34px;margin:auto;border-radius:12px;color:#fff;background:linear-gradient(145deg,#65986f,#9cbd78);box-shadow:0 7px 15px rgba(67,112,76,.16);font-size:17px;font-style:normal}.background-more-btn span{font-size:12px;font-weight:900}.background-more-btn small{color:#7c9480;font-size:9px;line-height:1.35}.background-library-modal{position:fixed;z-index:252;inset:0;display:grid;place-items:center;padding:24px}.background-library-modal[hidden]{display:none}.background-library-backdrop{position:absolute;inset:0;background:rgba(24,41,31,.49);backdrop-filter:blur(12px) saturate(.82);-webkit-backdrop-filter:blur(12px) saturate(.82)}.background-library-dialog{position:relative;display:flex;overflow:hidden;width:min(920px,94vw);max-height:min(760px,88vh);flex-direction:column;padding:30px;border:1px solid rgba(255,255,255,.85);border-radius:30px;color:var(--ink);background:radial-gradient(circle at 97% 3%,rgba(233,211,165,.3),transparent 27%),radial-gradient(circle at 0 100%,rgba(187,216,204,.34),transparent 28%),linear-gradient(145deg,rgba(249,253,251,.98),rgba(232,242,237,.95));box-shadow:0 35px 110px rgba(20,34,26,.36),inset 0 1px 0 rgba(255,255,255,.94)}.background-library-dialog:after{content:"";position:absolute;right:-58px;bottom:-92px;width:260px;height:260px;border:1px solid rgba(93,144,104,.16);border-radius:49% 51% 55% 45%;pointer-events:none;transform:rotate(18deg)}.background-library-handle{display:none}.background-library-header{position:relative;z-index:1;display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.background-library-header small{color:#77917d;font-size:9px;font-weight:900;letter-spacing:.16em}.background-library-header h2{margin:5px 0 5px;font-size:25px;letter-spacing:-.04em}.background-library-header p{min-height:18px;margin:0;color:var(--text-3);font-size:12px}.background-library-close{display:grid;place-items:center;width:36px;height:36px;flex:none;border:0;border-radius:50%;color:#607369;background:rgba(255,255,255,.78);font-size:24px;cursor:pointer}.background-device-tabs{position:relative;z-index:1;display:flex;gap:8px;margin-top:21px;padding:5px;border:1px solid rgba(107,145,114,.13);border-radius:15px;background:rgba(224,236,226,.58);width:fit-content}.background-device-tab{min-height:34px;padding:7px 13px;border:1px solid transparent;border-radius:10px;color:#718178;background:transparent;font-size:11px;font-weight:850;cursor:pointer;transition:.18s}.background-device-tab.active{border-color:rgba(89,139,100,.32);color:#426f50;background:rgba(255,255,255,.93);box-shadow:0 5px 12px rgba(50,82,59,.1)}.background-library-grid{position:relative;z-index:1;display:grid;overflow:auto;min-height:0;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:17px;padding:2px 2px 8px}.background-library-item{display:flex;min-width:0;flex-direction:column;gap:9px;padding:8px;border:1px solid rgba(152,178,158,.18);border-radius:18px;color:var(--ink);background:rgba(255,255,255,.54);text-align:left;cursor:pointer;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease,background .18s ease}.background-library-item .background-swatch{display:block;height:112px;border-radius:12px;background-size:cover;background-repeat:no-repeat}.background-library-item>span{overflow:hidden;padding:0 3px 2px;font-size:12px;font-weight:850;text-overflow:ellipsis;white-space:nowrap}.background-library-item.active{border-color:rgba(84,139,97,.57);background:linear-gradient(145deg,rgba(229,243,225,.94),rgba(255,251,237,.87));box-shadow:0 9px 22px rgba(58,100,66,.12)}.background-library-item.active:after{content:"✓";position:absolute;display:grid;place-items:center;width:23px;height:23px;align-self:flex-end;margin:-3px -3px 0 0;border:2px solid rgba(255,255,255,.85);border-radius:50%;color:#fff;background:#60926d;font-size:12px;font-weight:900;box-shadow:0 5px 12px rgba(54,97,64,.2)}.background-library-empty{grid-column:1/-1;display:grid;min-height:260px;place-content:center;padding:36px;color:#74877a;border:1px dashed rgba(100,143,109,.3);border-radius:20px;background:rgba(255,255,255,.42);font-size:14px;line-height:1.8;text-align:center}.background-library-empty small{color:#98a39d;font-size:11px}
@media(hover:hover){.background-more-btn:hover{border-color:rgba(83,140,96,.72)!important;background:linear-gradient(145deg,rgba(227,244,227,.98),rgba(255,248,224,.95))!important;transform:translateY(-2px);box-shadow:0 13px 27px rgba(58,101,66,.13)}.background-library-item:hover{border-color:rgba(89,143,101,.43);background:rgba(255,255,255,.84);transform:translateY(-2px);box-shadow:0 12px 25px rgba(53,82,61,.1)}.background-library-close:hover{background:#fff;transform:rotate(8deg)}}
@media(max-width:759px), (min-width:760px) and (max-width:1180px) and (orientation:portrait){.background-more-btn{min-height:118px}.background-library-modal{align-items:end;padding:0}.background-library-dialog{width:100%;max-height:min(82dvh,720px);padding:18px 16px calc(18px + env(safe-area-inset-bottom));border-radius:28px 28px 0 0}.background-library-handle{display:block;width:42px;height:4px;margin:0 auto 15px;border-radius:99px;background:rgba(101,125,108,.25)}.background-library-header h2{font-size:21px}.background-library-header p{font-size:11px}.background-library-close{width:33px;height:33px;font-size:21px}.background-device-tabs{width:100%;margin-top:16px}.background-device-tab{flex:1}.background-library-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:13px}.background-library-item{gap:7px;padding:7px;border-radius:15px}.background-library-item .background-swatch{height:92px;border-radius:10px}.background-library-item>span{font-size:11px}.background-library-empty{min-height:210px;font-size:13px}}

/* Compact settings drawers: mobile and portrait tablets reveal one secondary card at a time. */
.setting-drawer-body,.setting-drawer-body-inner{display:contents}
.setting-drawer-toggle{display:none}
@media(max-width:759px), (min-width:760px) and (max-width:1180px) and (orientation:portrait){
  .settings-menu.settings-index{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;scroll-snap-type:none}
  .settings-menu.settings-index .settings-menu-row{width:100%;min-width:0;scroll-snap-align:none}
  .settings-main{display:grid;gap:10px;padding-bottom:18px}
  .settings-main .setting-card{margin-bottom:0!important;padding:0!important;overflow:hidden;border-radius:19px!important;transition:border-color .24s ease,box-shadow .24s ease,background .24s ease!important}
  .settings-main .setting-card.is-open{border-color:rgba(99,148,109,.32)!important;background:rgba(255,255,255,.68)!important;box-shadow:0 14px 34px rgba(51,80,59,.1),inset 0 1px 0 rgba(255,255,255,.82)!important}
  .settings-main .setting-card>.setting-card-head{position:relative;align-items:center;min-height:76px;margin:0!important;padding:13px 14px!important;border-bottom:0!important;cursor:pointer;user-select:none}
  .settings-main .setting-card>.setting-card-head>div{padding-right:42px}
  .settings-main .setting-card>.setting-card-head .setting-title{font-size:15px;font-weight:900}
  .settings-main .setting-card>.setting-card-head small{display:block;overflow:hidden;margin-top:2px;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}
  .settings-main .setting-card>.setting-card-head>.audio-test-btn,.settings-main .setting-card>.setting-card-head>.cloud-status-badge{margin-right:42px}
  .setting-drawer-toggle{position:absolute;right:12px;top:50%;display:grid;width:34px;height:34px;place-items:center;padding:0;border:1px solid rgba(103,139,111,.16);border-radius:12px;color:#5d7866;background:rgba(247,251,247,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.82);transform:translateY(-50%);transition:color .22s ease,background .22s ease,transform .22s ease}
  .setting-drawer-toggle span{position:relative;width:12px;height:12px}
  .setting-drawer-toggle span:before,.setting-drawer-toggle span:after{position:absolute;left:50%;top:50%;width:10px;height:2px;border-radius:99px;background:currentColor;content:"";transition:transform .28s cubic-bezier(.2,.8,.2,1)}
  .setting-drawer-toggle span:before{transform:translate(-82%,-50%) rotate(42deg)}
  .setting-drawer-toggle span:after{transform:translate(-18%,-50%) rotate(-42deg)}
  .setting-card.is-open .setting-drawer-toggle{color:#fff;background:linear-gradient(145deg,#638f70,#94b878);transform:translateY(-50%) rotate(180deg)}
  .setting-drawer-body{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .34s cubic-bezier(.2,.8,.2,1),opacity .22s ease}
  .setting-drawer-body-inner{display:block;min-height:0;overflow:hidden;padding:0 14px}
  .setting-card.is-open .setting-drawer-body{grid-template-rows:1fr;opacity:1}
  .setting-card.is-open .setting-drawer-body-inner{padding:3px 14px 15px;border-top:1px solid rgba(107,137,117,.1)}
  .setting-card.is-open .setting-drawer-body-inner>:first-child{margin-top:14px}
  .setting-card.is-open .setting-drawer-body-inner>:last-child{margin-bottom:0}
}
@media(prefers-reduced-motion:reduce){.setting-drawer-body,.setting-drawer-toggle,.setting-drawer-toggle span:before,.setting-drawer-toggle span:after{transition:none!important}}

/* Phone reading room: keep the definitions compact while retaining an
   internal scroll area for words with many senses. */
@media(max-width:759px){
  .word-card .sense-panel{margin-bottom:8px;padding:8px 8px 6px}
  .word-card .sense-panel .senses{height:154px;max-height:154px;padding:2px 6px 2px 0;scroll-padding-block:2px}
  .word-card .sense-panel .sense{gap:5px;padding:4px 1px;line-height:1.36}
  .word-card .sense-panel .sense+.sense{margin-top:0}
  .word-card .sense-panel .sense .cn{font-size:14px;line-height:1.36}
  .word-card .sense-panel .sense .pos{font-size:11px}
  .card-tools{align-items:center;gap:8px}
  .focus-flight-inline-action{order:0;width:42px;height:42px;min-width:42px;min-height:42px}
  .quick-word-card .sense-panel .sense{padding-top:3px;padding-bottom:3px;line-height:1.28}
  .quick-word-card .sense-panel .sense .cn{line-height:1.28}

  /* More backgrounds is a true bottom sheet. Header and device notice stay
     visible; only the portrait card collection scrolls. */
  .background-library-dialog{box-sizing:border-box;height:min(88dvh,760px);max-height:none;padding:16px 14px calc(16px + env(safe-area-inset-bottom))}
  .background-library-header,.background-device-tabs{flex:none}
  .background-library-grid{flex:1 1 auto;align-content:start;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
  .background-library-item{gap:8px;padding:8px}
  .background-library-item .background-swatch{height:auto;aspect-ratio:9 / 14;background-position:top center;background-size:cover}
  .background-library-item>span{padding:0 2px 2px;font-size:12px;line-height:1.3}
  .background-more-btn{grid-column:1 / -1;grid-template-columns:34px minmax(0,1fr);grid-template-rows:auto auto;min-height:74px;place-content:initial;place-items:center start;gap:0 10px;padding:12px 14px;text-align:left}
  .background-more-btn i{grid-column:1;grid-row:1 / 3;margin:0}
  .background-more-btn span{grid-column:2;font-size:13px}
  .background-more-btn small{grid-column:2;font-size:10px;white-space:nowrap}
}

/* Android Edge keeps hover state after a touch. Fullscreen controls therefore
   opt out of generic press/hover transforms and always return upright. */
[data-fullscreen-control],[data-fullscreen-control]:hover,[data-fullscreen-control]:active,[data-fullscreen-control]:focus-visible{transform:none!important;rotate:none!important;animation:none!important}
.background-device-tab.unavailable{cursor:not-allowed;opacity:.5;filter:saturate(.55)}

/* ICP 备案号属于站点固定页脚：为它预留高度，不能压住学习按钮或底部导航。 */
:root{--site-compliance-h:26px}
.site-compliance{grid-column:1;grid-row:4;display:flex;align-items:center;justify-content:center;min-height:var(--site-compliance-h);padding:4px 16px;border-top:1px solid rgba(111,137,117,.14);color:rgba(73,103,82,.72);background:rgba(255,255,255,.38);font-size:10px;line-height:1.2;text-align:center}
.site-compliance a{color:inherit;text-decoration:none}.site-compliance a:hover,.site-compliance a:focus-visible{color:var(--accent-deep);text-decoration:underline;text-underline-offset:2px}.site-compliance a:focus-visible{outline:2px solid rgba(95,148,109,.5);outline-offset:3px;border-radius:3px}
@media(min-width:760px){.app{grid-template-rows:54px minmax(0,1fr) var(--site-compliance-h)}.site-compliance{grid-column:1;grid-row:3}}
@media(max-width:759px){.app{position:relative;height:100dvh;min-height:100dvh}.tabbar{padding-bottom:calc(19px + env(safe-area-inset-bottom))}.site-compliance{position:absolute;right:0;bottom:0;left:0;z-index:11;min-height:calc(19px + env(safe-area-inset-bottom));padding:3px 16px calc(3px + env(safe-area-inset-bottom));font-size:9px;pointer-events:auto}}

/* Phone study card: the card itself fills the available study stage. Meanings
   and examples keep a fixed rhythm, and only their own long content scrolls. */
@media(max-width:759px){
  .word-card{inset:3px 5px;padding:16px 14px 14px;overflow:hidden}
  .card-progress-wrap{gap:5px;margin-bottom:9px}
  .card-progress-text{font-size:10px}
  .word-card .word{font-size:clamp(38px,11vw,50px);line-height:1.04}
  .card-tools{display:flex;width:100%;align-items:center;justify-content:flex-start;gap:7px;margin:10px 0 8px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}
  .card-tools::-webkit-scrollbar{display:none}
  .defer-toggle,.defer-session-badge{min-height:40px;padding:6px 9px;border-radius:14px}
  .defer-toggle-indicator,.defer-session-badge i{width:24px;height:24px;border-radius:9px;font-size:15px}
  .defer-toggle-copy b,.defer-session-badge b{font-size:11px}
  .card-tools .side-action{width:38px;height:38px;min-width:38px;min-height:38px;font-size:20px}
  .phon-tools-row{position:relative;z-index:2;display:flex;align-items:flex-start;gap:7px;width:100%;min-width:0}
  .phon-tools-row .phon{width:auto;min-width:0;flex:1;margin:7px 0 7px;text-align:left}
  .quick-phon-tools-row{flex-wrap:wrap}
  .quick-phon-tools-row .phon span{margin-right:0;overflow-wrap:anywhere}
  .quick-card-side-actions{position:static!important;display:flex!important;width:auto!important;flex:none;align-self:auto!important;gap:6px;margin:3px 0 0 auto!important}
  .quick-card-side-actions .side-action{width:36px;height:36px;min-width:36px;min-height:36px;font-size:19px}
  .word-card .sense-panel{margin:4px 0 8px;padding:8px 8px 7px}
  .sense-panel-head{min-height:36px!important;margin-bottom:1px!important;gap:7px}
  .sense-panel-head>span{font-size:12px}
  .sense-panel-head .sense-panel-meta{gap:6px}
  .sense-panel-head .sense-panel-meta small{min-height:0;padding:0;border:0;background:transparent;font-size:9px}
  .meaning-reveal-btn{min-width:92px;min-height:36px;padding:7px 10px;border-radius:12px;font-size:11px}
  .word-card .sense-panel .senses{display:grid;height:auto;max-height:clamp(92px,17dvh,126px);padding:1px 2px 1px 0;gap:5px;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scroll-padding-block:0;touch-action:pan-y}
  .word-card .sense-panel .sense{gap:5px;padding:4px 1px;line-height:1.32}
  .word-card .sense-panel .sense+.sense{margin-top:0;border-top:1px solid rgba(82,111,87,.08)}
  .word-card .sense-panel .sense .cn{font-size:13px;line-height:1.32}
  .word-card .sense-panel .sense .pos{font-size:10px}
  .examples{height:auto;max-height:clamp(96px,18dvh,138px);margin-top:5px;padding:10px 11px;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;touch-action:pan-y}
  .examples .ex-title{margin-bottom:4px;font-size:10px}
  .examples .ex-item{padding:3px 0;font-size:12px;line-height:1.38}
  .examples .ex-item .cn{margin-top:2px;font-size:11px;line-height:1.34}
  .examples .ex-item .src{margin-top:2px;font-size:9px}
  .card-hint{display:none}
  .card-actions{margin-top:auto;gap:7px;padding-top:8px}
  .card-actions button{min-height:44px;border-radius:13px;font-size:13px}
  .quick-word-card .sense-panel .senses{max-height:clamp(88px,16dvh,116px)}
  .quick-word-card .examples{max-height:clamp(94px,17dvh,128px)}
  .quick-word-card .card-actions{margin-top:auto}
}

/* Phone study reading rhythm: every reading block uses the same gap.  The
   example panel, not an empty margin, absorbs spare room above fixed controls. */
@media(max-width:759px){
  .word-card{--study-reading-gap:12px}
  .phon-tools-row .phon{margin-bottom:0}
  .word-card .sense-panel{height:auto;min-height:0;flex:0 0 auto;margin:var(--study-reading-gap) 0 0}
  .word-card .sense-panel .senses{height:auto;max-height:92px;grid-auto-rows:minmax(36px,auto);align-content:start;row-gap:6px}
  .word-card .sense-panel .sense{height:auto;min-height:36px;box-sizing:border-box}
  .word-card .examples,.quick-word-card .examples{height:auto;min-height:150px;max-height:none;flex:1 1 150px;margin-top:var(--study-reading-gap)}
  .word-card .card-actions,.quick-word-card .card-actions{flex:none;margin-top:var(--study-reading-gap)}
}

/* Focus flight: a calm, self-contained timer instead of a faux system lock. */
.focus-flight-view{min-height:0;padding:clamp(14px,2.5vw,34px);overflow:auto}.focus-flight-stage{width:min(860px,100%);margin:0 auto;padding-bottom:22px}.focus-flight-card,.focus-flight-log-card{position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.82);border-radius:30px;background:radial-gradient(circle at 9% 12%,rgba(173,218,229,.48),transparent 26%),radial-gradient(circle at 88% 10%,rgba(250,215,165,.45),transparent 25%),linear-gradient(145deg,rgba(253,255,253,.92),rgba(239,247,242,.82));box-shadow:0 22px 55px rgba(54,85,70,.12),inset 0 1px 0 rgba(255,255,255,.9)}.focus-flight-card:before{position:absolute;inset:auto -11% -48% auto;width:310px;height:310px;border:1px solid rgba(103,152,119,.15);border-radius:48% 52% 43% 57%;content:"";pointer-events:none;transform:rotate(24deg)}.focus-flight-setup{padding:clamp(25px,5vw,52px)}.focus-flight-heading{position:relative;z-index:1}.focus-flight-heading>span,.focus-flight-log-card>div>span{color:#648771;font-size:10px;font-weight:950;letter-spacing:.18em}.focus-flight-heading h2{margin:8px 0 7px;color:#284a39;font-size:clamp(28px,4.3vw,46px);letter-spacing:-.06em}.focus-flight-heading p{max-width:530px;margin:0;color:#74867b;font-size:13px;line-height:1.7}.focus-task-field{position:relative;z-index:1;display:grid;gap:8px;margin-top:29px;color:#52735d;font-size:12px;font-weight:850}.focus-task-field input{min-height:52px;padding:0 16px;border:1px solid rgba(112,153,122,.28);border-radius:15px;outline:0;color:#30483a;background:rgba(255,255,255,.76);font:inherit;font-size:15px;box-shadow:inset 0 1px 0 rgba(255,255,255,.94)}.focus-task-field input:focus{border-color:#74a47a;box-shadow:0 0 0 4px rgba(116,164,122,.14)}.focus-route-label{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;margin-top:25px;color:#52735d;font-size:12px;font-weight:850}.focus-route-label button{border:0;color:#65946e;background:transparent;font:inherit;font-size:11px;cursor:pointer}.focus-route-selects{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1fr) 32px minmax(0,1fr);align-items:end;gap:9px;margin-top:10px}.focus-route-selects>span{display:grid;width:32px;height:32px;place-items:center;margin-bottom:4px;border-radius:50%;color:#4e7d5d;background:rgba(219,239,220,.78);font-size:15px}.focus-route-selects label{display:grid;gap:7px;color:#6f8475;font-size:11px;font-weight:850}.focus-route-selects select{width:100%;min-height:47px;padding:0 12px;border:1px solid rgba(112,153,122,.25);border-radius:14px;outline:0;color:#385441;background:rgba(255,255,255,.78);font:inherit;font-size:13px;cursor:pointer}.focus-duration-label{position:relative;z-index:1;margin-top:25px;color:#52735d;font-size:12px;font-weight:850}.focus-duration-picker{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.focus-duration-picker button{min-height:39px;padding:0 14px;border:1px solid rgba(112,153,122,.22);border-radius:12px;color:#718378;background:rgba(255,255,255,.5);font-size:12px;font-weight:850;cursor:pointer}.focus-duration-picker button.active{border-color:rgba(91,144,103,.5);color:#3f704d;background:linear-gradient(135deg,rgba(217,240,214,.96),rgba(250,249,220,.9));box-shadow:0 6px 13px rgba(72,123,80,.11)}.focus-takeoff{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;gap:9px;width:100%;min-height:55px;margin-top:27px;border:0;border-radius:16px;color:#fff;background:linear-gradient(135deg,#598d67,#92b673);box-shadow:0 14px 26px rgba(73,128,82,.25);font-size:15px;font-weight:900;cursor:pointer}.focus-takeoff span{font-size:19px;transform:rotate(-18deg)}.focus-flight-log-card{margin-top:14px;padding:22px 25px;background:rgba(255,255,255,.55)}.focus-flight-log-card h3{margin:5px 0 0;color:#3d5e48;font-size:18px}.focus-flight-history{display:grid;gap:8px;margin-top:17px}.focus-flight-history>div{display:grid;grid-template-columns:1fr 20px 1fr auto auto;align-items:center;gap:6px;padding:10px 12px;border-radius:13px;color:#517060;background:rgba(245,250,246,.79);font-size:12px}.focus-flight-history i{color:#8dad91;font-style:normal}.focus-flight-history b{color:#466e50;font-size:11px}.focus-flight-history small{color:#9ba79f;font-size:10px}.focus-flight-empty{margin:16px 0 0;color:#829087;font-size:12px}.focus-flight-active{min-height:500px;padding:clamp(25px,5vw,52px);text-align:center}.focus-flight-active:after{position:absolute;left:-5%;bottom:-17%;width:110%;height:42%;border-radius:50% 50% 0 0;background:linear-gradient(180deg,rgba(220,238,224,.05),rgba(119,164,128,.18));content:"";pointer-events:none}.focus-flight-active .focus-flight-heading h2{margin-top:8px}.focus-flight-active .focus-flight-heading p{margin:auto}.focus-route-map{position:relative;z-index:1;display:grid;grid-template-columns:92px minmax(110px,1fr) 92px;align-items:center;gap:11px;max-width:650px;margin:clamp(48px,9vh,80px) auto 0}.focus-airport{display:grid;gap:3px;place-items:center;color:#55705d}.focus-airport i{display:grid;width:51px;height:51px;place-items:center;border:1px solid rgba(255,255,255,.84);border-radius:18px;background:rgba(255,255,255,.72);box-shadow:0 7px 19px rgba(82,116,92,.11);font-size:24px;font-style:normal}.focus-airport b{margin-top:5px;color:#42654c;font-size:13px;letter-spacing:.08em}.focus-airport small{color:#8b998e;font-size:10px}.focus-route-line{position:relative;height:2px;margin-top:-25px;border-top:2px dashed rgba(89,138,101,.45)}.focus-route-line:before,.focus-route-line:after{position:absolute;top:50%;width:7px;height:7px;border-radius:50%;background:#78a67d;box-shadow:0 0 0 5px rgba(184,218,188,.38);content:"";transform:translateY(-50%)}.focus-route-line:before{left:-2px}.focus-route-line:after{right:-2px}.focus-route-line i{position:absolute;left:calc(var(--focus-progress,0) * 100%);top:50%;display:grid;width:38px;height:38px;place-items:center;border:1px solid rgba(255,255,255,.88);border-radius:14px;color:#fff;background:linear-gradient(145deg,#6c9c75,#99ba76);box-shadow:0 8px 18px rgba(59,104,68,.27);font-size:19px;font-style:normal;transform:translate(-50%,-50%) rotate(-18deg);transition:left 1s linear}.focus-flight-clock{position:relative;z-index:1;display:grid;gap:2px;place-items:center;margin-top:clamp(45px,7vh,67px)}.focus-flight-clock span{color:#315b42;font-size:clamp(52px,9vw,82px);font-weight:950;letter-spacing:-.08em;line-height:1}.focus-flight-clock small{margin-top:9px;color:#809086;font-size:11px}.focus-flight-clock b{margin-top:4px;padding:4px 9px;border-radius:99px;color:#5e8767;background:rgba(224,241,224,.8);font-size:10px}.focus-flight-note{position:relative;z-index:1;margin:28px 0 0;color:#718379;font-size:12px}.focus-flight-actions{position:relative;z-index:1;display:flex;justify-content:center;gap:10px;margin-top:21px}.focus-flight-actions button{min-width:128px;min-height:46px;padding:0 17px;border:1px solid rgba(102,145,110,.27);border-radius:14px;color:#4c7655;background:rgba(255,255,255,.68);font-size:13px;font-weight:850;cursor:pointer}.focus-flight-actions .focus-end{color:#a07161;border-color:rgba(193,139,114,.25);background:rgba(255,246,240,.8)}.focus-flight-active.is-paused .focus-route-line i{filter:grayscale(.55);animation:none}.focus-flight-active.is-paused .focus-flight-clock span{color:#7b887f}
.focus-route-preview{position:relative;z-index:1;margin-top:16px}.focus-map-panel{position:relative;z-index:1;overflow:hidden;max-width:700px;margin:clamp(27px,5vh,48px) auto 0;padding:12px;border:1px solid rgba(255,255,255,.85);border-radius:22px;background:linear-gradient(145deg,rgba(255,255,255,.68),rgba(237,248,244,.6));box-shadow:0 16px 34px rgba(58,94,72,.12),inset 0 1px 0 rgba(255,255,255,.94)}.focus-route-preview .focus-map-panel{max-width:none;margin:0;padding:9px;border-radius:18px}.focus-map-status{position:absolute;z-index:2;top:20px;left:24px;display:grid;gap:2px;color:#5d8068}.focus-route-preview .focus-map-status{top:15px;left:18px}.focus-map-status span{font-size:8px;font-weight:950;letter-spacing:.16em}.focus-map-status b{color:#40614a;font-size:12px;letter-spacing:.06em}.focus-map-status i{padding:0 2px;color:#84a88a;font-style:normal}.focus-map-svg{display:block;width:100%;height:auto;aspect-ratio:2.2 / 1;filter:saturate(.84)}.focus-map-land{fill:rgba(128,177,138,.37);stroke:rgba(76,126,89,.28);stroke-width:.6}.focus-map-river{fill:none;stroke:rgba(255,255,255,.72);stroke-width:1.1}.focus-map-grid path{fill:none;stroke:rgba(255,255,255,.29);stroke-width:.35}.focus-map-route-shadow{fill:none;stroke:rgba(255,255,255,.85);stroke-width:2.8}.focus-map-route{fill:none;stroke:url(#focusRoute);stroke-width:1.3;stroke-linecap:round;stroke-dasharray:2 1.5}.focus-map-marker circle:first-child{fill:#f8fbf4;stroke:#6c9e76;stroke-width:.85}.focus-map-marker circle:last-child{fill:#6b9d75}.focus-map-marker-end circle:first-child{stroke:#d49158}.focus-map-marker-end circle:last-child{fill:#d49158}.focus-map-plane circle{fill:#fff;stroke:#6e9e79;stroke-width:.65;filter:drop-shadow(0 2px 2px rgba(38,79,49,.24))}.focus-map-plane path{fill:none;stroke:#5e966d;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}.focus-map-city{fill:#52745d;font-family:system-ui,sans-serif;font-size:3.1px;font-weight:800;letter-spacing:.06em}.focus-map-caption{display:flex;align-items:center;justify-content:space-between;margin:-3px 5px 1px;color:#50725a;font-size:11px;font-weight:850}.focus-map-caption i{color:#84a287;font-size:13px;font-style:normal}.focus-flight-active .focus-map-panel{margin-top:clamp(38px,7vh,64px)}.focus-flight-active.is-paused .focus-map-plane{opacity:.52}.focus-flight-active.is-paused .focus-map-route{filter:grayscale(.55)}
@media(hover:hover){.focus-takeoff:hover{filter:brightness(1.04);transform:translateY(-2px)}.focus-duration-picker button:hover,.focus-flight-actions button:hover{border-color:rgba(91,144,103,.54);background:rgba(255,255,255,.9)}}
@media(max-width:759px){.focus-flight-view{padding:8px 4px 15px}.focus-flight-stage{padding-bottom:8px}.focus-flight-card{border-radius:23px}.focus-flight-setup{padding:25px 18px}.focus-flight-heading h2{font-size:30px}.focus-flight-heading p{font-size:12px}.focus-route-selects{grid-template-columns:minmax(0,1fr) 26px minmax(0,1fr);gap:6px}.focus-route-selects>span{width:26px;height:26px;font-size:12px}.focus-route-selects select{min-height:45px;padding:0 7px;font-size:11px}.focus-duration-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.focus-duration-picker button{padding:0 8px}.focus-flight-log-card{padding:18px;border-radius:21px}.focus-flight-history>div{grid-template-columns:1fr 16px 1fr auto;gap:4px;padding:9px;font-size:10px}.focus-flight-history small{display:none}.focus-flight-active{min-height:0;padding:30px 18px 35px}.focus-route-map{grid-template-columns:67px minmax(55px,1fr) 67px;gap:5px;margin-top:49px}.focus-airport i{width:43px;height:43px;border-radius:15px;font-size:19px}.focus-airport b{font-size:11px}.focus-route-line i{width:33px;height:33px;border-radius:12px;font-size:16px}.focus-flight-clock{margin-top:49px}.focus-flight-clock span{font-size:62px}.focus-flight-actions button{min-width:0;flex:1}.focus-flight-note{margin-top:23px}}
@media(prefers-reduced-motion:reduce){.focus-route-line i{transition:none}.focus-takeoff{transition:none}}

/* Dark globe cockpit: a self-contained visual globe, so it stays fast and
   works offline instead of relying on a third-party map key or remote tiles. */
.focus-flight-view{background:#020302}.focus-flight-view:before{position:fixed;z-index:-1;inset:0;background:radial-gradient(circle at 23% 17%,rgba(71,89,90,.12),transparent 34%),radial-gradient(circle at 80% 78%,rgba(90,77,47,.1),transparent 32%),#020302;content:""}.focus-flight-view .focus-flight-card,.focus-flight-view .focus-flight-log-card{border-color:rgba(255,255,255,.1);color:#f5f5f1;background:rgba(8,10,9,.83);box-shadow:0 20px 55px rgba(0,0,0,.48),inset 0 1px rgba(255,255,255,.06)}.focus-flight-view .focus-flight-card:before{border-color:rgba(255,255,255,.07)}.focus-flight-view .focus-flight-heading h2{color:#f7f7f2}.focus-flight-view .focus-flight-heading p,.focus-flight-view .focus-task-field,.focus-flight-view .focus-route-label,.focus-flight-view .focus-duration-label{color:#b8c0b9}.focus-flight-view .focus-flight-heading>span,.focus-flight-view .focus-flight-log-card>div>span{color:#e7cd35}.focus-flight-view .focus-task-field input,.focus-flight-view .focus-route-selects select{border-color:rgba(255,255,255,.13);color:#f5f6f1;background:rgba(255,255,255,.07);box-shadow:none}.focus-flight-view .focus-route-selects>span{color:#f1d938;background:rgba(255,222,44,.13)}.focus-flight-view .focus-route-label button{color:#e6ce3b}.focus-flight-view .focus-duration-picker button{border-color:rgba(255,255,255,.13);color:#bfc7c0;background:rgba(255,255,255,.05)}.focus-flight-view .focus-duration-picker button.active{border-color:#e8cf36;color:#f7e46c;background:rgba(224,198,36,.14);box-shadow:0 6px 13px rgba(0,0,0,.24)}.focus-flight-view .focus-takeoff{color:#090a08;background:linear-gradient(135deg,#f4e34e,#d7b721);box-shadow:0 13px 27px rgba(214,181,30,.18)}.focus-flight-view .focus-flight-log-card h3{color:#f1f2ec}.focus-flight-view .focus-flight-history>div{color:#e1e3d9;background:rgba(255,255,255,.055)}.focus-flight-view .focus-flight-history b{color:#e6d64b}.focus-flight-view .focus-flight-history i,.focus-flight-view .focus-flight-history small,.focus-flight-view .focus-flight-empty{color:#919890}.focus-globe-panel{min-height:0;max-width:none;margin:25px auto 0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.focus-route-preview .focus-globe-panel{margin:0;border-radius:15px}.focus-globe-stars{position:absolute;inset:0;overflow:hidden;border-radius:34px;background-image:radial-gradient(circle at 7% 17%,#fff 0 1px,transparent 1.4px),radial-gradient(circle at 13% 73%,rgba(255,255,255,.84) 0 1px,transparent 1.5px),radial-gradient(circle at 22% 38%,rgba(255,255,255,.65) 0 1px,transparent 1.5px),radial-gradient(circle at 35% 11%,#fff 0 1px,transparent 1.4px),radial-gradient(circle at 46% 79%,rgba(255,255,255,.7) 0 1px,transparent 1.4px),radial-gradient(circle at 59% 9%,rgba(255,255,255,.8) 0 1px,transparent 1.4px),radial-gradient(circle at 72% 69%,#fff 0 1px,transparent 1.5px),radial-gradient(circle at 86% 25%,rgba(255,255,255,.65) 0 1px,transparent 1.4px),radial-gradient(circle at 94% 83%,#fff 0 1px,transparent 1.4px);opacity:.78}.focus-globe-svg{position:relative;z-index:1;aspect-ratio:2 / 1;filter:none}.focus-globe-halo{fill:none;stroke:rgba(255,255,255,.18);stroke-width:.35}.focus-globe-base{stroke:rgba(255,255,255,.12);stroke-width:.7;filter:drop-shadow(0 16px 25px rgba(0,0,0,.72))}.focus-globe-land{fill:#3d3d3d;stroke:#252525;stroke-width:.8}.focus-globe-river{fill:none;stroke:rgba(255,255,255,.08);stroke-width:.7}.focus-globe-grid{fill:none;stroke:rgba(255,255,255,.04);stroke-width:.35}.focus-globe-route-glow{fill:none;stroke:rgba(244,220,51,.33);stroke-width:3;filter:url(#focusGlobeGlow)}.focus-globe-route{fill:none;stroke:#f4dc32;stroke-width:1;stroke-linecap:round;stroke-dasharray:2.4 1.8}.focus-globe-marker circle:first-child{fill:#10100b;stroke:#f6de32;stroke-width:1}.focus-globe-marker circle:last-child{fill:#f6de32}.focus-globe-marker-end circle:first-child{stroke:#fff1a3}.focus-globe-marker-end circle:last-child{fill:#fff3a3}.focus-globe-plane circle{fill:#161609;stroke:#f4db2d;stroke-width:.75;filter:drop-shadow(0 2px 3px rgba(0,0,0,.75))}.focus-globe-plane path{stroke:#f6df38;stroke-width:1.3}.focus-globe-shade{fill:url(#focusGlobeShade);fill:rgba(0,0,0,.14);pointer-events:none}.focus-globe-label{position:absolute;z-index:2;display:grid;gap:3px;color:#f2f2ed}.focus-globe-label span{width:max-content;padding:4px 7px;border:2px solid #e8d42e;border-radius:7px;color:#efdf40;background:rgba(6,7,5,.86);font-size:10px;font-weight:950}.focus-globe-label b{padding-left:2px;color:#e9ebe5;font-size:13px}.focus-globe-label.from{left:8%;bottom:15%}.focus-globe-label.to{right:8%;top:18%;align-items:end}.focus-route-preview .focus-globe-label{display:none}.focus-route-preview .focus-globe-stars{border-radius:15px}.focus-route-preview .focus-map-status{top:14px;color:#e9dc6a}.focus-route-preview .focus-map-status b{color:#f0f0eb}.focus-flight-active{min-height:0;background:#020302!important}.focus-flight-active .focus-flight-heading{position:relative;z-index:3}.focus-flight-active .focus-flight-heading h2,.focus-flight-active .focus-flight-clock span{color:#f5f5f0}.focus-flight-active .focus-flight-clock small,.focus-flight-active .focus-flight-note{color:#a8afa8}.focus-flight-active .focus-flight-clock b{color:#f4df43;background:rgba(239,214,34,.13)}.focus-flight-active .focus-flight-actions button{border-color:rgba(255,255,255,.17);color:#eff1e9;background:rgba(255,255,255,.08)}.focus-flight-active .focus-flight-actions .focus-end{color:#dbab9e;background:rgba(219,115,93,.1)}.focus-flight-active .focus-globe-panel{margin-top:28px}.focus-flight-active.is-paused .focus-globe-plane{opacity:.45}.focus-flight-active.is-paused .focus-globe-route{filter:grayscale(1)}
@media(max-width:759px){.focus-flight-view{padding:0 0 14px}.focus-flight-view .focus-flight-card{border-radius:0}.focus-flight-view .focus-flight-log-card{margin:10px 8px;border-radius:20px}.focus-globe-panel{margin-left:-10px;margin-right:-10px}.focus-route-preview .focus-globe-panel{margin-left:0;margin-right:0}.focus-globe-label{transform:scale(.86);transform-origin:center}.focus-flight-active .focus-globe-panel{margin-top:22px}.focus-globe-stars{border-radius:0}.focus-flight-active{padding-left:17px;padding-right:17px}}

/* The flight is a contextual bottom drawer, launched from the word-card tools. */
.focus-flight-action{order:0;color:#d2a627;border-color:rgba(221,181,44,.38);background:linear-gradient(145deg,rgba(255,249,218,.95),rgba(248,226,141,.75))}.focus-flight-action:before{background:radial-gradient(circle,rgba(244,201,47,.36),transparent 68%)}.focus-flight-action svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8}.focus-flight-modal{position:fixed;z-index:500;inset:0;display:flex;align-items:flex-end;justify-content:center}.focus-flight-modal[hidden]{display:none}.focus-flight-backdrop{position:absolute;inset:0;background:rgba(14,21,17,.5);opacity:0;transition:opacity .48s ease}.focus-flight-drawer{position:relative;z-index:1;display:block;overflow:auto;width:min(1080px,100%);max-height:min(88dvh,880px);padding:0 0 max(18px,env(safe-area-inset-bottom));border:1px solid rgba(255,255,255,.14);border-bottom:0;border-radius:32px 32px 0 0;background:#020302;box-shadow:0 -22px 80px rgba(0,0,0,.5);transform:translateY(106%);transition:transform .72s cubic-bezier(.18,.82,.18,1);overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.focus-flight-modal.is-open .focus-flight-backdrop{opacity:1}.focus-flight-modal.is-open .focus-flight-drawer{transform:translateY(0)}.focus-flight-drawer:before{position:absolute;z-index:-1;inset:0;background:radial-gradient(circle at 17% 10%,rgba(87,96,79,.15),transparent 30%),#020302;content:""}.focus-flight-drawer-handle{position:sticky;z-index:4;top:10px;width:43px;height:4px;margin:11px auto -15px;border-radius:99px;background:rgba(255,255,255,.32)}.focus-flight-drawer-close{position:sticky;z-index:5;top:12px;left:calc(100% - 52px);display:grid;width:35px;height:35px;place-items:center;margin:0 16px 0 auto;border:1px solid rgba(255,255,255,.14);border-radius:50%;color:#f3f4ef;background:rgba(255,255,255,.09);font-size:23px;line-height:1;cursor:pointer}.focus-flight-drawer .focus-flight-stage{padding:8px clamp(12px,3vw,36px) 8px}.focus-flight-drawer .focus-flight-view{min-height:0;background:transparent}.focus-flight-drawer .focus-flight-view:before{display:none}#app>.topbar,#app>.content,#app>.tabbar{transition:transform .28s ease,filter .28s ease}#app.focus-flight-dimmed>.topbar,#app.focus-flight-dimmed>.content,#app.focus-flight-dimmed>.tabbar{filter:blur(7px) brightness(.58);transform:scale(.978);pointer-events:none}.focus-flight-modal .focus-flight-card{margin-top:0}.focus-flight-modal .focus-flight-active{padding-top:12px}.focus-flight-modal .focus-flight-active .focus-flight-heading{padding-top:4px}
@media(max-width:759px){.focus-flight-drawer{max-height:92dvh;border-radius:25px 25px 0 0}.focus-flight-drawer .focus-flight-stage{padding:5px 0 5px}.focus-flight-drawer-close{top:10px;margin-right:12px}.focus-flight-drawer-handle{top:9px;margin-bottom:-14px}.focus-flight-modal .focus-flight-setup{padding-top:27px}.focus-flight-modal .focus-flight-active{padding-top:16px}}
@media(prefers-reduced-motion:reduce){.focus-flight-backdrop,.focus-flight-drawer,#app>.topbar,#app>.content,#app>.tabbar{transition:none}}

/* Quick spelling keeps the visual calm but creates a distinct checkpoint after
   a short run. It deliberately uses its own scrollable card rather than
   squeezing definitions into the ordinary word card. */
.setting-card-icon.spelling{background:linear-gradient(135deg,#d38b55,#edbd73);font-size:15px}
.ex-item .en{white-space:normal;word-break:normal;line-break:auto}
.ex-item .cn b{margin-right:3px;color:#63816b;font-weight:850}
.quick-spelling-card{position:absolute;inset:0;display:flex;overflow:auto;max-width:960px;margin:auto;flex-direction:column;align-items:stretch;padding:clamp(28px,5vw,58px);border:1px solid rgba(255,255,255,.82);border-radius:var(--radius);color:var(--ink);background:radial-gradient(circle at 88% 8%,rgba(243,220,166,.34),transparent 25%),radial-gradient(circle at 4% 92%,rgba(193,226,209,.42),transparent 28%),rgba(255,254,250,.88);box-shadow:var(--shadow);overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.quick-spelling-kicker{color:#718967;font-size:10px;font-weight:900;letter-spacing:.18em}.quick-spelling-card h2{margin:9px 0 3px;color:#365b43;font-size:clamp(25px,4vw,39px);letter-spacing:-.05em}.quick-spelling-note{margin:0;color:var(--text-3);font-size:12px}.quick-spelling-example{margin-top:clamp(22px,4vh,44px);padding:clamp(18px,3vw,30px);border:1px solid rgba(205,221,204,.74);border-radius:22px;background:rgba(255,255,255,.68);box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}.quick-spelling-en{margin:0;color:#344239;font-family:var(--english-font);font-size:clamp(17px,2.2vw,24px);line-height:1.8}.spell-blank{padding:0 4px;border:0;border-bottom:2px solid #d99475;color:#bc755c;background:rgba(253,231,218,.65);font:inherit;letter-spacing:.12em}.quick-spelling-cn{margin:10px 0 0;color:#7b877d;font-size:13px;line-height:1.7}.quick-spelling-cn b{color:#60806b}.quick-spelling-example small{display:block;margin-top:9px;color:#96a198;font-size:11px}.quick-spelling-word{display:flex;align-items:center;gap:10px;margin-top:18px}.spell-reveal{min-width:132px;padding:10px 15px;border:1px solid rgba(125,160,107,.36);border-radius:13px;color:#527653;background:rgba(233,244,226,.88);font-weight:850;cursor:pointer}.spell-reveal.shown{color:#436e49;background:linear-gradient(135deg,rgba(221,241,207,.95),rgba(247,248,220,.92))}.quick-spelling-word small{color:#8a978d;font-size:11px}.quick-spelling-input{display:flex;flex-direction:column;gap:7px;margin-top:17px}.quick-spelling-input span,.quick-spelling-definitions>span{color:#6d846f;font-size:11px;font-weight:850}.quick-spelling-input input{width:100%;min-height:54px;padding:0 16px;border:1px solid rgba(132,164,136,.34);border-radius:15px;outline:0;color:#344239;background:rgba(255,255,255,.84);font-family:var(--english-font);font-size:19px;letter-spacing:.03em}.quick-spelling-input input:focus{border-color:#82aa7f;box-shadow:0 0 0 4px rgba(130,170,127,.16)}.quick-spelling-definitions{display:grid;gap:5px;margin-top:20px;padding:14px 16px;border-radius:17px;background:rgba(239,246,237,.72)}.quick-spelling-definitions p{margin:0;color:#526259;font-size:13px;line-height:1.55}.quick-spelling-definitions i{display:inline-block;min-width:40px;margin-right:8px;color:#729178;font-family:var(--english-font);font-weight:700}.quick-spelling-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:22px}.quick-spelling-actions button{min-height:46px;padding:0 18px;border-radius:14px;font-weight:850;cursor:pointer}.spell-skip{border:1px solid rgba(133,153,139,.24);color:#738177;background:rgba(243,246,242,.84)}.spell-check{border:1px solid transparent;color:#fff;background:linear-gradient(135deg,#67956e,#90b46f);box-shadow:0 9px 18px rgba(83,128,83,.18)}
@media(max-width:759px){.quick-spelling-card{inset:4px 7px;padding:22px 17px calc(20px + env(safe-area-inset-bottom));border-radius:22px}.quick-spelling-card h2{font-size:27px}.quick-spelling-example{margin-top:22px;padding:17px 15px;border-radius:18px}.quick-spelling-en{font-size:17px;line-height:1.75}.quick-spelling-word{align-items:flex-start;flex-direction:column;gap:7px}.quick-spelling-input input{min-height:51px;font-size:18px}.quick-spelling-definitions{margin-top:16px}.quick-spelling-actions{position:sticky;bottom:0;margin:18px -2px 0;padding:9px 2px 2px;background:linear-gradient(180deg,rgba(255,254,250,0),rgba(255,254,250,.94) 32%)}.quick-spelling-actions button{flex:1;min-height:48px}.quick-spelling-note{line-height:1.55}}

/* 真正的 WebGL 地球：脚本在打开专注抽屉后才按需载入。 */
.focus-echarts-globe{height:clamp(300px,52dvh,590px);padding:0;border:0;border-radius:32px;background:#020302;box-shadow:0 22px 48px rgba(0,0,0,.62)}.focus-echarts-globe:before{position:absolute;inset:0;z-index:0;background:radial-gradient(circle at 48% 48%,rgba(255,255,255,.04),transparent 38%),radial-gradient(circle at 7% 17%,#fff 0 1px,transparent 1.3px),radial-gradient(circle at 13% 73%,rgba(255,255,255,.84) 0 1px,transparent 1.4px),radial-gradient(circle at 22% 38%,rgba(255,255,255,.65) 0 1px,transparent 1.4px),radial-gradient(circle at 35% 11%,#fff 0 1px,transparent 1.3px),radial-gradient(circle at 46% 79%,rgba(255,255,255,.7) 0 1px,transparent 1.3px),radial-gradient(circle at 59% 9%,rgba(255,255,255,.8) 0 1px,transparent 1.3px),radial-gradient(circle at 72% 69%,#fff 0 1px,transparent 1.4px),radial-gradient(circle at 86% 25%,rgba(255,255,255,.65) 0 1px,transparent 1.4px),radial-gradient(circle at 94% 83%,#fff 0 1px,transparent 1.3px);content:"";pointer-events:none}.focus-echarts-canvas{position:absolute;z-index:1;inset:0;width:100%;height:100%;touch-action:none}.focus-echarts-globe .focus-map-status{z-index:3;top:22px;left:24px;color:#f4df53;text-shadow:0 1px 12px #000}.focus-echarts-globe .focus-map-status b{color:#f5f5ed}.focus-echarts-globe .focus-globe-label{z-index:3}.focus-echarts-hint{position:absolute;z-index:3;right:20px;bottom:16px;margin:0;color:rgba(245,245,235,.62);font-size:10px;letter-spacing:.04em;pointer-events:none}
.focus-route-preview .focus-echarts-globe{height:clamp(250px,36dvh,365px);margin:0;border-radius:18px}.focus-route-preview .focus-echarts-globe .focus-map-status{top:15px;left:18px}
@media(max-width:759px){.focus-echarts-globe{height:clamp(305px,48dvh,440px);border-radius:0}.focus-echarts-globe .focus-map-status{top:17px;left:18px}.focus-echarts-hint{right:15px;bottom:12px;font-size:9px}}
@media(max-width:759px){.focus-route-preview .focus-echarts-globe{height:270px;border-radius:16px}}

/* Boarding is a short in-drawer ritual: seat, sound, then a real-looking pass. */
.focus-boarding-panel{min-height:680px;padding:clamp(24px,5vw,48px);animation:focusBoardingIn .42s cubic-bezier(.2,.8,.2,1)}@keyframes focusBoardingIn{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:translateY(0)}}.focus-boarding-back{position:absolute;z-index:2;top:20px;right:20px;display:grid;width:38px;height:38px;place-items:center;border:1px solid rgba(255,255,255,.16);border-radius:50%;color:#f3f3ed;background:rgba(255,255,255,.08);font-size:32px;line-height:1;cursor:pointer}.focus-cabin{position:relative;display:grid;gap:12px;width:min(540px,100%);margin:32px auto 0;padding:82px clamp(22px,5vw,48px) 34px;border:1px solid rgba(255,255,255,.12);border-radius:52% 52% 25px 25px;background:radial-gradient(ellipse at 50% 3%,rgba(255,255,255,.15),transparent 24%),linear-gradient(90deg,rgba(255,255,255,.04),transparent 30% 70%,rgba(255,255,255,.04)),#101210;box-shadow:inset 0 0 0 10px rgba(255,255,255,.018),0 26px 55px rgba(0,0,0,.35)}.focus-cabin-nose{position:absolute;top:20px;left:50%;width:112px;height:51px;border-radius:70px 70px 12px 12px;background:linear-gradient(135deg,rgba(255,255,255,.24),rgba(255,255,255,.03));transform:translateX(-50%)}.focus-cabin-letters,.focus-cabin-row{display:grid;grid-template-columns:1fr 1fr 50px 1fr 1fr;gap:12px;align-items:center}.focus-cabin-letters{padding:0 2px;color:#969c98;font-size:11px;font-weight:900;text-align:center}.focus-cabin-letters i{height:1px}.focus-cabin-row button{min-height:52px;border:1px solid rgba(255,255,255,.08);border-radius:12px;color:#7e867f;background:#292c29;font:inherit;font-size:11px;font-weight:850;cursor:pointer}.focus-cabin-row button:hover{border-color:rgba(244,220,51,.6);color:#f3de48}.focus-cabin-row button.selected{border-color:#f1d635;color:#11140c;background:linear-gradient(135deg,#f7e55b,#cdb326);box-shadow:0 0 0 3px rgba(243,216,43,.14)}.focus-cabin-row b{color:#a9aaa4;font-family:ui-monospace,monospace;font-size:12px;text-align:center}.focus-boarding-panel .focus-takeoff{max-width:540px;margin:28px auto 0}.focus-sound-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:32px}.focus-sound-grid button{display:grid;gap:8px;min-height:155px;padding:18px;border:1px solid rgba(255,255,255,.12);border-radius:20px;color:#e9ece5;background:linear-gradient(145deg,rgba(255,255,255,.09),rgba(255,255,255,.03));text-align:left;cursor:pointer}.focus-sound-grid button i{display:grid;width:35px;height:35px;place-items:center;border-radius:12px;color:#f5dd46;background:rgba(242,214,44,.12);font-size:18px;font-style:normal}.focus-sound-grid button b{font-size:15px}.focus-sound-grid button span{color:#9ba39a;font-size:11px;line-height:1.5}.focus-sound-grid button.selected{border-color:#e9d034;background:linear-gradient(145deg,rgba(242,213,39,.25),rgba(255,255,255,.06));box-shadow:0 10px 24px rgba(0,0,0,.24)}.focus-sound-grid button:disabled{opacity:.42;cursor:not-allowed}.focus-boarding-pass{position:relative;overflow:hidden;max-width:510px;margin:28px auto 0;padding:27px;border:1px solid rgba(255,255,255,.13);border-radius:22px;color:#f5f5ed;background:radial-gradient(circle at 92% 5%,rgba(240,211,42,.2),transparent 26%),linear-gradient(145deg,#292c2b,#111211);box-shadow:0 20px 42px rgba(0,0,0,.35)}.focus-boarding-pass:before,.focus-boarding-pass:after{position:absolute;top:62%;width:18px;height:18px;border-radius:50%;background:#050605;content:""}.focus-boarding-pass:before{left:-9px}.focus-boarding-pass:after{right:-9px}.focus-pass-route{display:grid;grid-template-columns:1fr 34px 1fr;align-items:center}.focus-pass-route div:last-child{text-align:right}.focus-pass-route b{display:block;font-family:ui-monospace,monospace;font-size:clamp(30px,7vw,48px);letter-spacing:-.09em}.focus-pass-route span{color:#a9afa7;font-size:12px}.focus-pass-route i{display:grid;place-items:center;color:#f0d743;font-size:19px;font-style:normal}.focus-pass-meta{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:28px;padding-top:18px;border-top:1px dashed rgba(255,255,255,.2)}.focus-pass-meta span{display:grid;gap:3px;color:#a6ada4;font-size:10px}.focus-pass-meta b{color:#f1f2ed;font-family:ui-monospace,monospace;font-size:13px}.focus-pass-task,.focus-pass-sound{margin-top:16px;color:#d6dad2;font-size:12px}.focus-pass-sound{color:#e8d657}.focus-pass-barcode{display:flex;align-items:stretch;gap:2px;height:54px;margin-top:24px;padding:8px;background:#f2f2ec}.focus-pass-barcode i{display:block;flex:var(--w);background:#151614}.focus-route-preview .focus-globe-label{display:grid;transform:scale(.72);transform-origin:center}.focus-route-preview .focus-globe-label b{display:none}.focus-route-preview .focus-globe-label.from{left:17%;bottom:23%}.focus-route-preview .focus-globe-label.to{right:17%;top:46%}
@media(max-width:759px){.focus-boarding-panel{min-height:0;padding:30px 17px 34px}.focus-boarding-panel .focus-flight-heading h2{font-size:29px}.focus-cabin{padding:68px 14px 18px;border-radius:50% 50% 19px 19px}.focus-cabin-row,.focus-cabin-letters{grid-template-columns:1fr 1fr 31px 1fr 1fr;gap:6px}.focus-cabin-row button{min-height:34px}.focus-sound-grid{gap:8px;margin-top:24px}.focus-sound-grid button{min-height:132px;padding:13px;border-radius:16px}.focus-sound-grid button b{font-size:12px}.focus-sound-grid button span{font-size:9px}.focus-boarding-pass{padding:22px 18px;border-radius:18px}.focus-pass-route b{font-size:38px}.focus-boarding-back{top:13px;right:14px}.focus-route-preview .focus-globe-label{display:none}}

/* Canvas labels blur at some device pixel ratios. These DOM tags remain crisp and never clip. */
.focus-echarts-globe .focus-globe-label{display:grid;gap:0;z-index:4;left:50%;top:50%;bottom:auto;right:auto;min-width:max-content;pointer-events:none;transform:translate(-50%,-50%);transition:opacity .1s ease}.focus-echarts-globe .focus-globe-label span{position:relative;z-index:1;border-width:2px;border-radius:8px;padding:6px 9px;color:#fff056;background:rgba(10,11,7,.94);box-shadow:0 5px 14px rgba(0,0,0,.52);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;letter-spacing:.02em}.focus-echarts-globe .focus-globe-label b{display:none}.focus-echarts-globe .focus-globe-label.is-separated:after{position:absolute;z-index:0;top:50%;left:50%;width:var(--focus-label-link-length);height:1px;background:rgba(255,232,63,.85);box-shadow:0 0 6px rgba(245,218,44,.5);content:"";transform:rotate(var(--focus-label-link-angle));transform-origin:0 50%}.focus-route-preview .focus-echarts-globe .focus-globe-label{display:grid;transform:translate(-50%,-50%) scale(.9)}.focus-route-preview .focus-echarts-globe .focus-globe-label.from,.focus-route-preview .focus-echarts-globe .focus-globe-label.to{right:auto;bottom:auto}.focus-globe-plane-marker{position:absolute;z-index:5;left:50%;top:50%;display:grid;width:42px;height:42px;place-items:center;border:2px solid #ffea4e;border-radius:50%;color:#171508;background:radial-gradient(circle,#fff6a4 0 25%,#f4d52b 27% 58%,#372f08 60%);box-shadow:0 0 0 7px rgba(243,214,40,.16),0 8px 20px rgba(0,0,0,.52);pointer-events:none;transform:translate(-50%,-50%);transition:left .12s linear,top .12s linear}.focus-globe-plane-marker svg{width:25px;height:25px;fill:#111209;filter:drop-shadow(0 1px 0 rgba(255,255,255,.42))}.focus-globe-plane-marker.is-preview{display:none}.focus-cabin{animation:focusCabinLanding 1.25s cubic-bezier(.16,.86,.2,1) both}@keyframes focusCabinLanding{0%{opacity:0;transform:translateY(130px) scale(.88)}62%{opacity:1;transform:translateY(-9px) scale(1.015)}100%{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:759px){.focus-echarts-globe .focus-globe-label span{padding:5px 7px;font-size:10px}.focus-globe-plane-marker{width:36px;height:36px}.focus-globe-plane-marker svg{width:22px;height:22px}.focus-cabin{animation-duration:1.4s}}

/* 舱门缓慢打开；选中座位/声音只改变局部状态，绝不重复播放进场。 */
.focus-boarding-panel{animation:none}.focus-seat-aircraft{overflow:hidden}.focus-seat-aircraft .focus-cabin{animation:focusCabinFlyIn 3.75s cubic-bezier(.14,.82,.17,1) both}.focus-seat-aircraft.is-taking-off .focus-cabin{animation:focusCabinFlyOut 1.75s cubic-bezier(.52,0,.8,.2) both}.focus-seat-aircraft.is-taking-off .focus-flight-heading,.focus-seat-aircraft.is-taking-off .focus-takeoff{animation:focusBoardingFade .45s ease both;pointer-events:none}@keyframes focusCabinFlyIn{0%{opacity:0;transform:translateY(115vh) scale(.56)}52%{opacity:1;transform:translateY(38px) scale(.93)}78%{transform:translateY(-12px) scale(1.02)}100%{opacity:1;transform:translateY(0) scale(1)}}@keyframes focusCabinFlyOut{0%{opacity:1;transform:translateY(0) scale(1)}28%{transform:translateY(-24px) scale(1.02)}100%{opacity:0;transform:translateY(-125vh) scale(.68)}}@keyframes focusBoardingFade{to{opacity:0;transform:translateY(-12px)}}
.focus-pass-barcode{display:grid;gap:4px;height:auto;min-height:76px;margin-top:24px;padding:8px 12px 5px;background:#f7f6ef}.focus-barcode-bars{display:flex;align-items:stretch;height:48px}.focus-barcode-bars i{display:block;height:39px;flex:var(--w) 0 0;margin-right:1px;background:#11120f}.focus-barcode-bars i.guard{height:48px;background:#000}.focus-barcode-digits{color:#11120f;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:9px;font-weight:800;letter-spacing:.47em;line-height:1;text-align:center}.focus-pass-barcode>i{display:none}

/* 飞机严格按航线切线旋转和投影；不再以黄色圆点的形式漂浮。 */
.focus-globe-plane-marker{z-index:5;width:58px;height:58px;border:0;border-radius:0;background:transparent;box-shadow:none;transform:translate(-50%,-50%) rotate(var(--focus-plane-angle,0deg));transition:opacity .14s ease}.focus-globe-plane-marker:before{position:absolute;z-index:0;top:31px;left:50%;width:3px;height:31px;border-radius:999px;background:linear-gradient(180deg,rgba(255,255,255,.7),rgba(255,255,255,0));box-shadow:-4px 0 0 rgba(255,255,255,.18),4px 0 0 rgba(255,255,255,.18);content:"";transform:translateX(-50%)}.focus-globe-plane-marker svg{position:relative;z-index:1;width:51px;height:51px;fill:#fff;filter:drop-shadow(0 2px 2px rgba(0,0,0,.8)) drop-shadow(0 0 8px rgba(255,255,255,.38))}.focus-globe-plane-marker .focus-plane-window{fill:#a8b8c1}.focus-globe-plane-marker.is-preview{display:none}@media(max-width:759px){.focus-seat-aircraft .focus-cabin{animation-duration:3.75s}.focus-globe-plane-marker{width:48px;height:48px}.focus-globe-plane-marker svg{width:42px;height:42px}}

/* Full aircraft seat selector: the seats live inside a long fuselage, not a nose-only card. */
.focus-seat-aircraft .focus-cabin{isolation:isolate;gap:14px;width:min(560px,calc(100% - 152px));min-height:790px;margin:42px auto 82px;padding:116px clamp(42px,7vw,76px) 132px;border-radius:49% 49% 12% 12%/11% 11% 5% 5%;background:linear-gradient(90deg,rgba(255,255,255,.11),rgba(255,255,255,.018) 19% 81%,rgba(255,255,255,.11)),radial-gradient(ellipse at 50% 5%,rgba(255,255,255,.26),transparent 22%),linear-gradient(180deg,#1e211f,#101210 72%,#161916);box-shadow:inset 10px 0 0 rgba(255,255,255,.035),inset -10px 0 0 rgba(255,255,255,.035),inset 0 -48px 50px rgba(0,0,0,.25),0 30px 68px rgba(0,0,0,.48)}
.focus-seat-aircraft .focus-cabin:after{position:absolute;z-index:-1;top:68px;bottom:50px;left:50%;width:1px;background:linear-gradient(180deg,transparent,rgba(255,255,255,.17) 10% 90%,transparent);content:"";transform:translateX(-50%)}
.focus-seat-aircraft .focus-cabin-nose{z-index:2;top:24px;width:142px;height:68px;border:1px solid rgba(255,255,255,.18);border-radius:82px 82px 24px 24px;background:linear-gradient(135deg,rgba(255,255,255,.32),rgba(255,255,255,.06) 52%,rgba(0,0,0,.16));box-shadow:inset 0 1px rgba(255,255,255,.2),0 8px 18px rgba(0,0,0,.18)}
.focus-seat-aircraft .focus-cabin-letters,.focus-seat-aircraft .focus-cabin-row{position:relative;z-index:2}.focus-seat-aircraft .focus-cabin-row{min-height:58px}.focus-seat-aircraft .focus-cabin-row button{min-height:58px;border-radius:15px;background:linear-gradient(145deg,#343936,#222522);box-shadow:inset 0 1px rgba(255,255,255,.09),0 5px 10px rgba(0,0,0,.15)}
.focus-aircraft-wing{position:absolute!important;z-index:-1!important;top:53%;display:block;width:58%;height:126px;border:1px solid rgba(255,255,255,.12);background:linear-gradient(155deg,rgba(255,255,255,.2),rgba(255,255,255,.04) 46%,rgba(0,0,0,.22));box-shadow:inset 0 1px rgba(255,255,255,.12),0 15px 26px rgba(0,0,0,.35)}
.focus-aircraft-wing-left{right:83%;border-radius:92% 12px 26px 74%;transform:skewY(-16deg) rotate(-3deg)}
.focus-aircraft-wing-right{left:83%;border-radius:12px 92% 74% 26px;transform:skewY(16deg) rotate(3deg)}
.focus-aircraft-tail{position:absolute!important;z-index:-1!important;bottom:-63px;left:50%;display:block;width:236px;height:147px;border:1px solid rgba(255,255,255,.13);border-radius:12px 12px 70% 70%;background:linear-gradient(145deg,rgba(255,255,255,.17),rgba(255,255,255,.035) 55%,rgba(0,0,0,.23));box-shadow:0 18px 30px rgba(0,0,0,.34);clip-path:polygon(0 42%,43% 19%,50% 0,57% 19%,100% 42%,77% 53%,68% 100%,32% 100%,23% 53%);transform:translateX(-50%)}
.focus-aircraft-tailfin{position:absolute!important;z-index:-1!important;bottom:-37px;left:50%;display:block;width:74px;height:148px;border:1px solid rgba(255,255,255,.14);border-radius:80% 80% 12px 12px;background:linear-gradient(90deg,rgba(255,255,255,.19),rgba(255,255,255,.035));box-shadow:inset 0 1px rgba(255,255,255,.18);clip-path:polygon(50% 0,100% 39%,78% 100%,22% 100%,0 39%);transform:translateX(-50%)}
@media(max-width:759px){.focus-seat-aircraft .focus-cabin{gap:8px;width:min(410px,calc(100% - 70px));min-height:640px;margin:28px auto 60px;padding:88px 26px 96px;border-radius:49% 49% 10% 10%/10% 10% 4% 4%}.focus-seat-aircraft .focus-cabin-nose{top:17px;width:104px;height:51px}.focus-seat-aircraft .focus-cabin-row{min-height:42px}.focus-seat-aircraft .focus-cabin-row button{min-height:42px;border-radius:11px}.focus-aircraft-wing{top:53%;width:51%;height:84px}.focus-aircraft-wing-left{right:82%}.focus-aircraft-wing-right{left:82%}.focus-aircraft-tail{bottom:-46px;width:174px;height:106px}.focus-aircraft-tailfin{bottom:-27px;width:54px;height:106px}}

/* Seat selection is a cinematic aircraft scene, never a card nested in the flight drawer. */
.focus-flight-modal.is-seat-selection{align-items:stretch}.focus-flight-modal.is-seat-selection .focus-flight-drawer{width:100%;height:100dvh;max-height:none;padding:0;border:0;border-radius:0;background:#070807;box-shadow:none}.focus-flight-modal.is-seat-selection .focus-flight-drawer:before,.focus-flight-modal.is-seat-selection .focus-flight-drawer-handle,.focus-flight-modal.is-seat-selection .focus-flight-drawer-close{display:none}.focus-flight-modal.is-seat-selection .focus-flight-drawer .focus-flight-stage{width:100%;max-width:none;padding:0}.focus-flight-modal.is-seat-selection .focus-flight-view{min-height:100dvh;padding:0;overflow:visible;background:radial-gradient(ellipse at 50% 22%,rgba(62,68,66,.2),transparent 43%),#070807}.focus-seat-aircraft.focus-flight-card{min-height:max(100dvh,1500px);padding:0 0 150px!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;overflow:visible!important}.focus-seat-aircraft.focus-flight-card:before{display:none}.focus-seat-aircraft .focus-boarding-back{position:fixed;z-index:12;top:max(26px,env(safe-area-inset-top));left:clamp(20px,5vw,58px);right:auto;width:48px;height:48px;border-color:rgba(255,255,255,.18);background:rgba(255,255,255,.08);font-size:42px}.focus-seat-route{position:fixed;z-index:11;top:max(35px,calc(env(safe-area-inset-top) + 10px));left:50%;display:flex;align-items:center;gap:12px;color:#eef0e8;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:13px;font-weight:900;letter-spacing:.16em;transform:translateX(-50%)}.focus-seat-route i{color:#eed743;font-size:18px;font-style:normal}.focus-aircraft-scene{position:relative;isolation:isolate;width:min(980px,100%);min-height:1390px;margin:0 auto;padding:92px 0 148px}.focus-seat-aircraft .focus-cabin{position:relative;z-index:2;display:grid;align-content:start;gap:17px;width:min(500px,54vw);min-height:1170px;margin:0 auto;padding:169px clamp(45px,6vw,82px) 166px;border:0!important;border-radius:0!important;background:linear-gradient(90deg,rgba(255,255,255,.09),rgba(255,255,255,.022) 16% 84%,rgba(255,255,255,.09)),radial-gradient(ellipse at 50% 4%,rgba(255,255,255,.21),transparent 19%),linear-gradient(180deg,#252926,#151816 72%,#1e211f);box-shadow:inset 18px 0 22px rgba(255,255,255,.025),inset -18px 0 22px rgba(0,0,0,.25),0 30px 70px rgba(0,0,0,.45);clip-path:polygon(50% 0,64% 2%,74% 8%,79% 16%,80% 79%,74% 91%,63% 98%,50% 100%,37% 98%,26% 91%,20% 79%,21% 16%,26% 8%,36% 2%)}.focus-seat-aircraft .focus-cabin:after{z-index:0;top:118px;bottom:103px;background:linear-gradient(180deg,transparent,rgba(255,255,255,.13) 9% 91%,transparent)}.focus-seat-aircraft .focus-cabin-nose{z-index:2;top:49px;width:228px;height:90px;border:0;border-radius:52% 52% 22% 22%/78% 78% 18% 18%;background:linear-gradient(135deg,rgba(255,255,255,.19),rgba(255,255,255,.04) 52%,rgba(0,0,0,.14));box-shadow:inset 0 1px rgba(255,255,255,.22)}.focus-seat-aircraft .focus-cabin-nose:before,.focus-seat-aircraft .focus-cabin-nose:after{position:absolute;top:23px;width:42%;height:38px;border-radius:90% 13px 14px 35%;background:rgba(5,7,7,.58);content:""}.focus-seat-aircraft .focus-cabin-nose:before{left:8%;transform:skewY(-8deg)}.focus-seat-aircraft .focus-cabin-nose:after{right:8%;border-radius:13px 90% 35% 14px;transform:skewY(8deg)}.focus-seat-aircraft .focus-cabin-letters,.focus-seat-aircraft .focus-cabin-row{z-index:3}.focus-seat-aircraft .focus-cabin-letters{margin-bottom:4px}.focus-seat-aircraft .focus-cabin-row{min-height:61px}.focus-seat-aircraft .focus-cabin-row button{min-height:61px;border-color:rgba(255,255,255,.12);border-radius:16px;background:linear-gradient(145deg,#363b37,#202420);box-shadow:inset 0 1px rgba(255,255,255,.11),0 5px 13px rgba(0,0,0,.17)}.focus-aircraft-scene .focus-aircraft-wing{position:absolute!important;z-index:1!important;top:48%;display:block;width:50%;height:185px;border:0;background:linear-gradient(155deg,rgba(255,255,255,.19),rgba(255,255,255,.035) 46%,rgba(0,0,0,.28));box-shadow:inset 0 1px rgba(255,255,255,.15),0 18px 34px rgba(0,0,0,.4)}.focus-aircraft-scene .focus-aircraft-wing-left{right:51%;border-radius:100% 11px 22px 80%;transform:skewY(-17deg) rotate(-5deg)}.focus-aircraft-scene .focus-aircraft-wing-right{left:51%;border-radius:11px 100% 80% 22px;transform:skewY(17deg) rotate(5deg)}.focus-aircraft-scene .focus-aircraft-tail{position:absolute!important;z-index:1!important;bottom:113px;left:50%;width:390px;height:154px;border:0;border-radius:12px;background:linear-gradient(145deg,rgba(255,255,255,.17),rgba(255,255,255,.035) 58%,rgba(0,0,0,.28));box-shadow:0 17px 30px rgba(0,0,0,.36);clip-path:polygon(0 46%,42% 25%,50% 0,58% 25%,100% 46%,75% 58%,67% 100%,33% 100%,25% 58%);transform:translateX(-50%)}.focus-aircraft-scene .focus-aircraft-tailfin{position:absolute!important;z-index:1!important;bottom:74px;left:50%;width:100px;height:181px;border:0;border-radius:50% 50% 10px 10px;background:linear-gradient(90deg,rgba(255,255,255,.18),rgba(255,255,255,.035));clip-path:polygon(50% 0,100% 38%,76% 100%,24% 100%,0 38%);transform:translateX(-50%)}.focus-seat-aircraft .focus-cabin{animation:none}.focus-seat-aircraft .focus-aircraft-scene{animation:focusCabinFlyIn 3.75s cubic-bezier(.14,.82,.17,1) both}.focus-seat-aircraft.is-taking-off .focus-aircraft-scene{animation:focusCabinFlyOut 1.75s cubic-bezier(.52,0,.8,.2) both}.focus-seat-aircraft .focus-seat-confirm{position:fixed;z-index:12;right:clamp(20px,5vw,58px);bottom:max(24px,env(safe-area-inset-bottom));width:min(270px,calc(100% - 40px));margin:0;border:1px solid rgba(255,255,255,.24);box-shadow:0 14px 30px rgba(0,0,0,.4)}
@media(max-width:759px){.focus-seat-aircraft.focus-flight-card{min-height:max(100dvh,1350px);padding-bottom:118px!important}.focus-seat-aircraft .focus-boarding-back{top:max(17px,env(safe-area-inset-top));left:17px;width:42px;height:42px;font-size:36px}.focus-seat-route{top:max(28px,calc(env(safe-area-inset-top) + 8px));font-size:11px}.focus-aircraft-scene{min-height:1240px;padding-top:74px;padding-bottom:122px}.focus-seat-aircraft .focus-cabin{gap:11px;width:min(340px,76vw);min-height:1030px;padding:139px 31px 137px;clip-path:polygon(50% 0,65% 2%,75% 8%,81% 16%,82% 79%,75% 91%,63% 98%,50% 100%,37% 98%,25% 91%,18% 79%,19% 16%,25% 8%,35% 2%)}.focus-seat-aircraft .focus-cabin-nose{top:39px;width:159px;height:66px}.focus-seat-aircraft .focus-cabin-nose:before,.focus-seat-aircraft .focus-cabin-nose:after{top:17px;height:28px}.focus-seat-aircraft .focus-cabin-row{min-height:45px}.focus-seat-aircraft .focus-cabin-row button{min-height:45px;border-radius:12px}.focus-aircraft-scene .focus-aircraft-wing{top:49%;width:55%;height:115px}.focus-aircraft-scene .focus-aircraft-wing-left{right:48%}.focus-aircraft-scene .focus-aircraft-wing-right{left:48%}.focus-aircraft-scene .focus-aircraft-tail{bottom:90px;width:270px;height:112px}.focus-aircraft-scene .focus-aircraft-tailfin{bottom:61px;width:72px;height:128px}.focus-seat-aircraft .focus-seat-confirm{right:50%;bottom:max(16px,env(safe-area-inset-bottom));width:min(260px,calc(100% - 34px));transform:translateX(50%)}}

/* The cinematic seat view scrolls as a real long aircraft and its arrival never scales or rebounds. */
.focus-flight-modal.is-seat-selection .focus-flight-drawer{overflow-x:hidden!important;overflow-y:auto!important;overscroll-behavior-y:contain}.focus-seat-aircraft .focus-aircraft-scene{animation:focusCabinFlyIn 3.75s cubic-bezier(.2,.85,.25,1) both}@keyframes focusCabinFlyIn{from{opacity:0;transform:translateY(112dvh)}to{opacity:1;transform:translateY(0)}}@keyframes focusCabinFlyOut{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-112dvh)}}

/* Preserve the full aircraft silhouette without clipping any seat hit target. */
.focus-seat-aircraft.focus-flight-card{min-height:max(100dvh,1710px)}.focus-aircraft-scene{min-height:1590px;pointer-events:none}.focus-seat-aircraft .focus-cabin,.focus-seat-aircraft .focus-cabin *{pointer-events:auto}.focus-seat-aircraft .focus-cabin{min-height:1450px;padding-top:245px;clip-path:polygon(50% 0,73% 2%,87% 8%,95% 17%,95% 80%,86% 92%,66% 98%,50% 100%,34% 98%,14% 92%,5% 80%,5% 17%,13% 8%,27% 2%)}.focus-aircraft-scene .focus-aircraft-wing{pointer-events:none}@media(max-width:759px){.focus-seat-aircraft.focus-flight-card{min-height:max(100dvh,1500px)}.focus-aircraft-scene{min-height:1390px}.focus-seat-aircraft .focus-cabin{min-height:1220px;padding-top:208px;clip-path:polygon(50% 0,73% 2%,87% 8%,95% 17%,95% 80%,86% 92%,66% 98%,50% 100%,34% 98%,14% 92%,5% 80%,5% 17%,13% 8%,27% 2%)}}

/* Long swept wings: the wing span must read as an aircraft, not two side tabs. */
.focus-aircraft-scene .focus-aircraft-wing{top:46%;width:82%;height:278px;background:linear-gradient(155deg,rgba(255,255,255,.24),rgba(255,255,255,.055) 44%,rgba(0,0,0,.33));box-shadow:inset 0 1px rgba(255,255,255,.18),0 24px 42px rgba(0,0,0,.48)}.focus-aircraft-scene .focus-aircraft-wing:after{position:absolute;bottom:14%;width:108px;height:46px;border-radius:55% 20% 45% 35%;background:linear-gradient(180deg,#444a46,#171a18);box-shadow:inset 0 3px 5px rgba(255,255,255,.12),0 10px 14px rgba(0,0,0,.34);content:""}.focus-aircraft-scene .focus-aircraft-wing-left{right:49%;border-radius:100% 9px 18px 86%;clip-path:polygon(0 83%,78% 0,100% 20%,62% 100%);transform:skewY(-12deg) rotate(-4deg)}.focus-aircraft-scene .focus-aircraft-wing-left:after{right:28%;transform:rotate(11deg)}.focus-aircraft-scene .focus-aircraft-wing-right{left:49%;border-radius:9px 100% 86% 18px;clip-path:polygon(22% 0,100% 83%,38% 100%,0 20%);transform:skewY(12deg) rotate(4deg)}.focus-aircraft-scene .focus-aircraft-wing-right:after{left:28%;transform:rotate(-11deg)}@media(max-width:759px){.focus-aircraft-scene .focus-aircraft-wing{top:47%;width:94%;height:184px}.focus-aircraft-scene .focus-aircraft-wing:after{width:68px;height:31px}}
.focus-aircraft-scene .focus-aircraft-wing{width:112%;height:366px}.focus-aircraft-scene .focus-aircraft-wing-left{right:49%}.focus-aircraft-scene .focus-aircraft-wing-right{left:49%}.focus-aircraft-scene .focus-aircraft-wing:after{width:142px;height:58px}@media(max-width:759px){.focus-aircraft-scene .focus-aircraft-wing{width:122%;height:238px}.focus-aircraft-scene .focus-aircraft-wing:after{width:82px;height:37px}}

/* All aircraft parts travel in one coordinate system. */
.focus-seat-aircraft.is-taking-off .focus-cabin,
.focus-seat-aircraft.is-cancelling-seat .focus-cabin{animation:none!important}
.focus-seat-aircraft[data-transitioning] button{pointer-events:none}
.focus-seat-aircraft .focus-aircraft-scene{will-change:transform}
.focus-seat-aircraft.is-cancelling-seat .focus-aircraft-scene{animation:focusAircraftCancel 1s cubic-bezier(.4,0,.7,1) both}
.focus-seat-aircraft.is-cancelling-seat .focus-seat-confirm,
.focus-seat-aircraft.is-cancelling-seat .focus-seat-route,
.focus-seat-aircraft.is-taking-off .focus-seat-route{opacity:0;transition:opacity .35s}
@keyframes focusCabinFlyOut{from{opacity:var(--focus-flight-opacity,1);transform:var(--focus-flight-pose,translateY(0))}to{opacity:0;transform:translateY(var(--focus-flight-exit,-200dvh))}}
@keyframes focusAircraftCancel{from{opacity:var(--focus-flight-opacity,1);transform:var(--focus-flight-pose,translateY(0))}to{opacity:0;transform:translateY(var(--focus-flight-cancel,112dvh))}}

/* Broad swept wings: solid roots join underneath the fuselage. */
.focus-aircraft-scene .focus-aircraft-wing{top:40%;width:120%;height:580px;border-radius:0;transform:none;background:linear-gradient(170deg,#454b47 0%,#303632 42%,#181c19 100%)}
.focus-aircraft-scene .focus-aircraft-wing-left{right:48%;clip-path:polygon(100% 0,0 72%,0 83%,16% 85%,100% 54%)}
.focus-aircraft-scene .focus-aircraft-wing-right{left:48%;clip-path:polygon(0 0,100% 72%,100% 83%,84% 85%,0 54%)}
.focus-aircraft-scene .focus-aircraft-wing:after{top:29%;bottom:auto;width:70px;height:150px;border-radius:45% 45% 22% 22%;transform:none}
.focus-aircraft-scene .focus-aircraft-wing-left:after{right:27%}
.focus-aircraft-scene .focus-aircraft-wing-right:after{left:27%}
@media(max-width:759px){.focus-aircraft-scene .focus-aircraft-wing{width:132%;height:410px;top:40%}.focus-aircraft-scene .focus-aircraft-wing:after{width:42px;height:95px}}

.focus-boarding-panel.is-boarding-fading{opacity:0;transition:opacity .65s ease;pointer-events:none}
.focus-flight-modal.is-pass-selection .focus-flight-drawer{width:100%;height:100dvh;max-height:none;padding:0;border:0;border-radius:0;background:#070807;box-shadow:none}
.focus-flight-modal.is-pass-selection .focus-flight-drawer-handle,
.focus-flight-modal.is-pass-selection .focus-flight-drawer-close{display:none}
.focus-flight-modal.is-pass-selection .focus-flight-stage{width:100%;max-width:none;padding:0}
#focusBoardingPass{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100dvh;padding:70px 24px 40px;border:0;border-radius:0;background:transparent;box-shadow:none}
#focusBoardingPass:before{display:none}
#focusBoardingPass .focus-flight-heading{display:none}
#focusBoardingPass .focus-boarding-pass{width:min(510px,100%);box-sizing:border-box;margin:0;animation:focusPassDrop 1.5s cubic-bezier(.16,1,.3,1) both}
#focusBoardingPass .focus-takeoff{width:min(510px,100%);animation:focusPassButton .6s ease .9s both}
#focusBoardingPass .focus-boarding-back{position:fixed;top:24px;left:24px;right:auto}
@keyframes focusPassDrop{from{opacity:0;transform:translateY(-110dvh) rotate(-6deg)}to{opacity:1;transform:translateY(0) rotate(0)}}
@keyframes focusPassButton{from{opacity:0}to{opacity:1}}

/* Native option popups need their own colors on Windows. */
.focus-route-selects select{color-scheme:dark}
.focus-seat-hud{position:fixed;inset:0;z-index:20;pointer-events:none;transition:opacity .4s}
.focus-seat-hud>*{pointer-events:auto}
.focus-seat-hud.is-leaving,.focus-flight-modal:not(.is-open) .focus-seat-hud{opacity:0;pointer-events:none}
.focus-seat-hud.is-leaving *{pointer-events:none!important}
.focus-seat-hud .focus-boarding-back{position:absolute;top:24px;left:24px;right:auto;width:44px;height:44px;font-size:36px}
.focus-route-selects select option{background:#202420;color:#f4f6ee}
.focus-route-selects select option:checked{background:#4b5031;color:#fff5a8}

.focus-flight-modal.is-seat-selection.is-open .focus-flight-drawer{transform:none;filter:none;backdrop-filter:none}
.focus-seat-aircraft{transform:none!important;filter:none!important}
.focus-seat-controls{position:fixed;z-index:15;bottom:26px;right:28px;width:300px;box-sizing:border-box;padding:20px;border:1px solid #ffffff24;border-radius:24px;background:linear-gradient(145deg,#202521f2,#0b100df5);box-shadow:0 20px 60px #0008}
.focus-seat-controls-heading{display:grid;gap:6px;margin-bottom:15px;color:#f4f5ed;font-size:14px}
.focus-seat-controls-heading small{font-size:11px;color:#a3ada4}
.focus-seat-sounds{display:grid;grid-template-columns:1fr 1.4fr;gap:8px}
.focus-seat-sounds button{display:flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:8px;border:1px solid #ffffff20;border-radius:13px;background:#ffffff08;color:#c7cec8;font:inherit;font-size:12px;cursor:pointer}
.focus-seat-sounds button.selected{background:#e8d63220;border-color:#e8d63299;color:#f7e864}
.focus-seat-controls .focus-seat-confirm{position:static!important;width:100%!important;min-height:48px;margin:16px 0 0!important;transform:none!important;font-size:13px}
.focus-seat-controls .focus-seat-confirm:disabled{opacity:.5;cursor:default}
.focus-seat-controls .focus-seat-confirm{color:#16180d;background:linear-gradient(120deg,#f7e656,#cfb91e);box-shadow:0 10px 26px #0004}

/* 学习轨迹：内容与背景分开过渡，避免打开和关闭时突然闪现。 */
.learning-track-modal{opacity:0;transition:opacity .34s ease;pointer-events:none}
.learning-track-modal .learning-track-backdrop{opacity:0;backdrop-filter:blur(0);-webkit-backdrop-filter:blur(0);transition:opacity 1.05s cubic-bezier(.2,.7,.2,1),backdrop-filter 1.15s cubic-bezier(.2,.7,.2,1),-webkit-backdrop-filter 1.15s cubic-bezier(.2,.7,.2,1)}
.learning-track-modal .learning-track-dialog{opacity:0;transform:translateY(22px);transition:opacity .58s ease,transform .72s cubic-bezier(.16,1,.3,1);will-change:transform,opacity}
.learning-track-modal.is-open{opacity:1;pointer-events:auto}
.learning-track-modal.is-open .learning-track-backdrop{opacity:1;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.learning-track-modal.is-open .learning-track-dialog{opacity:1;transform:translateY(0)}
.learning-track-modal.is-closing{opacity:0;pointer-events:none}
.learning-track-modal.is-closing .learning-track-backdrop{opacity:0;backdrop-filter:blur(0);-webkit-backdrop-filter:blur(0)}
.learning-track-modal.is-closing .learning-track-dialog{opacity:0;transform:translateY(14px);transition-duration:.5s}
@media(prefers-reduced-motion:reduce){.learning-track-modal,.learning-track-modal .learning-track-backdrop,.learning-track-modal .learning-track-dialog{transition-duration:0s}}
.focus-seat-aircraft.is-taking-off .focus-seat-controls,.focus-seat-aircraft.is-cancelling-seat .focus-seat-controls{opacity:0;transition:opacity .4s;pointer-events:none}
.focus-map-panel.is-route-arrival .focus-globe-label,.focus-map-panel.is-route-arrival .focus-globe-plane-marker{visibility:hidden}
.focus-map-panel .focus-map-status{transition:opacity .8s}
.focus-map-panel.is-route-arrival .focus-map-status{opacity:.35}
@media(max-width:759px){.focus-seat-controls{left:12px;right:12px;bottom:max(12px,env(safe-area-inset-bottom));width:auto;padding:13px 16px;border-radius:20px}.focus-seat-controls-heading{display:none}.focus-seat-controls .focus-seat-confirm{margin-top:10px!important;min-height:44px}.focus-seat-aircraft.focus-flight-card{padding-bottom:210px!important}}

/* Phone and tablet overlays share safe-area-aware, scrollable layouts. */
.learning-track-dialog{box-sizing:border-box;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.learning-track-header h2{overflow-wrap:anywhere}
.learning-track-header p{overflow-wrap:anywhere}
.learning-track-close{min-width:44px;min-height:44px;touch-action:manipulation}
.focus-seat-hud .focus-boarding-back{top:max(16px,env(safe-area-inset-top));left:max(16px,env(safe-area-inset-left));touch-action:manipulation}
.focus-seat-sounds button,.focus-cabin-row button,.focus-takeoff{touch-action:manipulation}
#focusBoardingPass{box-sizing:border-box;min-height:100dvh;padding-top:max(74px,calc(env(safe-area-inset-top) + 58px));padding-bottom:max(30px,env(safe-area-inset-bottom))}
#focusBoardingPass .focus-boarding-back{top:max(16px,env(safe-area-inset-top));left:max(16px,env(safe-area-inset-left));min-width:44px;min-height:44px}
@media(max-width:1180px){
  .learning-track-modal{padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}
  .learning-track-dialog{width:min(760px,100%);max-height:calc(100dvh - 32px);padding:28px 22px;border-radius:26px}
  .learning-track-header{padding-right:44px;flex-wrap:wrap;gap:8px}
  .track-state{margin-top:0}
  .focus-seat-controls{left:max(16px,env(safe-area-inset-left));right:max(16px,env(safe-area-inset-right));bottom:max(14px,env(safe-area-inset-bottom));width:auto;max-width:720px;margin:0 auto;padding:14px 18px;display:grid;grid-template-columns:minmax(0,1fr) minmax(160px,.7fr);gap:14px;align-items:center}
  .focus-seat-controls-heading{display:none}
  .focus-seat-controls .focus-seat-confirm{margin:0!important}
  .focus-seat-route{top:max(28px,calc(env(safe-area-inset-top) + 12px));padding:6px 12px;border-radius:12px;background:#080d0bd9}
  .focus-seat-aircraft.focus-flight-card{padding-bottom:230px!important}
  .focus-flight-modal.is-pass-selection .focus-flight-drawer{overflow-y:auto;overscroll-behavior:contain}
}
@media(max-width:599px){
  .learning-track-dialog{padding:25px 17px;border-radius:23px}
  .learning-track-header h2{font-size:clamp(32px,10vw,46px);line-height:1.12;letter-spacing:-1px}
  .learning-track-header p{font-size:15px}
  .track-overview{grid-template-columns:1fr 1fr;gap:8px}
  .track-overview>div:first-child{grid-column:1/-1}
  .track-plan ul{grid-template-columns:repeat(2,minmax(0,1fr))}
  .track-section-title{align-items:flex-start;flex-wrap:wrap}
  .focus-seat-controls{display:block;padding:12px 14px}
  .focus-seat-controls .focus-seat-confirm{margin-top:10px!important}
  .focus-cabin-row button{font-size:12px}
  #focusBoardingPass{padding-left:16px;padding-right:16px}
  #focusBoardingPass .focus-boarding-pass{padding:22px 18px}
  .focus-pass-route b{font-size:38px;letter-spacing:-.04em}
}
@media(max-height:540px) and (orientation:landscape){
  .learning-track-dialog{max-height:calc(100dvh - 24px);padding:24px}
  .learning-track-header h2{font-size:36px}
  .track-overview{grid-template-columns:repeat(3,minmax(0,1fr))}
  .track-overview>div:first-child{grid-column:auto}
  .focus-seat-controls{padding:10px 14px;max-width:640px}
  #focusBoardingPass{justify-content:flex-start}
  #focusBoardingPass .focus-boarding-pass{margin-top:6px}
}

/* 横屏手机的短边仍是手机尺寸，不能因为长边超过 759px 就套用笔记本侧栏。 */
@media(max-height:540px) and (orientation:landscape){
  html.phone-device{--topbar-h:52px;--tabbar-h:54px}
  html.phone-device .app{position:relative;display:flex;height:100dvh;min-height:100dvh;padding:0;overflow:hidden;flex-direction:column}
  html.phone-device .topbar{width:100%;height:52px;min-height:52px;padding:0 12px}
  html.phone-device .topbar-left{max-width:calc(100% - 52px)}
  html.phone-device .book-name{font-size:15px}
  html.phone-device .today-progress{font-size:10px}
  html.phone-device .icon-btn{width:36px;height:36px}
  html.phone-device .content{width:100%;max-width:none;min-height:0;margin:0;flex:1}
  html.phone-device .tabbar{display:flex;width:100%;height:54px;min-height:54px;padding:0 0 17px;border-top:1px solid var(--line);border-radius:0;box-shadow:0 -4px 14px rgba(51,73,57,.05);flex:none;flex-direction:row}
  html.phone-device .tab{width:auto;height:auto;min-height:0;padding:3px 6px;flex:1;flex-direction:column;gap:1px;border-radius:0;font-size:10px;text-align:center}
  html.phone-device .tab-ico{font-size:19px}
  html.phone-device .site-compliance{position:absolute;right:0;bottom:0;left:0;z-index:11;min-height:17px;padding:2px 12px;color:var(--text-3);background:rgba(255,255,255,.7);font-size:8px;text-align:center}
  html.phone-device .cards-stage{min-height:0}
  html.phone-device .word-card{inset:2px 6px;padding:9px 12px 8px;border-radius:17px;overflow:hidden}
  html.phone-device .card-progress-wrap{gap:4px;margin-bottom:5px}
  html.phone-device .card-progress-text{font-size:9px}
  html.phone-device .word-row{gap:8px}
  html.phone-device .word-card .word{font-size:clamp(31px,5.5vw,43px);line-height:1}
  html.phone-device .card-tools{margin-top:2px}
  html.phone-device .defer-toggle,html.phone-device .defer-session-badge{min-height:32px;padding:5px 8px;font-size:10px}
  html.phone-device .card-tools .side-action{width:32px;height:32px;min-width:32px;min-height:32px;font-size:17px}
  html.phone-device .word-card .phon{margin:4px 0;font-size:11px}
  html.phone-device .sense-panel{margin:3px 0;padding:4px 8px}
  html.phone-device .sense-panel-head{min-height:29px;margin-bottom:0}
  html.phone-device .sense-panel-head>span{font-size:10px}
  html.phone-device .meaning-reveal-btn{min-width:84px;min-height:29px;padding:5px 8px;border-radius:10px;font-size:10px}
  html.phone-device .sense-panel .senses{height:57px;max-height:57px}
  html.phone-device .sense{padding:2px 0}
  html.phone-device .sense .cn{font-size:12px;line-height:1.25}
  html.phone-device .examples{min-height:54px;height:auto;max-height:none;margin-top:3px;padding:7px 10px;flex:1 1 54px;overflow-y:auto}
  html.phone-device .examples .ex-title{margin-bottom:2px;font-size:9px}
  html.phone-device .examples .ex-item{padding:2px 0;font-size:11px;line-height:1.3}
  html.phone-device .examples .ex-item .cn,html.phone-device .examples .ex-item .src{font-size:9px}
  html.phone-device .card-hint{display:none}
  html.phone-device .card-actions{gap:6px;margin-top:4px}
  html.phone-device .card-actions button{min-height:34px;border-radius:11px;font-size:12px}
}

/* 宽屏恢复居中单词：下次再背留在标题右边，其余操作回右侧竖栏。 */
.narrow-card-utilities{display:contents}
.desktop-card-side-actions{display:none!important}
@media(min-width:1181px){
  .narrow-card-utilities{display:none}
  .desktop-card-side-actions{display:flex!important;flex-direction:column}
}

/* The phone footer occupies the bottom of the navigation, so the study stage
   ends above both the navigation and the legal line. */
@media(max-width:759px){
  :root{--site-compliance-h:24px}
  .tabbar{height:calc(var(--tabbar-h) + var(--site-compliance-h));padding-bottom:calc(var(--site-compliance-h) + env(safe-area-inset-bottom))}
  .site-compliance{min-height:var(--site-compliance-h);padding:3px 16px calc(3px + env(safe-area-inset-bottom))}
  .sense-panel-head{min-height:32px!important}
  .meaning-reveal-btn{min-height:34px;padding-block:6px}
}

/* iPad Safari can report a laptop-sized CSS viewport.  Keep its reading
   column and side controls separate at every tablet width. */
@media(orientation:landscape){
  html.ipad-device .app{height:100dvh;min-height:100dvh;grid-template-columns:minmax(0,1fr);grid-template-rows:58px minmax(0,1fr) var(--site-compliance-h);padding:0 18px 8px}
  html.ipad-device .topbar{grid-column:1;grid-row:1;padding:0 2px}
  html.ipad-device .tabbar{grid-column:1;grid-row:1;align-self:center;justify-self:center;height:46px}
  html.ipad-device .content{grid-column:1;grid-row:2;min-height:0}
  html.ipad-device .site-compliance{grid-column:1;grid-row:3}
  html.ipad-device .cards-stage{min-height:0}
  html.ipad-device .word-card{padding:12px 108px 12px 32px;overflow:hidden}
  html.ipad-device .card-progress-wrap{margin-bottom:5px}
  html.ipad-device .word-card .word{font-size:44px;line-height:1}
  html.ipad-device .word-card .phon{margin:4px auto}
  html.ipad-device .desktop-card-side-actions,html.ipad-device .quick-card-side-actions{position:absolute!important;right:14px!important;top:47%!important;display:flex!important;width:auto!important;align-self:auto!important;flex-direction:column;gap:8px;margin:0!important}
  html.ipad-device .narrow-card-utilities{display:none}
  html.ipad-device .side-action{width:38px;height:38px;min-width:38px;min-height:38px}
  html.ipad-device .sense-panel{margin:2px 0 6px;padding:5px 10px 4px}
  html.ipad-device .sense-panel-head{min-height:30px!important;margin-bottom:1px!important}
  html.ipad-device .sense-panel-head .sense-panel-meta small{min-height:28px;padding:5px 8px;font-size:10px}
  html.ipad-device .meaning-reveal-btn{min-width:92px;min-height:30px;padding:5px 10px;font-size:11px}
  html.ipad-device .sense-panel .senses{height:auto;max-height:96px;grid-auto-rows:minmax(30px,auto);align-content:start;row-gap:4px}
  html.ipad-device .sense-panel .sense{height:auto;min-height:30px;padding:3px 1px}
  html.ipad-device .examples{height:108px;max-height:108px;flex:0 0 108px;margin-top:5px;padding:8px 10px;overflow-y:auto}
  html.ipad-device .examples .ex-item{padding:2px 0;font-size:12px;line-height:1.32}
  html.ipad-device .examples .ex-item .cn,html.ipad-device .examples .ex-item .src{font-size:10px}
  html.ipad-device .card-hint{margin-top:2px;padding-top:3px;font-size:10px}
  html.ipad-device .card-actions{margin-top:5px}
  html.ipad-device .card-actions button{min-height:40px;font-size:13px}
}

@media(orientation:portrait){
  html.ipad-device .app{grid-template-rows:68px minmax(0,1fr) var(--site-compliance-h)}
  html.ipad-device .sense-panel{padding:6px 8px 4px}
  html.ipad-device .sense-panel-head{min-height:34px!important;margin-bottom:2px!important}
  html.ipad-device .sense-panel-head .sense-panel-meta small{min-height:30px;padding:5px 8px}
  html.ipad-device .meaning-reveal-btn{min-height:34px;padding-block:6px}
  html.ipad-device .sense-panel .senses{height:auto;max-height:126px;grid-auto-rows:minmax(36px,auto);align-content:start;row-gap:6px}
}
