decktile 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. decktile/__init__.py +5 -0
  2. decktile/__main__.py +3 -0
  3. decktile/assets/lucide/VENDORED.md +21 -0
  4. decktile/assets/lucide/lucide.css +2193 -0
  5. decktile/assets/lucide/lucide.ttf +3 -0
  6. decktile/cli.py +269 -0
  7. decktile/parser/__init__.py +0 -0
  8. decktile/parser/ast.py +191 -0
  9. decktile/parser/markdown.py +289 -0
  10. decktile/plugins/cards.py +25 -0
  11. decktile/plugins/directives.py +56 -0
  12. decktile/plugins/fenced.py +228 -0
  13. decktile/plugins/layouts.py +69 -0
  14. decktile/plugins/lucide.py +65 -0
  15. decktile/plugins/lucide_font.py +26 -0
  16. decktile/render/__init__.py +0 -0
  17. decktile/render/html.py +287 -0
  18. decktile/render/ir.py +536 -0
  19. decktile/render/odf/__init__.py +4 -0
  20. decktile/render/odf/geometry.py +510 -0
  21. decktile/render/odf/shapes.py +719 -0
  22. decktile/render/odf/styles.py +828 -0
  23. decktile/render/odp.py +380 -0
  24. decktile/render/pdf.py +17 -0
  25. decktile/render/pdg.py +72 -0
  26. decktile/render/seaborn.py +155 -0
  27. decktile/render/templates/base.css +741 -0
  28. decktile/render/templates/decktile.js +371 -0
  29. decktile/render/templates/shell.html +106 -0
  30. decktile/seaborn_styles/__init__.py +5 -0
  31. decktile/seaborn_styles/ossummit_europe.py +30 -0
  32. decktile/theme/__init__.py +0 -0
  33. decktile/theme/colors.py +53 -0
  34. decktile/theme/loader.py +22 -0
  35. decktile/theme/parser.py +264 -0
  36. decktile/themes/default.css +146 -0
  37. decktile/themes/kcd_vietnam.css +159 -0
  38. decktile/themes/kubecon_china.css +213 -0
  39. decktile/themes/kubecon_japan.css +156 -0
  40. decktile/themes/ossummit_europe.css +196 -0
  41. decktile/themes/ossummit_korea.css +196 -0
  42. decktile-0.2.0.dist-info/METADATA +625 -0
  43. decktile-0.2.0.dist-info/RECORD +46 -0
  44. decktile-0.2.0.dist-info/WHEEL +4 -0
  45. decktile-0.2.0.dist-info/entry_points.txt +6 -0
  46. decktile-0.2.0.dist-info/licenses/LICENSE +674 -0
