ngocdang83 commited on
Commit
8aba330
·
verified ·
1 Parent(s): e00d2a9

moxhi 3cf7c8d

Browse files
about.html CHANGED
@@ -73,13 +73,13 @@
73
  ]
74
  }
75
  </script>
76
- <link rel="stylesheet" crossorigin href="/assets/about-B7a9U0xY.css">
77
  </head>
78
  <body>
79
  <a class="skip-link" href="#noi-dung">Bỏ qua điều hướng</a>
80
  <div class="about-page">
81
  <header class="site-nav">
82
- <a class="wordmark" href="/" aria-label="Mặc Hi — mở máy dịch">
83
  <svg class="wordmark__seal" viewBox="0 0 64 64" aria-hidden="true">
84
  <rect class="wordmark__field" x="1.5" y="1.5" width="61" height="61" rx="7" />
85
  <rect class="wordmark__rule" x="5" y="5" width="54" height="54" rx="4" />
@@ -92,7 +92,7 @@
92
  </span>
93
  </a>
94
  <nav class="primary-nav" aria-label="Điều hướng chính">
95
- <a href="/">Mở máy dịch</a>
96
  <a href="/board">Bảng tốc độ</a>
97
  </nav>
98
  </header>
@@ -283,7 +283,7 @@
283
  <p class="eyebrow">Sẵn sàng đọc</p>
284
  <h2 id="closing-title">Mở máy dịch, chọn mô hình và bắt đầu.</h2>
285
  <nav class="closing__links" aria-label="Tiếp tục với Mặc Hi">
286
- <a class="route-link route-link--primary" href="/">Mở máy dịch <span aria-hidden="true">→</span></a>
287
  <a class="route-link" href="/board">Xem bảng tốc độ <span aria-hidden="true">→</span></a>
288
  </nav>
289
  </section>
@@ -292,7 +292,7 @@
292
  <footer class="site-footer">
293
  <p>Mặc Hi · dịch truyện Trung–Việt trên thiết bị</p>
294
  <nav aria-label="Điều hướng cuối trang">
295
- <a href="/">Máy dịch</a>
296
  <a href="/board">Bảng tốc độ</a>
297
  </nav>
298
  </footer>
 
73
  ]
74
  }
75
  </script>
76
+ <link rel="stylesheet" crossorigin href="/assets/about-BRw9WSHl.css">
77
  </head>
78
  <body>
79
  <a class="skip-link" href="#noi-dung">Bỏ qua điều hướng</a>
80
  <div class="about-page">
81
  <header class="site-nav">
82
+ <a class="wordmark" href="/index.html" aria-label="Mặc Hi — mở máy dịch">
83
  <svg class="wordmark__seal" viewBox="0 0 64 64" aria-hidden="true">
84
  <rect class="wordmark__field" x="1.5" y="1.5" width="61" height="61" rx="7" />
85
  <rect class="wordmark__rule" x="5" y="5" width="54" height="54" rx="4" />
 
92
  </span>
93
  </a>
94
  <nav class="primary-nav" aria-label="Điều hướng chính">
95
+ <a href="/index.html">Mở máy dịch</a>
96
  <a href="/board">Bảng tốc độ</a>
97
  </nav>
98
  </header>
 
283
  <p class="eyebrow">Sẵn sàng đọc</p>
284
  <h2 id="closing-title">Mở máy dịch, chọn mô hình và bắt đầu.</h2>
285
  <nav class="closing__links" aria-label="Tiếp tục với Mặc Hi">
286
+ <a class="route-link route-link--primary" href="/index.html">Mở máy dịch <span aria-hidden="true">→</span></a>
287
  <a class="route-link" href="/board">Xem bảng tốc độ <span aria-hidden="true">→</span></a>
288
  </nav>
289
  </section>
 
292
  <footer class="site-footer">
293
  <p>Mặc Hi · dịch truyện Trung–Việt trên thiết bị</p>
294
  <nav aria-label="Điều hướng cuối trang">
295
+ <a href="/index.html">Máy dịch</a>
296
  <a href="/board">Bảng tốc độ</a>
297
  </nav>
298
  </footer>
