| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754 |
- :root {
- --brand: #2f9b82;
- --brand-strong: #1f7b68;
- --brand-deep: #155d50;
- --brand-pale: #e8f5f1;
- --brand-wash: #f1f8f6;
- --accent: #f59b23;
- --accent-strong: #df8211;
- --accent-pale: #fff3dc;
- --rose: #a34d67;
- --rose-pale: #faeaf0;
- --blue: #4f73aa;
- --blue-pale: #eaf0f9;
- --danger: #c94f4f;
- --danger-pale: #fff0ef;
- --success: #2f8b61;
- --ink: #172522;
- --ink-soft: #697673;
- --ink-faint: #96a29f;
- --surface: #ffffff;
- --surface-muted: #f4f7f6;
- --surface-hover: #f1f6f4;
- --line: #dce5e2;
- --line-soft: #eaf0ee;
- --radius-xs: 4px;
- --radius-sm: 6px;
- --radius-md: 8px;
- --radius-lg: 8px;
- --shadow-xs: 0 2px 8px rgb(24 54 47 / 5%);
- --shadow-sm: 0 5px 18px rgb(24 54 47 / 7%);
- --shadow-lg: 0 16px 40px rgb(24 54 47 / 16%);
- --shadow-brand: 0 14px 30px rgb(24 89 74 / 20%);
- --page-gutter: 14px;
- --panel-gap: 12px;
- --panel-radius: 8px;
- color-scheme: light;
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif;
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- }
- * { box-sizing: border-box; }
- html,
- body {
- min-height: 100%;
- margin: 0;
- color: var(--ink);
- background: var(--surface-muted);
- }
- body { min-width: 320px; }
- button,
- input,
- textarea,
- select { font: inherit; }
- button,
- a { -webkit-tap-highlight-color: transparent; }
- button { cursor: pointer; }
- a,
- button,
- input,
- textarea,
- select { transition: color 160ms ease, background-color 160ms ease, border-color 160ms ease, box-shadow 160ms ease, opacity 160ms ease, transform 160ms ease; }
- :focus-visible {
- outline: 3px solid rgb(245 155 35 / 48%);
- outline-offset: 2px;
- }
- img {
- max-width: 100%;
- object-fit: cover;
- }
- .page { padding: 16px; }
- .section {
- padding: 18px 16px;
- background: var(--surface);
- border-bottom: 1px solid var(--line-soft);
- }
- .section + .section { margin-top: 10px; }
- .section-title {
- margin: 0 0 14px;
- font-size: 17px;
- letter-spacing: 0;
- }
- .muted { color: var(--ink-soft); }
- .primary-button,
- .secondary-button,
- .danger-button {
- min-height: 46px;
- padding: 10px 18px;
- border: 1px solid transparent;
- border-radius: var(--radius-md);
- font-weight: 700;
- letter-spacing: 0;
- }
- .primary-button {
- color: white;
- background: var(--brand-strong);
- box-shadow: 0 6px 14px rgb(31 123 104 / 17%);
- }
- .secondary-button {
- color: var(--brand-strong);
- background: white;
- border-color: var(--brand);
- }
- .danger-button {
- color: white;
- background: var(--danger);
- }
- .primary-button:disabled,
- .secondary-button:disabled,
- .danger-button:disabled {
- cursor: not-allowed;
- opacity: 0.48;
- box-shadow: none;
- }
- .field { display: grid; gap: 7px; }
- .field + .field { margin-top: 15px; }
- .field label {
- color: var(--ink-soft);
- font-size: 13px;
- font-weight: 550;
- }
- .field input,
- .field textarea,
- .field select,
- input:not([type='checkbox']):not([type='radio']):not([type='range']),
- textarea,
- select {
- width: 100%;
- min-height: 46px;
- padding: 10px 12px;
- color: var(--ink);
- background: white;
- border: 1px solid var(--line);
- border-radius: var(--radius-sm);
- outline: none;
- }
- .field textarea,
- textarea { min-height: 110px; resize: vertical; }
- .field input:focus,
- .field textarea:focus,
- .field select:focus,
- input:focus,
- textarea:focus,
- select:focus {
- border-color: var(--brand);
- box-shadow: 0 0 0 3px rgb(47 155 130 / 12%);
- }
- .empty-state,
- .center-state {
- display: grid;
- min-height: 220px;
- padding: 28px 20px;
- place-items: center;
- color: var(--ink-soft);
- text-align: center;
- }
- .empty-state lucide-icon,
- .center-state lucide-icon { color: var(--ink-faint); }
- .empty-state > *,
- .center-state > * {
- min-width: 0;
- max-width: 100%;
- }
- .empty-state p,
- .center-state p {
- max-width: 100%;
- overflow-wrap: anywhere;
- word-break: break-word;
- }
- @media (hover: hover) {
- .primary-button:hover { background: var(--brand-deep); transform: translateY(-1px); }
- .secondary-button:hover { background: var(--brand-wash); }
- }
- @media (prefers-reduced-motion: reduce) {
- *,
- *::before,
- *::after {
- scroll-behavior: auto !important;
- animation-duration: 0.01ms !important;
- animation-iteration-count: 1 !important;
- transition-duration: 0.01ms !important;
- }
- }
- /* Shared visual language for the route families that implement the 95 migrated pages. */
- app-account-page .profile-header,
- app-appointment-page .appointment-status,
- app-finance-page .finance-summary,
- app-merchant-page :is(.stock-summary, .settle-summary),
- app-study-records-page :is(.mastery, .income-summary),
- app-team-page .team-summary,
- app-game-page .game-intro {
- background: linear-gradient(135deg, var(--brand-deep), var(--brand-strong));
- box-shadow: var(--shadow-brand);
- }
- app-account-page :is(.wallet-strip, .order-strip, .role-panel, .service-section, .settings-list),
- app-course-center-page :is(.course-band, .schedule-band),
- app-study-records-page :is(.filter-row, .record-tabs, .record-list),
- app-team-page :is(.team-stats, .detail-link, .members),
- app-merchant-page :is(.stock-list, .settlement-list, .settlement-preview, .sales-group),
- app-order-page :is(.order-tabs, .order-list),
- app-finance-page :is(.finance-list, .finance-actions),
- app-resource-page :is(.description, .action-row, .tabs, .resource-list, .detail-list),
- app-checkout-page :is(.checkout-section, .totals),
- app-product-page :is(.product-info, .product-tools, .product-content, .comments) {
- border-color: var(--line-soft);
- }
- app-product-list-page .product-grid article,
- app-appointment-page .unit-grid article,
- app-game-page .game-menu button,
- app-support-feedback-page :is(.agent-header, .message-intro),
- app-form-page .order-context,
- app-english-reading-page .question-block,
- app-reading-exercise .question-block {
- border-color: var(--line);
- border-radius: var(--radius-md);
- box-shadow: var(--shadow-xs);
- }
- app-product-list-page .product-grid article,
- app-game-page .game-menu button,
- app-appointment-page .unit-grid article { transition: border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease; }
- app-resource-page :is(.resource-item, .detail-list div),
- app-study-records-page :is(.learning-item, .history-item, .progress-item, .income-item),
- app-course-center-page :is(.course-list li, .schedule-list article),
- app-team-page .members article,
- app-order-page .order-card,
- app-finance-page .finance-item { border-color: var(--line-soft); }
- app-resource-page :is(.resource-item:hover, .resource-item:focus-within),
- app-study-records-page :is(.learning-item:hover, .progress-item:hover),
- app-course-center-page .schedule-list article:hover,
- app-team-page .members article:hover { background: var(--surface-hover); }
- app-product-list-page .node-list button.active,
- app-study-records-page .record-tabs button.active,
- app-resource-page .tabs button.active,
- app-auth-page .mode-tabs button.active,
- app-login-page .mode-tabs button.active {
- color: var(--brand-strong);
- border-color: var(--brand-strong);
- }
- app-form-page :is(.audit-line, .status-line),
- app-auth-page .audit-notice,
- app-login-page .audit-notice { border-radius: var(--radius-md); }
- app-form-page :is(.load-error, .upload-control, .image-item),
- app-support-feedback-page :is(.error-state, input, textarea),
- app-reading-setup :is(input, select, textarea),
- app-english-reading-page :is(input, select, textarea) { border-radius: var(--radius-sm); }
- app-product-page :is(.purchase-bar),
- app-checkout-page footer,
- app-appointment-page .appointment-actions,
- app-reading-exercise .answer-footer {
- border-color: var(--line);
- box-shadow: 0 -8px 24px rgb(24 54 47 / 6%);
- backdrop-filter: blur(12px);
- }
- app-support-page .messages p,
- app-support-page :is(.image-message, .file-message),
- app-support-page form textarea { border-radius: var(--radius-md); }
- app-auth-page,
- app-login-page {
- background: linear-gradient(180deg, var(--brand-pale) 0, var(--surface-muted) 42%, var(--surface) 100%);
- }
- @media (hover: hover) {
- app-product-list-page .product-grid article:hover,
- app-game-page .game-menu button:hover,
- app-appointment-page .unit-grid article:hover {
- border-color: color-mix(in srgb, var(--brand) 55%, var(--line));
- box-shadow: var(--shadow-sm);
- transform: translateY(-1px);
- }
- }
- /* Shared page geometry: business subpages use the same inset surfaces as the main tabs. */
- app-learning-page .catalog-tabs {
- display: grid;
- margin: var(--panel-gap) var(--page-gutter) 0;
- overflow: hidden;
- grid-template-columns: repeat(5, minmax(0, 1fr));
- background: var(--surface);
- border: 1px solid var(--line);
- border-radius: var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-learning-page .catalog-tabs button {
- min-width: 0;
- min-height: 44px;
- padding: 0 4px;
- color: var(--ink-soft);
- background: transparent;
- border: 0;
- border-right: 1px solid var(--line);
- font-size: 12px;
- }
- app-learning-page .catalog-tabs button:last-child { border-right: 0; }
- app-learning-page .catalog-tabs button.active { color: white; background: var(--brand-strong); font-weight: 700; }
- app-learning-page .unit-selection-summary {
- display: flex;
- min-height: 48px;
- align-items: center;
- justify-content: space-between;
- margin: var(--panel-gap) var(--page-gutter) 0;
- padding: 0 14px;
- color: var(--ink-soft);
- background: var(--surface);
- border: 1px solid var(--line);
- border-radius: var(--panel-radius);
- box-shadow: var(--shadow-sm);
- gap: 10px;
- }
- app-learning-page .unit-selection-summary span { font-size: 13px; }
- app-learning-page .unit-selection-summary strong { color: var(--brand-strong); font-size: 17px; }
- app-learning-page .unit-selection-summary small { font-size: 11px; }
- app-learning-page .node-list > button.selected { background: var(--brand-pale); }
- app-learning-page .node-list > button.unit-node { justify-content: flex-start !important; }
- app-learning-page .node-list .node-check {
- display: grid !important;
- width: 24px;
- height: 24px;
- flex: 0 0 24px;
- color: white;
- background: white;
- border: 1px solid #b5c6c1;
- border-radius: 6px;
- place-items: center;
- }
- app-learning-page .node-list > button.selected .node-check { background: var(--brand-strong); border-color: var(--brand-strong); }
- app-learning-page .node-list .node-copy { flex: 1; }
- app-learning-page .node-list .unit-progress-ring {
- display: grid;
- width: 44px;
- height: 44px;
- flex: 0 0 44px;
- margin-left: auto;
- position: relative;
- color: var(--brand-deep);
- background: conic-gradient(var(--brand) var(--progress, 0%), #e3ebe8 0);
- border-radius: 50%;
- place-items: center;
- }
- app-learning-page .node-list .unit-progress-ring::before {
- position: absolute;
- background: white;
- border-radius: 50%;
- content: '';
- inset: 5px;
- }
- app-learning-page .node-list .unit-progress-ring.complete { background: var(--brand-strong); }
- app-learning-page .node-list .unit-progress-ring strong { z-index: 1; font-size: 9px; }
- app-learning-page .unit-actions { grid-template-columns: minmax(0, 1fr) minmax(150px, 1.4fr); align-items: center; }
- app-learning-page .unit-actions > span { color: var(--ink-soft); font-size: 13px; text-align: center; }
- app-resource-page .resource-page > :is(.description, .order-context, .action-row, .tabs, .state-line, .error-state, .resource-list, .detail-list, .empty-state),
- app-appointment-page .appointment-page > :is(.course-section, .comment-panel, .report-panel),
- app-article-page .article-page > :is(header, .article-content),
- app-checkout-page .checkout-section,
- app-finance-page .balance-band,
- app-form-page .form-page,
- app-order-page .order-page > :is(header, .timeline, .order-card, .order-links),
- app-product-page .product-page > :is(.gallery-strip, .product-summary, .product-tools, .product-content, .comments),
- app-study-records-page .records-page > :is(.mastery, .income-summary, .filter-row, .record-tabs, .record-list),
- app-team-page :is(.team-summary, .team-stats, .detail-link, .members),
- app-merchant-page :is(.stock-summary, .settle-summary, .stock-list, .settlement-list, .settlement-preview, .sales-group),
- app-learning-page .learning-page > :is(.node-intro, .node-list, .selection-header, .word-select-list, .stage-banner, .repeat-list, .game-heading, .review-summary, .record-overview, .record-tip, .record-list, .anti-heading, .exam-status) {
- overflow: hidden;
- border: 1px solid var(--line);
- border-radius: var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-resource-page .resource-page {
- padding: var(--panel-gap) var(--page-gutter) 24px;
- }
- app-resource-page .resource-page > :is(.description, .order-context, .action-row, .tabs, .state-line, .error-state, .resource-list, .detail-list, .empty-state) {
- margin: 0 0 var(--panel-gap);
- background: white;
- }
- app-resource-page :is(.resource-item, .detail-list div):last-child { border-bottom: 0; }
- app-learning-page .learning-page > :is(.node-intro, .node-list, .game-heading, .review-summary, .record-overview, .anti-heading, .exam-status) {
- margin: var(--panel-gap) var(--page-gutter) 0;
- }
- app-learning-page .learning-page > .node-list { margin-bottom: var(--panel-gap); }
- app-learning-page .learning-page > .selection-header,
- app-learning-page .learning-page > .stage-banner,
- app-learning-page .learning-page > .record-tip {
- margin: var(--panel-gap) var(--page-gutter) 0;
- border-radius: var(--panel-radius) var(--panel-radius) 0 0;
- }
- app-learning-page .learning-page > .selection-header { top: 52px; }
- app-learning-page .learning-page > :is(.word-select-list, .repeat-list, .record-list) {
- margin: 0 var(--page-gutter) var(--panel-gap);
- border-top: 0;
- border-radius: 0 0 var(--panel-radius) var(--panel-radius);
- }
- app-learning-page :is(.node-list, .word-select-list, .repeat-list, .record-list) > :last-child { border-bottom: 0; }
- app-learning-page .learning-page > :is(.review-list, .match-grid, .anti-grid, .option-list) {
- padding-right: var(--page-gutter);
- padding-left: var(--page-gutter);
- }
- app-learning-page .learning-page > :is(.memory-calendar, .memory-date-tasks) {
- margin-right: var(--page-gutter);
- margin-left: var(--page-gutter);
- }
- app-appointment-page .appointment-page > .appointment-status {
- margin: var(--panel-gap) var(--page-gutter) 0;
- overflow: hidden;
- border-radius: var(--panel-radius) var(--panel-radius) 0 0;
- }
- app-appointment-page .appointment-page > .appointment-info {
- margin: 0 var(--page-gutter);
- overflow: hidden;
- border: 1px solid var(--line);
- border-top: 0;
- border-radius: 0 0 var(--panel-radius) var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-appointment-page .appointment-page > :is(.course-section, .comment-panel, .report-panel) {
- margin: var(--panel-gap) var(--page-gutter) 0;
- border-block: 1px solid var(--line);
- }
- app-article-page .article-page > :is(header, .article-content) {
- margin: var(--panel-gap) var(--page-gutter) 0;
- }
- app-article-page .article-video {
- width: calc(100% - (2 * var(--page-gutter)));
- margin: var(--panel-gap) var(--page-gutter) 0;
- overflow: hidden;
- border-radius: var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-checkout-page .checkout-page { padding-top: var(--panel-gap); }
- app-checkout-page .checkout-section { margin: 0 var(--page-gutter) var(--panel-gap); }
- app-finance-page .balance-band {
- margin: var(--panel-gap) var(--page-gutter) 0;
- }
- app-finance-page .log-heading {
- margin: var(--panel-gap) var(--page-gutter) 0;
- overflow: hidden;
- border: 1px solid var(--line);
- border-radius: var(--panel-radius) var(--panel-radius) 0 0;
- box-shadow: var(--shadow-sm);
- }
- app-finance-page .finance-logs {
- margin: 0 var(--page-gutter) 24px;
- overflow: hidden;
- border: 1px solid var(--line);
- border-top: 0;
- border-radius: 0 0 var(--panel-radius) var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-finance-page .finance-logs article:last-child { border-bottom: 0; }
- app-form-page {
- display: block;
- min-height: 100%;
- padding-top: 1px;
- background: var(--surface-muted);
- }
- app-form-page .form-page {
- margin: var(--panel-gap) var(--page-gutter) 24px;
- padding: 18px 16px 24px;
- background: white;
- }
- app-order-page .order-page { padding-top: 1px; }
- app-order-page .order-page > :is(header, .timeline, .order-card, .order-links) { margin: var(--panel-gap) var(--page-gutter) 0; }
- app-product-page .hero-image {
- display: block;
- width: calc(100% - (2 * var(--page-gutter)));
- margin: var(--panel-gap) var(--page-gutter) 0;
- overflow: hidden;
- border: 1px solid var(--line);
- border-radius: var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-product-page .product-page > :is(.gallery-strip, .product-summary, .product-tools, .product-content, .comments) {
- margin: var(--panel-gap) var(--page-gutter) 0;
- }
- app-product-list-page .browse-page:not(.with-nodes) > .search-row {
- margin: var(--panel-gap) var(--page-gutter) 0;
- overflow: hidden;
- border: 1px solid var(--line);
- border-radius: var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-product-list-page .browse-page:not(.with-nodes) > .product-region {
- padding-right: var(--page-gutter);
- padding-left: var(--page-gutter);
- }
- app-product-list-page .browse-page.with-nodes {
- width: calc(100% - (2 * var(--page-gutter)));
- height: calc(100dvh - 52px - (2 * var(--panel-gap)));
- margin: var(--panel-gap) var(--page-gutter);
- overflow: hidden;
- border: 1px solid var(--line);
- border-radius: var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-team-page .team-summary { margin: var(--panel-gap) var(--page-gutter) 0; }
- app-team-page .team-stats {
- margin: var(--panel-gap) var(--page-gutter) 0;
- border-radius: var(--panel-radius) var(--panel-radius) 0 0;
- }
- app-team-page .detail-link {
- margin: 0 var(--page-gutter);
- border-top: 0;
- border-radius: 0 0 var(--panel-radius) var(--panel-radius);
- }
- app-team-page .members { margin: var(--panel-gap) var(--page-gutter) 24px; }
- app-team-page .members article:last-child { border-bottom: 0; }
- app-merchant-page :is(.stock-summary, .settle-summary) { margin: var(--panel-gap) var(--page-gutter) 0; }
- app-merchant-page :is(.stock-list, .settlement-list, .settlement-preview, .sales-group) { margin: var(--panel-gap) var(--page-gutter) 0; border-block: 1px solid var(--line); }
- app-merchant-page :is(.stock-list, .settlement-list, .sales-group) article:last-child { border-bottom: 0; }
- app-study-records-page .records-page > :is(.mastery, .income-summary, .filter-row, .record-tabs, .record-list) {
- margin: var(--panel-gap) var(--page-gutter) 0;
- }
- app-study-records-page .records-page > .record-list { margin-bottom: 24px; }
- app-study-records-page .current-learning-card {
- margin: var(--panel-gap) var(--page-gutter) 0;
- overflow: hidden;
- background: white;
- border: 1px solid var(--line);
- border-radius: var(--panel-radius);
- box-shadow: var(--shadow-sm);
- }
- app-study-records-page .current-learning-card > header {
- display: flex;
- min-height: 58px;
- align-items: center;
- justify-content: space-between;
- padding: 10px 14px;
- color: white;
- background: var(--brand-strong);
- gap: 12px;
- }
- app-study-records-page .current-learning-card > header > div {
- display: flex;
- min-width: 0;
- flex-direction: column;
- gap: 2px;
- }
- app-study-records-page .current-learning-card > header span { color: rgb(255 255 255 / 78%); font-size: 10px; }
- app-study-records-page .current-learning-card > header strong { font-size: 16px; }
- app-study-records-page .current-learning-list button {
- display: grid;
- width: 100%;
- min-height: 66px;
- grid-template-columns: 36px minmax(0, 1fr) auto;
- align-items: center;
- padding: 9px 14px;
- color: var(--ink);
- text-align: left;
- background: white;
- border: 0;
- border-bottom: 1px solid var(--line);
- gap: 10px;
- }
- app-study-records-page .current-learning-list button:last-child { border-bottom: 0; }
- app-study-records-page .current-learning-list button > i {
- display: grid;
- width: 36px;
- height: 36px;
- color: var(--brand-strong);
- background: var(--brand-pale);
- border-radius: var(--radius-md);
- place-items: center;
- }
- app-study-records-page .current-learning-list button > span { display: flex; min-width: 0; flex-direction: column; gap: 4px; }
- app-study-records-page .current-learning-list button strong,
- app-study-records-page .current-learning-list button small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
- app-study-records-page .current-learning-list button strong { font-size: 13px; }
- app-study-records-page .current-learning-list button small { color: var(--ink-soft); font-size: 10px; }
- app-study-records-page .current-learning-list button:disabled { cursor: not-allowed; opacity: .58; }
- app-learning-page .memory-watermark { position: absolute; top: -28px; right: -26px; color: white; opacity: .07; pointer-events: none; }
- app-learning-page .memory-copy { min-width: 0; }
- app-learning-page .memory-copy strong,
- app-learning-page .memory-copy small { display: block; }
- app-learning-page .memory-kicker { display: inline-flex; align-items: center; color: rgb(255 255 255 / 72%); font-size: 11px; font-weight: 650; gap: 5px; }
- app-learning-page .memory-copy strong { margin-top: 7px; color: white; font-size: 21px; line-height: 1.2; }
- app-learning-page .memory-copy small { margin-top: 6px; color: rgb(255 255 255 / 72%); font-size: 10px; }
- app-learning-page .memory-score { display: flex; width: 68px; height: 68px; flex: 0 0 68px; align-items: center; justify-content: center; color: white; background: rgb(255 255 255 / 12%); border: 1px solid rgb(255 255 255 / 32%); border-radius: 50%; box-shadow: 0 0 0 5px rgb(255 255 255 / 5%); flex-direction: column; }
- app-learning-page .memory-score b { font-size: 18px; line-height: 1; }
- app-learning-page .memory-score small { margin-top: 5px; color: rgb(255 255 255 / 70%); font-size: 8px; }
- app-learning-page .memory-curve { position: absolute; inset: 0; margin: 0; overflow: hidden; background: rgb(3 45 39 / 12%); pointer-events: none; z-index: 0; }
- app-learning-page .memory-curve figcaption { position: absolute; top: 116px; right: 20px; left: 20px; display: flex; align-items: center; justify-content: space-between; color: rgb(255 255 255 / 78%); font-size: 11px; z-index: 2; }
- app-learning-page .memory-curve figcaption strong { display: inline-flex; align-items: center; color: #b8ef9f; font-size: 10px; gap: 5px; }
- app-learning-page .memory-curve figcaption strong i { width: 6px; height: 6px; background: #8bd47a; border-radius: 50%; box-shadow: 0 0 0 3px rgb(139 212 122 / 14%); }
- app-learning-page .memory-curve-chart { position: absolute; top: 136px; right: 8px; bottom: 61px; left: 8px; }
- app-learning-page .memory-curve-chart svg { display: block; width: 100%; height: 100%; overflow: visible; }
- app-learning-page .memory-curve-chart text { fill: rgb(255 255 255 / 62%); font-family: inherit; font-size: 7px; }
- app-learning-page .memory-chart-axis { stroke: rgb(255 255 255 / 24%); stroke-width: 1; vector-effect: non-scaling-stroke; }
- app-learning-page .memory-forgetting-line,
- app-learning-page .memory-learning-line,
- app-learning-page .memory-review-decay { fill: none; stroke-linecap: round; vector-effect: non-scaling-stroke; }
- app-learning-page .memory-forgetting-line { stroke: #e58b72; stroke-dasharray: 4 4; stroke-width: 1.7; }
- app-learning-page .memory-learning-line { stroke: #8bd47a; stroke-width: 2.7; }
- app-learning-page .memory-review-decay { stroke: #ffd084; stroke-width: 1.8; }
- app-learning-page .memory-review-lift { stroke: #b8ef9f; stroke-dasharray: 90; stroke-dashoffset: 90; stroke-linecap: round; stroke-width: 2; vector-effect: non-scaling-stroke; animation: memory-review-lift 15s ease-out infinite; animation-delay: var(--pulse-delay); }
- app-learning-page .memory-review-dot { fill: #ffad32; stroke: #126c5d; stroke-width: 1.2; }
- app-learning-page .memory-reset-dot { fill: #8bd47a; stroke: #126c5d; stroke-width: 1.1; }
- app-learning-page .memory-review-ripple { fill: none; stroke: #ffd084; stroke-width: 1.2; opacity: 0; transform-box: fill-box; transform-origin: center; animation: memory-review-ripple 15s ease-out infinite; animation-delay: var(--pulse-delay); }
- app-learning-page .memory-review-label { fill: #ffdba0; font-size: 6px; font-weight: 700; }
- app-learning-page .memory-line-label { font-size: 6px; font-weight: 700; }
- app-learning-page .memory-line-label.forgetting { fill: #f2aa96; }
- app-learning-page .memory-line-label.learning { fill: #b8ef9f; }
- app-learning-page .memory-day-dot { fill: rgb(255 255 255 / 58%); transform-box: fill-box; transform-origin: center; animation: memory-day-pulse 12s ease-in-out infinite; animation-delay: var(--pulse-delay); }
- app-learning-page .memory-day-ripple { fill: none; stroke: #ffd084; stroke-width: .8; opacity: 0; transform-box: fill-box; transform-origin: center; animation: memory-day-ripple 12s ease-out infinite; animation-delay: var(--pulse-delay); }
- @keyframes memory-day-pulse { 0%, 9%, 100% { fill: rgb(255 255 255 / 58%); transform: scale(1); } 4.5% { fill: #ffad32; transform: scale(1.8); } }
- @keyframes memory-day-ripple { 0%, 100% { opacity: 0; transform: scale(.6); } 3% { opacity: .8; } 10% { opacity: 0; transform: scale(3); } }
- @keyframes memory-review-lift { 0%, 100% { opacity: .2; stroke-dashoffset: 90; } 5%, 14% { opacity: 1; stroke-dashoffset: 0; } 22% { opacity: .52; stroke-dashoffset: 0; } }
- @keyframes memory-review-ripple { 0%, 100% { opacity: 0; transform: scale(.7); } 5% { opacity: .9; } 15% { opacity: 0; transform: scale(4); } }
- @media (prefers-reduced-motion: reduce) {
- app-learning-page .memory-day-dot,
- app-learning-page .memory-day-ripple,
- app-learning-page .memory-review-lift,
- app-learning-page .memory-review-ripple { animation: none; }
- }
- app-study-records-page .ai-reading-feature { margin: 12px 14px 0; overflow: hidden; background: white; border: 1px solid color-mix(in srgb, var(--brand-strong) 34%, var(--line)); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); }
- app-study-records-page .ai-reading-visual { position: relative; min-height: 230px; overflow: hidden; background: #116b5a; }
- app-study-records-page .ai-reading-visual > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: left center; }
- app-study-records-page .ai-reading-copy { display: flex; width: 52%; min-height: 230px; padding: 18px 0 18px 18px; position: relative; z-index: 1; align-items: flex-start; color: white; flex-direction: column; }
- app-study-records-page .ai-reading-eyebrow { display: inline-flex; align-items: center; color: #dff8ef; font-size: 11px; font-weight: 700; gap: 6px; }
- app-study-records-page .ai-reading-copy h2 { margin: 10px 0 7px; font-size: 23px; line-height: 1.28; letter-spacing: 0; }
- app-study-records-page .ai-reading-copy p { width: 185px; margin: 0; color: rgb(255 255 255 / 82%); font-size: 12px; line-height: 1.6; }
- app-study-records-page .ai-reading-cta { display: inline-flex; min-height: 44px; margin-top: auto; padding: 0 12px; align-items: center; justify-content: center; color: #14352f; background: var(--accent); border: 0; border-radius: var(--radius-sm); box-shadow: 0 6px 16px rgb(6 47 39 / 24%); font-size: 12px; font-weight: 750; gap: 7px; }
- app-study-records-page .ai-reading-cta:disabled { color: rgb(255 255 255 / 72%); background: rgb(255 255 255 / 14%); box-shadow: none; cursor: not-allowed; }
- app-study-records-page .ai-reading-flow { display: grid; min-height: 62px; margin: 0; padding: 0 8px; list-style: none; grid-template-columns: repeat(4, minmax(0, 1fr)); }
- app-study-records-page .ai-reading-flow li { display: flex; min-width: 0; align-items: center; justify-content: center; position: relative; color: var(--ink-soft); font-size: 10px; flex-direction: column; gap: 4px; }
- app-study-records-page .ai-reading-flow li:not(:last-child)::after { width: 1px; height: 24px; position: absolute; top: 19px; right: 0; background: var(--line); content: ''; }
- app-study-records-page .ai-reading-flow b { display: grid; width: 20px; height: 20px; color: white; background: var(--brand-strong); border-radius: 50%; font-size: 10px; place-items: center; }
- app-study-records-page .ai-reading-flow span { overflow: hidden; max-width: 100%; text-overflow: ellipsis; white-space: nowrap; }
- app-learning-page .word-refine-item { background: white; border-bottom: 1px solid var(--line); }
- app-learning-page .word-refine-item.selected { background: var(--brand-pale); }
- app-learning-page .word-refine-item:last-child { border-bottom: 0; }
- app-learning-page .word-refine-main { display: grid; min-height: 72px; align-items: center; padding: 8px 14px; grid-template-columns: 32px minmax(0, 1fr) 34px; gap: 10px; }
- app-learning-page .word-select-check { display: grid; width: 32px; height: 32px; padding: 0; color: white; background: white; border: 1px solid var(--line); border-radius: var(--radius-sm); place-items: center; }
- app-learning-page .word-select-check[aria-pressed='true'] { background: var(--brand-strong); border-color: var(--brand-strong); }
- app-learning-page .word-reveal { display: flex; min-width: 0; min-height: 52px; padding: 5px 0; align-items: flex-start; color: var(--ink); text-align: left; background: transparent; border: 0; flex-direction: column; gap: 5px; }
- app-learning-page .word-reveal strong { font-size: 18px; }
- app-learning-page .word-reveal small { overflow: hidden; max-width: 100%; color: var(--ink-faint); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
- app-learning-page .word-reveal small.revealed { color: var(--ink-soft); font-size: 13px; }
- app-learning-page .word-refine-main .audio { display: grid; width: 34px; height: 34px; color: var(--brand-strong); place-items: center; }
- app-learning-page .word-assessment { display: grid; padding: 0 14px 12px 56px; grid-template-columns: minmax(0, .85fr) minmax(0, 1.45fr); gap: 7px; }
- app-learning-page .word-assessment > span { grid-column: 1 / -1; color: var(--ink-soft); font-size: 10px; }
- app-learning-page .word-assessment button { display: inline-flex; min-width: 0; min-height: 38px; padding: 0 9px; align-items: center; justify-content: center; background: white; border: 1px solid var(--line); border-radius: var(--radius-sm); font-size: 11px; font-weight: 650; gap: 5px; }
- app-learning-page .word-assessment .known-button { color: var(--brand-strong); }
- app-learning-page .word-assessment .unknown-button { color: #9a6407; }
- app-learning-page .word-assessment .known-button.active { color: white; background: var(--brand-strong); border-color: var(--brand-strong); }
- app-learning-page .word-assessment .unknown-button.active { color: #4d3100; background: var(--accent-soft); border-color: var(--accent); }
- @media (hover: hover) { app-study-records-page .ai-reading-cta:not(:disabled):hover { filter: brightness(1.04); transform: translateY(-1px); } }
- @media (prefers-reduced-motion: reduce) { app-study-records-page .ai-reading-cta { transition: none; } }
- @media (max-width: 360px) { app-study-records-page .ai-reading-feature { margin-inline: 10px; } app-study-records-page .ai-reading-copy { width: 58%; padding-left: 14px; } app-study-records-page .ai-reading-copy h2 { font-size: 21px; } app-study-records-page .ai-reading-copy p { width: 160px; } app-study-records-page .ai-reading-cta { padding-inline: 9px; } }
- @media (max-width: 360px) { app-learning-page .word-assessment { padding-left: 14px; } }
- @media (min-width: 500px) { app-study-records-page .ai-reading-copy { width: 44%; max-width: 334px; } app-study-records-page .ai-reading-copy p { width: 230px; } }
- @media (max-width: 360px) {
- :root { --page-gutter: 10px; }
- }
|