Mercurial
comparison mrjunejune/test/snapshots/jrpg.snapshot @ 273:e02e2036ef84 default tip
add Layer 2 JRPG component system
Add reusable content and window modals, an isolated component sandbox, shared cyberpunk scroll areas, production-safe cache freshness, and server-rendered JRPG panel state.
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sat, 08 Aug 2026 02:08:08 -0700 |
| parents | 41a49c29a28f |
| children |
comparison
equal
deleted
inserted
replaced
| 272:41a49c29a28f | 273:e02e2036ef84 |
|---|---|
| 34 | 34 |
| 35 <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image" media="not ((max-width: 52rem) and (orientation: portrait))"> | 35 <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image" media="not ((max-width: 52rem) and (orientation: portrait))"> |
| 36 <link rel="preload" href="/public/jrpg/background-frame-mobile.webp" as="image" media="(max-width: 52rem) and (orientation: portrait)"> | 36 <link rel="preload" href="/public/jrpg/background-frame-mobile.webp" as="image" media="(max-width: 52rem) and (orientation: portrait)"> |
| 37 <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image"> | 37 <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image"> |
| 38 <link rel="stylesheet" href="/public/mjj-composer.css"> | 38 <link rel="stylesheet" href="/public/mjj-composer.css"> |
| 39 <link rel="stylesheet" href="/public/mjj-modal.css"> | |
| 39 <link rel="stylesheet" href="/jrpg/jrpg.css"> | 40 <link rel="stylesheet" href="/jrpg/jrpg.css"> |
| 40 <script type="module" src="/public/mjj-composer.js"></script> | 41 <script type="module" src="/public/mjj-composer.js"></script> |
| 42 <script type="module" src="/public/mjj-modal.js"></script> | |
| 41 <script type="module" src="/jrpg/jrpg.js"></script> | 43 <script type="module" src="/jrpg/jrpg.js"></script> |
| 42 </head> | 44 </head> |
| 43 <body class="jrpg-page"> | 45 <body class="jrpg-page"> |
| 44 <main class="jrpg-main"> | 46 <main class="jrpg-main"> |
| 45 <mjj-jrpg-shell class="jrpg-shell"> | 47 <mjj-jrpg-shell |
| 48 class="jrpg-shell" | |
| 49 data-initial-panel="resume" | |
| 50 > | |
| 46 <div class="jrpg-workspace"> | 51 <div class="jrpg-workspace"> |
| 47 <div class="jrpg-brand"> | 52 <div class="jrpg-brand"> |
| 48 <header> | 53 <header> |
| 49 <h1> | 54 <h1> |
| 50 <a href="/" data-zen-link-effect="none">MrJuneJune</a> | 55 <a href="/" data-zen-link-effect="none">MrJuneJune</a> |
| 76 <a href="/" aria-label="Close interface and return home"> | 81 <a href="/" aria-label="Close interface and return home"> |
| 77 <zen-icon name="close"></zen-icon> | 82 <zen-icon name="close"></zen-icon> |
| 78 </a> | 83 </a> |
| 79 </zen-button> | 84 </zen-button> |
| 80 </nav> | 85 </nav> |
| 81 <zen-dialog | 86 <mjj-window-modal |
| 82 class="jrpg-mobile-destination-owner" | 87 class="jrpg-mobile-destination-owner" |
| 83 data-mobile-destination-owner | 88 data-mobile-destination-owner |
| 84 > | 89 > |
| 85 <zen-button class="jrpg-mobile-menu-btn" appearance="plain" size="xs"> | 90 <zen-dialog> |
| 86 <button | 91 <zen-button class="jrpg-mobile-menu-btn" appearance="plain" size="xs"> |
| 87 type="button" | 92 <button |
| 88 data-zen-trigger | 93 type="button" |
| 89 data-mobile-menu-toggle | 94 data-zen-trigger |
| 90 aria-label="Open destination menu" | 95 data-mobile-menu-toggle |
| 96 aria-label="Open destination menu" | |
| 97 > | |
| 98 <zen-icon name="menu"></zen-icon> | |
| 99 </button> | |
| 100 </zen-button> | |
| 101 <dialog | |
| 102 class="jrpg-mobile-destination-dialog" | |
| 103 data-mobile-destination-dialog | |
| 91 > | 104 > |
| 92 <zen-icon name="menu"></zen-icon> | 105 <header class="jrpg-mobile-destination-header" data-modal-header> |
| 93 </button> | 106 <zen-button |
| 94 </zen-button> | 107 appearance="plain" |
| 95 <dialog | 108 size="sm" |
| 96 class="jrpg-mobile-destination-dialog" | 109 data-mobile-destination-back-owner |
| 97 data-mobile-destination-dialog | 110 hidden |
| 98 aria-labelledby="jrpg-mobile-destination-title" | |
| 99 > | |
| 100 <header class="jrpg-mobile-destination-header"> | |
| 101 <zen-button | |
| 102 appearance="plain" | |
| 103 size="sm" | |
| 104 data-mobile-destination-back-owner | |
| 105 hidden | |
| 106 > | |
| 107 <button | |
| 108 type="button" | |
| 109 data-mobile-destination-back | |
| 110 aria-label="Back to destination menu" | |
| 111 > | 111 > |
| 112 <zen-icon name="chevron-left"></zen-icon> | 112 <button |
| 113 Menu | 113 type="button" |
| 114 </button> | 114 data-mobile-destination-back |
| 115 </zen-button> | 115 aria-label="Back to destination menu" |
| 116 <h2 | 116 > |
| 117 id="jrpg-mobile-destination-title" | 117 <zen-icon name="chevron-left"></zen-icon> |
| 118 data-mobile-destination-title | 118 Menu |
| 119 >Menu</h2> | 119 </button> |
| 120 <zen-button appearance="plain" size="sm"> | 120 </zen-button> |
| 121 <button | 121 <h2 |
| 122 type="button" | 122 id="jrpg-mobile-destination-title" |
| 123 data-zen-close | 123 data-mobile-destination-title |
| 124 aria-label="Close destination menu" | 124 data-modal-title |
| 125 > | 125 >Menu</h2> |
| 126 <zen-icon name="close"></zen-icon> | 126 <zen-button appearance="plain" size="sm"> |
| 127 </button> | 127 <button |
| 128 </zen-button> | 128 type="button" |
| 129 </header> | 129 data-zen-close |
| 130 <div | 130 aria-label="Close destination menu" |
| 131 class="jrpg-mobile-destination-content" | 131 > |
| 132 data-mobile-destination-content | 132 <zen-icon name="close"></zen-icon> |
| 133 ></div> | 133 </button> |
| 134 </dialog> | 134 </zen-button> |
| 135 </zen-dialog> | 135 </header> |
| 136 <zen-scroll-area | |
| 137 class="jrpg-mobile-destination-content" | |
| 138 data-mobile-destination-content | |
| 139 data-modal-body | |
| 140 data-cyber-scroll | |
| 141 tabindex="0" | |
| 142 aria-label="Destination content" | |
| 143 ></zen-scroll-area> | |
| 144 </dialog> | |
| 145 </zen-dialog> | |
| 146 </mjj-window-modal> | |
| 136 <footer class="jrpg-frame-telemetry" aria-label="System telemetry"> | 147 <footer class="jrpg-frame-telemetry" aria-label="System telemetry"> |
| 137 <span aria-label="Temperature unavailable">N/A</span> | 148 <span aria-label="Temperature unavailable">N/A</span> |
| 138 <span data-frame-account aria-live="polite"><a href="/login?next=/jrpg">LOGIN</a></span> | 149 <span data-frame-account aria-live="polite"><a href="/login?next=/jrpg">LOGIN</a></span> |
| 139 <span data-frame-network aria-label="Status online">ONLINE</span> | 150 <span data-frame-network aria-label="Status online">ONLINE</span> |
| 140 <time data-frame-uptime aria-label="Uptime">00:00:00</time> | 151 <time data-frame-uptime aria-label="Uptime">00:00:00</time> |
| 176 </section> | 187 </section> |
| 177 | 188 |
| 178 <section class="jrpg-utility" aria-label="Selected destination"> | 189 <section class="jrpg-utility" aria-label="Selected destination"> |
| 179 <mjj-jrpg-preview data-selection="resume"> | 190 <mjj-jrpg-preview data-selection="resume"> |
| 180 <article class="jrpg-preview-panel" aria-live="polite"> | 191 <article class="jrpg-preview-panel" aria-live="polite"> |
| 181 <div class="jrpg-preview-content" data-preview-content> | 192 <div |
| 193 class="jrpg-preview-content" | |
| 194 data-preview-content | |
| 195 | |
| 196 > | |
| 182 <zen-heading size="xl"> | 197 <zen-heading size="xl"> |
| 183 <h2 data-preview-title>Resume</h2> | 198 <h2 data-preview-title>Resume</h2> |
| 184 </zen-heading> | 199 </zen-heading> |
| 185 <p data-preview-copy> | 200 <p data-preview-copy> |
| 186 Member of Technical Staff and engineering leader with 10+ years building AI agent platforms and production systems. | 201 Member of Technical Staff and engineering leader with 10+ years building AI agent platforms and production systems across Microsoft, Meta, Google, and growth-stage companies. |
| 187 </p> | 202 </p> |
| 188 <ul class="jrpg-work-showcase" data-work-showcase> | 203 <ul class="jrpg-work-showcase" data-work-showcase><li><a href="/resume" data-resume-modal><span>Full resume</span><small>Career dossier</small></a></li><li><a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/"><span>Copilot Tasks</span><small>Agentic execution</small></a></li></ul> |
| 189 <li> | 204 <mjj-content-modal data-detail-modal-owner> |
| 190 <a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/"> | 205 <zen-dialog class="jrpg-preview-dialog"> |
| 191 <span>Copilot Tasks</span> | 206 <zen-button appearance="plain" size="xs" data-dialog-trigger-owner hidden> |
| 192 <small>Agentic execution</small> | 207 <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> |
| 193 </a> | 208 </zen-button> |
| 194 </li> | 209 <dialog class="jrpg-detail-dialog"> |
| 195 <li> | 210 <header class="jrpg-dialog-heading" data-modal-header> |
| 196 <a href="https://www.cio.com/article/3977098/microsoft-doubles-down-on-multi-model-ai-as-it-builds-a-copilot-super-app.html"> | 211 <div data-modal-heading> |
| 197 <span>Copilot SuperApp</span> | 212 <p data-modal-kicker>DESTINATION DATA</p> |
| 198 <small>AI platform</small> | 213 <h2 |
| 199 </a> | 214 id="jrpg-dialog-title" |
| 200 </li> | 215 data-dialog-title |
| 201 </ul> | 216 data-modal-title |
| 202 <zen-dialog class="jrpg-preview-dialog"> | 217 >Resume</h2> |
| 203 <zen-button appearance="plain" size="xs" data-dialog-trigger-owner hidden> | 218 </div> |
| 204 <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> | |
| 205 </zen-button> | |
| 206 <dialog class="jrpg-detail-dialog" aria-labelledby="jrpg-dialog-title"> | |
| 207 <div class="jrpg-dialog-heading"> | |
| 208 <p>DESTINATION DATA</p> | |
| 209 <div class="jrpg-dialog-heading-actions"> | 219 <div class="jrpg-dialog-heading-actions"> |
| 210 <zen-button appearance="plain" size="md"> | 220 <zen-button |
| 211 <a href="/resume" data-preview-link> | 221 appearance="plain" |
| 212 Open page | 222 size="sm" |
| 213 <zen-icon name="external"></zen-icon> | 223 data-resume-download |
| 224 > | |
| 225 <a href="/public/resume.pdf"> | |
| 226 Download PDF | |
| 227 <zen-icon name="download"></zen-icon> | |
| 214 </a> | 228 </a> |
| 215 </zen-button> | 229 </zen-button> |
| 216 <zen-button appearance="plain" size="md"> | 230 <zen-button appearance="plain" size="sm"> |
| 217 <button type="button" data-zen-close aria-label="Close destination details"> | 231 <button type="button" data-zen-close aria-label="Close destination details"> |
| 218 <zen-icon name="close"></zen-icon> | 232 <zen-icon name="close"></zen-icon> |
| 219 </button> | 233 </button> |
| 220 </zen-button> | 234 </zen-button> |
| 221 </div> | 235 </div> |
| 222 </div> | 236 </header> |
| 223 <h2 id="jrpg-dialog-title" data-dialog-title>Resume</h2> | 237 <zen-scroll-area |
| 224 <p data-dialog-copy>Experience, projects, and the systems I have helped build.</p> | 238 class="jrpg-detail-body" |
| 239 data-modal-body | |
| 240 data-cyber-scroll | |
| 241 tabindex="0" | |
| 242 aria-label="Destination details" | |
| 243 > | |
| 244 <div class="jrpg-detail-content" data-modal-article> | |
| 245 <p data-dialog-copy>Experience, projects, and the systems I have helped build.</p> | |
| 225 <section | 246 <section |
| 226 class="jrpg-resume-dossier" | 247 class="jrpg-resume-dossier" |
| 227 data-resume-dossier | 248 data-resume-dossier |
| 228 aria-label="Resume dossier" | 249 aria-label="Resume dossier" |
| 229 > | 250 > |
| 256 <article> | 277 <article> |
| 257 <p data-tool-status>Select a tool to inspect.</p> | 278 <p data-tool-status>Select a tool to inspect.</p> |
| 258 <div data-tool-content></div> | 279 <div data-tool-content></div> |
| 259 </article> | 280 </article> |
| 260 </section> | 281 </section> |
| 261 <div class="jrpg-dialog-actions" data-dialog-actions> | 282 </div> |
| 262 <zen-button appearance="plain" size="lg" data-resume-download> | 283 </zen-scroll-area> |
| 263 <a href="/public/resume.pdf"> | 284 </dialog> |
| 264 Download PDF | 285 </zen-dialog> |
| 265 <zen-icon name="download"></zen-icon> | 286 </mjj-content-modal> |
| 266 </a> | |
| 267 </zen-button> | |
| 268 </div> | |
| 269 </dialog> | |
| 270 </zen-dialog> | |
| 271 </div> | 287 </div> |
| 272 <mjj-conversation-archive hidden aria-label="Conversations"> | 288 <mjj-conversation-archive |
| 289 hidden | |
| 290 aria-label="Conversations" | |
| 291 > | |
| 273 <div class="jrpg-archive-heading"> | 292 <div class="jrpg-archive-heading"> |
| 274 <h2>Archive</h2> | 293 <h2>Archive</h2> |
| 275 <zen-button appearance="plain" size="xs"> | 294 <zen-button appearance="plain" size="xs"> |
| 276 <button type="button" data-archive-close aria-label="Close conversations"> | 295 <button type="button" data-archive-close aria-label="Close conversations"> |
| 277 <zen-icon name="close"></zen-icon> | 296 <zen-icon name="close"></zen-icon> |
| 290 </ol> | 309 </ol> |
| 291 <zen-button appearance="plain" size="sm" data-archive-load-more-owner hidden> | 310 <zen-button appearance="plain" size="sm" data-archive-load-more-owner hidden> |
| 292 <button type="button" data-archive-load-more>Load more</button> | 311 <button type="button" data-archive-load-more>Load more</button> |
| 293 </zen-button> | 312 </zen-button> |
| 294 <p class="jrpg-archive-status" data-archive-status aria-live="polite">Loading conversations...</p> | 313 <p class="jrpg-archive-status" data-archive-status aria-live="polite">Loading conversations...</p> |
| 295 <dialog | 314 <mjj-content-modal data-archive-delete-owner> |
| 296 class="jrpg-archive-dialog" | 315 <zen-dialog> |
| 297 data-archive-delete-dialog | 316 <zen-button appearance="plain" size="xs" hidden> |
| 298 aria-labelledby="archive-delete-title" | 317 <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> |
| 299 aria-modal="true" | 318 </zen-button> |
| 300 > | 319 <dialog |
| 301 <p id="archive-delete-title" class="jrpg-archive-dialog-title">Delete this conversation?</p> | 320 class="jrpg-archive-dialog" |
| 302 <p data-archive-delete-name class="jrpg-archive-dialog-subtitle"></p> | 321 data-archive-delete-dialog |
| 303 <div class="jrpg-archive-dialog-actions"> | 322 > |
| 304 <zen-button appearance="plain" size="md"> | 323 <header data-modal-header> |
| 305 <button type="button" data-archive-delete-cancel>Cancel</button> | 324 <h2 |
| 306 </zen-button> | 325 id="archive-delete-title" |
| 307 <zen-button appearance="plain" size="md"> | 326 class="jrpg-archive-dialog-title" |
| 308 <button type="button" data-archive-delete-confirm>Delete</button> | 327 data-modal-title |
| 309 </zen-button> | 328 >Delete this conversation?</h2> |
| 310 </div> | 329 </header> |
| 311 </dialog> | 330 <div data-modal-body> |
| 312 <dialog | 331 <div data-modal-article> |
| 313 class="jrpg-archive-dialog" | 332 <p data-archive-delete-name class="jrpg-archive-dialog-subtitle"></p> |
| 314 data-archive-rename-dialog | 333 </div> |
| 315 aria-labelledby="archive-rename-title" | 334 </div> |
| 316 aria-modal="true" | 335 <footer class="jrpg-archive-dialog-actions" data-modal-footer> |
| 317 > | 336 <zen-button appearance="plain" size="md"> |
| 318 <p id="archive-rename-title" class="jrpg-archive-dialog-title">Rename conversation</p> | 337 <button type="button" data-archive-delete-cancel>Cancel</button> |
| 319 <form data-archive-rename-form novalidate> | 338 </zen-button> |
| 320 <zen-field appearance="plain" size="md"> | 339 <zen-button appearance="plain" size="md"> |
| 321 <label for="archive-rename-input">New title</label> | 340 <button type="button" data-archive-delete-confirm>Delete</button> |
| 322 <input | 341 </zen-button> |
| 323 id="archive-rename-input" | 342 </footer> |
| 324 data-archive-rename-input | 343 </dialog> |
| 325 type="text" | 344 </zen-dialog> |
| 326 maxlength="200" | 345 </mjj-content-modal> |
| 327 required | 346 <mjj-window-modal data-archive-rename-owner> |
| 328 autocomplete="off" | 347 <zen-dialog> |
| 348 <zen-button appearance="plain" size="xs" hidden> | |
| 349 <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> | |
| 350 </zen-button> | |
| 351 <dialog | |
| 352 class="jrpg-archive-dialog" | |
| 353 data-archive-rename-dialog | |
| 354 > | |
| 355 <header data-modal-header> | |
| 356 <h2 | |
| 357 id="archive-rename-title" | |
| 358 class="jrpg-archive-dialog-title" | |
| 359 data-modal-title | |
| 360 >Rename conversation</h2> | |
| 361 </header> | |
| 362 <form | |
| 363 id="archive-rename-form" | |
| 364 data-modal-body | |
| 365 data-archive-rename-form | |
| 366 novalidate | |
| 329 > | 367 > |
| 330 </zen-field> | 368 <zen-field appearance="plain" size="md"> |
| 331 <div class="jrpg-archive-dialog-actions"> | 369 <label for="archive-rename-input">New title</label> |
| 370 <input | |
| 371 id="archive-rename-input" | |
| 372 data-archive-rename-input | |
| 373 type="text" | |
| 374 maxlength="200" | |
| 375 required | |
| 376 autocomplete="off" | |
| 377 > | |
| 378 </zen-field> | |
| 379 </form> | |
| 380 <footer class="jrpg-archive-dialog-actions" data-modal-footer> | |
| 332 <zen-button appearance="plain" size="md"> | 381 <zen-button appearance="plain" size="md"> |
| 333 <button type="button" data-archive-rename-cancel>Cancel</button> | 382 <button type="button" data-archive-rename-cancel>Cancel</button> |
| 334 </zen-button> | 383 </zen-button> |
| 335 <zen-button appearance="plain" size="md"> | 384 <zen-button appearance="plain" size="md"> |
| 336 <button type="submit">Save</button> | 385 <button type="submit" form="archive-rename-form">Save</button> |
| 337 </zen-button> | 386 </zen-button> |
| 338 </div> | 387 </footer> |
| 339 </form> | 388 </dialog> |
| 340 </dialog> | 389 </zen-dialog> |
| 390 </mjj-window-modal> | |
| 341 </mjj-conversation-archive> | 391 </mjj-conversation-archive> |
| 342 </article> | 392 </article> |
| 343 </mjj-jrpg-preview> | 393 </mjj-jrpg-preview> |
| 344 </section> | 394 </section> |
| 345 | 395 |
| 433 </li> | 483 </li> |
| 434 </ul> | 484 </ul> |
| 435 </nav> | 485 </nav> |
| 436 </mjj-jrpg-menu> | 486 </mjj-jrpg-menu> |
| 437 | 487 |
| 438 <zen-dialog class="jrpg-login-dialog-owner" data-login-dialog-owner> | 488 <mjj-window-modal class="jrpg-login-dialog-owner" data-login-dialog-owner> |
| 439 <zen-button appearance="plain" size="md" hidden> | 489 <zen-dialog> |
| 440 <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> | 490 <zen-button appearance="plain" size="md" hidden> |
| 441 </zen-button> | 491 <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> |
| 442 <dialog | 492 </zen-button> |
| 443 class="jrpg-login-dialog" | 493 <dialog |
| 444 data-login-dialog | 494 class="jrpg-login-dialog" |
| 445 aria-labelledby="jrpg-login-title" | 495 data-login-dialog |
| 446 aria-modal="true" | 496 > |
| 447 > | 497 <header class="jrpg-login-dialog-header" data-modal-header> |
| 448 <div class="jrpg-login-dialog-header"> | 498 <h2 id="jrpg-login-title" data-modal-title>SIGN IN</h2> |
| 449 <h2 id="jrpg-login-title">SIGN IN</h2> | 499 <zen-button appearance="plain" size="md"> |
| 450 <zen-button appearance="plain" size="md"> | 500 <button type="button" data-zen-close aria-label="Close sign-in dialog"> |
| 451 <button type="button" data-zen-close aria-label="Close sign-in dialog"> | 501 <zen-icon name="close"></zen-icon> |
| 452 <zen-icon name="close"></zen-icon> | 502 </button> |
| 453 </button> | 503 </zen-button> |
| 454 </zen-button> | 504 </header> |
| 455 </div> | 505 <form |
| 456 <div role="alert" data-login-error aria-live="assertive" hidden></div> | 506 id="jrpg-login-form" |
| 457 <form data-login-form novalidate> | 507 data-login-form |
| 508 data-modal-body | |
| 509 novalidate | |
| 510 > | |
| 511 <div role="alert" data-login-error aria-live="assertive" hidden></div> | |
| 458 <zen-field appearance="plain" size="md"> | 512 <zen-field appearance="plain" size="md"> |
| 459 <label for="jrpg-login-username">Username</label> | 513 <label for="jrpg-login-username">Username</label> |
| 460 <input | 514 <input |
| 461 id="jrpg-login-username" | 515 id="jrpg-login-username" |
| 462 name="username" | 516 name="username" |
| 478 required | 532 required |
| 479 minlength="12" | 533 minlength="12" |
| 480 maxlength="1024" | 534 maxlength="1024" |
| 481 > | 535 > |
| 482 </zen-field> | 536 </zen-field> |
| 483 <div class="jrpg-login-dialog-actions"> | 537 </form> |
| 538 <footer class="jrpg-login-dialog-actions" data-modal-footer> | |
| 484 <zen-button appearance="plain" size="md"> | 539 <zen-button appearance="plain" size="md"> |
| 485 <button type="button" data-login-cancel data-zen-close>Cancel</button> | 540 <button type="button" data-login-cancel data-zen-close>Cancel</button> |
| 486 </zen-button> | 541 </zen-button> |
| 487 <zen-button appearance="plain" size="md"> | 542 <zen-button appearance="plain" size="md"> |
| 488 <button type="submit" data-login-submit>Sign in</button> | 543 <button |
| 489 </zen-button> | 544 type="submit" |
| 490 </div> | 545 form="jrpg-login-form" |
| 491 </form> | 546 data-login-submit |
| 492 </dialog> | 547 >Sign in</button> |
| 493 </zen-dialog> | 548 </zen-button> |
| 549 </footer> | |
| 550 </dialog> | |
| 551 </zen-dialog> | |
| 552 </mjj-window-modal> | |
| 494 </div> | 553 </div> |
| 495 </mjj-jrpg-shell> | 554 </mjj-jrpg-shell> |
| 496 </main> | 555 </main> |
| 497 </body> | 556 </body> |
| 498 </html> | 557 </html> |