1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>devicals</title> 7 <link rel="icon" href="assets/favicon.ico"> 8 <link rel="stylesheet" href="css/style.css"> 9
9<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2" crossorigin="anonymous"></script>
9 10
10<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/11.1.1/marked.min.js" crossorigin="anonymous"></script>
10 11
11<script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js" crossorigin="anonymous"></script>
11 12 <style> 13 .admin-dashboard-btn { 14 display: none; 15 padding: 12px 20px; 16 background: var(--bg-hover); 17 border-top: 1px solid var(--border); 18 color: var(--accent); 19 font-family: var(--font-ui); 20 font-size: 13px; 21 font-weight: bold; 22 cursor: pointer; 23 text-transform: lowercase; 24 letter-spacing: 1px; 25 justify-content: space-between; 26 align-items: center; 27 } 28 .admin-dashboard-btn:hover { background: var(--bg-workspace); } 29 body.is-admin .admin-dashboard-btn { display: flex; } 30 31 #announcement-container { 32 position: fixed; 33 bottom: 24px; 34 right: 24px; 35 display: flex; 36 flex-direction: column; 37 gap: 12px; 38 z-index: 1500; 39 pointer-events: none; 40 } 41 42 .announcement-toast { 43 width: 320px; 44 background: var(--bg-sidebar); 45 border: 1px solid var(--accent); 46 padding: 16px; 47 display: flex; 48 flex-direction: column; 49 gap: 10px; 50 box-shadow: 0 10px 30px rgba(0,0,0,0.5); 51 pointer-events: auto; 52 position: relative; 53 overflow: hidden; 54 } 55 .announcement-toast a { 56 color: var(--accent) !important; 57 text-decoration: underline; 58 } 59 .announcement-toast.warning-toast { 60 border-color: var(--destructive); 61 } 62 </style> 63</head> 64<body> 65 <style id="custom-css-block"></style> 66 67 <div class="app-layout"> 68 <div class="sidebar left-sidebar"> 69 <div id="nav-tree" class="nav-tree"></div> 70 71 <div class="admin-dashboard-btn" onclick="window.location.hash='admin'"> 72 <span>admin dashboard</span> 73 <span>></span> 74 </div> 75 76 <div class="sidebar-bottom-actions"> 77 <div class="action-btn" id="auth-trigger" title="User Profile"> 78 <svg viewBox="0 0 24 24" width="18" height="18" stroke="currentColor" stroke-width="2" fill="none"><circle cx="12" cy="8" r="5"></circle><path d="M20 21a8 8 0 1 0-16 0"></path></svg> 79 </div> 80 <div class="action-btn" id="settings-trigger" title="Settings"> 81 <svg viewBox="0 0 24 24" width="18" height="18" stroke="currentColor" stroke-width="2" fill="none"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg> 82 </div> 83 </div> 84 </div> 85 86 <div class="main-content"> 87 <div class="top-bar"> 88 <div id="breadcrumbs" class="breadcrumbs"></div> 89 </div> 90 <div id="workspace" style="flex: 1; display: flex; flex-direction: column; overflow: hidden; position: relative;"> 91 <iframe id="iframe-workspace" class="workspace-frame" style="display:none;"></iframe> 92 <div id="page-content" class="page-content markdown-body" style="display:none;"></div> 93 </div> 94 </div> 95 </div> 96 97 <div id="announcement-container"></div> 98 99 <div id="auth-modal" class="modal"> 100 <div class="modal-box"> 101 <div class="modal-title">account center</div> 102 <div id="auth-content"></div> 103 <button class="modal-close" onclick="document.getElementById('auth-modal').style.display='none'">close</button> 104 </div> 105 </div> 106 107 <div id="settings-modal" class="modal"> 108 <div class="modal-box"> 109 <div class="modal-title">settings</div> 110 <div class="settings-group"> 111 <label>theme options</label> 112 <button id="toggle-dark-mode" class="ui-btn">toggle dark/light mode</button> 113 <select id="theme-selector" class="ui-input"> 114 <option value="primary">primary (default warm)</option> 115 <option value="obsidian">obsidian dark</option> 116 </select> 117 </div> 118 <div class="settings-group"> 119 <label>background effect</label> 120 <select id="bg-effect-selector" class="ui-input"> 121 <option value="particles">network</option> 122 <option value="matrix">matrix</option> 123 <option value="stars">stars</option> 124 <option value="none">nothing</option> 125 </select> 126 </div> 127 <div class="settings-group"> 128 <label>custom css</label>
129 <textarea id="custom-css-input" class="ui-input" rows="4" placeholder="enter custom css rules..."></textarea> 130 <button id="save-css" class="ui-btn">apply custom css</button> 131 </div> 132 <button class="modal-close" onclick="document.getElementById('settings-modal').style.display='none'">close</button> 133 </div> 134 </div> 135 136 <div id="gui-modal" class="modal"> 137 <div class="modal-box"> 138 <div class="modal-title" id="gui-title">notification</div> 139 <div id="gui-msg" class="gui-msg-box"></div> 140 <button class="ui-btn" onclick="closeGuiModal()">ok</button> 141 </div> 142 </div> 143 144 <div id="gui-confirm-modal" class="modal"> 145 <div class="modal-box"> 146 <div class="modal-title" id="gui-confirm-title">confirm action</div> 147 <div id="gui-confirm-msg" style="font-size:12px; margin-bottom:16px;"></div> 148 <div style="display:flex; gap:8px;"> 149 <button class="ui-btn" id="gui-confirm-yes">yes</button> 150 <button class="ui-btn" id="gui-confirm-no" onclick="closeGuiConfirmModal()">cancel</button> 151 </div> 152 </div> 153 </div> 154 155 <div id="gui-prompt-modal" class="modal"> 156 <div class="modal-box"> 157 <div class="modal-title" id="gui-prompt-title">input required</div> 158 <div id="gui-prompt-msg" style="font-size:12px; margin-bottom:10px;"></div> 159 <input type="text" id="gui-prompt-input" class="ui-input"> 160 <div style="display:flex; gap:8px;"> 161 <button class="ui-btn" id="gui-prompt-ok">ok</button> 162 <button class="ui-btn" onclick="closeGuiPromptModal()">cancel</button> 163 </div> 164 </div> 165 </div> 166 167 <div id="gui-form-modal" class="modal"> 168 <div class="modal-box"> 169 <div class="modal-title" id="gui-form-title">input required</div> 170 <div id="gui-form-fields"></div> 171 <div style="display:flex; gap:8px;"> 172 <button class="ui-btn" id="gui-form-ok">save</button> 173 <button class="ui-btn" onclick="closeGuiFormModal()">cancel</button> 174 </div> 175 </div> 176 </div> 177 178
178<script src="js/bg-canvas.js"></script>
178 179
179<script src="js/app.js"></script>
179 180
180<script src="js/admin.js"></script>
180 181
181<script src="js/spotify.js"></script>
181 182</body> 183</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.