File size: 9,841 Bytes
794a9f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0eacc6f
794a9f2
 
 
 
 
246efb5
 
794a9f2
 
 
 
 
 
 
 
0eacc6f
 
 
 
794a9f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246efb5
794a9f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0eacc6f
794a9f2
 
 
 
 
 
 
 
 
 
 
 
 
 
0eacc6f
794a9f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Build Small — Certificate</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Archivo:wdth,wght@100..125,400..900&family=Spline+Sans+Mono:wght@400;500;600&display=swap');

:root{
  --paper:#f4eee1; --paper-2:#efe7d4; --kraft:#e4d5b7; --kraft-deep:#d6c19a; --line:#cdbb95;
  --ink:#33312b; --ink-2:#4a4639; --ink-soft:rgba(51,49,43,.62); --ink-faint:rgba(51,49,43,.40);
  --forest:#3d6a55; --forest-deep:#2b4d3d; --forest-ink:#20392d;
  --amber:#e0913a; --amber-deep:#c2762a; --clay:#bd5f37;
  --font-display:'Archivo',system-ui,sans-serif;
  --font-mono:'Spline Sans Mono',ui-monospace,monospace;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{width:2000px;height:1414px;overflow:hidden;}

.certificate{
  width:2000px;height:1414px;position:relative;overflow:hidden;
  background:var(--paper);color:var(--ink);
  font-family:var(--font-display);
  print-color-adjust:exact;-webkit-print-color-adjust:exact;
}

/* paper grain (from the field-guide global.css) */
.grain{position:absolute;inset:0;z-index:1;pointer-events:none;opacity:.5;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='0.045'/%3E%3C/svg%3E");}

/* topographic contour backdrops — corners, forest tint */
.topo{position:absolute;z-index:1;pointer-events:none;opacity:.32;}
.topo--br{right:-260px;bottom:-300px;width:1100px;height:1100px;}
.topo--tl{left:-320px;top:-340px;width:1000px;height:1000px;opacity:.22;}

/* frame */
.frame{position:absolute;inset:46px;z-index:3;border:3px solid var(--ink);background:transparent;}
.frame::after{content:"";position:absolute;inset:13px;border:2px solid var(--ink-faint);pointer-events:none;}

/* registration corner ticks */
.tick{position:absolute;z-index:5;width:46px;height:46px;}
.tick path{stroke:var(--ink);stroke-width:3;fill:none;}
.tick--tl{top:30px;left:30px;} .tick--tr{top:30px;right:30px;transform:scaleX(-1);}
.tick--bl{bottom:30px;left:30px;transform:scaleY(-1);} .tick--br{bottom:30px;right:30px;transform:scale(-1,-1);}

.content{position:relative;z-index:4;height:100%;padding:60px 120px 50px;
  display:flex;flex-direction:column;text-align:center;}

/* ---- top bar ---- */
.topbar{display:flex;justify-content:flex-end;align-items:center;}
.coord{font-family:var(--font-mono);font-size:16px;letter-spacing:.10em;color:var(--ink-faint);}

/* ---- lockup ---- */
.lockup{display:flex;align-items:center;justify-content:center;gap:34px;margin-top:30px;}
.lockup img{height:48px;display:block;}
.lockup .hf-mark img{height:42px;}
.lockup .hf-wm{font-weight:800;font-stretch:106%;font-size:28px;letter-spacing:-.01em;color:var(--ink);}
.lockup .cross{font-family:var(--font-mono);font-size:30px;color:var(--ink-faint);font-weight:400;}
.hf-mark{display:inline-flex;align-items:center;gap:16px;}

/* ---- title ---- */
.kicker{font-family:var(--font-mono);font-size:19px;font-weight:600;letter-spacing:.26em;
  text-transform:uppercase;color:var(--forest);margin-top:30px;}
.title{font-weight:900;font-stretch:122%;font-size:142px;line-height:.92;letter-spacing:-.02em;
  margin-top:12px;color:var(--ink);}
.doctype{display:inline-flex;align-items:center;justify-content:center;gap:24px;margin-top:22px;
  font-family:var(--font-mono);font-size:32px;font-weight:600;letter-spacing:.28em;
  text-transform:uppercase;color:var(--forest);}
.doctype::before,.doctype::after{content:"";width:70px;height:2px;background:var(--amber);display:inline-block;}

/* ---- body ---- */
.body{flex-grow:1;display:flex;flex-direction:column;justify-content:center;}
.certifies{font-family:var(--font-mono);font-size:23px;color:var(--ink-soft);letter-spacing:.04em;margin-bottom:6px;}
.name{font-weight:800;font-stretch:105%;font-size:98px;line-height:1;letter-spacing:-.01em;
  color:var(--forest-deep);padding:14px 0 20px;display:inline-block;margin:6px auto 0;
  border-bottom:3px solid var(--ink);}
.desc{font-size:25px;line-height:1.58;color:var(--ink-2);max-width:1300px;margin:32px auto 0;font-weight:500;text-wrap:pretty;}
.desc strong{font-weight:800;color:var(--ink);}
.project{margin:22px auto 0;display:inline-flex;align-items:center;gap:16px;
  font-family:var(--font-mono);font-size:24px;font-weight:600;color:var(--ink);
  background:var(--kraft);border:2px solid var(--ink);box-shadow:5px 5px 0 var(--ink);
  padding:18px 34px;}
.project .lbl{color:var(--forest);font-weight:600;letter-spacing:.06em;text-transform:uppercase;font-size:18px;}

/* ---- stats ---- */
.stats{display:flex;justify-content:center;width:fit-content;margin:32px auto 0;
  border:2px solid var(--ink);background:var(--paper);box-shadow:6px 6px 0 var(--ink);}
.stat{padding:18px 50px;border-right:2px solid var(--ink);}
.stat:last-child{border-right:none;}
.stat b{display:block;font-weight:800;font-stretch:118%;font-size:44px;line-height:1;color:var(--ink);}
.stat span{display:block;font-family:var(--font-mono);font-size:15px;letter-spacing:.10em;
  text-transform:uppercase;color:var(--ink-soft);margin-top:10px;}

/* ---- signature row ---- */
.sigrow{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;margin-top:0;padding-top:30px;}
.sig{display:flex;flex-direction:column;gap:10px;}
.sig--l{align-items:flex-start;text-align:left;} .sig--r{align-items:flex-end;text-align:right;}
.sig__val{font-weight:800;font-stretch:110%;font-size:26px;color:var(--ink);}
.sig__lbl{font-family:var(--font-mono);font-size:15px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);}
.sig__rule{width:280px;height:0;border-top:2px solid var(--ink);margin-bottom:2px;}

/* circular stamp seal */
.seal{width:152px;height:152px;position:relative;transform:rotate(-7deg);}

/* ---- sponsors ---- */
.sponsors{margin-top:24px;margin-bottom:38px;padding-top:22px;border-top:2px dashed var(--line);}
.sponsors__t{font-family:var(--font-mono);font-size:15px;letter-spacing:.24em;text-transform:uppercase;
  color:var(--ink-faint);margin-bottom:18px;}
.sponsors__l{font-weight:800;font-stretch:108%;font-size:31px;color:var(--ink);letter-spacing:-.005em;}
.sponsors__l i{color:var(--kraft-deep);font-style:normal;font-weight:400;margin:0 16px;
  position:relative;top:-3px;font-size:24px;}
</style>
</head>
<body>
<div class="certificate">
  <div class="grain"></div>

  <!-- topo contour backdrops -->
  <svg class="topo topo--br" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#3d6a55" stroke-width="1.4">
    <path d="M200 40C120 60 60 120 50 210s40 150 130 150 160-70 150-160S280 20 200 40Z"/>
    <path d="M200 80C140 96 96 142 90 210s34 116 110 116 128-54 122-120S262 64 200 80Z"/>
    <path d="M200 120C158 132 128 166 124 212s26 84 78 84 96-40 92-86S240 108 200 120Z"/>
    <path d="M200 160C176 168 158 188 156 214s16 52 46 52 58-24 56-50S224 152 200 160Z"/>
    <path d="M200 196c-14 4-24 16-24 30s12 26 26 26 28-12 28-28-16-30-30-28Z"/>
  </svg>
  <svg class="topo topo--tl" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#e0913a" stroke-width="1.4">
    <path d="M200 40C120 60 60 120 50 210s40 150 130 150 160-70 150-160S280 20 200 40Z"/>
    <path d="M200 90C146 104 104 146 98 208s32 110 104 110 122-50 116-114S256 76 200 90Z"/>
    <path d="M200 140C166 150 142 180 138 214s22 74 68 74 84-34 80-74S232 130 200 140Z"/>
    <path d="M200 190c-18 4-32 20-32 38s14 32 34 32 34-16 34-36-18-38-36-34Z"/>
  </svg>

  <div class="frame"></div>
  <svg class="tick tick--tl" viewBox="0 0 46 46"><path d="M2 2 L2 22 M2 2 L22 2"/></svg>
  <svg class="tick tick--tr" viewBox="0 0 46 46"><path d="M2 2 L2 22 M2 2 L22 2"/></svg>
  <svg class="tick tick--bl" viewBox="0 0 46 46"><path d="M2 2 L2 22 M2 2 L22 2"/></svg>
  <svg class="tick tick--br" viewBox="0 0 46 46"><path d="M2 2 L2 22 M2 2 L22 2"/></svg>

  <div class="content">
    <div class="topbar">
      <span class="coord">June 5–15, 2026</span>
    </div>

    <div class="lockup">
      <span class="hf-mark">
        <img src="https://huggingface.co/front/assets/huggingface_logo-noborder.svg" alt="Hugging Face">
        <span class="hf-wm">Hugging&nbsp;Face</span>
      </span>
      <span class="cross">×</span>
      <img src="https://www.gradio.app/_app/immutable/assets/gradio-logo-with-title.3SNGTZpF.svg" alt="Gradio">
    </div>

    <div>
      <div class="kicker">Hugging Face × Gradio Hackathon</div>
      <div class="title">Build Small</div>
      <div class="doctype">Certificate of Participation</div>
    </div>

    <div class="body">
      <div class="certifies">This certifies that</div>
      <div class="name" id="participantName">{participant_name}</div>
      <div class="desc">
        has successfully participated in <strong>Build Small</strong>, a Hugging&nbsp;Face&nbsp;×&nbsp;Gradio
        hackathon celebrating small, local, open-weight models — building real, tinkerable apps
        powered entirely by models <strong>under 32B parameters</strong>.
      </div>
      {project_section}
      <div class="stats">
        <div class="stat"><b>&lt; 32B</b><span>Params · Local-first</span></div>
        <div class="stat"><b>$48K+</b><span>Prize Pool</span></div>
      </div>
    </div>

    <div class="sponsors">
      <div class="sponsors__t">Proudly supported by</div>
      <div class="sponsors__l">
        OpenBMB <i>·</i> Black Forest Labs <i>·</i> OpenAI <i>·</i> NVIDIA <i>·</i> Modal <i>·</i> JetBrains <i>·</i> Cohere Labs
      </div>
    </div>
  </div>
</div>
</body>
</html>