assets/{about-B7a9U0xY.css → about-BRw9WSHl.css} RENAMED
@@ -1 +1 @@
1
- :root{--color-paper: oklch(95% .018 80);--color-paper-raised: oklch(92% .022 78);--color-paper-deep: oklch(88% .026 76);--color-ink: oklch(25% .014 35);--color-ink-soft: oklch(40% .018 45);--color-muted: oklch(52% .022 55);--color-rule: oklch(76% .025 74);--color-rule-soft: oklch(86% .022 76);--color-accent: oklch(50% .16 29);--color-accent-dark: oklch(43% .15 29);--color-accent-ink: oklch(96% .014 78);--color-link: oklch(48% .09 340);--color-moss: oklch(52% .045 145);--color-focus: oklch(54% .2 29);--font-display: "Playfair Display", Georgia, "Times New Roman", serif;--font-body: "Times New Roman", "Noto Serif", Tinos, serif;--font-ui: var(--font-body);--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--space-16: 4rem;--space-20: 5rem;--space-24: 6rem;--text-xs: .75rem;--text-sm: .875rem;--text-code: .9375rem;--text-body: 1.0625rem;--text-wordmark: 1.2rem;--text-subhead: 1.25rem;--text-seal: 1.4375rem;--text-lead: clamp(1.2rem, 1.05rem + .75vw, 1.55rem);--text-section: clamp(1.75rem, 1.4rem + 1.5vw, 2.75rem);--text-display: clamp(2.75rem, 1.8rem + 4.5vw, 6.25rem);--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-in: cubic-bezier(.7, 0, .84, 0);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--dur-short: .18s;--dur-press: .1s;--rule-hairline: 1px;--rule-seal: 1.5px;--rule-focus: 2px;--rule-underline-offset: .125rem;--radius-sm: .25rem;--radius-pill: 999px;--layout-max: 72rem;--measure-copy: 62ch;--measure-lead: 50ch}@font-face{font-family:Playfair Display;font-style:normal;font-weight:600 700;font-display:swap;src:url(/assets/playfair-vietnamese-Cabi7G8-.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Playfair Display;font-style:normal;font-weight:600 700;font-display:swap;src:url(/assets/playfair-latin-BOwq7MWX.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{box-sizing:border-box}html,body{margin:0;padding:0;overflow-x:clip}body{min-height:100dvh;color:var(--color-ink);background:var(--color-paper);font-family:var(--font-body);font-size:var(--text-body);line-height:1.67}::selection{color:var(--color-accent-ink);background:var(--color-accent)}a{color:inherit}code,kbd{font-family:var(--font-ui);font-size:var(--text-code)}kbd{padding-inline:var(--space-1);border:var(--rule-hairline) solid var(--color-rule);border-radius:var(--radius-sm);background:var(--color-paper-raised)}.skip-link{position:absolute;z-index:1;inset-block-start:var(--space-2);inset-inline-start:-999rem;min-height:var(--space-12);padding:var(--space-2) var(--space-4);color:var(--color-accent-ink);background:var(--color-accent);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:700;line-height:2;text-decoration:none;white-space:nowrap}.skip-link:focus{inset-inline-start:var(--space-4)}.about-page{width:100%;max-width:var(--layout-max);min-height:100dvh;margin-inline:auto;padding-inline:clamp(var(--space-4),4vw,var(--space-16))}.site-nav{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3) var(--space-6);padding-block:var(--space-5);border-block-end:var(--rule-hairline) solid var(--color-rule)}.wordmark{display:inline-flex;align-items:center;gap:var(--space-3);min-height:var(--space-12);line-height:1;text-decoration:none;white-space:nowrap}.wordmark__seal{width:var(--space-12);height:var(--space-12);flex:none}.wordmark__field{fill:var(--color-accent)}.wordmark__rule{fill:none;stroke:var(--color-accent-ink);stroke-width:var(--rule-seal);opacity:.55}.wordmark__seal text{fill:var(--color-accent-ink);font-family:var(--font-body);font-size:var(--text-seal)}.wordmark__text{display:grid;line-height:1.05}.wordmark__text strong{font-family:var(--font-display);font-size:var(--text-wordmark);font-weight:700}.wordmark__text span{color:var(--color-muted);font-size:var(--text-xs);letter-spacing:.16em}.primary-nav{display:flex;width:100%;align-items:center;gap:var(--space-6)}.primary-nav a,.site-footer a{display:inline-flex;align-items:center;min-height:var(--space-12);color:var(--color-ink-soft);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:650;line-height:1;text-decoration-line:underline;text-decoration-color:var(--color-rule);text-decoration-thickness:var(--rule-hairline);text-underline-offset:var(--rule-underline-offset);white-space:nowrap}.hero{max-width:var(--measure-copy);padding-block:var(--space-12) var(--space-16)}.eyebrow,.chapter__kicker{margin:0;color:var(--color-accent-dark);font-family:var(--font-ui);font-size:var(--text-xs);font-weight:750;letter-spacing:.12em;line-height:1.4;text-transform:uppercase}.hero h1{max-width:11ch;min-width:0;margin:var(--space-4) 0 var(--space-6);overflow-wrap:anywhere;font-family:var(--font-display);font-size:var(--text-display);font-style:normal;font-weight:700;letter-spacing:-.035em;line-height:.99}.hero__lead{max-width:var(--measure-lead);margin:0;color:var(--color-ink-soft);font-size:var(--text-lead);line-height:1.5}.hero__promise{max-width:var(--measure-copy);margin:var(--space-8) 0 0;padding-inline-start:var(--space-5);border-inline-start:var(--rule-seal) solid var(--color-accent);color:var(--color-ink-soft)}.hero__promise strong{color:var(--color-ink)}.guide{border-block-start:var(--rule-hairline) solid var(--color-rule)}.chapter{padding-block:var(--space-16);border-block-end:var(--rule-hairline) solid var(--color-rule-soft)}.chapter--models{padding-block-end:var(--space-20)}.chapter--compact{padding-block-start:var(--space-12)}.chapter__heading{display:block;margin-block-end:var(--space-8)}.chapter__marker{display:inline-block;width:fit-content;margin-block-end:var(--space-3);padding-block-start:var(--space-2);border-block-start:var(--rule-seal) solid var(--color-accent);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--text-xs);font-variant-numeric:tabular-nums;font-weight:700;letter-spacing:.1em}.chapter h2,.closing h2{max-width:18ch;min-width:0;margin:var(--space-2) 0 0;overflow-wrap:anywhere;font-family:var(--font-display);font-size:var(--text-section);font-style:normal;font-weight:700;letter-spacing:-.02em;line-height:1.12}.chapter__body{max-width:var(--measure-copy);color:var(--color-ink-soft)}.chapter__body>p:first-child{margin-block-start:0}.chapter__body>p:last-child{margin-block-end:0}.chapter__body strong,.chapter__body b{color:var(--color-ink)}.steps{margin:0;padding:0;list-style:none}.steps li{display:grid;grid-template-columns:var(--space-8) minmax(0,1fr);gap:var(--space-4);padding-block:var(--space-5);border-block-start:var(--rule-hairline) solid var(--color-rule-soft)}.steps li:last-child{border-block-end:var(--rule-hairline) solid var(--color-rule-soft)}.steps p{margin:0}.steps__number{color:var(--color-accent-dark);font-family:var(--font-display);font-size:var(--text-subhead);font-variant-numeric:tabular-nums;font-weight:700}.model-table{width:100%;margin-block:var(--space-8);border-collapse:collapse;color:var(--color-ink-soft);font-variant-numeric:tabular-nums}.model-table thead{position:absolute;width:var(--rule-hairline);height:var(--rule-hairline);overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.model-table,.model-table tbody,.model-table tr,.model-table th,.model-table td{display:block}.model-table tr{padding-block:var(--space-4);border-block-start:var(--rule-hairline) solid var(--color-rule)}.model-table tbody tr:last-child{border-block-end:var(--rule-hairline) solid var(--color-rule)}.model-table th,.model-table td{display:grid;grid-template-columns:minmax(6.5rem,.42fr) minmax(0,1fr);gap:var(--space-4);padding-block:var(--space-2);text-align:start;vertical-align:top}.model-table th{color:var(--color-ink)}.model-table [data-label]:before{content:attr(data-label);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--text-xs);font-weight:700;letter-spacing:.04em;text-transform:uppercase}.resource-links,.closing__links{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3) var(--space-6)}.resource-links a{display:inline-flex;align-items:center;min-height:var(--space-12);color:var(--color-link);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:700;line-height:1;text-decoration-thickness:var(--rule-hairline);text-underline-offset:var(--rule-underline-offset);white-space:nowrap}.term-examples{margin-block:var(--space-8);border-block:var(--rule-hairline) solid var(--color-rule)}.term-examples>div{display:grid;grid-template-columns:minmax(5rem,.32fr) minmax(0,1fr);gap:var(--space-4);padding-block:var(--space-4)}.term-examples>div+div{border-block-start:var(--rule-hairline) solid var(--color-rule-soft)}.term-examples dt{color:var(--color-ink);font-size:var(--text-subhead);font-weight:700}.term-examples dd{margin:0;color:var(--color-ink)}.term-examples dd span{margin-inline-end:var(--space-2);color:var(--color-accent-dark)}.term-examples small{display:block;color:var(--color-muted);font-family:var(--font-ui);font-size:var(--text-xs)}.inline-heading{font-weight:700}.prose-list p{margin:0;padding-block:var(--space-4);border-block-start:var(--rule-hairline) solid var(--color-rule-soft)}.prose-list p:last-child{border-block-end:var(--rule-hairline) solid var(--color-rule-soft)}.faq section{padding-block:var(--space-5);border-block-start:var(--rule-hairline) solid var(--color-rule-soft)}.faq section:last-child{border-block-end:var(--rule-hairline) solid var(--color-rule-soft)}.faq h3{margin:0 0 var(--space-2);color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-subhead);font-style:normal;line-height:1.35}.faq p{margin:0}.closing{max-width:var(--measure-copy);padding-block:var(--space-20)}.closing h2{margin-block-end:var(--space-8)}.route-link{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:var(--space-12);padding-inline:var(--space-5);border:var(--rule-hairline) solid var(--color-rule);border-radius:var(--radius-sm);color:var(--color-ink);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:750;line-height:1;text-decoration:none;white-space:nowrap}.route-link--primary{border-color:var(--color-accent);color:var(--color-accent-ink);background:var(--color-accent)}.site-footer{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-8);padding-block:var(--space-5);border-block-start:var(--rule-hairline) solid var(--color-rule);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--text-sm)}.site-footer p{width:100%;margin:0}.site-footer nav{display:flex;align-items:center;gap:var(--space-6)}a:focus-visible{outline:var(--rule-focus) solid var(--color-focus);outline-offset:var(--space-1)}@media(hover:hover)and (pointer:fine){.primary-nav a:hover,.site-footer a:hover,.resource-links a:hover{color:var(--color-accent-dark);text-decoration-color:var(--color-accent)}.wordmark:hover{color:var(--color-accent-dark)}.route-link:hover{border-color:var(--color-ink);color:var(--color-accent-ink);background:var(--color-ink)}.route-link--primary:hover{border-color:var(--color-accent-dark);background:var(--color-accent-dark)}}.primary-nav a:active,.site-footer a:active,.resource-links a:active,.wordmark:active{color:var(--color-accent-dark)}.route-link:active{border-color:var(--color-accent-dark);color:var(--color-accent-ink);background:var(--color-accent-dark)}a[aria-disabled=true]{border-color:var(--color-rule-soft);color:var(--color-muted);background:var(--color-paper-raised);cursor:not-allowed;opacity:.55;pointer-events:none}.skip-link:active{background:var(--color-accent-dark)}@media(min-width:40rem){.site-nav{flex-wrap:nowrap}.primary-nav{width:auto;margin-inline-start:auto}.model-table{display:table}.model-table thead{position:static;display:table-header-group;width:auto;height:auto;overflow:visible;clip:auto;clip-path:none;white-space:normal}.model-table tbody{display:table-row-group}.model-table tr{display:table-row;padding-block:0}.model-table th,.model-table td{display:table-cell;padding:var(--space-4) var(--space-4) var(--space-4) 0}.model-table [data-label]:before{content:none}.site-footer p{width:auto}.site-footer nav{margin-inline-start:auto}}@media(min-width:60rem){.hero{padding-block:var(--space-16) var(--space-24)}.chapter{padding-block:var(--space-20)}.chapter--models{padding-block-end:var(--space-24)}.chapter__body{margin-inline-start:calc(var(--space-16) + var(--space-5))}}@media(pointer:coarse){.primary-nav a,.resource-links a,.route-link,.site-footer a{min-height:var(--space-12)}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
 
1
+ :root{--color-paper: oklch(95% .018 80);--color-paper-raised: oklch(92% .022 78);--color-paper-deep: oklch(88% .026 76);--color-ink: oklch(25% .014 35);--color-ink-soft: oklch(40% .018 45);--color-muted: oklch(52% .022 55);--color-rule: oklch(76% .025 74);--color-rule-soft: oklch(86% .022 76);--color-accent: oklch(50% .16 29);--color-accent-dark: oklch(43% .15 29);--color-accent-ink: oklch(96% .014 78);--color-link: oklch(48% .09 340);--color-moss: oklch(52% .045 145);--color-focus: oklch(54% .2 29);--font-display: "Playfair Display", Georgia, "Times New Roman", serif;--font-body: "Times New Roman", "Noto Serif", Tinos, serif;--font-ui: var(--font-body);--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--space-16: 4rem;--space-20: 5rem;--space-24: 6rem;--text-xs: .75rem;--text-sm: .875rem;--text-code: .9375rem;--text-body: 1.0625rem;--text-wordmark: 1.2rem;--text-subhead: 1.25rem;--text-seal: 1.4375rem;--text-lead: clamp(1.2rem, 1.05rem + .75vw, 1.55rem);--text-section: clamp(1.75rem, 1.4rem + 1.5vw, 2.75rem);--text-display: clamp(2.75rem, 1.8rem + 4.5vw, 6.25rem);--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-in: cubic-bezier(.7, 0, .84, 0);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--dur-short: .18s;--dur-press: .1s;--rule-hairline: 1px;--rule-seal: 1.5px;--rule-focus: 2px;--rule-underline-offset: .125rem;--radius-sm: .25rem;--radius-pill: 999px;--layout-max: 60rem;--measure-copy: 62ch;--measure-lead: 50ch}@font-face{font-family:Playfair Display;font-style:normal;font-weight:600 700;font-display:swap;src:url(/assets/playfair-vietnamese-Cabi7G8-.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Playfair Display;font-style:normal;font-weight:600 700;font-display:swap;src:url(/assets/playfair-latin-BOwq7MWX.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{box-sizing:border-box}html,body{margin:0;padding:0;overflow-x:clip}body{min-height:100dvh;color:var(--color-ink);background:var(--color-paper);font-family:var(--font-body);font-size:var(--text-body);line-height:1.67}::selection{color:var(--color-accent-ink);background:var(--color-accent)}a{color:inherit}code,kbd{font-family:var(--font-ui);font-size:var(--text-code)}kbd{padding-inline:var(--space-1);border:var(--rule-hairline) solid var(--color-rule);border-radius:var(--radius-sm);background:var(--color-paper-raised)}.skip-link{position:absolute;z-index:1;inset-block-start:var(--space-2);inset-inline-start:-999rem;min-height:var(--space-12);padding:var(--space-2) var(--space-4);color:var(--color-accent-ink);background:var(--color-accent);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:700;line-height:2;text-decoration:none;white-space:nowrap}.skip-link:focus{inset-inline-start:var(--space-4)}.about-page{width:100%;max-width:var(--layout-max);min-height:100dvh;margin-inline:auto;padding-inline:clamp(var(--space-4),4vw,var(--space-16))}.site-nav{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3) var(--space-6);padding-block:var(--space-5);border-block-end:var(--rule-hairline) solid var(--color-rule)}.wordmark{display:inline-flex;align-items:center;gap:var(--space-3);min-height:var(--space-12);line-height:1;text-decoration:none;white-space:nowrap}.wordmark__seal{width:var(--space-12);height:var(--space-12);flex:none}.wordmark__field{fill:var(--color-accent)}.wordmark__rule{fill:none;stroke:var(--color-accent-ink);stroke-width:var(--rule-seal);opacity:.55}.wordmark__seal text{fill:var(--color-accent-ink);font-family:var(--font-body);font-size:var(--text-seal)}.wordmark__text{display:grid;line-height:1.05}.wordmark__text strong{font-family:var(--font-display);font-size:var(--text-wordmark);font-weight:700}.wordmark__text span{color:var(--color-muted);font-size:var(--text-xs);letter-spacing:.16em}.primary-nav{display:flex;width:100%;align-items:center;gap:var(--space-6)}.primary-nav a,.site-footer a{display:inline-flex;align-items:center;min-height:var(--space-12);color:var(--color-ink-soft);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:650;line-height:1;text-decoration-line:underline;text-decoration-color:var(--color-rule);text-decoration-thickness:var(--rule-hairline);text-underline-offset:var(--rule-underline-offset);white-space:nowrap}.hero{max-width:var(--measure-copy);padding-block:var(--space-12) var(--space-16)}.eyebrow,.chapter__kicker{margin:0;color:var(--color-accent-dark);font-family:var(--font-ui);font-size:var(--text-xs);font-weight:750;letter-spacing:.12em;line-height:1.4;text-transform:uppercase}.hero h1{max-width:11ch;min-width:0;margin:var(--space-4) 0 var(--space-6);overflow-wrap:anywhere;font-family:var(--font-display);font-size:var(--text-display);font-style:normal;font-weight:700;letter-spacing:-.035em;line-height:.99}.hero__lead{max-width:var(--measure-lead);margin:0;color:var(--color-ink-soft);font-size:var(--text-lead);line-height:1.5}.hero__promise{max-width:var(--measure-copy);margin:var(--space-8) 0 0;padding-inline-start:var(--space-5);border-inline-start:var(--rule-seal) solid var(--color-accent);color:var(--color-ink-soft)}.hero__promise strong{color:var(--color-ink)}.guide{border-block-start:var(--rule-hairline) solid var(--color-rule)}.chapter{padding-block:var(--space-16);border-block-end:var(--rule-hairline) solid var(--color-rule-soft)}.chapter--models{padding-block-end:var(--space-20)}.chapter--compact{padding-block-start:var(--space-12)}.chapter__heading{display:block;margin-block-end:var(--space-8)}.chapter__marker{display:inline-block;width:fit-content;margin-block-end:var(--space-3);padding-block-start:var(--space-2);border-block-start:var(--rule-seal) solid var(--color-accent);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--text-xs);font-variant-numeric:tabular-nums;font-weight:700;letter-spacing:.1em}.chapter h2,.closing h2{max-width:18ch;min-width:0;margin:var(--space-2) 0 0;overflow-wrap:anywhere;text-wrap:balance;font-family:var(--font-display);font-size:var(--text-section);font-style:normal;font-weight:700;letter-spacing:-.02em;line-height:1.12}.chapter__body{max-width:var(--measure-copy);color:var(--color-ink-soft)}.chapter__body>p:first-child{margin-block-start:0}.chapter__body>p:last-child{margin-block-end:0}.chapter__body strong,.chapter__body b{color:var(--color-ink)}.steps{margin:0;padding:0;list-style:none}.steps li{display:grid;grid-template-columns:var(--space-8) minmax(0,1fr);gap:var(--space-4);padding-block:var(--space-5);border-block-start:var(--rule-hairline) solid var(--color-rule-soft)}.steps li:last-child{border-block-end:var(--rule-hairline) solid var(--color-rule-soft)}.steps p{margin:0}.steps__number{color:var(--color-accent-dark);font-family:var(--font-display);font-size:var(--text-subhead);font-variant-numeric:tabular-nums;font-weight:700}.model-table{width:100%;margin-block:var(--space-8);border-collapse:collapse;color:var(--color-ink-soft);font-variant-numeric:tabular-nums}.model-table thead{position:absolute;width:var(--rule-hairline);height:var(--rule-hairline);overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.model-table,.model-table tbody,.model-table tr,.model-table th,.model-table td{display:block}.model-table tr{padding-block:var(--space-4);border-block-start:var(--rule-hairline) solid var(--color-rule)}.model-table tbody tr:last-child{border-block-end:var(--rule-hairline) solid var(--color-rule)}.model-table th,.model-table td{display:grid;grid-template-columns:minmax(6.5rem,.42fr) minmax(0,1fr);gap:var(--space-4);padding-block:var(--space-2);text-align:start;vertical-align:top}.model-table th{color:var(--color-ink)}.model-table [data-label]:before{content:attr(data-label);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--text-xs);font-weight:700;letter-spacing:.04em;text-transform:uppercase}.resource-links,.closing__links{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3) var(--space-6)}.resource-links a{display:inline-flex;align-items:center;min-height:var(--space-12);color:var(--color-link);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:700;line-height:1;text-decoration-thickness:var(--rule-hairline);text-underline-offset:var(--rule-underline-offset);white-space:nowrap}.term-examples{margin-block:var(--space-8);border-block:var(--rule-hairline) solid var(--color-rule)}.term-examples>div{display:grid;grid-template-columns:minmax(5rem,.32fr) minmax(0,1fr);gap:var(--space-4);padding-block:var(--space-4)}.term-examples>div+div{border-block-start:var(--rule-hairline) solid var(--color-rule-soft)}.term-examples dt{color:var(--color-ink);font-size:var(--text-subhead);font-weight:700}.term-examples dd{margin:0;color:var(--color-ink)}.term-examples dd span{margin-inline-end:var(--space-2);color:var(--color-accent-dark)}.term-examples small{display:block;color:var(--color-muted);font-family:var(--font-ui);font-size:var(--text-xs)}.inline-heading{font-weight:700}.prose-list p{margin:0;padding-block:var(--space-4);border-block-start:var(--rule-hairline) solid var(--color-rule-soft)}.prose-list p:last-child{border-block-end:var(--rule-hairline) solid var(--color-rule-soft)}.faq section{padding-block:var(--space-5);border-block-start:var(--rule-hairline) solid var(--color-rule-soft)}.faq section:last-child{border-block-end:var(--rule-hairline) solid var(--color-rule-soft)}.faq h3{margin:0 0 var(--space-2);color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-subhead);font-style:normal;line-height:1.35}.faq p{margin:0}.closing{max-width:var(--measure-copy);padding-block:var(--space-20)}.closing h2{margin-block-end:var(--space-8)}.route-link{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:var(--space-12);padding-inline:var(--space-5);border:var(--rule-hairline) solid var(--color-rule);border-radius:var(--radius-sm);color:var(--color-ink);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:750;line-height:1;text-decoration:none;white-space:nowrap}.route-link--primary{border-color:var(--color-accent);color:var(--color-accent-ink);background:var(--color-accent)}.site-footer{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-8);padding-block:var(--space-5);border-block-start:var(--rule-hairline) solid var(--color-rule);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--text-sm)}.site-footer p{width:100%;margin:0}.site-footer nav{display:flex;align-items:center;gap:var(--space-6)}a:focus-visible{outline:var(--rule-focus) solid var(--color-focus);outline-offset:var(--space-1)}@media(hover:hover)and (pointer:fine){.primary-nav a:hover,.site-footer a:hover,.resource-links a:hover{color:var(--color-accent-dark);text-decoration-color:var(--color-accent)}.wordmark:hover{color:var(--color-accent-dark)}.route-link:hover{border-color:var(--color-ink);color:var(--color-accent-ink);background:var(--color-ink)}.route-link--primary:hover{border-color:var(--color-accent-dark);background:var(--color-accent-dark)}}.primary-nav a:active,.site-footer a:active,.resource-links a:active,.wordmark:active{color:var(--color-accent-dark)}.route-link:active{border-color:var(--color-accent-dark);color:var(--color-accent-ink);background:var(--color-accent-dark)}a[aria-disabled=true]{border-color:var(--color-rule-soft);color:var(--color-muted);background:var(--color-paper-raised);cursor:not-allowed;opacity:.55;pointer-events:none}.skip-link:active{background:var(--color-accent-dark)}@media(min-width:40rem){.site-nav{flex-wrap:nowrap}.primary-nav{width:auto;margin-inline-start:auto}.model-table{display:table}.model-table thead{position:static;display:table-header-group;width:auto;height:auto;overflow:visible;clip:auto;clip-path:none;white-space:normal}.model-table tbody{display:table-row-group}.model-table tr{display:table-row;padding-block:0}.model-table th,.model-table td{display:table-cell;padding:var(--space-4) var(--space-4) var(--space-4) 0}.model-table [data-label]:before{content:none}.model-table th[scope=row],.model-table td:last-child{white-space:nowrap}.site-footer p{width:auto}.site-footer nav{margin-inline-start:auto}}@media(min-width:60rem){.hero{padding-block:var(--space-16) var(--space-24)}.chapter{padding-block:var(--space-20)}.chapter--models{padding-block-end:var(--space-24)}.chapter__body{margin-inline-start:calc(var(--space-16) + var(--space-5))}}@media(pointer:coarse){.primary-nav a,.resource-links a,.route-link,.site-footer a{min-height:var(--space-12)}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
assets/board-DQggw35t.js CHANGED
@@ -2,7 +2,7 @@ import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as k,p as H,a as O,b as M,
2
  <div class="hero-lead">
3
  <p class="figure"><b class="fig-num"${s?` data-tick="${Number(e.weekBest)}"`:""}>${s?m(e.weekBest):"—"}</b><span class="fig-unit">tok/giây</span></p>
4
  <p class="qualifier">${s?"Tốc độ nhanh nhất cộng đồng đo được bảy ngày qua — ẩn danh, ngay trong trình duyệt.":"Bảy ngày qua chưa có lượt gửi nào — bảng chờ số đo đầu tiên."}</p>
5
- <p class="hero-cta"><a class="cta-chip" href="/">Dịch &amp; gửi benchmark</a></p>
6
  </div>
7
  <div class="substats">
8
  <div class="substat"><b>${d(e.submissions)}</b><span>lượt gửi</span></div>
@@ -51,7 +51,7 @@ import"./modulepreload-polyfill-B5Qt9EMX.js";import{M as k,p as H,a as O,b as M,
51
  <p>Chưa có lượt gửi nào.</p>
52
  <p class="sub">Dịch xong một văn bản rồi bấm <b>Gửi benchmark</b> —
53
  thiết bị của bạn sẽ xuất hiện ở đây.</p>
54
- <a class="cta-chip" href="/">Dịch &amp; gửi benchmark</a>
55
  </div>`}function ee(e){return`<div class="state error">
56
  <p>Không tải được bảng xếp hạng <span class="detail">(${i(e)})</span>.</p>
57
  <button type="button" class="ghost" data-act="retry">Thử lại</button>
 
2
  <div class="hero-lead">
3
  <p class="figure"><b class="fig-num"${s?` data-tick="${Number(e.weekBest)}"`:""}>${s?m(e.weekBest):"—"}</b><span class="fig-unit">tok/giây</span></p>
4
  <p class="qualifier">${s?"Tốc độ nhanh nhất cộng đồng đo được bảy ngày qua — ẩn danh, ngay trong trình duyệt.":"Bảy ngày qua chưa có lượt gửi nào — bảng chờ số đo đầu tiên."}</p>
5
+ <p class="hero-cta"><a class="cta-chip" href="/index.html">Dịch &amp; gửi benchmark</a></p>
6
  </div>
7
  <div class="substats">
8
  <div class="substat"><b>${d(e.submissions)}</b><span>lượt gửi</span></div>
 
51
  <p>Chưa có lượt gửi nào.</p>
52
  <p class="sub">Dịch xong một văn bản rồi bấm <b>Gửi benchmark</b> —
53
  thiết bị của bạn sẽ xuất hiện ở đây.</p>
54
+ <a class="cta-chip" href="/index.html">Dịch &amp; gửi benchmark</a>
55
  </div>`}function ee(e){return`<div class="state error">
56
  <p>Không tải được bảng xếp hạng <span class="detail">(${i(e)})</span>.</p>
57
  <button type="button" class="ghost" data-act="retry">Thử lại</button>
assets/{main-B62RFlGb.js → main-7NfjLVBQ.js} RENAMED
The diff for this file is too large to render. See raw diff
 
board.html CHANGED
@@ -136,8 +136,8 @@
136
  <g class="qi qi-r2"><circle class="qi-halo" r="4"/><circle class="qi-core" r="1.9"/></g>
137
  <g class="qi qi-r3"><circle class="qi-halo" r="4"/><circle class="qi-core" r="1.9"/></g>
138
  </svg>
139
- <p class="mast-line"><a href="/">Mặc Hi 墨曦</a> · <span>benchmark cộng đồng</span> · <span>ẩn danh</span></p>
140
- <a class="sealink" href="/" aria-label="Về trang dịch Mặc Hi">
141
  <svg class="seal" viewBox="0 0 64 64" role="img" aria-label="Ấn 墨曦">
142
  <rect x="1.5" y="1.5" width="61" height="61" rx="7" fill="var(--seal)"/>
143
  <rect x="5" y="5" width="54" height="54" rx="4" fill="none" stroke="rgba(244,238,227,.55)" stroke-width="1.5"/>
@@ -328,7 +328,7 @@
328
  </svg>
329
  <p class="colophon">Chỉ số hiệu năng ẩn danh — văn bản dịch không bao giờ rời thiết bị
330
  của bạn. Số liệu tổng hợp phía máy chủ, làm mới 5 phút một lần.
331
- <a href="/">← Về trang dịch</a></p>
332
  </footer>
333
  </div>
334
  </body>
 
136
  <g class="qi qi-r2"><circle class="qi-halo" r="4"/><circle class="qi-core" r="1.9"/></g>
137
  <g class="qi qi-r3"><circle class="qi-halo" r="4"/><circle class="qi-core" r="1.9"/></g>
138
  </svg>
139
+ <p class="mast-line"><a href="/index.html">Mặc Hi 墨曦</a> · <span>benchmark cộng đồng</span> · <span>ẩn danh</span></p>
140
+ <a class="sealink" href="/index.html" aria-label="Về trang dịch Mặc Hi">
141
  <svg class="seal" viewBox="0 0 64 64" role="img" aria-label="Ấn 墨曦">
142
  <rect x="1.5" y="1.5" width="61" height="61" rx="7" fill="var(--seal)"/>
143
  <rect x="5" y="5" width="54" height="54" rx="4" fill="none" stroke="rgba(244,238,227,.55)" stroke-width="1.5"/>
 
328
  </svg>
329
  <p class="colophon">Chỉ số hiệu năng ẩn danh — văn bản dịch không bao giờ rời thiết bị
330
  của bạn. Số liệu tổng hợp phía máy chủ, làm mới 5 phút một lần.
331
+ <a href="/index.html">← Về trang dịch</a></p>
332
  </footer>
333
  </div>
334
  </body>
index.html CHANGED
@@ -67,7 +67,7 @@
67
  ]
68
  }
