Lantern
Dashboard
Print Queue
New Sheet
Settings
New sheet template
Template name (lowercase, digits, hyphens)
Template HTML (Jinja)
<!DOCTYPE html> <html lang="en"> {# Lantern built-in sheet template: "default". Compact 3-zone header (logo · title · contact/requirements) to maximize the body; branded footer (log QR · Lantern mark + repo link · edit QR). #} <head> <meta charset="utf-8"> <style> @page { size: {{ page.css_size }}; margin: 0; } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; } body { font-family: "Helvetica Neue", Arial, sans-serif; color: #111; width: {{ page.width }}; height: {{ page.height }}; padding: 0.4in; display: flex; flex-direction: column; } /* --- Compact header: logo | title | contact/requirements --- */ header.sheet-head { display: grid; grid-template-columns: 1.1in 1fr 2.3in; align-items: center; gap: 0.2in; border-bottom: 2.5px solid #111; padding-bottom: 0.1in; } header .logo-cell img { max-height: 0.7in; max-width: 1.1in; display: block; } header .title { text-align: center; } header .title h1 { font-size: 21pt; margin: 0; line-height: 1.05; } header .info { font-size: 8pt; text-align: right; line-height: 1.3; } header .info .block { margin-bottom: 3pt; } header .info .label { text-transform: uppercase; letter-spacing: .04em; color: #666; font-size: 6.5pt; } /* --- Body: a two-column grid (left markdown | right image/QR) --- */ .body { flex: 1; font-size: 11pt; line-height: 1.38; overflow: hidden; padding-top: 0.14in; } .body h1 { font-size: 16pt; margin: .2em 0 .3em; } .body h2 { font-size: 13pt; border-bottom: 1px solid #ccc; padding-bottom: 2px; margin: .6em 0 .3em; } .body ul, .body ol { margin: .2em 0 .6em 1.2em; } .body li { margin: .12em 0; } .grid-row { display: grid; grid-template-columns: 1fr 2.1in; gap: 0.22in; align-items: start; margin-bottom: 0.1in; } .grid-row.full { grid-template-columns: 1fr; } .row-left > :first-child { margin-top: 0; } .row-right img { max-width: 2.1in; max-height: 2.4in; display: block; margin-left: auto; } .row-right.qr-cell { text-align: center; font-size: 7pt; word-break: break-all; } .row-right.qr-cell img { width: 1.5in; height: 1.5in; margin: 0 auto 2px; } /* --- Branded footer: QR | brand + repo | QR --- */ footer.sheet-foot { display: grid; grid-template-columns: 1in 1fr 1in; align-items: end; border-top: 2.5px solid #111; padding-top: 0.1in; } .qr { text-align: center; font-size: 7.5pt; } .qr img { width: 0.95in; height: 0.95in; display: block; margin: 0 auto 2px; } .brand { text-align: center; font-size: 7pt; color: #555; align-self: end; } .brand img { height: 0.65in; display: block; margin: 0 auto 2px; } .brand a { color: #555; text-decoration: none; } </style> </head> <body> <header class="sheet-head"> <div class="logo-cell"> {% if logo_data %}<img src="{{ logo_data }}" alt="">{% endif %} </div> <div class="title"><h1>{{ sheet.title }}</h1></div> <div class="info"> {% if sheet.contact.name %} <div class="block"> <span class="label">Contact</span><br>{{ sheet.contact.name }} {% if sheet.contact.info %}<br>{{ sheet.contact.info }}{% endif %} </div> {% endif %} {% if sheet.requirements %} <div class="block"><span class="label">Requirements</span><br>{{ sheet.requirements }}</div> {% endif %} </div> </header> <div class="body"> {% for row in rows %} <div class="grid-row {{ 'full' if not row.image_data and not row.qr_data }}"> <div class="row-left">{{ row.left_html | safe }}</div> {% if row.image_data %} <div class="row-right"><img src="{{ row.image_data }}" alt=""></div> {% elif row.qr_data %} <div class="row-right qr-cell"><img src="{{ row.qr_data }}" alt=""><div>{{ row.url }}</div></div> {% endif %} </div> {% endfor %} </div> <footer class="sheet-foot"> <div class="qr"><img src="{{ log_qr }}" alt="Log usage">Scan to LOG USE</div> <div class="brand"> {% if brand_mark %}<img src="{{ brand_mark }}" alt="">{% endif %} <a href="{{ repo_url }}">{{ repo_url_display }}</a> </div> <div class="qr"><img src="{{ edit_qr }}" alt="Edit sheet">Scan to EDIT</div> </footer> </body> </html>
Your name
Save template
Cancel