Initial commit; adaptation from mascarpone

This commit is contained in:
Robert Perce 2026-05-30 12:15:04 -05:00
commit 3d45ec4b0a
36 changed files with 5877 additions and 0 deletions

5
static/alpinejs.min.js vendored Normal file

File diff suppressed because one or more lines are too long

48
static/home.css Normal file
View file

@ -0,0 +1,48 @@
#new-task,
#bulk-complete {
border: 1px solid var(--line-color);
border-radius: 100vh;
padding: 0.5em 1em;
display: flex;
flex-direction: row;
align-items: flex-end;
justify-content: center;
flex-wrap: wrap;
gap: 1em;
margin-bottom: 1em;
button {
padding: 0.2em 1em;
}
.error {
width: 100%;
}
}
#regex {
font-family: monospace;
}
.table {
display: grid;
grid-template-columns: auto repeat(3, max-content);
gap: 0.5rem;
align-items: center;
h1 {
margin-top: 1rem;
grid-column: 1 / -1;
font-weight: bold;
}
.th {
font-size: x-small;
font-weight: bold;
font-variant-caps: small-caps;
}
.th.span {
grid-column: 3 / -1;
}
}

View file

@ -0,0 +1 @@
(function(){var f;var o="hx-target-";function g(e,r){return e.substring(0,r.length)===r}function s(e,r){if(!e||!r)return null;var t=r.toString();var s=[t,t.substring(0,2)+"*",t.substring(0,2)+"x",t.substring(0,1)+"*",t.substring(0,1)+"x",t.substring(0,1)+"**",t.substring(0,1)+"xx","*","x","***","xxx"];if(g(t,"4")||g(t,"5")){s.push("error")}for(var n=0;n<s.length;n++){var i=o+s[n];var a=f.getClosestAttributeValue(e,i);if(a){if(a==="this"){return f.findThisElement(e,i)}else{return f.querySelectorExt(e,a)}}}return null}function n(e){if(e.detail.isError){if(htmx.config.responseTargetUnsetsError){e.detail.isError=false}}else if(htmx.config.responseTargetSetsError){e.detail.isError=true}}htmx.defineExtension("response-targets",{init:function(e){f=e;if(htmx.config.responseTargetUnsetsError===undefined){htmx.config.responseTargetUnsetsError=true}if(htmx.config.responseTargetSetsError===undefined){htmx.config.responseTargetSetsError=false}if(htmx.config.responseTargetPrefersExisting===undefined){htmx.config.responseTargetPrefersExisting=false}if(htmx.config.responseTargetPrefersRetargetHeader===undefined){htmx.config.responseTargetPrefersRetargetHeader=true}},onEvent:function(e,r){if(e==="htmx:beforeSwap"&&r.detail.xhr&&r.detail.xhr.status!==200){if(r.detail.target){if(htmx.config.responseTargetPrefersExisting){r.detail.shouldSwap=true;n(r);return true}if(htmx.config.responseTargetPrefersRetargetHeader&&r.detail.xhr.getAllResponseHeaders().match(/HX-Retarget:/i)){r.detail.shouldSwap=true;n(r);return true}}if(!r.detail.requestConfig){return true}var t=s(r.detail.requestConfig.elt,r.detail.xhr.status);if(t){n(r);r.detail.shouldSwap=true;r.detail.target=t}return true}}})})();

1
static/htmx.min.js vendored Normal file

File diff suppressed because one or more lines are too long

60
static/index.css Normal file
View file

@ -0,0 +1,60 @@
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{box-sizing:border-box;margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}
:root {
--color1: #c6ebbe;
--color2: #a9dbb8;
--color3: #7ca5b8;
--color4: #38369a;
--color5: #020887;
--main-bg-color: var(--color1);
--line-color: var(--color3);
--link-color: var(--color5);
--input-border-radius: 10px;
}
body {
width: 100%;
height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
padding: 1em;
background-color: var(--main-bg-color);
}
main {
display: flex;
flex-direction: column;
flex: 1;
overflow-y: auto;
max-width: 100%;
}
a, a:visited {
color: var(--link-color);
text-decoration: underline dotted;
}
[x-cloak] { display: none !important; }
button,input,select {
border-radius: var(--input-border-radius);
padding-left: var(--input-border-radius);
padding-right: var(--input-border-radius);
border-color: var(--color2);
}
input:focus {
outline: 3px solid var(--color4);
}
form label {
padding-left: var(--input-border-radius);
}
.col {
display: flex;
flex-direction: column;
}

20
static/login.css Normal file
View file

@ -0,0 +1,20 @@
body {
padding-top: 2em;
font-family: sans-serif;
}
form {
display: flex;
flex-direction: column;
}
input {
margin-bottom: 1.5em;
}
h1 {
font-size: x-large;
font-weight: bold;
margin-bottom: 2em;
}

34
static/task.css Normal file
View file

@ -0,0 +1,34 @@
h1 {
font-size: x-large;
font-weight: bold;
margin: 1em 0;
}
form {
border: 1px solid var(--line-color);
border-radius: 100vh;
padding: 0.5em 1em;
display: flex;
flex-direction: row;
align-items: flex-end;
gap: 1em;
}
#completions {
margin-top: 1em;
display: flex;
flex-direction: column;
gap: 0.5em;
}
h1 input {
border: none;
border-bottom: 2px solid var(--line-color);
border-radius: 0;
background-color: inherit;
font-size: x-large;
}
h1 input:focus {
outline: none;
}