╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ index.html ───────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭ find file ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╮ ╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │ │ │http│ ssh │ │ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╯ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
49 body:has(#grid .scroll:not([data-scroll-direction="horiz"])) { 50 height: 100vh; 51 overflow: hidden; 52 } 53 54 /* each web-native Scroll widget: a box positioned over its viewport 55 (left/top/width/height and per-axis overflow come inline, the latter 56 from the widget's scroll direction) */ 57 .scroll { 58 position: absolute; 59 /* scrollbars are hidden; panes scroll via wheel/trackpad and via 60 scrollIntoView on keyboard focus, so a visible bar would only 61 cover content. (Firefox / WebKit respectively.) */ 62 scrollbar-width: none; 63 } 64 .scroll::-webkit-scrollbar { 65 display: none; 66 } 67 68 /* render each colored cell-run as an inline-block to prevent 69 horizontal seams between rows of the block art. */ 70 #grid span { 71 display: inline-block; 72 vertical-align: top; 73 } 74 75 /* a double-width rune pinned to its two grid cells so its advance 76 width can't shift the rest of the row. */ 77 #grid .w2 { 78 width: 2ch; 79 overflow: hidden; 80 } 81 82 /* native controls are positioned over the matching TUI cells. */ 83 .page input, 84 .page textarea, 85 .page button { 86 position: absolute; 87 font: inherit; 88 padding: 0; 89 margin: 0; 90 outline: none; 91 box-sizing: border-box; 92 } 93 94 .page input, 95 .page textarea { 96 color: inherit; 97 background: transparent; 98 border: none; 99 } 100 101 /* the TUI border cells own the frame, so the textarea can't be 102 drag-resized past them */ 103 .page textarea { 104 resize: none; 105 overflow-y: auto; 106 } 107 108 /* the TUI cells under the button render the border + label; 109 the native button stays transparent so they show through 110 and just owns the click + form-submit behavior. */ 111 .page button { 112 background: transparent; 113 color: transparent; 114 border: none; 115 cursor: pointer; 116 } 117 118 #grid a { 119 color: inherit; 120 text-decoration: none; 121 } 122 123 #grid .clickable { 124 cursor: pointer; 125 } 126 127 #grid a.cell-link:hover { 128 text-decoration: underline; 129 } 130 </style> 131 </head> 132 <body> 133 <div class="page"> 134 <div id="grid">{{{ HAXY_HTML }}}</div> 135 </div> 136 <script id="page-data" type="application/json">{{{ HAXY_JSON }}}</script> 137 <script src="/script.js"></script> 138 </body> 139 </html> 140