:root { --ink: #17211b; --muted: #657068; --paper: #f3f1e9; --panel: rgba(255, 255, 252, .78); --line: rgba(23, 33, 27, .13); --green: #196548; --lime: #cce85b; --orange: #ef704f; --blue: #6689c7; --radius: 22px; } * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; color: var(--ink); background: var(--paper); font-family: Inter, "PingFang SC", "Microsoft YaHei", sans-serif; min-height: 100vh; } button, input, select, textarea { font: inherit; } button { color: inherit; } .ambient { position: fixed; border-radius: 50%; filter: blur(1px); pointer-events: none; z-index: -1; opacity: .55; } .ambient-one { width: 38vw; height: 38vw; right: -12vw; top: -12vw; background: radial-gradient(circle, #d9ee8c 0, transparent 68%); } .ambient-two { width: 42vw; height: 42vw; left: 12vw; bottom: -26vw; background: radial-gradient(circle, #d7e2f4 0, transparent 68%); } .app-shell { min-height: 100vh; display: grid; grid-template-columns: 230px 1fr; } .sidebar { position: sticky; top: 0; height: 100vh; padding: 30px 22px; border-right: 1px solid var(--line); display: flex; flex-direction: column; background: rgba(243, 241, 233, .74); backdrop-filter: blur(18px); } .brand { display: flex; gap: 12px; align-items: center; color: inherit; text-decoration: none; } .brand-mark { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 13px; background: var(--ink); color: var(--lime); font-family: Georgia, serif; font-size: 24px; } .brand strong, .brand small { display: block; } .brand strong { font-size: 17px; letter-spacing: .08em; } .brand small { margin-top: 3px; color: var(--muted); font-size: 9px; letter-spacing: .22em; } .nav { margin-top: 58px; display: grid; gap: 7px; } .nav-item { border: 0; background: transparent; border-radius: 12px; padding: 13px 12px; text-align: left; cursor: pointer; color: var(--muted); transition: .2s ease; } .nav-item span { display: inline-block; width: 30px; font: 10px/1 Georgia, serif; color: #99a097; } .nav-item:hover, .nav-item.active { color: var(--ink); background: rgba(255,255,255,.7); transform: translateX(3px); } .nav-item.active { box-shadow: inset 3px 0 var(--green); } .sidebar-foot { margin-top: auto; display: grid; gap: 15px; } .system-status { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .1em; } .system-status i { width: 7px; height: 7px; margin-right: 7px; display: inline-block; border-radius: 50%; background: #5bb67c; box-shadow: 0 0 0 4px rgba(91,182,124,.13); } .ghost-button, .text-button { background: transparent; border: 1px solid var(--line); border-radius: 10px; padding: 11px 14px; cursor: pointer; } .main { padding: 0 46px 70px; min-width: 0; } .topbar { height: 82px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--line); } .topbar p { color: var(--muted); font-size: 11px; letter-spacing: .08em; } .topbar-actions { display: flex; align-items: center; gap: 12px; } .admin-entry { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border: 1px solid rgba(25,101,72,.22); border-radius: 10px; background: rgba(25,101,72,.06); color: var(--green); font-size: 11px; font-weight: 700; text-decoration: none; } .admin-entry[hidden] { display: none; } .admin-entry:hover { background: var(--green); color: white; } .admin-entry b { font-size: 14px; } .user-chip { display: flex; align-items: center; gap: 9px; font-size: 13px; } .avatar { width: 31px; height: 31px; border-radius: 50%; display: grid; place-items: center; background: var(--ink); color: white; font-size: 11px; } .view { display: none; animation: rise .35s ease; } .view.active { display: block; } @keyframes rise { from { opacity: 0; transform: translateY(8px); } } .hero-grid { display: grid; grid-template-columns: minmax(0, 1.75fr) minmax(280px, .75fr); gap: 18px; margin-top: 28px; } .hero, .daily-card, .spirit, .content-card, .editor-shell, .profile-panel { border: 1px solid rgba(23,33,27,.1); border-radius: var(--radius); background: var(--panel); box-shadow: 0 24px 70px rgba(38, 48, 40, .06); backdrop-filter: blur(14px); } .hero { min-height: 450px; padding: 55px; display: flex; flex-direction: column; position: relative; overflow: hidden; } .hero::after { content: ""; position: absolute; width: 330px; height: 330px; right: -100px; bottom: -150px; border: 55px solid rgba(25,101,72,.09); border-radius: 50%; } .kicker { color: var(--green); font-size: 10px; font-weight: 700; letter-spacing: .24em; } .hero h1, .page-title h1 { margin: 20px 0 18px; font: 500 clamp(42px, 5vw, 76px)/1.03 Georgia, "Songti SC", serif; letter-spacing: -.04em; } .hero h1 em { color: var(--green); font-weight: inherit; } .hero p { max-width: 600px; color: var(--muted); font-size: 15px; line-height: 1.9; } .hero-actions { margin-top: auto; display: flex; align-items: center; gap: 13px; position: relative; z-index: 1; } .primary-button, .dark-button { border: 0; border-radius: 12px; padding: 14px 19px; cursor: pointer; transition: .2s ease; font-weight: 650; } .primary-button { background: var(--green); color: white; } .primary-button b { margin-left: 22px; } .primary-button:hover, .dark-button:hover { transform: translateY(-2px); box-shadow: 0 12px 25px rgba(23,33,27,.16); } .text-button { border-color: transparent; } .hero-index { position: absolute; top: 35px; right: 45px; color: rgba(25,101,72,.12); font: 110px/1 Georgia, serif; } .daily-card { background: var(--ink); color: white; padding: 32px; display: flex; flex-direction: column; align-items: flex-start; } .card-label { color: #aeb9b1; font-size: 9px; letter-spacing: .22em; } .pulse-orbit { width: 130px; height: 130px; border: 1px solid rgba(204,232,91,.35); border-radius: 50%; margin: 35px auto 25px; align-self: center; display: grid; place-items: center; position: relative; } .pulse-orbit::before { content: ""; position: absolute; inset: 12px; border: 1px dashed rgba(204,232,91,.35); border-radius: 50%; } .pulse-orbit span { color: var(--lime); font: 48px/1 Georgia, serif; } .pulse-orbit small { position: absolute; bottom: 27px; color: #aeb9b1; } .daily-card h2 { margin: 10px 0 7px; font: 27px/1.2 Georgia, serif; } .daily-card p { color: #aeb9b1; line-height: 1.75; font-size: 13px; } .dark-button { margin-top: auto; width: 100%; background: var(--lime); color: var(--ink); } .section { margin-top: 70px; } .section-heading { display: flex; align-items: end; justify-content: space-between; margin-bottom: 22px; } .section-heading h2 { margin: 8px 0 0; font: 32px Georgia, serif; } .section-heading p { margin: 0; color: var(--muted); font-size: 13px; } .spirit-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 13px; } .spirit { min-height: 218px; padding: 24px; position: relative; overflow: hidden; transition: .2s ease; } .spirit:hover { transform: translateY(-5px); } .spirit b { color: #9da49f; font: 12px Georgia, serif; } .spirit h3 { margin: 31px 0 11px; font: 27px Georgia, serif; } .spirit p { color: var(--muted); font-size: 13px; line-height: 1.65; } .spirit span { position: absolute; bottom: 20px; color: var(--green); font-size: 10px; letter-spacing: .08em; } .spirit::after { content: ""; position: absolute; width: 75px; height: 75px; border-radius: 50%; right: -28px; top: -28px; opacity: .55; } .believer::after { background: var(--lime); }.communicator::after { background: var(--blue); }.practitioner::after { background: var(--orange); }.intuitive::after { background: #bb8ac4; } .page-title { padding: 65px 0 35px; } .page-title h1 { font-size: clamp(44px, 6vw, 70px); margin-bottom: 12px; } .page-title p { color: var(--muted); } .content-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; } .content-grid.loading { color: var(--muted); display: block; padding: 40px 0; } .content-card { min-height: 235px; padding: 26px; display: flex; flex-direction: column; } .content-card .meta { color: var(--green); font-size: 9px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; } .content-card h3 { margin: 25px 0 11px; font: 25px/1.25 Georgia, serif; } .content-card p { color: var(--muted); font-size: 13px; line-height: 1.75; } .content-card footer { margin-top: auto; display: flex; align-items: center; justify-content: space-between; } .content-card footer span { color: var(--muted); font-size: 11px; } .content-card footer button { border: 0; border-bottom: 1px solid var(--ink); padding: 4px 0; background: transparent; cursor: pointer; } .track-switch { display: flex; gap: 5px; margin-bottom: 22px; } .track-switch button { border: 1px solid var(--line); padding: 9px 18px; border-radius: 99px; background: transparent; cursor: pointer; } .track-switch button.active { background: var(--ink); color: white; } .challenge-panel { display: grid; grid-template-columns: minmax(0, 1fr) minmax(380px, .9fr); gap: 24px; align-items: center; margin-bottom: 22px; padding: 24px 26px; border: 1px solid var(--line); border-radius: 18px; background: linear-gradient(120deg, rgba(25,101,72,.07), rgba(204,232,91,.12)); }.challenge-panel h2 { margin: 7px 0 6px; font: 27px Georgia, serif; }.challenge-panel p { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.7; }.challenge-actions { display: grid; gap: 9px; }.challenge-actions > .primary-button { width: 100%; }.challenge-actions form { display: grid; grid-template-columns: 1fr auto; gap: 8px; }.challenge-actions input { min-width: 0; border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; background: white; text-transform: uppercase; letter-spacing: .18em; font-weight: 700; }.challenge-actions .dark-button { width: auto; margin: 0; white-space: nowrap; } .realtime-status-line { display: flex; justify-content: space-between; gap: 15px; margin: 10px 0 18px; color: var(--muted); font-size: 11px; }.realtime-status-line strong { color: var(--green); } .realtime-waiting { display: grid; justify-items: center; gap: 16px; padding: 35px 20px; border-radius: 18px; background: #eef1eb; text-align: center; }.realtime-waiting p { max-width: 480px; margin: 0; color: var(--muted); line-height: 1.7; }.realtime-pulse { width: 18px; height: 18px; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 0 rgba(25,101,72,.35); animation: realtime-pulse 1.5s infinite; }.challenge-code { border: 1px dashed var(--green); border-radius: 14px; padding: 14px 24px; background: white; color: var(--green); font: 700 31px/1 "SFMono-Regular", Consolas, monospace; letter-spacing: .22em; cursor: pointer; } @keyframes realtime-pulse { 70% { box-shadow: 0 0 0 15px rgba(25,101,72,0); } 100% { box-shadow: 0 0 0 0 rgba(25,101,72,0); } } .realtime-progress-panel { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px; }.realtime-progress-panel > div { padding: 13px 15px; border-radius: 12px; background: #eef1eb; }.realtime-progress-panel span, .realtime-progress-panel b { display: block; }.realtime-progress-panel span { color: var(--muted); font-size: 10px; }.realtime-progress-panel b { margin-top: 5px; color: var(--green); } .realtime-answer-form input { margin-top: 7px; width: 100%; padding: 12px; border: 1px solid #d6d8d1; border-radius: 9px; }.realtime-submitted { margin-top: 20px; padding: 30px; border-radius: 16px; background: var(--ink); color: white; text-align: center; }.realtime-submitted strong { color: var(--lime); font: 27px Georgia, serif; }.realtime-submitted p { margin-bottom: 0; color: #b9c2bc; } .realtime-result { margin: 20px 0; padding: 28px; border-radius: 17px; background: var(--ink); color: white; text-align: center; }.realtime-result > strong { color: var(--lime); font: 38px Georgia, serif; }.realtime-result p { color: #c5cec8; }.realtime-result > b { display: inline-block; padding: 6px 10px; border-radius: 99px; background: rgba(204,232,91,.13); color: var(--lime); }.result-opponent > strong { color: #ef947c; } .realtime-review { display: grid; gap: 9px; }.realtime-review article { padding: 15px; border: 1px solid var(--line); border-left: 4px solid var(--green); border-radius: 11px; background: white; }.realtime-review article.incorrect { border-left-color: #c05245; }.realtime-review p { margin: 7px 0; color: #3e4942; }.realtime-review small { color: var(--muted); } .math-games-section { margin-top: 60px; } .game-card-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } .game-card { min-height: 285px; padding: 26px; border: 1px solid var(--line); border-radius: 20px; background: var(--panel); display: flex; flex-direction: column; overflow: hidden; position: relative; } .game-card::after { content: ""; position: absolute; width: 140px; height: 140px; right: -65px; top: -65px; border-radius: 50%; background: rgba(204,232,91,.18); } .game-sudoku::after { background: rgba(93,115,232,.13); } .game-card-top { display: flex; justify-content: space-between; align-items: start; }.game-card-top > span { display: grid; place-items: center; width: 58px; height: 58px; border-radius: 16px; background: var(--ink); color: var(--lime); font: 700 20px Georgia, serif; }.game-card-top small { color: var(--muted); } .game-card > b { margin-top: 24px; color: var(--green); font-size: 9px; letter-spacing: .18em; }.game-card h3 { margin: 8px 0; font: 28px Georgia, serif; }.game-card p { margin: 0; color: var(--muted); line-height: 1.7; } .game-card-controls { display: flex; gap: 10px; margin-top: auto; }.game-card-controls select { min-width: 100px; border: 1px solid var(--line); border-radius: 10px; padding: 11px; background: white; }.game-card-controls .primary-button { margin-left: auto; } .twenty-four-numbers { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin: 24px 0; }.twenty-four-numbers button { aspect-ratio: 1; border: 1px solid var(--line); border-radius: 18px; background: var(--ink); color: var(--lime); font: 36px Georgia, serif; cursor: pointer; } .twenty-four-form { display: grid; gap: 12px; }.game-keypad { display: grid; grid-template-columns: repeat(6, 1fr); gap: 8px; }.game-keypad button { border: 1px solid var(--line); border-radius: 9px; padding: 10px; background: white; cursor: pointer; } .sudoku-board { width: min(100%, 540px); margin: 22px auto; display: grid; grid-template-columns: repeat(9, 1fr); border: 3px solid var(--ink); background: var(--ink); gap: 1px; } .sudoku-board input { width: 100%; min-width: 0; aspect-ratio: 1; border: 0; border-radius: 0; background: white; color: var(--green); text-align: center; font: 600 21px Georgia, serif; outline: 2px solid transparent; outline-offset: -2px; } .sudoku-board input:nth-child(3n) { border-right: 2px solid var(--ink); }.sudoku-board input:nth-child(9n) { border-right: 0; }.sudoku-board input:nth-child(n+19):nth-child(-n+27), .sudoku-board input:nth-child(n+46):nth-child(-n+54) { border-bottom: 2px solid var(--ink); } .sudoku-board input:focus { outline-color: var(--green); }.sudoku-board input.given { background: #ecece5; color: var(--ink); font-weight: 800; }.sudoku-board input.hint { background: #fff2ca; color: #9a5b22; } .sudoku-actions { display: flex; justify-content: flex-end; gap: 10px; }.game-result-panel { margin-top: 30px; padding: 30px; border-radius: 18px; background: var(--ink); color: white; text-align: center; }.game-result-panel strong { color: var(--lime); font: 48px Georgia, serif; }.game-result-panel p { color: #b9c2bc; } .editor-shell { display: grid; grid-template-columns: 1fr 1fr; overflow: hidden; min-height: 430px; } .editor-pane, .preview-pane { padding: 28px; } .editor-pane { background: #1d2721; color: white; } .editor-pane label, .preview-pane > span { display: block; color: #9eaaa2; font-size: 10px; letter-spacing: .16em; text-transform: uppercase; } .editor-pane textarea { width: 100%; height: 330px; margin-top: 22px; resize: none; border: 0; outline: 0; background: transparent; color: #dcefa1; font: 16px/1.8 "SFMono-Regular", Consolas, monospace; } .preview-pane { display: flex; flex-direction: column; } #latex-preview { margin: auto; max-width: 100%; overflow-x: auto; overflow-y: hidden; padding: 18px 4px; font-size: 28px; line-height: 1.6; } #latex-preview .katex-display { margin: 0; overflow-x: auto; overflow-y: hidden; } #latex-preview.latex-preview-error { color: #b84136; font: 14px/1.7 system-ui, sans-serif; white-space: normal; } .preview-pane button { align-self: flex-end; } .profile-panel { padding: 35px; } .metric-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; } .metric { background: rgba(25,101,72,.06); border-radius: 14px; padding: 17px; } .metric b, .metric span { display: block; }.metric b { font: 28px Georgia, serif; }.metric span { margin-top: 5px; color: var(--muted); font-size: 11px; } .profile-subtitle { margin: 30px 0 12px; font: 24px Georgia, serif; }.profile-game-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 9px; }.profile-game-list > div { padding: 13px; border-radius: 11px; background: #eef1eb; }.profile-game-list b, .profile-game-list span { display: block; }.profile-game-list span { margin-top: 5px; color: var(--muted); font-size: 11px; } .tool-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; margin-bottom: 22px; } .tool-card { min-height: 165px; border: 1px solid var(--line); border-radius: 18px; padding: 22px; background: rgba(255,255,252,.7); text-align: left; cursor: pointer; transition: .2s ease; } .tool-card:hover, .tool-card.active { transform: translateY(-3px); border-color: rgba(25,101,72,.48); box-shadow: 0 16px 35px rgba(38,48,40,.08); } .tool-card.active { background: var(--ink); color: white; } .tool-card > span { display: grid; place-items: center; width: 52px; height: 52px; border-radius: 15px; background: rgba(25,101,72,.08); color: var(--green); font: 700 17px Georgia, serif; } .tool-card.active > span { color: var(--lime); background: rgba(204,232,91,.1); } .tool-card b, .tool-card small { display: block; }.tool-card b { margin-top: 18px; font: 19px Georgia, serif; }.tool-card small { margin-top: 7px; color: var(--muted); line-height: 1.5; } .tool-card.active small { color: #aeb9b1; } .tool-workspace { display: none; border: 1px solid var(--line); border-radius: var(--radius); padding: 30px; background: var(--panel); } .tool-workspace.active { display: block; animation: rise .3s ease; } .workspace-heading { display: flex; justify-content: space-between; gap: 30px; align-items: end; margin-bottom: 25px; } .workspace-heading h2 { margin: 7px 0 0; font: 31px Georgia, serif; }.workspace-heading p { max-width: 480px; color: var(--muted); font-size: 13px; } .calculator-shell { max-width: 980px; margin: auto; } .calculator-display { min-height: 145px; border-radius: 18px; padding: 25px; background: var(--ink); color: white; display: flex; flex-direction: column; justify-content: space-between; text-align: right; } .calculator-display small { color: #9eaaa2; }.calculator-display output { color: var(--lime); font: 48px/1 Georgia, serif; overflow-wrap: anywhere; } .formula-input, .search-input { width: 100%; border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; background: white; outline-color: var(--green); } .calculator-shell > .formula-input { margin: 14px 0; font: 18px "SFMono-Regular", Consolas, monospace; } .calculator-actions { display: flex; flex-wrap: wrap; gap: 8px; }.calculator-actions button { border: 1px solid var(--line); border-radius: 10px; padding: 11px 15px; background: white; cursor: pointer; }.calculator-actions .primary-button { margin-left: auto; color: white; background: var(--green); border: 0; } .calculator-controls { display: grid; grid-template-columns: repeat(4, minmax(120px, 1fr)); gap: 10px; margin-bottom: 14px; }.calculator-controls label, .calculator-expression-label { display: grid; gap: 7px; color: var(--muted); font-size: 11px; }.calculator-controls select, .calculator-controls input { width: 100%; border: 1px solid var(--line); border-radius: 10px; padding: 11px; background: white; } .calculator-controls [hidden] { display: none !important; } .calculator-expression-label textarea { min-height: 92px; margin: 0 0 12px; resize: vertical; font: 17px/1.6 "SFMono-Regular", Consolas, monospace; } .calculator-result { margin-top: 17px; }.calc-result-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px; }.calc-result-grid > div { min-width: 0; padding: 14px; border: 1px solid var(--line); border-radius: 12px; background: white; }.calc-result-grid span { display: block; color: var(--muted); font-size: 10px; text-transform: uppercase; letter-spacing: .12em; }.calc-result-grid code { display: block; margin-top: 8px; overflow-wrap: anywhere; color: var(--green); } .calc-steps { margin: 13px 0 0; padding: 14px 14px 14px 34px; border-radius: 12px; background: #eef1eb; color: var(--muted); font-size: 12px; line-height: 1.8; }.calc-steps:empty { display: none; } .search-input { width: min(370px, 100%); } .symbol-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; } .symbol-card { border: 1px solid var(--line); border-radius: 15px; padding: 18px; background: white; cursor: pointer; text-align: left; } .symbol-card strong { display: block; color: var(--green); font: 29px Georgia, serif; }.symbol-card b { display: block; margin-top: 10px; }.symbol-card small { display: block; margin-top: 5px; color: var(--muted); }.symbol-card code { display: inline-block; margin-top: 12px; padding: 4px 7px; border-radius: 6px; background: #f0f1eb; color: #405048; } .graph-shell { display: grid; grid-template-columns: 245px minmax(0, 1fr); gap: 20px; } .graph-controls { display: flex; flex-direction: column; gap: 17px; }.graph-controls label { display: grid; gap: 8px; color: var(--muted); font-size: 12px; }.graph-controls p { color: #b84136; font-size: 12px; }.graph-controls textarea { min-height: 100px; resize: vertical; font: 13px/1.6 "SFMono-Regular", Consolas, monospace; } .check-row { display: flex !important; grid-template-columns: auto 1fr; align-items: center; gap: 8px !important; }.check-row input { margin: 0; } .graph-analysis { padding: 11px; border-radius: 10px; background: #eef1eb; color: var(--muted); font-size: 11px; line-height: 1.6; } #graph-canvas { width: 100%; height: auto; border: 1px solid var(--line); border-radius: 17px; background: #fbfbf7; } .drawing-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 14px; }.drawing-toolbar button, .drawing-toolbar label { border: 1px solid var(--line); border-radius: 9px; padding: 9px 12px; background: white; color: var(--muted); cursor: pointer; }.drawing-toolbar button.active { border-color: var(--ink); background: var(--ink); color: white; }.drawing-toolbar .primary-button { margin-left: auto; border: 0; background: var(--green); color: white; }.drawing-toolbar label { display: flex; align-items: center; gap: 7px; font-size: 11px; }.drawing-toolbar input[type=color] { width: 28px; height: 24px; padding: 0; border: 0; background: transparent; } .toolbar-text-input { flex: 1 1 190px; min-width: 150px; border: 1px solid var(--line); border-radius: 9px; padding: 10px 12px; background: white; }.drawing-toolbar .file-tool input { display: none; } .canvas-stage { width: 100%; overflow: hidden; border: 1px solid var(--line); border-radius: 16px; background: white; box-shadow: inset 0 0 0 1px rgba(255,255,255,.6); }.canvas-stage canvas { display: block; width: 100%; height: auto; touch-action: none; cursor: crosshair; }.geometry-stage { background: #fbfbf7; }.canvas-hint { color: var(--muted); font-size: 11px; text-align: center; } .discover-title { padding-bottom: 24px; } .ability-map { border: 1px solid var(--line); border-radius: var(--radius); padding: 28px; background: rgba(255,255,252,.64); overflow: hidden; } .map-heading { display: flex; align-items: start; justify-content: space-between; gap: 20px; }.map-heading h2 { margin: 0 0 6px; font: 30px Georgia, serif; }.map-heading p { margin: 0; color: var(--muted); font-size: 13px; } .ability-legend { display: flex; gap: 12px; flex-wrap: wrap; justify-content: end; }.ability-legend span { color: var(--muted); font-size: 10px; }.ability-legend i { display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 4px; } .map-stage { position: relative; max-width: 1050px; height: 390px; margin: 8px auto 0; } .map-lines { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }.map-lines path { fill: none; stroke: #c8c9c2; stroke-width: 2; stroke-dasharray: 12 14; vector-effect: non-scaling-stroke; } .ability-node { position: absolute; width: 128px; height: 105px; border: 2px solid currentColor; border-radius: 15px; background: #fbfbf8; color: var(--green); cursor: pointer; box-shadow: 0 12px 24px rgba(38,48,40,.05); transition: .2s ease; } .ability-node:hover, .ability-node.active { transform: translateY(-5px); box-shadow: 0 17px 32px rgba(38,48,40,.13); background: white; } .ability-node span, .ability-node b, .ability-node small { display: block; }.ability-node span { font-size: 25px; }.ability-node b { margin-top: 7px; color: var(--ink); }.ability-node small { margin: 7px auto 0; width: 34px; border-radius: 99px; padding: 3px; background: currentColor; color: white; } .node-vision { left: calc(50% - 64px); top: 5px; color: #5d73e8; }.node-humanities { left: 8%; top: 65px; color: #b76d38; }.node-detection { left: 18%; bottom: 12px; color: #287f78; }.node-modeling { right: 18%; bottom: 12px; color: #d98628; }.node-connection { right: 8%; top: 65px; color: #8667b5; } .pet-node { position: absolute; left: calc(50% - 49px); top: 145px; width: 98px; height: 98px; border: 2px solid #b49d8b; border-radius: 50%; background: white; display: grid; place-items: center; box-shadow: 0 13px 25px rgba(38,48,40,.12); } .pet-node b { display: grid; place-items: center; width: 46px; height: 46px; border-radius: 50%; background: #778990; color: white; font: 22px Georgia, serif; }.pet-node span { position: absolute; bottom: 8px; font-size: 10px; color: var(--muted); } .map-hint { margin: 0; text-align: center; color: #a0a49e; font-size: 11px; } .video-browser { margin-top: 28px; }.filter-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 11px; } .filter-chip { border: 1px solid var(--line); border-radius: 99px; padding: 9px 14px; background: rgba(255,255,252,.7); color: var(--muted); cursor: pointer; } .filter-chip.active { background: var(--ink); border-color: var(--ink); color: white; } .discipline-filters .filter-chip { border-radius: 9px; } .video-section-heading { margin: 35px 0 16px; display: flex; justify-content: space-between; align-items: end; }.video-section-heading h2 { margin: 8px 0 0; font: 30px Georgia, serif; }.video-section-heading > span { color: var(--muted); font-size: 12px; } .video-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }.video-grid.loading { display: block; color: var(--muted); padding: 35px 0; } .video-card { border: 1px solid var(--line); border-radius: 18px; background: rgba(255,255,252,.82); overflow: hidden; cursor: pointer; transition: .2s ease; } .video-card:hover { transform: translateY(-4px); box-shadow: 0 18px 38px rgba(38,48,40,.1); } .video-cover { height: 175px; padding: 15px; display: flex; align-items: center; justify-content: center; position: relative; background: linear-gradient(135deg, var(--cover-a), var(--cover-b)); } .video-cover > span { opacity: .34; font-size: 52px; }.video-duration { position: absolute; left: 13px; top: 12px; border-radius: 7px; padding: 5px 8px; color: white; background: rgba(23,33,27,.62); font-size: 11px; } .video-complete { position: absolute; right: 12px; top: 12px; background: var(--green); color: white; border-radius: 99px; padding: 5px 8px; font-size: 9px; } .video-body { padding: 19px; }.ability-badge { display: inline-block; border: 1px solid var(--badge-color); color: var(--badge-color); border-radius: 8px; padding: 5px 8px; font-size: 10px; }.video-body h3 { min-height: 48px; margin: 14px 0 16px; font: 20px/1.3 Georgia, serif; }.video-metrics, .video-author { display: flex; justify-content: space-between; color: var(--muted); font-size: 11px; }.video-author { justify-content: flex-start; gap: 8px; align-items: center; margin-top: 14px; }.video-author i { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: var(--badge-color); color: white; font-style: normal; } .video-dialog { width: min(760px, calc(100% - 30px)); }.video-player { min-height: 300px; border-radius: 17px; background: var(--ink); display: grid; place-items: center; color: white; text-align: center; padding: 30px; }.video-player span { display: block; color: var(--lime); font-size: 55px; }.video-player p { color: #aeb9b1; }.video-detail-meta { display: flex; gap: 12px; flex-wrap: wrap; color: var(--muted); font-size: 11px; margin: 18px 0; }.video-dialog h2 { font: 31px/1.2 Georgia, serif; }.video-dialog .video-description { color: var(--muted); line-height: 1.8; }.video-dialog-actions { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 22px; } dialog { width: min(460px, calc(100% - 30px)); max-height: calc(100vh - 30px); max-height: calc(100dvh - 30px); overflow-y: auto; border: 1px solid var(--line); border-radius: 20px; padding: 30px; color: var(--ink); background: #faf9f3; box-shadow: 0 30px 100px rgba(0,0,0,.22); } dialog::backdrop { background: rgba(17,25,20,.55); backdrop-filter: blur(5px); } .dialog-close { position: absolute; right: 16px; top: 13px; border: 0; background: transparent; font-size: 25px; cursor: pointer; } .dialog-tabs { display: flex; border-bottom: 1px solid var(--line); margin-bottom: 25px; } .dialog-tabs button { border: 0; background: transparent; padding: 10px 15px; color: var(--muted); cursor: pointer; } .dialog-tabs button.active { color: var(--ink); border-bottom: 2px solid var(--green); } .auth-form { display: grid; gap: 15px; }.auth-form h2 { font: 28px Georgia, serif; margin: 0 0 5px; } .auth-form label { display: grid; gap: 7px; color: var(--muted); font-size: 12px; } .auth-form input, .auth-form select { width: 100%; border: 1px solid var(--line); border-radius: 10px; background: white; padding: 12px; outline-color: var(--green); } .hidden { display: none !important; }.form-error { min-height: 18px; color: #b84136; font-size: 12px; } .experience-dialog { width: min(760px, calc(100% - 30px)); } .experience-dialog h2 { font: 34px Georgia, serif; }.experience-dialog .scene { white-space: pre-line; line-height: 1.9; color: #3e4942; } .choice-list { display: grid; gap: 9px; margin-top: 25px; } .choice-list button { text-align: left; border: 1px solid var(--line); border-radius: 12px; padding: 14px; background: white; cursor: pointer; } .choice-list button:hover { border-color: var(--green); } .choice-list .primary-button { width: 100%; border-color: var(--green); background: var(--green); color: white; text-align: center; font-weight: 650; } .choice-list .primary-button:hover { border-color: var(--green); background: var(--green); } .choice-list button:disabled { cursor: wait; opacity: .65; } .quiz-progress { height: 4px; background: #e4e3da; margin: 15px 0 30px; }.quiz-progress i { display: block; height: 100%; background: var(--green); transition: width .2s; } .toast { position: fixed; right: 25px; bottom: 25px; background: var(--ink); color: white; border-radius: 12px; padding: 13px 17px; opacity: 0; transform: translateY(10px); pointer-events: none; transition: .2s; z-index: 20; } .toast.show { opacity: 1; transform: none; } .csrf-token { display: none; } @media (max-width: 1050px) { .app-shell { grid-template-columns: 80px 1fr; }.sidebar { padding: 25px 13px; }.brand span:last-child, .nav-item:not(.active) span, .nav-item { font-size: 0; } .nav-item { text-align: center; }.nav-item span { width: auto; font-size: 11px !important; }.sidebar-foot { display: none; } .hero-grid { grid-template-columns: 1fr; }.daily-card { min-height: 350px; }.spirit-grid { grid-template-columns: 1fr 1fr; }.content-grid { grid-template-columns: 1fr 1fr; } .tool-grid { grid-template-columns: repeat(3, 1fr); }.symbol-grid { grid-template-columns: repeat(3, 1fr); }.video-grid { grid-template-columns: 1fr 1fr; }.calculator-controls { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 700px) { .app-shell { display: block; }.sidebar { position: fixed; top: auto; bottom: 0; width: 100%; height: 68px; z-index: 10; border: 0; border-top: 1px solid var(--line); padding: 8px; } .brand, .sidebar-foot { display: none; }.nav { margin: 0; grid-template-columns: repeat(6, 1fr); gap: 2px; }.nav-item { padding: 11px 2px; font-size: 0; }.nav-item span { display: block; margin: auto; } .main { padding: 0 18px 90px; }.topbar { height: 66px; }.topbar p { max-width: 55%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .hero { min-height: 500px; padding: 35px 25px; }.hero h1 { font-size: 44px; }.hero-actions { align-items: stretch; flex-direction: column; } .section-heading { display: block; }.section-heading p { margin-top: 12px; }.spirit-grid, .content-grid, .editor-shell, .metric-grid, .tool-grid, .symbol-grid, .video-grid, .graph-shell, .game-card-grid, .calc-result-grid { grid-template-columns: 1fr; } .content-grid { gap: 11px; }.editor-shell { min-height: 700px; }.page-title { padding-top: 42px; }.page-title h1 { font-size: 45px; } .tool-card { min-height: 125px; }.workspace-heading, .map-heading { display: block; }.workspace-heading p { margin-top: 12px; }.tool-workspace { padding: 16px; }.calculator-controls { grid-template-columns: 1fr 1fr; }.calculator-display { min-height: 120px; padding: 18px; }.calculator-display output { font-size: 34px; }.calc-examples .primary-button { width: 100%; margin-left: 0; }.drawing-toolbar { align-items: stretch; }.drawing-toolbar .primary-button { width: 100%; margin-left: 0; }.canvas-stage canvas { width: 100%; min-width: 0; } .math-games-section { margin-top: 45px; }.game-card { min-height: 260px; padding: 21px; }.game-card-controls { align-items: stretch; }.game-card-controls .primary-button { flex: 1; }.twenty-four-numbers { gap: 7px; }.twenty-four-numbers button { border-radius: 13px; font-size: 28px; }.sudoku-board input { font-size: clamp(13px, 4.5vw, 20px); }.sudoku-actions { display: grid; grid-template-columns: 1fr 1fr; }.game-keypad { gap: 5px; } .challenge-panel { grid-template-columns: 1fr; padding: 20px; }.challenge-actions form { grid-template-columns: 1fr; }.challenge-actions .dark-button { width: 100%; }.challenge-code { width: 100%; padding: 14px 10px; font-size: 27px; }.realtime-status-line { display: grid; }.realtime-progress-panel { grid-template-columns: 1fr 1fr; } .map-stage { height: 480px; transform: scale(.92); }.ability-node { width: 108px; height: 94px; }.node-vision { left: calc(50% - 54px); }.node-humanities { left: 0; top: 100px; }.node-connection { right: 0; top: 100px; }.node-detection { left: 2%; bottom: 30px; }.node-modeling { right: 2%; bottom: 30px; }.pet-node { top: 190px; } .map-lines { display: none; }.ability-legend { margin-top: 14px; justify-content: start; }.video-cover { height: 150px; } } .life-hub, .life-skills { animation: rise .35s ease; } .back-button { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line); border-radius: 10px; padding: 8px 16px; background: transparent; color: var(--muted); cursor: pointer; margin-bottom: 18px; font-size: 13px; transition: .2s ease; } .back-button:hover { color: var(--ink); border-color: var(--ink); } .life-map { margin-top: 28px; } .life-map-canvas { position: relative; max-width: 1200px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: 40px; padding: 30px 0; } .life-map-lines { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; pointer-events: none; } .life-map-center { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 1; display: grid; place-items: center; text-align: center; pointer-events: none; } .life-map-center b { display: grid; place-items: center; width: 56px; height: 56px; border-radius: 50%; background: var(--ink); color: var(--lime); font: 22px Georgia, serif; margin-bottom: 6px; } .life-map-center span { font-size: 9px; color: var(--muted); letter-spacing: .12em; line-height: 1.4; } .route-card { position: relative; width: 100%; padding: 28px 26px 24px; border-radius: 22px; z-index: 2; border: 1px solid rgba(23,33,27,.1); background: rgba(255,255,252,.82); backdrop-filter: blur(14px); box-shadow: 0 24px 70px rgba(38,48,40,.06); cursor: pointer; transition: .25s ease; display: flex; flex-direction: column; min-height: 300px; } .route-card:hover { transform: translateY(-6px); box-shadow: 0 28px 80px rgba(38,48,40,.1); } .route-card::after { content: ""; position: absolute; width: 80px; height: 80px; border-radius: 50%; right: -28px; top: -28px; opacity: .5; } .route-believer::after { background: var(--lime); } .route-spreader::after { background: var(--blue); } .route-applier::after { background: var(--orange); } .route-seer::after { background: #bb8ac4; } .route-index { font: 700 13px Georgia, serif; color: #b0b6ae; letter-spacing: .08em; } .route-spirit { margin-top: 14px; } .route-spirit b { display: block; font: 25px Georgia, serif; } .route-spirit small { font-size: 9px; color: var(--muted); letter-spacing: .22em; } .route-conflict { margin: 16px 0 18px; color: #3e4942; font-size: 14px; line-height: 1.7; } .route-mathematicians { display: flex; gap: 10px; margin-bottom: 18px; } .route-mathematician { display: flex; flex-direction: column; align-items: center; gap: 5px; flex: 1; } .route-mathematician img { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; border: 2px solid rgba(23,33,27,.08); } .route-mathematician b { font-size: 10px; text-align: center; } .route-mathematician small { font-size: 8px; color: var(--muted); text-align: center; line-height: 1.3; } .route-meta { margin-top: auto; margin-bottom: 16px; } .route-status { font-size: 10px; color: var(--green); font-weight: 700; letter-spacing: .06em; } .route-enter { border: 0; border-bottom: 2px solid currentColor; padding: 4px 0; background: transparent; cursor: pointer; font-size: 14px; font-weight: 650; text-align: left; } .route-believer .route-enter { color: var(--green); } .route-spreader .route-enter { color: var(--blue); } .route-applier .route-enter { color: var(--orange); } .route-seer .route-enter { color: #9b6bb0; } .alumni-entry { margin-top: 50px; border-radius: 22px; background: var(--ink); color: white; padding: 40px 46px; overflow: hidden; position: relative; } .alumni-entry::after { content: ""; position: absolute; width: 280px; height: 280px; right: -80px; bottom: -120px; border: 45px solid rgba(204,232,91,.08); border-radius: 50%; } .alumni-entry-content { display: flex; align-items: center; justify-content: space-between; gap: 30px; position: relative; z-index: 1; } .alumni-entry .kicker { color: var(--lime); } .alumni-entry h2 { margin: 12px 0 10px; font: 30px Georgia, serif; } .alumni-entry p { color: #aeb9b1; font-size: 14px; line-height: 1.7; max-width: 480px; } .alumni-entry-action { display: flex; flex-direction: column; align-items: flex-end; gap: 14px; } .alumni-entry-action span { font-size: 11px; color: #aeb9b1; } .alumni-entry .primary-button { background: var(--lime); color: var(--ink); } .skill-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; } .skill-grid.loading { display: block; color: var(--muted); padding: 40px 0; } .skill-card { border: 1px solid var(--line); border-radius: 18px; background: rgba(255,255,252,.82); overflow: hidden; transition: .2s ease; } .skill-card:hover { transform: translateY(-4px); box-shadow: 0 18px 38px rgba(38,48,40,.1); } .skill-header { height: 90px; background: var(--ink); display: flex; align-items: flex-end; padding: 18px; } .skill-meta { color: var(--lime); font-size: 10px; font-weight: 700; letter-spacing: .16em; } .skill-body { padding: 22px; display: flex; flex-direction: column; min-height: 180px; } .skill-body h3 { margin: 0 0 10px; font: 21px/1.3 Georgia, serif; } .skill-body p { color: var(--muted); font-size: 13px; line-height: 1.7; flex: 1; } .skill-body footer { display: flex; align-items: center; justify-content: space-between; margin-top: 18px; } .skill-body footer span { color: var(--muted); font-size: 12px; } .skill-body footer button { border: 0; border-bottom: 2px solid var(--green); background: transparent; color: var(--green); padding: 4px 0; cursor: pointer; font-weight: 650; } .skill-body footer button:disabled { cursor: not-allowed; opacity: .5; } @media (max-width: 1050px) { .life-map-canvas { grid-template-columns: 1fr; } .life-map-lines, .life-map-center { display: none; } .alumni-entry-content { flex-direction: column; align-items: flex-start; } .alumni-entry-action { align-items: flex-start; } .skill-grid { grid-template-columns: 1fr 1fr; } } @media (max-width: 700px) { .skill-grid { grid-template-columns: 1fr; } .alumni-entry { padding: 28px 24px; } }