69
  </script>
70
- <script type="module" crossorigin src="/assets/main-B62RFlGb.js"></script>
71
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
72
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-DiAwoGSG.js">
73
  <link rel="modulepreload" crossorigin href="/assets/models-QsPq0tJ5.js">
 
67
  ]
68
  }
69
  </script>
70
+ <script type="module" crossorigin src="/assets/main-7NfjLVBQ.js"></script>
71
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
72
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-DiAwoGSG.js">
73
  <link rel="modulepreload" crossorigin href="/assets/models-QsPq0tJ5.js">
sw.js CHANGED
@@ -1,5 +1,5 @@
1
- // Service worker TEMPLATE — deploy_pages.mjs stamps c81a67a and
2
- // ["/","/about.html","/board.html","/manifest.webmanifest","/icon-192.png","/assets/main-B62RFlGb.js","/assets/modulepreload-polyfill-B5Qt9EMX.js","/assets/preload-helper-DiAwoGSG.js","/assets/models-QsPq0tJ5.js","/assets/main-BfS_mgCl.css","/assets/about-B7a9U0xY.css","/assets/board-DQggw35t.js","/assets/board-DFM1bO4t.css","/assets/playfair-vietnamese-Cabi7G8-.woff2","/assets/playfair-latin-BOwq7MWX.woff2"] and writes the result to dist/sw.js. Never served in dev.
3
  //
