(defcomp ~base-shell (&key title asset-url &rest children) (<> (raw! "") (html :lang "en" (head (meta :charset "utf-8") (meta :name "viewport" :content "width=device-width, initial-scale=1") (title title) (style "body{margin:0;min-height:100vh;display:flex;align-items:center;" "justify-content:center;font-family:system-ui,sans-serif;" "background:#fafaf9;color:#1c1917}") (link :rel "stylesheet" :type "text/css" :href (str asset-url "/styles/tw.css")) (link :rel "stylesheet" :href (str asset-url "/fontawesome/css/all.min.css"))) (body :class "bg-stone-50 text-stone-900" children)))) (defcomp ~error-page (&key title message image asset-url) (~base-shell :title title :asset-url asset-url (div :class "text-center p-8 max-w-lg mx-auto" (div :class "font-bold text-2xl md:text-4xl text-red-500 mb-4" (div message)) (when image (div :class "flex justify-center" (img :src image :width "300" :height "300"))))))