:root {
  --bg:#f7f7f3;
  --paper:#fff;
  --ink:#202324;
  --muted:#657075;
  --blue:#245a76;
  --blue-soft:#e7eff3;
  --line:#d8dde0;
  --red:#8a333c;
  --sans:"Noto Sans CJK SC","Microsoft YaHei",sans-serif;
  --serif:"Noto Serif CJK SC","Source Han Serif SC",SimSun,serif;
  --ease:cubic-bezier(.2,.7,.25,1);
}
* {
  box-sizing:border-box;
}
html {
  color:var(--ink);
  background:var(--bg);
  font-family:var(--sans);
  font-size:15px;
  line-height:1.65;
}
body {
  margin:0;
}
button,input,select,textarea {
  font:inherit;
  color:inherit;
}
button,a,input,textarea,select {
  -webkit-tap-highlight-color:transparent;
}
button {
  border:0;
  background:none;
  cursor:pointer;
  border-radius:5px;
  padding:9px 13px;
  transition:background .16s var(--ease),transform .16s var(--ease),color .16s var(--ease);
}
button:hover {
  background:var(--blue-soft);
}
button:active {
  transform:translateY(1px);
}
button:disabled {
  opacity:.4;
  cursor:default;
}
a {
  color:var(--blue);
  text-decoration:none;
}
a:hover {
  text-decoration:underline;
}
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible {
  outline:2px solid var(--blue);
  outline-offset:3px;
}
input,select {
  border:1px solid var(--line);
  background:var(--paper);
  border-radius:5px;
  padding:11px 13px;
  min-width:0;
}
textarea {
  resize:vertical;
  border:0;
  border-radius:0;
  background:transparent;
  line-height:1.9;
  padding:0;
  width:100%;
  font-size:16px;
}
textarea:focus {
  outline:none;
}
textarea:focus-visible {
  outline:none;
  box-shadow:inset 0 -1px var(--blue);
}
textarea::placeholder,input::placeholder {
  color:#7b8387;
}
[hidden] {
  display:none!important;
}
.muted {
  color:var(--muted);
}
.eyebrow {
  font-size:13px;
  color:var(--muted);
  margin:0 0 10px;
}
.primary {
  background:var(--blue);
  color:white;
  padding:12px 24px;
  min-height:48px;
  font-weight:600;
}
.primary:hover {
  background:#17455e;
}
.primary span {
  margin-left:22px;
}
.secondary,.file-button {
  border:1px solid var(--line);
  background:var(--paper);
  padding:10px 18px;
  border-radius:5px;
}
.error-text {
  color:var(--red);
}
.sr-only {
  position:absolute;
  width:1px;
  height:1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
}
.boot {
  padding:15vh 10vw;
  color:var(--muted);
}
.count {
  font-size:12px;
  font-variant-numeric:tabular-nums;
  padding-left:5px;
  color:var(--muted);
}
.app-header {
  height:76px;
  border-bottom:1px solid var(--line);
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  padding:0 4.2vw;
}
.wordmark {
  font-size:19px;
  font-weight:600;
  color:var(--ink);
  white-space:nowrap;
  display:flex;
  align-items:center;
  gap:12px;
}
.wordmark:hover {
  text-decoration:none;
}
.wordmark>span:first-child {
  font-family:Georgia,serif;
  font-size:28px;
  letter-spacing:2px;
  color:var(--blue);
}
.wordmark-sub {
  border-left:1px solid var(--line);
  padding-left:16px;
  margin-left:4px;
  color:var(--muted);
  font-size:14px;
  font-weight:400;
}
.app-header nav {
  display:flex;
  gap:10px;
}
.workspace-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:22px 4.2vw 19px;
  gap:16px;
}
.breadcrumb {
  display:flex;
  gap:13px;
  color:var(--muted);
  font-size:13px;
}
.breadcrumb span:last-child {
  color:var(--ink);
}
.head-tools {
  display:flex;
  gap:8px;
  font-size:14px;
}
#favorite[aria-pressed=true] {
  color:var(--blue);
  background:var(--blue-soft);
}
.spread {
  margin:0 4.2vw 104px;
  background:var(--paper);
  display:grid;
  grid-template-columns:1.45fr 1fr;
  min-height:calc(100dvh - 258px);
  box-shadow:0 2px 16px #20232406;
  border:1px solid var(--line);
  border-radius:3px;
  animation:open-book .3s var(--ease);
}
.question-page {
  display:flex;
  flex-direction:column;
  padding:32px 36px 18px;
  min-width:0;
}
.question-heading {
  display:flex;
  justify-content:space-between;
  gap:20px;
  margin-bottom:30px;
  align-items:flex-start;
}
.question-heading h1 {
  font-family:var(--serif);
  font-size:27px;
  font-weight:500;
  line-height:1.3;
  margin:0;
  letter-spacing:-1px;
}
.question-heading .eyebrow {
  margin-bottom:8px;
}
.question-meta {
  font-size:13px;
  display:flex;
  align-items:flex-end;
  flex-direction:column;
  gap:10px;
  color:var(--muted);
  padding-top:3px;
  white-space:nowrap;
}
.question-meta a {
  font-size:13px;
}
.question-image-wrap {
  min-height:200px;
  flex:1;
  animation:question-in .22s var(--ease);
}
.question-image-wrap img {
  display:block;
  width:100%;
  height:auto;
}
.question-source {
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:16px;
  font-size:13px;
  color:var(--muted);
  margin-top:25px;
}
.question-source button {
  font-size:13px;
}
.question-foot {
  display:flex;
  justify-content:space-between;
  align-items:center;
  border-top:1px solid var(--line);
  padding-top:12px;
  margin-top:16px;
  font-size:13px;
  color:var(--muted);
}
.question-foot button {
  font-size:13px;
}
.question-foot>div {
  display:flex;
  gap:3px;
}
.writing-page {
  background:#fafbf9;
  border-left:1px solid var(--line);
  display:flex;
  flex-direction:column;
  min-width:0;
  padding:20px 30px 20px;
}
.writing-top {
  display:flex;
  justify-content:space-between;
  gap:10px;
  align-items:center;
  border-bottom:1px solid var(--line);
  padding-bottom:11px;
}
.tabs {
  display:flex;
  gap:17px;
}
.tabs button {
  padding:10px 0;
  border-radius:0;
  font-size:14px;
  color:var(--muted);
  position:relative;
  white-space:nowrap;
}
.tabs button:hover {
  background:none;
  color:var(--ink);
}
.tabs button[aria-selected=true] {
  color:var(--ink);
  font-weight:600;
}
.tabs button[aria-selected=true]:after {
  content:"";
  position:absolute;
  bottom:-12px;
  left:0;
  right:0;
  height:2px;
  background:var(--blue);
  animation:question-in .16s var(--ease);
}
.timer {
  display:flex;
  gap:10px;
  align-items:center;
  font-family:Consolas,monospace;
  font-size:14px;
  padding:8px;
  white-space:nowrap;
}
.timer.running {
  color:var(--blue);
}
.writing-panel {
  display:flex;
  flex:1;
  flex-direction:column;
  padding-top:26px;
  min-height:390px;
  animation:question-in .2s var(--ease);
}
.field-label {
  font-size:13px;
  color:var(--muted);
  margin-bottom:18px;
}
.draft {
  flex:1;
  min-height:250px;
}
.answer-label {
  font-size:13px;
  color:var(--muted);
  display:flex;
  flex-direction:column;
  gap:8px;
  margin-top:25px;
}
.answer-label input {
  background:transparent;
  border:0;
  border-bottom:1px solid var(--line);
  border-radius:0;
  padding:6px 0 12px;
  font-size:16px;
}
.writing-footer {
  display:flex;
  justify-content:space-between;
  gap:12px;
  font-size:12px;
  align-items:center;
  padding-top:24px;
}
.writing-footer .muted {
  font-family:var(--serif);
  font-size:13px;
}
.save-status {
  font-size:12px;
  color:var(--muted);
  padding:2px 0;
  display:flex;
  align-items:center;
  gap:7px;
}
.save-status:before {
  content:"";
  width:5px;
  height:5px;
  border-radius:50%;
  background:#537765;
  transition:background .2s;
}
.save-status.failed {
  color:var(--red);
}
.save-status.failed:before {
  background:var(--red);
}
.save-status.pending:before {
  background:#9e8447;
}
.solution-heading {
  display:flex;
  justify-content:space-between;
  align-items:center;
}
.solution-heading h2,.review-panel h2 {
  font-size:16px;
  margin:0;
}
.solution-heading span {
  font-size:12px;
}
.review-panel>p {
  font-size:13px;
  margin:10px 0 14px;
}
.solution {
  min-height:125px;
  font-size:15px;
  border-bottom:1px solid var(--line);
  padding-bottom:16px;
}
.review-panel #rating-block {
  padding-top:22px;
}
.review-panel #rating-block p {
  font-size:13px;
  margin:7px 0 13px;
}
.rating-options {
  display:flex;
  gap:8px;
}
.rating-options button {
  flex:1;
  border:1px solid var(--line);
  font-size:14px;
  padding:9px 5px;
  background:var(--paper);
}
.rating-options button.selected {
  border-color:var(--blue);
  background:var(--blue-soft);
  color:var(--blue);
}
.history {
  margin-top:25px;
  font-size:13px;
  color:var(--muted);
}
.history summary {
  cursor:pointer;
}
.history-row {
  display:flex;
  justify-content:space-between;
  gap:10px;
  padding:8px 0;
}
.review-result {
  padding:18px 0;
  color:var(--blue);
  font-size:14px;
  animation:question-in .2s var(--ease);
}
.action-bar {
  position:fixed;
  bottom:0;
  left:0;
  right:0;
  background:var(--bg);
  border-top:1px solid var(--line);
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  padding:16px 4.2vw max(16px,env(safe-area-inset-bottom));
  z-index:3;
}
.progress-copy {
  font-size:13px;
  color:var(--muted);
  display:flex;
  gap:18px;
  align-items:center;
}
.progress-copy progress {
  appearance:none;
  width:110px;
  height:3px;
  border:0;
  background:var(--line);
}
progress::-webkit-progress-bar {
  background:var(--line);
}
progress::-webkit-progress-value {
  background:var(--blue);
}
.action-buttons {
  display:flex;
  gap:12px;
  align-items:center;
}
.notice {
  margin:14px 4.2vw 0;
  color:var(--red);
  font-size:14px;
}
.notice button {
  padding:2px 8px;
  text-decoration:underline;
}
.toast {
  position:fixed;
  bottom:102px;
  left:50%;
  transform:translateX(-50%);
  background:var(--ink);
  color:white;
  border-radius:5px;
  padding:11px 22px;
  z-index:30;
  max-width:90vw;
  font-size:14px;
  animation:question-in .2s var(--ease);
}
dialog {
  border:1px solid var(--line);
  border-radius:8px;
  background:var(--bg);
  color:var(--ink);
  padding:28px 32px;
  width:min(780px,calc(100vw - 32px));
  max-height:85dvh;
  box-shadow:0 20px 90px #132c3c20;
}
dialog::backdrop {
  background:#162c384d;
  backdrop-filter:blur(2px);
}
dialog[open] {
  animation:dialog-in .22s var(--ease);
}
.dialog-heading {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  margin-bottom:22px;
}
.dialog-heading h2 {
  font-family:var(--serif);
  font-weight:500;
  margin:0;
  font-size:26px;
}
.dialog-heading button {
  font-size:26px;
  line-height:1;
  padding:8px;
}
.dialog-heading .eyebrow {
  margin-bottom:5px;
}
.directory-filters {
  display:flex;
  gap:12px;
  margin-bottom:16px;
}
.directory-filters input {
  flex:1;
  width:50%;
}
.directory-filters select {
  max-width:45%;
}
.filter-tabs {
  display:flex;
  gap:6px;
  border-bottom:1px solid var(--line);
  padding-bottom:15px;
  overflow-x:auto;
}
.filter-tabs button {
  white-space:nowrap;
  font-size:14px;
}
.filter-tabs button[aria-pressed=true] {
  background:var(--blue);
  color:white;
}
.list-heading {
  display:flex;
  justify-content:space-between;
  font-size:12px;
  color:var(--muted);
  padding:18px 0 10px;
}
.question-list {
  max-height:48dvh;
  overflow:auto;
}
.question-row {
  width:100%;
  border-radius:0;
  text-align:left;
  display:grid;
  grid-template-columns:90px 1fr auto;
  gap:15px;
  align-items:center;
  padding:15px 8px;
  border-top:1px solid var(--line);
}
.question-row .row-title {
  font-weight:600;
  font-variant-numeric:tabular-nums;
}
.question-row .row-text {
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  color:var(--muted);
  font-size:13px;
}
.question-row .row-state {
  color:var(--muted);
  font-size:12px;
  white-space:nowrap;
}
.question-row.current {
  background:var(--blue-soft);
}
.empty {
  padding:45px 5px;
  color:var(--muted);
  text-align:center;
}
.stat-totals {
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:20px;
  margin:30px 0;
}
.stat-totals strong {
  display:block;
  font-size:34px;
  font-weight:400;
  font-variant-numeric:tabular-nums;
}
.stat-totals span {
  font-size:13px;
  color:var(--muted);
}
.stats-section {
  margin-top:30px;
}
.stats-section h3 {
  font-size:15px;
  font-weight:500;
}
.chapter-progress {
  display:grid;
  grid-template-columns:120px 1fr 55px;
  gap:15px;
  align-items:center;
  font-size:13px;
  margin:18px 0;
}
.bar-track {
  height:5px;
  background:var(--line);
  overflow:hidden;
}
.bar-fill {
  height:100%;
  background:var(--blue);
}
.daily-chart {
  height:120px;
  display:flex;
  gap:8px;
  align-items:flex-end;
  margin-top:20px;
}
.daily-item {
  flex:1;
  text-align:center;
  font-size:11px;
  color:var(--muted);
  height:100%;
  display:flex;
  flex-direction:column;
  justify-content:flex-end;
  gap:7px;
}
.daily-bar {
  background:#adc4cf;
  min-height:2px;
  border-radius:2px 2px 0 0;
}
.stats-note {
  font-size:13px;
  color:var(--muted);
}
.settings-dialog h3 {
  font-size:16px;
  margin-top:28px;
}
.settings-dialog p {
  font-size:14px;
}
.settings-actions {
  display:flex;
  gap:12px;
  flex-wrap:wrap;
  margin:24px 0;
}
.file-button {
  cursor:pointer;
}
.file-button input {
  position:absolute;
  width:1px;
  height:1px;
  opacity:0;
}
.conflict-columns {
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:20px;
}
.conflict-columns label {
  font-size:14px;
}
.conflict-columns textarea {
  height:220px;
  background:white;
  border:1px solid var(--line);
  font-size:13px;
  padding:12px;
  margin-top:10px;
}
.zoom-dialog {
  width:min(1320px,95vw);
  background:white;
}
.zoom-scroll {
  overflow:auto;
  max-height:65dvh;
}
.zoom-scroll img {
  display:block;
  width:1240px;
  max-width:none;
}
.login-page {
  min-height:100dvh;
  display:grid;
  grid-template-columns:1.2fr 1fr;
  align-items:center;
  gap:10vw;
  width:min(1080px,84vw);
  margin:auto;
}
.book-mark {
  font-family:Georgia,serif;
  font-size:50px;
  letter-spacing:8px;
  color:var(--blue);
  display:block;
  margin-bottom:42px;
}
.login-copy h1 {
  font-family:var(--serif);
  font-weight:500;
  font-size:54px;
  line-height:1.4;
  margin:15px 0 23px;
}
.login-copy>p {
  font-size:15px;
}
.login-copy .eyebrow {
  font-size:13px;
}
.login-rule {
  height:1px;
  width:60px;
  background:var(--blue);
  margin:45px 0 20px;
}
.login-form {
  max-width:360px;
  width:100%;
  padding:25px 0;
}
.login-form h2 {
  font-family:var(--serif);
  font-size:28px;
  font-weight:500;
  margin:0 0 12px;
}
.login-form>p {
  font-size:14px;
}
.login-form label {
  display:flex;
  flex-direction:column;
  gap:8px;
  font-size:14px;
  margin-top:23px;
}
.login-form .primary {
  width:100%;
  margin-top:8px;
}
.login-form small {
  display:block;
  text-align:center;
  font-size:12px;
  color:var(--muted);
  margin-top:22px;
}
.login-form .error-text {
  min-height:24px;
}
@keyframes open-book {
  from {
    opacity:0;
    transform:translateY(6px);
  }
  to {
    opacity:1;
    transform:none;
  }
}
@keyframes question-in {
  from {
    opacity:0;
  }
  to {
    opacity:1;
  }
}
@keyframes dialog-in {
  from {
    opacity:0;
    transform:translateY(8px);
  }
  to {
    opacity:1;
    transform:none;
  }
}
@media(min-width:1600px) {
  .spread,.workspace-head,.app-header,.action-bar {
    padding-left:max(4.2vw,calc((100vw - 1500px)/2));
    padding-right:max(4.2vw,calc((100vw - 1500px)/2));
  }
  .spread {
    padding:0;
    margin-left:max(4.2vw,calc((100vw - 1500px)/2));
    margin-right:max(4.2vw,calc((100vw - 1500px)/2));
  }
}
@media(max-width:1100px) {
  .writing-page {
    padding:20px;
  }
  .question-page {
    padding:28px 24px 18px;
  }
  .tabs {
    gap:13px;
  }
  .writing-top {
    gap:5px;
  }
  .timer {
    padding:5px;
    font-size:13px;
  }
  .app-header nav {
    gap:0;
  }
  .wordmark-sub {
    display:none;
  }
  .writing-footer .muted {
    display:none;
  }
  .question-foot {
    flex-wrap:wrap;
    gap:8px;
  }
}
@media(max-width:760px) {
  html {
    font-size:14px;
  }
  .app-header {
    height:auto;
    min-height:68px;
    flex-wrap:wrap;
    padding:13px 18px 8px;
    gap:7px;
  }
  .wordmark {
    font-size:17px;
  }
  .wordmark>span:first-child {
    font-size:24px;
  }
  .app-header nav {
    width:100%;
    justify-content:space-between;
  }
  .app-header nav button {
    padding:8px 5px;
    font-size:13px;
  }
  .workspace-head {
    padding:14px 18px;
    gap:5px;
  }
  .breadcrumb {
    gap:6px;
    font-size:12px;
  }
  .head-tools {
    gap:0;
  }
  .head-tools button {
    padding:7px;
    font-size:12px;
  }
  .spread {
    margin:0 12px 108px;
    display:flex;
    flex-direction:column;
    min-height:0;
  }
  .question-page {
    padding:23px 18px 14px;
  }
  .question-heading {
    margin-bottom:25px;
    gap:10px;
  }
  .question-heading h1 {
    font-size:29px;
  }
  .question-heading .eyebrow {
    font-size:12px;
  }
  .question-meta {
    font-size:12px;
    gap:6px;
  }
  .question-meta a {
    font-size:12px;
  }
  .question-image-wrap {
    min-height:100px;
  }
  .question-source {
    font-size:12px;
    margin-top:15px;
    gap:5px;
  }
  .question-foot {
    font-size:12px;
  }
  .question-foot button {
    font-size:12px;
  }
  .writing-page {
    border-left:0;
    border-top:1px solid var(--line);
    padding:15px 18px;
  }
  .writing-panel {
    min-height:250px;
    padding-top:20px;
  }
  .draft {
    min-height:180px;
  }
  .writing-footer {
    padding-top:20px;
  }
  .tabs {
    gap:22px;
  }
  .timer {
    font-size:14px;
  }
  .answer-label {
    margin-top:18px;
  }
  .action-bar {
    padding:13px 18px max(13px,env(safe-area-inset-bottom));
    gap:10px;
  }
  .progress-copy {
    font-size:12px;
    display:block;
  }
  .progress-copy progress {
    display:block;
    margin-top:8px;
    width:90px;
  }
  .primary {
    font-size:14px;
    padding:11px 17px;
    min-height:46px;
  }
  .primary span {
    margin-left:12px;
  }
  .action-buttons {
    gap:5px;
  }
  .action-buttons>button:not(.primary) {
    font-size:12px;
    padding:7px;
  }
  .notice {
    margin:10px 18px 0;
  }
  .toast {
    bottom:100px;
    font-size:13px;
  }
  dialog {
    padding:20px;
    width:calc(100vw - 20px);
    max-height:90dvh;
  }
  .dialog-heading h2 {
    font-size:24px;
  }
  .directory-filters {
    gap:8px;
  }
  .directory-filters input,.directory-filters select {
    padding:10px;
    font-size:13px;
  }
  .filter-tabs {
    gap:0;
  }
  .filter-tabs button {
    font-size:13px;
    padding:8px 10px;
  }
  .question-row {
    grid-template-columns:65px 1fr auto;
    gap:8px;
    padding:15px 3px;
  }
  .question-row .row-text {
    font-size:12px;
  }
  .question-row .row-state {
    font-size:11px;
  }
  .stat-totals {
    gap:12px;
  }
  .stat-totals strong {
    font-size:29px;
  }
  .stat-totals span {
    font-size:12px;
  }
  .chapter-progress {
    grid-template-columns:100px 1fr 45px;
    gap:10px;
  }
  .conflict-columns {
    grid-template-columns:1fr;
  }
  .conflict-columns textarea {
    height:120px;
  }
  .login-page {
    grid-template-columns:1fr;
    gap:20px;
    width:84vw;
    align-content:center;
    padding:35px 0;
  }
  .book-mark {
    font-size:30px;
    margin:0 0 18px;
  }
  .login-copy h1 {
    font-size:34px;
    margin:10px 0;
  }
  .login-copy h1 br {
    display:none;
  }
  .login-copy .login-rule,.login-copy>.muted {
    display:none;
  }
  .login-copy .eyebrow {
    display:none;
  }
  .login-form {
    max-width:none;
    padding:0;
  }
  .login-form h2 {
    font-size:23px;
  }
  .login-form label {
    margin-top:16px;
  }
}
.mobile-reading-hint {
  display:none;
}
.availability {
  font-size:13px;
  color:var(--muted);
  margin:-12px 0 25px;
}
.zoom-control {
  display:flex;
  align-items:center;
  gap:16px;
  font-size:14px;
  margin-bottom:20px;
}
.zoom-control input {
  flex:1;
  padding:0;
  accent-color:var(--blue);
}
.zoom-control output {
  min-width:45px;
}
@media(max-width:760px) {
  .zoom-dialog {
    width:100vw;
    max-width:100vw;
    height:100dvh;
    max-height:100dvh;
    margin:0;
    border-radius:0;
    padding:18px;
  }
}
@media(max-width:760px) {
  .question-image-wrap {
    overflow-x:auto;
    flex:none;
  }
  .question-image-wrap img {
    width:100%;
    min-width:var(--readable-width);
    max-width:none;
  }
  .mobile-reading-hint {
    display:block;
    font-size:12px;
    color:var(--muted);
    margin:0 0 12px;
  }
}
@media(prefers-reduced-motion:reduce) {
  *,*:before,*:after {
    animation:none!important;
    transition:none!important;
    scroll-behavior:auto!important;
  }
}