4
  // Cache layers (all same-origin GET only):
5
  // moxhi-shell-<build> app shell: precached index + hashed /assets/*
@@ -12,9 +12,9 @@
12
  // them in its own Cache Storage bucket (content-addressed names).
13
  /* global self, caches, fetch, location */
14
 
15
- const SHELL = 'moxhi-shell-c81a67a';
16
  const DATA = 'moxhi-data-v1';
17
- const PRECACHE = ["/","/about.html","/board.html","/manifest.webmanifest","/icon-192.png","/assets/main-B62RFlGb.js","/assets/modulepreload-polyfill-B5Qt9EMX.js","/assets/preload-helper-DiAwoGSG.js","/assets/models-QsPq0tJ5.js","/assets/main-BfS_mgCl.css","/assets/about-B7a9U0xY.css","/assets/board-DQggw35t.js","/assets/board-DFM1bO4t.css","/assets/playfair-vietnamese-Cabi7G8-.woff2","/assets/playfair-latin-BOwq7MWX.woff2"];
18
  // Model/data files the app fetches during startup — often BEFORE this SW has
19
  // claimed the page on its very first visit, so runtime caching would miss
20
  // them and the first offline reload would fail engine init. Precache them
@@ -46,6 +46,10 @@ self.addEventListener('install', (event) => {
46
  const res = await fetch(url, REVALIDATE);
47
  if (res.ok) await data.put(url, res);
48
  }));
 
 
 
 
