/* ========================================================================== 6. CEFR Testing & Murphy Grammar Engine ========================================================================== */ /* ========================================================================== VIEW 4: CEFR Level Testing & Automated Gap Ingestion Styles (Task 15) ========================================================================== */ .cefr-view { max-width: 960px; margin: 0 auto; padding: 24px 16px 80px 16px; width: 100%; } .cefr-overview-container, .cefr-quiz-container, .cefr-summary-container { width: 100%; } .level-code { font-weight: 800; } .badge-pos { font-size: 11px; font-weight: 700; text-transform: uppercase; background: var(--bg-hover); color: var(--text-muted); padding: 3px 8px; border-radius: var(--radius-sm); border: 1px solid var(--border-color); } .clue-icon { font-size: 16px; } .clue-label { font-size: 13px; color: var(--text-muted); font-weight: 500; } .cefr-feedback-box .fb-term { font-size: 16px; color: var(--text-main); font-weight: 700; } .cefr-feedback-box .fb-trans { font-size: 14.5px; color: var(--text-main); font-weight: 500; } .progress-labels-row .counts-text { font-size: 12px; color: var(--text-muted); } .cefr-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; margin-bottom: 24px; flex-wrap: wrap; } .cefr-header-actions { display: flex; align-items: center; gap: 10px; } /* Background Task Banner in CEFR Overview */ .cefr-task-banner { background: linear-gradient(135deg, rgba(59, 130, 246, 0.12), rgba(16, 185, 129, 0.08)); border: 1px solid rgba(59, 130, 246, 0.3); border-radius: var(--radius-md); padding: 14px 18px; margin-bottom: 24px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); } .task-banner-inner { display: flex; justify-content: space-between; align-items: center; gap: 16px; } .task-banner-content { flex: 1; } .task-banner-title { display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--text-main); margin-bottom: 4px; } .task-banner-counts { font-size: 12px; color: var(--text-muted); font-weight: 500; margin-left: auto; } .task-banner-msg { font-size: 13px; color: var(--text-muted); } /* Book Source Badge in Question Card & Feedback */ .cefr-book-badge { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 600; color: #3b82f6; background: rgba(59, 130, 246, 0.1); border: 1px solid rgba(59, 130, 246, 0.25); padding: 2px 10px; border-radius: var(--radius-sm); max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .fb-source-citation { font-size: 12.5px; font-weight: 500; color: #3b82f6; background: rgba(59, 130, 246, 0.08); border-left: 3px solid #3b82f6; padding: 6px 10px; border-radius: 0 var(--radius-sm) var(--radius-sm) 0; margin: 8px 0; } .cefr-title-wrap h2 { font-size: 26px; font-weight: 700; margin-bottom: 8px; display: flex; align-items: center; gap: 10px; } .cefr-title-wrap .subtitle { font-size: 15px; color: var(--text-muted); line-height: 1.5; } /* Level Selection Grid */ .cefr-levels-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; } .cefr-level-card { background-color: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 24px; display: flex; flex-direction: column; gap: 18px; box-shadow: var(--shadow-sm); transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; } .cefr-level-card:hover { border-color: var(--primary); transform: translateY(-2px); box-shadow: var(--shadow-md); } .level-card-header { display: flex; align-items: center; gap: 14px; } .level-pill { display: inline-flex; align-items: center; justify-content: center; padding: 6px 14px; border-radius: 9999px; font-weight: 800; font-size: 15px; letter-spacing: 0.5px; } .level-badge-a1 { background: rgba(16, 185, 129, 0.15); color: #10b981; border: 1px solid rgba(16, 185, 129, 0.35); } .level-badge-a2 { background: rgba(56, 189, 248, 0.15); color: #38bdf8; border: 1px solid rgba(56, 189, 248, 0.35); } .level-badge-b1 { background: rgba(129, 140, 248, 0.15); color: #818cf8; border: 1px solid rgba(129, 140, 248, 0.35); } .level-badge-b2 { background: rgba(245, 158, 11, 0.15); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.35); } .level-header-text { flex: 1; } .level-title { font-size: 17px; font-weight: 600; margin: 0 0 2px 0; } .level-meta-sub { font-size: 13px; color: var(--text-muted); } /* Progress bar inside card */ .level-card-progress { display: flex; flex-direction: column; gap: 6px; } .progress-bar-wrap { height: 8px; background-color: var(--bg-hover); border-radius: 9999px; overflow: hidden; } .progress-bar-fill { height: 100%; border-radius: 9999px; transition: width 0.4s ease; } .progress-bar-fill.level-badge-a1 { background-color: #10b981; } .progress-bar-fill.level-badge-a2 { background-color: #38bdf8; } .progress-bar-fill.level-badge-b1 { background-color: #818cf8; } .progress-bar-fill.level-badge-b2 { background-color: #f59e0b; } .progress-labels-row { display: flex; justify-content: space-between; font-size: 12px; color: var(--text-muted); } .progress-labels-row .pct-text { font-weight: 600; color: var(--text-main); } /* Mini metrics */ .level-card-metrics { display: flex; justify-content: space-between; background-color: var(--bg-hover); border-radius: var(--radius-md); padding: 10px 12px; } .mini-metric { display: flex; flex-direction: column; align-items: center; gap: 2px; } .mini-metric .m-val { font-size: 14px; font-weight: 700; } .mini-metric .m-lbl { font-size: 11px; color: var(--text-muted); } .level-card-actions { display: flex; flex-direction: column; gap: 8px; margin-top: auto; } /* Quiz Topbar */ .cefr-quiz-topbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 24px; padding: 12px 18px; background-color: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); } .cefr-quiz-topbar-left { display: flex; align-items: center; gap: 12px; } .cefr-quiz-topbar-center { display: flex; align-items: center; gap: 14px; flex: 1; max-width: 380px; } /* Cloze Card */ .cefr-quiz-card-wrapper { display: flex; flex-direction: column; gap: 20px; } .cefr-cloze-card { background-color: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 32px 28px; box-shadow: var(--shadow-md); display: flex; flex-direction: column; gap: 20px; animation: fadeIn 0.25s ease-out; } .cefr-cloze-header { display: flex; align-items: center; justify-content: space-between; } .cefr-mode-tag { font-size: 13px; font-weight: 600; color: var(--primary); background: rgba(56, 189, 248, 0.1); padding: 4px 10px; border-radius: var(--radius-sm); } /* Sentence & Blank */ .cefr-sentence-wrap { padding: 18px 0; } .cefr-sentence-text { font-size: 22px; font-weight: 500; line-height: 1.6; color: var(--text-main); margin: 0; } .cefr-blank { display: inline-block; min-width: 90px; text-align: center; background: rgba(56, 189, 248, 0.12); border-bottom: 2px dashed var(--primary); padding: 2px 12px; border-radius: 4px; font-weight: 700; color: var(--primary); transition: all 0.25s ease; } .cefr-blank.blank-correct { background: rgba(16, 185, 129, 0.2); border-bottom: 2px solid #10b981; color: #10b981; } .cefr-blank.blank-wrong-revealed { background: rgba(239, 68, 68, 0.2); border-bottom: 2px solid #ef4444; color: #f87171; } /* Clue Box */ .cefr-clue-box { display: flex; align-items: center; gap: 8px; background-color: var(--bg-hover); padding: 10px 14px; border-radius: var(--radius-md); font-size: 14px; color: var(--text-muted); } .cefr-clue-box .clue-term { color: var(--text-main); font-size: 15px; } /* Options Grid: 2x2 */ .cefr-options-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-top: 6px; } .cefr-opt-btn { display: flex; align-items: center; justify-content: flex-start; gap: 12px; background-color: var(--bg-surface); border: 1.5px solid var(--border-color); border-radius: var(--radius-md); padding: 16px 20px; min-height: 56px; color: var(--text-main); font-size: 17px; font-weight: 600; cursor: pointer; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); outline: none; user-select: none; -webkit-tap-highlight-color: transparent; } .cefr-opt-btn:hover:not(:disabled) { border-color: var(--primary); background-color: var(--bg-hover); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(56, 189, 248, 0.15); } .cefr-opt-btn:active:not(:disabled) { transform: scale(0.98); } .cefr-opt-btn .opt-num { font-size: 13px; color: var(--text-muted); font-weight: 500; } .cefr-opt-btn .opt-text { flex: 1; text-align: left; } /* Option States */ .cefr-opt-btn.opt-correct { background-color: #10b981 !important; border-color: #10b981 !important; color: #fff !important; box-shadow: 0 0 16px rgba(16, 185, 129, 0.4); } .cefr-opt-btn.opt-correct .opt-num { color: rgba(255, 255, 255, 0.8) !important; } .cefr-opt-btn.opt-wrong { background-color: #ef4444 !important; border-color: #ef4444 !important; color: #fff !important; box-shadow: 0 0 16px rgba(239, 68, 68, 0.4); } .cefr-opt-btn.opt-wrong .opt-num { color: rgba(255, 255, 255, 0.8) !important; } .cefr-opt-btn.opt-correct-revealed { border-color: #10b981 !important; background-color: rgba(16, 185, 129, 0.15) !important; color: #10b981 !important; animation: pulseBorder 1.5s infinite ease-in-out; } @keyframes pulseBorder { 0%, 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.5); } 50% { box-shadow: 0 0 0 6px rgba(16, 185, 129, 0); } } /* Feedback Box */ .cefr-feedback-box { border-radius: var(--radius-md); padding: 18px 20px; display: flex; flex-direction: column; gap: 8px; animation: fadeIn 0.25s ease-out; } .cefr-feedback-box.feedback-correct { background: rgba(16, 185, 129, 0.12); border: 1px solid rgba(16, 185, 129, 0.35); } .cefr-feedback-box.feedback-wrong { background: rgba(239, 68, 68, 0.12); border: 1px solid rgba(239, 68, 68, 0.35); } .cefr-feedback-box .fb-title { font-size: 16px; font-weight: 700; } .cefr-feedback-box.feedback-correct .fb-title { color: #10b981; } .cefr-feedback-box.feedback-wrong .fb-title { color: #ef4444; } .cefr-feedback-box .fb-meta { display: flex; align-items: center; gap: 10px; font-size: 15px; } .cefr-feedback-box .fb-explanation { margin: 4px 0 0 0; font-size: 14px; line-height: 1.5; color: var(--text-main); } /* Gap Ingestion Badge inside mistake feedback */ .cefr-gap-ingested-badge { display: flex; align-items: center; gap: 10px; background: rgba(239, 68, 68, 0.15); border: 1px solid rgba(239, 68, 68, 0.3); border-radius: var(--radius-md); padding: 10px 14px; margin-top: 6px; font-size: 13px; line-height: 1.4; color: var(--text-main); } .cefr-gap-ingested-badge .badge-icon { font-size: 18px; } /* Dual Gap Ingestion (Correct + Chosen Mistake) */ .cefr-dual-ingested-box { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.25); border-radius: var(--radius-md); padding: 12px 14px; margin-top: 10px; animation: fadeIn 0.2s ease-out; } .dual-ingested-header { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-main); margin-bottom: 8px; } .dual-ingested-chips { display: flex; flex-wrap: wrap; gap: 8px; } .ingested-chip { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-sm); padding: 6px 10px; font-size: 12.5px; color: var(--text-main); display: flex; align-items: center; gap: 5px; } .ingested-chip.chip-target { border-left: 3px solid #10b981; } .ingested-chip.chip-chosen { border-left: 3px solid #ef4444; } .ingested-chip .chip-label { font-size: 10.5px; font-weight: 700; text-transform: uppercase; color: var(--text-muted); } /* Words Breakdown (All 4 Options with In-library/Add buttons) */ .cefr-words-breakdown { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border-color); text-align: left; } .words-breakdown-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; flex-wrap: wrap; gap: 6px; } .wb-title { font-size: 13px; font-weight: 700; color: var(--text-main); display: flex; align-items: center; gap: 6px; } .wb-hint { font-size: 11.5px; color: var(--text-muted); } .words-breakdown-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; } .word-breakdown-card { background: var(--bg-surface); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 9px 11px; display: flex; flex-direction: column; gap: 4px; transition: all 0.15s ease; } .word-breakdown-card.is-target { border-color: rgba(16, 185, 129, 0.4); background: rgba(16, 185, 129, 0.05); } .word-breakdown-card.is-chosen-mistake { border-color: rgba(239, 68, 68, 0.4); background: rgba(239, 68, 68, 0.05); } .wb-card-top { display: flex; justify-content: space-between; align-items: baseline; gap: 6px; } .wb-term { font-size: 14px; color: var(--text-main); font-weight: 700; } .wb-pos { font-size: 10px; font-weight: 700; color: var(--text-muted); text-transform: uppercase; } .wb-trans { font-size: 12px; color: var(--text-muted); line-height: 1.35; flex-grow: 1; } .wb-action-wrap { margin-top: 6px; } .wb-badge { font-size: 11px; font-weight: 700; padding: 3px 6px; border-radius: 4px; display: inline-flex; align-items: center; gap: 4px; } .wb-badge.badge-auto-added { color: #ef4444; background: rgba(239, 68, 68, 0.12); } .wb-badge.badge-in-lib, .wb-badge.badge-just-added { color: #10b981; background: rgba(16, 185, 129, 0.12); } .btn-add-option-word { width: 100%; font-size: 11px; padding: 4px 8px; border-radius: var(--radius-sm); } /* Next Button Bar */ .cefr-next-bar { margin-top: 10px; animation: fadeIn 0.2s ease-out; } /* Summary Screen */ .cefr-summary-container { max-width: 680px; margin: 40px auto; } .cefr-summary-card { background-color: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 44px 32px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 24px; box-shadow: var(--shadow-lg); animation: fadeIn 0.3s ease-out; } .cefr-loading-spinner { display: flex; align-items: center; justify-content: center; gap: 12px; padding: 48px; color: var(--text-muted); } /* Mobile Responsive */ @media (max-width: 640px) { .cefr-sentence-text { font-size: 18px; } .cefr-options-grid { grid-template-columns: 1fr; } .cefr-opt-btn { min-height: 52px; padding: 14px 16px; } .cefr-cloze-card { padding: 20px 16px; } } /* ========================================================================== Task 16: Murphy Grammar Engine & Handwritten Journaling Styles ========================================================================== */ .grammar-view { padding: 24px 20px 80px 20px; max-width: 1100px; margin: 0 auto; animation: fadeIn 0.2s ease-out; } .grammar-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; margin-bottom: 24px; flex-wrap: wrap; } .grammar-title-wrap h2 { font-size: 26px; font-weight: 700; color: var(--text-main); margin-bottom: 8px; letter-spacing: -0.02em; } .grammar-title-wrap .subtitle { font-size: 14px; color: var(--text-muted); max-width: 720px; line-height: 1.5; } .grammar-top-stats { display: flex; gap: 12px; } .grammar-stat-chip { display: flex; flex-direction: column; align-items: center; justify-content: center; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 8px 16px; min-width: 80px; } .grammar-stat-chip .stat-num { font-size: 20px; font-weight: 800; color: var(--color-primary); } .grammar-stat-chip .stat-lbl { font-size: 11px; color: var(--text-muted); font-weight: 600; text-transform: uppercase; } /* Filter Bar */ .grammar-filter-bar { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 8px; margin-bottom: 24px; -webkit-overflow-scrolling: touch; } .grammar-filter-pill { padding: 6px 14px; border-radius: var(--radius-full); font-size: 13px; font-weight: 600; background: var(--bg-surface); border: 1px solid var(--border-color); color: var(--text-muted); cursor: pointer; white-space: nowrap; transition: all 0.15s ease; } .grammar-filter-pill:hover { border-color: var(--color-primary); color: var(--text-main); } .grammar-filter-pill.active { background: var(--color-primary); border-color: var(--color-primary); color: #ffffff; } /* Units Grid */ .grammar-units-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 18px; } .grammar-unit-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 20px; display: flex; flex-direction: column; cursor: pointer; transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; box-shadow: var(--shadow-sm); } .grammar-unit-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: var(--color-primary); } .grammar-unit-card.is-completed { border-left: 4px solid #10b981; } .grammar-card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .grammar-unit-number { font-size: 12px; font-weight: 700; text-transform: uppercase; color: var(--text-muted); letter-spacing: 0.04em; } .grammar-level-pill { font-size: 11px; font-weight: 700; padding: 3px 8px; border-radius: 6px; text-transform: uppercase; letter-spacing: 0.05em; } .grammar-level-pill.badge-a1 { background: rgba(239, 68, 68, 0.15); color: #ef4444; border: 1px solid rgba(239, 68, 68, 0.25); } .grammar-level-pill.badge-b1 { background: rgba(59, 130, 246, 0.15); color: #3b82f6; border: 1px solid rgba(59, 130, 246, 0.25); } .grammar-card-title { font-size: 17px; font-weight: 700; color: var(--text-main); margin-bottom: 6px; line-height: 1.35; } .grammar-card-sub { font-size: 13px; color: var(--text-muted); line-height: 1.45; margin-bottom: 14px; flex-grow: 1; } .grammar-card-meta { margin-bottom: 14px; } .grammar-card-cat { font-size: 12px; font-weight: 600; color: var(--text-muted); display: inline-flex; align-items: center; gap: 4px; } .grammar-card-footer { display: flex; justify-content: space-between; align-items: center; padding-top: 12px; border-top: 1px solid var(--border-color); } .grammar-badges { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } .badge-status-completed { font-size: 11px; font-weight: 700; color: #10b981; background: rgba(16, 185, 129, 0.12); padding: 2px 7px; border-radius: 4px; display: inline-flex; align-items: center; gap: 3px; } .badge-status-handwritten { font-size: 11px; font-weight: 700; color: #8b5cf6; background: rgba(139, 92, 246, 0.12); padding: 2px 7px; border-radius: 4px; display: inline-flex; align-items: center; gap: 3px; } .badge-status-new { font-size: 11px; font-weight: 600; color: var(--text-muted); background: var(--bg-surface); padding: 2px 7px; border-radius: 4px; } /* ========================================================================== Grammar Lesson Screen (Theory & Deep Work Mode) ========================================================================== */ .grammar-lesson-container { max-width: 860px; margin: 0 auto; animation: fadeIn 0.2s ease-out; } .grammar-lesson-topbar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; gap: 16px; flex-wrap: wrap; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 12px 18px; } .grammar-topbar-left { display: flex; align-items: center; gap: 12px; } .grammar-lesson-badges { display: flex; align-items: center; gap: 8px; } .grammar-unit-pill { font-size: 12px; font-weight: 700; text-transform: uppercase; background: var(--bg-surface); border: 1px solid var(--border-color); padding: 3px 8px; border-radius: 6px; color: var(--text-main); } .grammar-tab-switch { display: inline-flex; background: var(--bg-input); padding: 3px; border-radius: var(--radius-md); border: 1px solid var(--border-color); } .grammar-tab-switch .tab-btn { padding: 6px 14px; font-size: 13px; font-weight: 600; border: none; background: transparent; color: var(--text-muted); border-radius: calc(var(--radius-md) - 2px); cursor: pointer; transition: all 0.15s ease; } .grammar-tab-switch .tab-btn.active { background: var(--bg-card); color: var(--text-main); box-shadow: var(--shadow-sm); } .grammar-cat-label { font-size: 12px; font-weight: 600; color: var(--text-muted); } .grammar-theory-header { margin-bottom: 24px; } .lesson-main-title { font-size: 26px; font-weight: 800; color: var(--text-main); margin-bottom: 6px; letter-spacing: -0.02em; } .lesson-sub-title { font-size: 15px; color: var(--text-muted); line-height: 1.5; } .grammar-section-block { margin-bottom: 28px; } .section-title { font-size: 16px; font-weight: 700; color: var(--text-main); margin-bottom: 12px; display: flex; align-items: center; gap: 8px; } /* Contrast Cards (Situation A vs Situation B) */ .grammar-contrasts-list { display: flex; flex-direction: column; gap: 16px; } .grammar-contrast-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 20px; display: grid; grid-template-columns: 1fr auto 1fr; gap: 16px; box-shadow: var(--shadow-sm); } .contrast-col { display: flex; flex-direction: column; gap: 8px; } .contrast-header { font-size: 13px; font-weight: 700; color: var(--text-main); display: flex; align-items: center; gap: 8px; } .contrast-pill { font-size: 10px; font-weight: 800; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; } .contrast-pill.a { background: rgba(59, 130, 246, 0.15); color: #3b82f6; } .contrast-pill.b { background: rgba(16, 185, 129, 0.15); color: #10b981; } .contrast-example { font-size: 15px; font-weight: 600; color: var(--text-main); background: var(--bg-input); padding: 10px 12px; border-radius: var(--radius-md); border-left: 3px solid var(--color-primary); line-height: 1.4; } .contrast-trans { font-size: 13px; color: var(--text-muted); line-height: 1.4; font-style: italic; } .contrast-divider { display: flex; align-items: center; justify-content: center; } .vs-badge { background: var(--bg-surface-hover); color: var(--text-muted); font-weight: 800; font-size: 11px; width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid var(--border-color); } .contrast-key-diff { grid-column: 1 / -1; background: rgba(245, 158, 11, 0.1); border: 1px solid rgba(245, 158, 11, 0.25); border-radius: var(--radius-md); padding: 10px 14px; font-size: 13px; line-height: 1.5; color: var(--text-main); margin-top: 6px; } /* Golden Formula Card */ .grammar-golden-formula-card { background: linear-gradient(135deg, rgba(99, 102, 241, 0.08), rgba(168, 85, 247, 0.08)); border: 1px solid rgba(99, 102, 241, 0.3); border-radius: var(--radius-lg); padding: 22px; position: relative; box-shadow: var(--shadow-sm); } .notebook-pen-icon { position: absolute; top: 18px; right: 20px; font-size: 24px; opacity: 0.6; } .formula-instructions { font-size: 13px; font-weight: 600; color: var(--text-muted); margin-bottom: 10px; } .golden-formula-code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 16px; font-weight: 700; color: var(--text-main); background: var(--bg-card); padding: 14px 18px; border-radius: var(--radius-md); border: 1px dashed rgba(99, 102, 241, 0.4); line-height: 1.5; white-space: pre-line; } /* Journaling Card & Checkbox */ .grammar-journaling-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 20px; box-shadow: var(--shadow-sm); } .journaling-prompt-box { margin-bottom: 16px; } .journaling-prompt-text { font-size: 14px; line-height: 1.55; color: var(--text-main); } .journaling-action-box { border-top: 1px solid var(--border-color); padding-top: 16px; } .handwritten-checkbox-label { display: flex; align-items: flex-start; gap: 14px; cursor: pointer; user-select: none; min-height: 48px; padding: 8px 12px; border-radius: var(--radius-md); background: var(--bg-surface); border: 1px solid var(--border-color); transition: all 0.15s ease; } .handwritten-checkbox-label:hover { border-color: #8b5cf6; background: rgba(139, 92, 246, 0.05); } .handwritten-checkbox { position: absolute; opacity: 0; width: 0; height: 0; } .custom-chk { width: 22px; height: 22px; border: 2px solid var(--border-color); border-radius: 6px; background: var(--bg-card); flex-shrink: 0; display: flex; align-items: center; justify-content: center; margin-top: 2px; transition: all 0.15s ease; } .handwritten-checkbox:checked + .custom-chk { background: #8b5cf6; border-color: #8b5cf6; } .handwritten-checkbox:checked + .custom-chk::after { content: "✓"; color: #ffffff; font-size: 14px; font-weight: 800; } .handwritten-label-text { display: flex; flex-direction: column; gap: 3px; } .handwritten-label-text strong { font-size: 14px; color: var(--text-main); } .handwritten-label-text small { font-size: 12px; color: var(--text-muted); line-height: 1.35; } .grammar-theory-footer { display: flex; justify-content: flex-end; margin-top: 28px; } /* ========================================================================== Cloze Tap Practice (5 Micro-Exercises) ========================================================================== */ .grammar-practice-card-wrap { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 32px 28px; box-shadow: var(--shadow-md); display: flex; flex-direction: column; gap: 24px; } .practice-header-bar { display: flex; justify-content: space-between; align-items: center; } .practice-step-text { font-size: 13px; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.05em; } .practice-dots { display: flex; gap: 8px; } .practice-dots .dot { width: 10px; height: 10px; border-radius: 50%; background: var(--border-color); transition: all 0.2s ease; } .practice-dots .dot-active { background: var(--color-primary); transform: scale(1.2); } .practice-dots .dot-done { background: #10b981; } .grammar-cloze-box { background: var(--bg-input); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 24px 20px; text-align: center; } .cloze-sentence-display { font-size: 20px; font-weight: 600; color: var(--text-main); line-height: 1.6; margin-bottom: 12px; } .cloze-blank { display: inline-block; color: var(--color-primary); border-bottom: 2px dashed var(--color-primary); padding: 0 8px; font-weight: 700; min-width: 80px; transition: all 0.2s ease; } .cloze-blank.blank-correct { color: #10b981; border-bottom-color: #10b981; } .cloze-blank.blank-wrong { color: #ef4444; border-bottom-color: #ef4444; } .cloze-clue-display { font-size: 14px; color: var(--text-muted); font-style: italic; } .grammar-tap-options { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; } .grammar-opt-btn { min-height: 52px; padding: 14px 18px; border-radius: var(--radius-md); font-size: 15px; font-weight: 600; text-align: left; display: flex; align-items: center; gap: 12px; background: var(--bg-surface); border: 1.5px solid var(--border-color); color: var(--text-main); cursor: pointer; transition: all 0.15s ease; } .grammar-opt-btn .opt-num { font-size: 11px; font-weight: 800; width: 22px; height: 22px; border-radius: 50%; background: var(--bg-surface-hover); color: var(--text-muted); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .grammar-opt-btn:hover:not(:disabled) { border-color: var(--color-primary); background: var(--bg-surface-hover); } .grammar-opt-btn.btn-correct { background: rgba(16, 185, 129, 0.15) !important; border-color: #10b981 !important; color: #10b981 !important; } .grammar-opt-btn.btn-wrong { background: rgba(239, 68, 68, 0.15) !important; border-color: #ef4444 !important; color: #ef4444 !important; } .grammar-feedback-box { border-radius: var(--radius-md); padding: 16px 18px; animation: fadeIn 0.2s ease-out; } .grammar-feedback-box.feedback-correct { background: rgba(16, 185, 129, 0.12); border: 1px solid rgba(16, 185, 129, 0.3); } .grammar-feedback-box.feedback-wrong { background: rgba(239, 68, 68, 0.12); border: 1px solid rgba(239, 68, 68, 0.3); } .grammar-feedback-box .feedback-title { font-size: 15px; font-weight: 700; margin-bottom: 6px; display: flex; align-items: center; gap: 8px; } .feedback-correct .feedback-title { color: #10b981; } .feedback-wrong .feedback-title { color: #ef4444; } .grammar-feedback-box .feedback-text { font-size: 13.5px; color: var(--text-main); line-height: 1.5; } .feedback-srs-ingested { margin-top: 10px; padding-top: 10px; border-top: 1px solid rgba(239, 68, 68, 0.2); font-size: 12.5px; font-weight: 600; color: #ef4444; display: flex; align-items: center; gap: 6px; } /* ========================================================================== Grammar Summary Card ========================================================================== */ .grammar-summary-card { background-color: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 44px 32px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 20px; box-shadow: var(--shadow-lg); animation: fadeIn 0.3s ease-out; max-width: 680px; margin: 0 auto; } .summary-score-large { font-size: 48px; font-weight: 900; color: var(--color-primary); line-height: 1; } .summary-reminder-box { display: flex; align-items: center; gap: 12px; background: rgba(139, 92, 246, 0.1); border: 1px solid rgba(139, 92, 246, 0.25); border-radius: var(--radius-md); padding: 12px 18px; text-align: left; max-width: 500px; } .summary-reminder-box .reminder-icon { font-size: 24px; flex-shrink: 0; } .summary-reminder-box .reminder-text { display: flex; flex-direction: column; gap: 2px; font-size: 13px; line-height: 1.4; color: var(--text-main); } /* Mobile Responsive */ @media (max-width: 640px) { .grammar-view { padding: 16px 12px 90px 12px; } .grammar-contrast-card { grid-template-columns: 1fr; } .contrast-divider { margin: 4px 0; } .grammar-tap-options { grid-template-columns: 1fr; } .grammar-opt-btn { min-height: 48px; padding: 12px 14px; } .cloze-sentence-display { font-size: 17px; } .grammar-lesson-topbar { flex-direction: column; align-items: stretch; } .grammar-tab-switch { width: 100%; display: flex; } .grammar-tab-switch .tab-btn { flex: 1; text-align: center; } } /* ========================================================================== FEAT-02: Murphy Cheatsheet Tables & Rich Detailed Notes ========================================================================== */ .grammar-table-wrap { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; border-radius: var(--radius-md); border: 1px solid var(--border-color); background: var(--bg-card); box-shadow: var(--shadow-sm); margin: 12px 0 16px 0; } .grammar-cheatsheet-table { width: 100%; border-collapse: collapse; font-size: 13.5px; line-height: 1.5; text-align: left; } .grammar-cheatsheet-table thead th { background: var(--bg-surface-hover); color: var(--text-main); font-weight: 700; padding: 10px 14px; border-bottom: 2px solid var(--border-color); white-space: nowrap; } .grammar-cheatsheet-table tbody td { padding: 10px 14px; border-bottom: 1px solid var(--border-color); color: var(--text-main); vertical-align: top; } .grammar-cheatsheet-table tbody tr:last-child td { border-bottom: none; } .grammar-cheatsheet-table tbody tr:hover { background: rgba(99, 102, 241, 0.04); } .grammar-inline-code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 12.5px; background: var(--bg-input); color: var(--color-primary); padding: 2px 5px; border-radius: 4px; border: 1px solid var(--border-color); } .grammar-notes-box { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 20px 24px; color: var(--text-main); font-size: 14px; line-height: 1.65; box-shadow: var(--shadow-sm); } .grammar-notes-box .grammar-note-h3 { font-size: 16px; font-weight: 800; color: var(--text-main); margin: 16px 0 8px 0; letter-spacing: -0.01em; } .grammar-notes-box .grammar-note-h4 { font-size: 15px; font-weight: 700; color: var(--color-primary); margin: 16px 0 8px 0; } .grammar-notes-box .grammar-note-h5 { font-size: 13.5px; font-weight: 700; color: var(--text-muted); margin: 12px 0 6px 0; text-transform: uppercase; letter-spacing: 0.03em; } .grammar-notes-box .grammar-note-p { margin: 0 0 10px 0; } .grammar-notes-box .grammar-note-quote { border-left: 3px solid var(--color-primary); background: rgba(99, 102, 241, 0.06); padding: 8px 14px; margin: 10px 0; border-radius: 0 var(--radius-sm) var(--radius-sm) 0; font-style: italic; color: var(--text-main); } .grammar-notes-list { margin: 0 0 12px 0; padding-left: 20px; } .grammar-notes-list li { margin-bottom: 6px; line-height: 1.55; } /* Collapsible Practice Cheatsheet Drawer */ .practice-cheatsheet-toggle-wrap { margin-bottom: 16px; } .practice-cheatsheet-btn { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; padding: 6px 12px; border-radius: var(--radius-md); background: var(--bg-surface); border: 1px solid var(--border-color); color: var(--text-muted); cursor: pointer; transition: all 0.15s ease; } .practice-cheatsheet-btn:hover { color: var(--text-main); background: var(--bg-surface-hover); border-color: var(--color-primary); } .practice-cheatsheet-drawer { margin-top: 10px; animation: fadeIn 0.2s ease-out; }