@@ -0,0 +1,196 @@
1
+ /* decktile Open Source Summit Korea 2026 theme */
2
+
3
+ :root {
4
+ --color-background: #ffffff;
5
+ --color-background-stripe: #EAF3F1;
6
+ --color-foreground: #003A43;
7
+ --color-dimmed: #5F7D79;
8
+ --color-accent: #F4A197;
9
+ --color-accent-bg: rgba(244, 161, 151, 0.14);
10
+ --color-border: #BFD4D0;
11
+ --color-card-bg: #ffffff;
12
+ --bg-image: url("assets/brand/ossummit_korea/title_background.png");
13
+ --bg-overlay: rgba(255,255,255,0.96);
14
+ --watermark: url("assets/brand/ossummit_korea/watermark.png");
15
+ --logo-dark: url("assets/brand/dynamia-logo-white.png");
16
+ --tag-green-bg: #E9F2F0;
17
+ --tag-cyan-bg: #E2F1EF;
18
+ --tag-yellow-bg: #F6EFDE;
19
+ --tag-red-bg: #FBE9E7;
20
+ --tag-default-bg: #F4F7F6;
21
+ --tag-green-border: #003A43;
22
+ --tag-cyan-border: #75BDB3;
23
+ --tag-yellow-border: #C9A86A;
24
+ --tag-red-border: #F4A197;
25
+ --tag-default-border: #C4D4D0;
26
+
27
+ --color-accent-primary: #F4A197;
28
+ --color-accent-secondary: #75BDB3;
29
+ --color-accent-contrast: #003A43;
30
+ --list-style: "\25B8 ";
31
+ --card-border: 1px solid #A9CBC6;
32
+ --title-h1-size: 2.5em;
33
+ --title-subtitle-size: 1.2em;
34
+ }
35
+
36
+ body {
37
+ background: #003A43;
38
+ }
39
+
40
+ [data-theme="dark"] {
41
+ --color-background: #003A43;
42
+ --color-background-stripe: #0A4B55;
43
+ --color-foreground: #EAF4F2;
44
+ --color-dimmed: #9FBCB7;
45
+ --color-accent: #F4A197;
46
+ --color-accent-bg: rgba(244, 161, 151, 0.16);
47
+ --color-border: #1D5B65;
48
+ --color-card-bg: #0E4A54;
49
+ --bg-overlay: rgba(0, 58, 67, 0.92);
50
+ --tag-green-bg: #123130;
51
+ --tag-cyan-bg: #10343A;
52
+ --tag-yellow-bg: #332C16;
53
+ --tag-red-bg: #3A211E;
54
+ --tag-default-bg: #0E4A54;
55
+ --tag-green-border: #5BA894;
56
+ --tag-cyan-border: #75BDB3;
57
+ --tag-yellow-border: #D9C36A;
58
+ --tag-red-border: #F4A197;
59
+ --tag-default-border: #1D5B65;
60
+
61
+ --color-accent-primary: #F4A197;
62
+ --color-accent-secondary: #75BDB3;
63
+ --color-accent-contrast: #EAF4F2;
64
+ --card-border: 1px solid #2A6A74;
65
+ }
66
+
67
+ section {
68
+ background: linear-gradient(var(--bg-overlay), var(--bg-overlay)), var(--bg-image) left top / cover no-repeat;
69
+ color: var(--color-foreground);
70
+ font-family: Roboto, Arial, "Helvetica Neue", sans-serif;
71
+ }
72
+
73
+ /* Watermark inside the footer bar, beside the page number (light slides only) */
74
+ section::after {
75
+ opacity: 0.9;
76
+ left: auto;
77
+ right: 3.25em;
78
+ bottom: 0.48em;
79
+ width: 4.16em;
80
+ height: 0.9em;
81
+ background-position: center;
82
+ }
83
+ .layout-title::after {
84
+ background-image: none;
85
+ }
86
+ .layout-title {
87
+ background: linear-gradient(90deg, rgba(0,58,67,0.82) 0%, rgba(0,58,67,0.82) 58%, rgba(0,58,67,0.25) 78%, rgba(0,58,67,0) 95%), var(--bg-image) left top / cover no-repeat;
88
+ color: #ffffff;
89
+ }
90
+ .layout-title h1,
91
+ .layout-title h2,
92
+ .layout-title h3,
93
+ .layout-title h4,
94
+ .layout-title h5,
95
+ .layout-title h6 { color: #ffffff; }
96
+ .layout-title .kicker { color: #F4A197; }
97
+ .layout-title .subtitle { color: #75BDB3; }
98
+ .layout-title .speaker { color: rgba(255,255,255,0.85); }
99
+ .layout-title .speaker .role { color: rgba(255,255,255,0.6); }
100
+ .layout-title .speaker-links a { color: rgba(255,255,255,0.8); }
101
+ .layout-title .speaker-links svg { stroke: rgba(255,255,255,0.8); }
102
+
103
+ .layout-title { --logo: var(--logo-dark); }
104
+
105
+ h1, h2, h3, h4, h5, h6 {
106
+ color: var(--color-foreground);
107
+ font-family: Roboto, Arial, "Helvetica Neue", sans-serif;
108
+ }
109
+ h1 { font-size: 2.5em; font-weight: 700; }
110
+ h2 { font-size: 1.8em; padding-top: 0; }
111
+ h3 { font-size: 1.15em; }
112
+ h4 { font-size: 0.85em; }
113
+ h3::after {
114
+ display: block;
115
+ content: "";
116
+ width: 100%;
117
+ height: 0;
118
+ border-bottom: 2px solid var(--color-accent-primary);
119
+ margin-top: 0.3em;
120
+ opacity: 0.4;
121
+ }
122
+
123
+ li { font-size: 0.9em; padding-left: 0.3em; }
124
+ ul li::marker { color: var(--color-accent-primary); font-weight: bold; }
125
+
126
+ blockquote {
127
+ border-left-color: var(--color-accent-primary);
128
+ color: var(--color-dimmed);
129
+ }
130
+
131
+ th { background: var(--color-accent-bg); color: var(--color-foreground); font-weight: 700; }
132
+ th, td { border: 1px solid var(--color-border); }
133
+ tr:nth-child(even) { background: var(--color-background-stripe); }
134
+
135
+ a { color: var(--color-accent-primary); }
136
+
137
+ .card {
138
+ background: var(--color-card-bg);
139
+ border: var(--card-border);
140
+ }
141
+ .card p { font-size: 0.9em; }
142
+
143
+ .quote { border-left-color: var(--color-accent-primary); color: var(--color-accent-primary); }
144
+
145
+ .kicker { color: var(--color-accent-primary); font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; font-size: 0.75em; }
146
+
147
+ /* 5-col comparison table (Jetson vs NPUs slide, only wide table in the deck) */
148
+ section:has(table thead th:nth-child(5)) table { font-size: 0.7em; }
149
+ .speaker { color: var(--color-foreground); }
150
+ .speaker .role { color: var(--color-dimmed); }
151
+
152
+ /* Footer bar on light slides only (--footer-bg optional, off by default) */
153
+ footer {
154
+ --footer-bg: #003A43;
155
+ --footer-color: #EAF4F2;
156
+ left: 0;
157
+ right: 0;
158
+ bottom: 0;
159
+ padding: 1em var(--section-padding-h);
160
+ }
161
+ .layout-title footer,
162
+ section[data-theme="dark"] footer {
163
+ --footer-bg: transparent;
164
+ --footer-color: #EAF4F2;
165
+ left: var(--section-padding-h);
166
+ right: auto;
167
+ bottom: 1em;
168
+ padding: 0;
169
+ }
170
+ .slide-num {
171
+ bottom: 0;
172
+ right: var(--section-padding-h);
173
+ padding: 1em 0;
174
+ color: #EAF4F2;
175
+ }
176
+ .layout-title .slide-num,
177
+ section[data-theme="dark"] .slide-num {
178
+ bottom: 1em;
179
+ padding: 0;
180
+ color: #EAF4F2;
181
+ }
182
+
183
+ .subtitle { color: var(--color-dimmed); }
184
+ h2 + .subtitle { font-size: 0.85em; }
185
+ .tiny { font-size: 0.7em; color: var(--color-dimmed); }
186
+ .muted { color: var(--color-dimmed); }
187
+
188
+ .accent-primary { color: var(--color-accent-primary); fill: var(--color-accent-primary); stroke: var(--color-accent-primary); }
189
+ .accent-secondary { color: var(--color-accent-secondary); fill: var(--color-accent-secondary); stroke: var(--color-accent-secondary); }
190
+ .accent-contrast { color: var(--color-accent-contrast); fill: var(--color-accent-contrast); stroke: var(--color-accent-contrast); }
191
+
192
+ .tag-green { border-color: var(--tag-green-border); background: var(--tag-green-bg); }
193
+ .tag-cyan { border-color: var(--tag-cyan-border); background: var(--tag-cyan-bg); }
194
+ .tag-yellow { border-color: var(--tag-yellow-border); background: var(--tag-yellow-bg); }
195
+ .tag-red { border-color: var(--tag-red-border); background: var(--tag-red-bg); }
196
+ .tag-quote { border-left: 0.25em solid var(--color-accent-primary); font-style: italic; background: none; }