49
  })());
50
  });
51
 
@@ -77,7 +81,19 @@ async function networkFirst(req, cacheName, fallbackUrl) {
77
  const cache = await caches.open(cacheName);
78
  try {
79
  // fetch(req, init) throws on navigate-mode Requests — pass the URL then.
80
- const res = await fetch(req.mode === 'navigate' ? req.url : req, REVALIDATE);
 
 
 
 
 
 
 
 
 
 
 
 
81
  if (res.ok) await cache.put(req, res.clone());
82
  return res;
83
  } catch (err) {
 
1
+ // Service worker TEMPLATE — deploy_pages.mjs stamps 3cf7c8d and
2
+ // ["/","/about.html","/board.html","/manifest.webmanifest","/icon-192.png","/assets/main-7NfjLVBQ.js","/assets/modulepreload-polyfill-B5Qt9EMX.js","/assets/preload-helper-DiAwoGSG.js","/assets/models-QsPq0tJ5.js","/assets/main-BfS_mgCl.css","/assets/about-BRw9WSHl.css","/assets/board-DQggw35t.js","/assets/board-DFM1bO4t.css","/assets/playfair-vietnamese-Cabi7G8-.woff2","/assets/playfair-latin-BOwq7MWX.woff2"] and writes the result to dist/sw.js. Never served in dev.
3
  //
4
  // Cache layers (all same-origin GET only):
5
  // moxhi-shell-<build> app shell: precached index + hashed /assets/*
 
12
  // them in its own Cache Storage bucket (content-addressed names).
13
  /* global self, caches, fetch, location */
14
 
15
+ const SHELL = 'moxhi-shell-3cf7c8d';
16
  const DATA = 'moxhi-data-v1';
17
+ const PRECACHE = ["/","/about.html","/board.html","/manifest.webmanifest","/icon-192.png","/assets/main-7NfjLVBQ.js","/assets/modulepreload-polyfill-B5Qt9EMX.js","/assets/preload-helper-DiAwoGSG.js","/assets/models-QsPq0tJ5.js","/assets/main-BfS_mgCl.css","/assets/about-BRw9WSHl.css","/assets/board-DQggw35t.js","/assets/board-DFM1bO4t.css","/assets/playfair-vietnamese-Cabi7G8-.woff2","/assets/playfair-latin-BOwq7MWX.woff2"];
18
  // Model/data files the app fetches during startup — often BEFORE this SW has
19
  // claimed the page on its very first visit, so runtime caching would miss
20
  // them and the first offline reload would fail engine init. Precache them
 
46
  const res = await fetch(url, REVALIDATE);
47
  if (res.ok) await data.put(url, res);
48
  }));
49
+ // Activate only after the all-or-nothing shell precache succeeds. This
50
+ // also lets clients escape an older worker whose HF root navigation was
51
+ // stranded by the host's / -> /index.html redirect.
52
+ await self.skipWaiting();
53
  })());
54
  });
55
 
 
81
  const cache = await caches.open(cacheName);
82
  try {
83
  // fetch(req, init) throws on navigate-mode Requests — pass the URL then.
84
+ let res = await fetch(req.mode === 'navigate' ? req.url : req, REVALIDATE);
85
+ // HF Static Spaces redirects / to /index.html. A service worker cannot
86
+ // return that redirected Response to a controlled navigation: Chrome
87
+ // rejects it with net::ERR_FAILED. Re-wrap the final 200 body so the
88
+ // response is no longer marked redirected before caching/returning it.
89
+ if (req.mode === 'navigate' && res.redirected) {
90
+ const body = await res.blob();
91
+ res = new Response(body, {
92
+ status: res.status,
93
+ statusText: res.statusText,
94
+ headers: res.headers,
95
+ });
96
+ }
97
  if (res.ok) await cache.put(req, res.clone());
98
  return res;
99
  } catch (err) {