dev #2
@ -8,18 +8,22 @@
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--ground: #E9EBEC;
|
||||
--card: #FFFFFF;
|
||||
--ink: #14181A;
|
||||
--muted: #6C767C;
|
||||
--rule: #D3D8DA;
|
||||
--signal: #14684C;
|
||||
--signal-soft: #E2F0EA;
|
||||
--alert: #9B3520;
|
||||
@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap');
|
||||
|
||||
--sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
:root {
|
||||
|
||||
--ground: hsl(210, 18%, 8%);
|
||||
--card: hsl(210, 16%, 13%);
|
||||
--ink: hsl(30, 30%, 96%);
|
||||
--muted: hsl(215, 12%, 68%);
|
||||
--rule: hsl(210, 12%, 24%);
|
||||
--signal: hsl(28, 95%, 58%);
|
||||
--signal-soft: hsl(28, 70%, 22%);
|
||||
--alert: hsl(14, 90%, 58%);
|
||||
|
||||
--font-ui: 'Outfit', system-ui, -apple-system, 'Segoe UI', sans-serif;
|
||||
--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
|
||||
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
@ -29,9 +33,9 @@ body {
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-family: var(--font-ui);
|
||||
background: var(--ground);
|
||||
color: var(--ink);
|
||||
font-family: var(--sans);
|
||||
font-size: 15px;
|
||||
line-height: 1.5;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
@ -140,7 +144,7 @@ button, .button {
|
||||
border: none;
|
||||
background: var(--ink);
|
||||
color: var(--ground);
|
||||
font-family: var(--sans);
|
||||
font-family: var(--font-ui);
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
text-decoration: none;
|
||||
@ -271,9 +275,9 @@ button.quiet:hover { background: none; color: var(--ink); }
|
||||
|
||||
footer {
|
||||
margin-top: 28px;
|
||||
font-family: var(--mono);
|
||||
font-family: var(--font-ui);
|
||||
font-size: 11px;
|
||||
color: var(--muted);
|
||||
color: var(--ink);
|
||||
}
|
||||
|
||||
body > footer {
|
||||
@ -413,7 +417,7 @@ function render() {
|
||||
}
|
||||
|
||||
if (!data.tickets.length) {
|
||||
html += `<div class="empty"><p>Nothing closed yet. Tickets appear here within a minute of being closed.</p></div>`;
|
||||
html += `<div class="empty"><p>Nothing closed yet.</p></div>`;
|
||||
} else {
|
||||
html += '<div class="feed">' + data.tickets.map(renderTicket).join('') + '</div>';
|
||||
}
|
||||
@ -469,8 +473,9 @@ setInterval(load, 5000); // pull fresh state from the server
|
||||
setInterval(render, 20000); // re-age the rails between pulls
|
||||
</script>
|
||||
<footer>
|
||||
<p>© 2026 Isaac Godin. All rights reserved.</p>
|
||||
<p>Design and Credits: <a href="https://www.mccs.me.edu/">Isaac Godin</a></p>
|
||||
<p>© 2026 <span style="color: hsl(28, 95%, 58%);">Isaac Godin</span>. All rights reserved.</p>
|
||||
<p>Design and Credits: <span style="color: hsl(28, 95%, 58%);">Isaac Godin</span></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@ -58,7 +58,7 @@ function pollForToken(deviceCode, interval, expiresIn) {
|
||||
const timer = setInterval(async () => {
|
||||
if (Date.now() > deadline) {
|
||||
clearInterval(timer);
|
||||
reject(new Error('The authorization code expired. Connect again.'));
|
||||
reject(new Error('Expired try again.'));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -239,4 +239,4 @@ app.post('/api/check', async (req, res) => {
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Open http://localhost:${PORT}`);
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user