114 lines
3.0 KiB
HTML
114 lines
3.0 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{{ title }}</title>
|
|
<style>
|
|
:root { color-scheme: light; }
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0;
|
|
font: 14px/1.35 "Segoe UI", system-ui, sans-serif;
|
|
color: #111;
|
|
background: #f3f3f3;
|
|
}
|
|
.toolbar {
|
|
display: flex;
|
|
gap: 0.6rem;
|
|
padding: 0.8rem 1rem;
|
|
background: #1a1a1a;
|
|
color: #eee;
|
|
}
|
|
.toolbar a, .toolbar button {
|
|
color: #111;
|
|
background: #f97316;
|
|
border: 0;
|
|
border-radius: 8px;
|
|
padding: 0.4rem 0.85rem;
|
|
font: inherit;
|
|
font-weight: 650;
|
|
text-decoration: none;
|
|
cursor: pointer;
|
|
}
|
|
.toolbar a.ghost { background: transparent; color: #eee; border: 1px solid #555; }
|
|
.sheet {
|
|
width: 70mm;
|
|
min-height: 40mm;
|
|
margin: 1.2rem auto;
|
|
padding: 3.5mm;
|
|
background: #fff;
|
|
border: 1px solid #ccc;
|
|
border-radius: 4px;
|
|
display: grid;
|
|
grid-template-columns: 1fr 22mm;
|
|
gap: 3mm;
|
|
align-items: center;
|
|
}
|
|
.meta h1 {
|
|
margin: 0 0 2mm;
|
|
font-size: 4.2mm;
|
|
letter-spacing: -0.02em;
|
|
}
|
|
.meta p { margin: 0 0 1.2mm; font-size: 3.1mm; color: #333; }
|
|
.meta .code { font-weight: 700; font-variant-numeric: tabular-nums; }
|
|
.dots { display: inline-flex; vertical-align: middle; margin-right: 1.5mm; }
|
|
.dot {
|
|
width: 3.2mm;
|
|
height: 3.2mm;
|
|
border-radius: 50%;
|
|
border: 0.2mm solid rgba(0,0,0,0.25);
|
|
margin-left: -1mm;
|
|
}
|
|
.dot:first-child { margin-left: 0; }
|
|
#qr { width: 20mm; height: 20mm; }
|
|
@media print {
|
|
body { background: #fff; }
|
|
.toolbar { display: none; }
|
|
.sheet {
|
|
margin: 0;
|
|
border: 0;
|
|
border-radius: 0;
|
|
page-break-inside: avoid;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="toolbar">
|
|
<button type="button" onclick="window.print()">Drucken</button>
|
|
<a class="ghost" href="/material?spool={{ spool.id }}">Zurück</a>
|
|
</div>
|
|
<div class="sheet">
|
|
<div class="meta">
|
|
<h1>{{ spool.name }}</h1>
|
|
<p class="code">{{ spool.chargen_nr or spool.code }}</p>
|
|
<p>
|
|
{% if spool.colors %}
|
|
<span class="dots">
|
|
{% for color in spool.colors %}
|
|
<span class="dot" style="background:{{ color.hex }}"></span>
|
|
{% endfor %}
|
|
</span>
|
|
{% endif %}
|
|
{{ spool.color or spool.material_type }}
|
|
</p>
|
|
<p>{{ spool.material_type }}{% if spool.brand %} · {{ spool.brand }}{% endif %}</p>
|
|
<p>{{ '%.0f'|format(spool.remaining_g) }} g{% if spool.ace_slot %} · ACE {{ spool.ace_slot }}{% endif %}</p>
|
|
{% if spool.hersteller_charge %}
|
|
<p>Hersteller: {{ spool.hersteller_charge }}</p>
|
|
{% endif %}
|
|
</div>
|
|
<canvas id="qr" width="120" height="120"></canvas>
|
|
</div>
|
|
<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/qrcode.min.js"></script>
|
|
<script>
|
|
QRCode.toCanvas(document.getElementById("qr"), {{ qr_url|tojson }}, {
|
|
width: 120,
|
|
margin: 1,
|
|
color: { dark: "#111111", light: "#ffffff" }
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|