summaryrefslogtreecommitdiff
path: root/sitestatic
diff options
context:
space:
mode:
Diffstat (limited to 'sitestatic')
-rw-r--r--sitestatic/1984.pngbin0 -> 32007 bytes
-rw-r--r--sitestatic/airvm_button.pngbin0 -> 4931 bytes
-rw-r--r--sitestatic/archnavbar/archnavbar.css34
-rw-r--r--sitestatic/archweb.css1113
-rw-r--r--sitestatic/archweb.js577
-rw-r--r--sitestatic/ceata-parabola.pngbin0 -> 7056 bytes
-rw-r--r--sitestatic/click_and_pledge.pngbin0 -> 2284 bytes
-rw-r--r--sitestatic/download.pngbin0 -> 1155 bytes
-rw-r--r--sitestatic/flags/fam.css270
-rw-r--r--sitestatic/flags/fam.pngbin0 -> 76543 bytes
-rw-r--r--sitestatic/gandi.pngbin0 -> 14157 bytes
-rw-r--r--sitestatic/kartenzia_button.pngbin0 -> 16920 bytes
-rw-r--r--sitestatic/magnet.pngbin0 -> 2382 bytes
-rw-r--r--sitestatic/new.pngbin0 -> 378 bytes
-rw-r--r--sitestatic/robofun.jpgbin0 -> 17148 bytes
-rw-r--r--sitestatic/vector_tux.pngbin0 -> 165926 bytes
-rw-r--r--sitestatic/vnet_button.pngbin0 -> 4908 bytes
17 files changed, 1994 insertions, 0 deletions
diff --git a/sitestatic/1984.png b/sitestatic/1984.png
new file mode 100644
index 00000000..fbca6924
--- /dev/null
+++ b/sitestatic/1984.png
Binary files differ
diff --git a/sitestatic/airvm_button.png b/sitestatic/airvm_button.png
new file mode 100644
index 00000000..0acadc9c
--- /dev/null
+++ b/sitestatic/airvm_button.png
Binary files differ
diff --git a/sitestatic/archnavbar/archnavbar.css b/sitestatic/archnavbar/archnavbar.css
new file mode 100644
index 00000000..4fcd6cc6
--- /dev/null
+++ b/sitestatic/archnavbar/archnavbar.css
@@ -0,0 +1,34 @@
+/*
+ * ARCH GLOBAL NAVBAR
+ * We're forcing all generic selectors with !important
+ * to help prevent other stylesheets from interfering.
+ */
+
+/* container for the entire bar */
+#archnavbar { height: 40px !important; padding: 10px 15px !important; background: #000 !important; border-bottom: 5px #787DAB solid !important; }
+#archnavbarlogo { float: left !important; margin: -5px 0 0 0 !important; padding: 0 !important; height: 50px !important; width: 324px !important; background: url('archlogo.png') no-repeat !important; }
+
+/* move the heading/paragraph text offscreen */
+#archnavbarlogo p { margin: 0 !important; padding: 0 !important; text-indent: -9999px !important; }
+#archnavbarlogo h1 { margin: 0 !important; padding: 0 !important; text-indent: -9999px !important; }
+
+/* make the link the same size as the logo */
+#archnavbarlogo a { display: block !important; height: 50px !important; width: 324px !important; }
+
+/* display the list inline, float it to the right and style it */
+#archnavbar ul { display: inline !important; float: right !important; list-style: none !important; margin: 0 !important; padding: 0 !important; }
+#archnavbar ul li { float: left !important; font-size: 14px !important; font-family: sans-serif !important; line-height: 45px !important; padding-right: 15px !important; padding-left: 15px !important; }
+
+/* style the links */
+#archnavbar ul li a { color: #999; font-weight: bold !important; text-decoration: none !important; }
+#archnavbar ul li a:hover { color: white !important; text-decoration: underline !important; }
+
+/* END MAIN NAVBAR STYLES */
+
+/* highlight current website in the navbar */
+li.anb-selected a,
+#archnavbar.anb-home ul li#anb-home a,
+#archnavbar.anb-packages ul li#anb-packages a,
+#archnavbar.anb-download ul li#anb-download a {
+ color: white !important;
+}
diff --git a/sitestatic/archweb.css b/sitestatic/archweb.css
new file mode 100644
index 00000000..851f17ad
--- /dev/null
+++ b/sitestatic/archweb.css
@@ -0,0 +1,1113 @@
+/*
+ * Font sizing based on 16px browser defaults (use em):
+ * 14px = 0.875em
+ * 13px = 0.812em
+ * 12px = 0.75em
+ * 11px = 0.6875em
+ */
+
+@import url("archnavbar/archnavbar.css");
+
+/* simple reset */
+* {
+ margin: 0;
+ padding: 0;
+ line-height: 1.4;
+}
+
+/* general styling */
+body {
+ min-width: 650px;
+ background: #f6f9fc;
+ color: #222;
+ font: normal 100% sans-serif;
+ text-align: center;
+}
+
+p {
+ margin: .33em 0 1em;
+}
+
+ol,
+ul {
+ margin-bottom: 1em;
+ padding-left: 2em;
+}
+
+ ul {
+ list-style: square;
+ }
+
+code {
+ font: 1.2em monospace;
+ background: #ffd;
+ padding: 0.15em 0.25em;
+}
+
+pre {
+ font: 1.2em monospace;
+ border: 1px solid #bdb;
+ background: #dfd;
+ padding: 0.5em;
+ margin: 1em;
+}
+
+ pre code {
+ display: block;
+ background: none;
+ overflow: auto;
+ }
+
+blockquote {
+ margin: 1.5em 2em;
+}
+
+input {
+ vertical-align: middle;
+}
+
+select[multiple] {
+ padding: 1px 0;
+}
+
+ select[multiple] option {
+ padding: 0 0.5em 0 0.3em;
+ }
+
+input[type=submit] {
+ padding: 0 0.6em;
+}
+
+.clear {
+ clear: both;
+}
+
+.hide {
+ display: none;
+}
+
+hr {
+ border: none;
+ border-top: 1px solid #888;
+}
+
+img {
+ border: 0;
+}
+
+/* scale fonts down to a sane default (16 * .812 = 13px) */
+#content {
+ font-size: 0.812em;
+}
+
+/* link style */
+a {
+ text-decoration: none;
+}
+
+ a:link,
+ th a:visited {
+ color: #07b;
+ }
+
+ a:visited {
+ color: #666;
+ }
+
+ a:hover {
+ text-decoration: underline;
+ color: #666;
+ }
+
+ a:active {
+ color: #e90;
+ }
+
+/* special anchor elements */
+a.headerlink {
+ visibility: hidden;
+ padding-left: 0.5em;
+}
+
+h3:hover > a.headerlink {
+ visibility: visible;
+}
+
+/* headings */
+h2 {
+ font-size: 1.5em;
+ margin-bottom: 0.5em;
+ border-bottom: 1px solid #888;
+}
+
+h3 {
+ font-size: 1.25em;
+ margin-top: .5em;
+}
+
+h4 {
+ font-size: 1.15em;
+ margin-top: 1em;
+}
+
+h5 {
+ font-size: 1em;
+ margin-top: 1em;
+}
+
+/* general layout */
+#content {
+ width: 95%;
+ margin: 0 auto;
+ text-align: left;
+}
+
+#content-left-wrapper {
+ float: left;
+ width: 100%; /* req to keep content above sidebar in source code */
+}
+
+#content-left {
+ margin: 0 340px 0 0;
+}
+
+#content-right {
+ float: left;
+ width: 300px;
+ margin-left: -300px;
+}
+
+div.box {
+ margin-bottom: 1.5em;
+ padding: 0.65em;
+ background: #ecf2f5;
+ border: 1px solid #bcd;
+}
+
+#footer {
+ clear: both;
+ margin: 2em 0 1em;
+}
+
+ #footer p {
+ margin: 0;
+ text-align: center;
+ font-size: 0.85em;
+ }
+
+/* alignment */
+div.center,
+table.center,
+img.center {
+ width: auto;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+p.center,
+td.center,
+th.center {
+ text-align: center;
+}
+
+/* table generics */
+table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+ table .wrap {
+ white-space: normal;
+ }
+
+th,
+td {
+ white-space: nowrap;
+ text-align: left;
+}
+
+ th {
+ vertical-align: middle;
+ font-weight: bold;
+ }
+
+ td {
+ vertical-align: top;
+ }
+
+/* table pretty styles */
+table.pretty1 {
+ width: auto;
+ margin-top: 0.25em;
+ margin-bottom: 0.5em;
+ border-collapse: collapse;
+ border: 1px solid #bcd;
+}
+
+ .pretty1 th {
+ padding: 0.35em;
+ background: #e4eeff;
+ border: 1px solid #bcd;
+ }
+
+ .pretty1 td {
+ padding: 0.35em;
+ border: 1px dotted #bcd;
+ }
+
+table.pretty2 {
+ width: auto;
+ margin-top: 0.25em;
+ margin-bottom: 0.5em;
+ border-collapse: collapse;
+ border: 1px solid #bbb;
+}
+
+ .pretty2 th {
+ padding: 0.35em;
+ background: #eee;
+ border: 1px solid #bbb;
+ }
+
+ .pretty2 td {
+ padding: 0.35em;
+ border: 1px dotted #bbb;
+ }
+
+table.compact {
+ width: auto;
+}
+
+ .compact td {
+ padding: 0.25em 0 0.25em 1.5em;
+ }
+
+
+/* definition lists */
+dl {
+ clear: both;
+}
+
+ dl dt,
+ dl dd {
+ margin-bottom: 4px;
+ padding: 8px 0 4px;
+ font-weight: bold;
+ border-top: 1px dotted #bbb;
+ }
+
+ dl dt {
+ color: #333;
+ float:left;
+ padding-right:15px;
+ }
+
+/* forms and input styling */
+form p {
+ margin: 0.5em 0;
+}
+
+fieldset {
+ border: 0;
+}
+
+label {
+ width: 12em;
+ vertical-align: top;
+ display: inline-block;
+ font-weight: bold;
+}
+
+input[type=text],
+input[type=password],
+textarea {
+ padding: 0.10em;
+}
+
+form.general-form label,
+form.general-form .form-help {
+ width: 10em;
+ vertical-align: top;
+ display: inline-block;
+}
+
+form.general-form input[type=text],
+form.general-form textarea {
+ width: 45%;
+}
+
+/* archdev navbar */
+#archdev-navbar {
+ margin: 1.5em 0;
+}
+
+ #archdev-navbar ul {
+ list-style: none;
+ margin: -0.5em 0;
+ padding: 0;
+ }
+
+ #archdev-navbar li {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ font-size: 0.9em;
+ }
+
+ #archdev-navbar li a {
+ padding: 0 0.5em;
+ color: #07b;
+ }
+
+/* error/info messages (x pkg is already flagged out-of-date, etc) */
+#sys-message {
+ width: 35em;
+ text-align: center;
+ margin: 1em auto;
+ padding: 0.5em;
+ background: #fff;
+ border: 1px solid #f00;
+}
+
+ #sys-message p {
+ margin: 0;
+ }
+
+ul.errorlist {
+ color: red;
+}
+
+form ul.errorlist {
+ margin: 0.5em 0;
+}
+
+/* JS sorting via tablesorter */
+table th.tablesorter-header {
+ padding-right: 20px;
+ background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==);
+ background-repeat: no-repeat;
+ background-position: center right;
+ cursor: pointer;
+}
+
+table thead th.tablesorter-headerAsc {
+ background-color: #e4eeff;
+ background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
+}
+
+table thead th.tablesorter-headerDesc {
+ background-color: #e4eeff;
+ background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
+}
+
+table thead th.sorter-false {
+ background-image: none;
+ cursor: default;
+}
+
+/**
+ * PAGE SPECIFIC STYLES
+ */
+
+/* home: introduction */
+#intro p.readmore {
+ margin: -0.5em 0 0 0;
+ font-size: .9em;
+ text-align: right;
+}
+
+/* home: news */
+#news {
+ margin-top: 1.5em;
+}
+
+ #news h3 {
+ float: left;
+ padding-bottom: .5em
+ }
+
+ #news div {
+ margin-bottom: 1em;
+ }
+
+ #news div p {
+ margin-bottom: 0.5em;
+ }
+
+ #news .more {
+ font-weight: normal;
+ }
+
+ #news .rss-icon {
+ float: right;
+ margin-top: 1em;
+ }
+
+ #news h4 {
+ clear: both;
+ font-size: 1em;
+ margin-top: 1.5em;
+ border-bottom: 1px dotted #bbb;
+ }
+
+ #news .timestamp {
+ float: right;
+ font-size: 0.85em;
+ margin: -1.8em 0.5em 0 0;
+ }
+
+/* home: arrowed headings */
+#news h3 a {
+ display: block;
+ background: #787DAB;
+ font-size: 15px;
+ padding: 2px 10px;
+ color: white;
+}
+
+ #news a:active {
+ color: white;
+ }
+
+h3 span.arrow {
+ display: block;
+ width: 0;
+ height: 0;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-top: 6px solid #787DAB;
+ margin: 0 auto;
+ font-size: 0;
+ line-height: 0px;
+}
+
+/* home: pkgsearch box */
+#pkgsearch {
+ padding: 1em 0.75em;
+ background: #787DAB;
+ color: #fff;
+ border: 1px solid #08b;
+}
+
+ #pkgsearch label {
+ width: auto;
+ padding: 0.1em 0;
+ }
+
+ #pkgsearch input {
+ width: 10em;
+ float: right;
+ font-size: 1em;
+ color: #000;
+ background: #fff;
+ border: 1px solid #09c;
+ }
+
+ .pkgsearch-typeahead {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ padding: 0.15em 0.1em;
+ margin: 0;
+ min-width: 10em;
+ font-size: 0.812em;
+ text-align: left;
+ list-style: none;
+ background-color: #f6f9fc;
+ border: 1px solid #09c;
+ }
+
+ .pkgsearch-typeahead li a {
+ color: #000;
+ }
+
+ .pkgsearch-typeahead li.active a {
+ color: #07b;
+ }
+
+/* home: recent pkg updates */
+#pkg-updates h3 {
+ margin: 0 0 0.3em;
+}
+
+ #pkg-updates .more {
+ font-weight: normal;
+ }
+
+ #pkg-updates .rss-icon {
+ float: right;
+ margin: -2em 0 0 0;
+ }
+
+ #pkg-updates table {
+ margin: 0;
+ }
+
+ #pkg-updates td.pkg-name {
+ white-space: normal;
+ }
+
+ #pkg-updates td.pkg-arch {
+ text-align: right;
+ }
+
+ #pkg-updates span.testing {
+ font-style: italic;
+ }
+
+ #pkg-updates span.staging {
+ font-style: italic;
+ color: #ff8040;
+ }
+
+/* home: sidebar navigation */
+#nav-sidebar ul {
+ list-style: none;
+ margin: 0.5em 0 0.5em 1em;
+ padding: 0;
+}
+
+/* home: sponsor banners */
+#arch-sponsors img {
+ padding: 0.3em 0;
+}
+
+/* home: sidebar components (navlist, sponsors, pkgsearch, etc) */
+div.widget {
+ margin-bottom: 1.5em;
+}
+
+/* home: other stuff */
+#konami {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ opacity: 0.6;
+}
+
+/* feeds page */
+#rss-feeds .rss {
+ padding-right: 20px;
+ background: url(rss.png) top right no-repeat;
+}
+
+/* artwork: logo images */
+#artwork img.inverted {
+ background: #333;
+ padding: 0;
+}
+
+#artwork div.imagelist img {
+ display: inline;
+ margin: 0.75em;
+}
+
+/* news: article list */
+.news-nav {
+ float: right;
+ margin-top: -2.2em;
+}
+
+ .news-nav .prev,
+ .news-nav .next {
+ margin: 0 1em;
+ }
+
+/* news: article pages */
+div.news-article .article-info {
+ margin: 0;
+ color: #999;
+}
+
+/* news: add/edit article */
+#newsform {
+ width: 60em;
+}
+
+ #newsform input[type=text],
+ #newsform textarea {
+ width: 75%;
+ }
+
+/* todolists: list */
+.todolist-nav {
+ float: right;
+ margin-top: -2.2em;
+}
+
+ .todolist-nav .prev,
+ .todolist-nav .next {
+ margin: 0 1em;
+ }
+
+/* donate: donor list */
+#donor-list ul {
+ width: 100%;
+}
+ /* max 4 columns, but possibly fewer if screen size doesn't allow for more */
+ #donor-list li {
+ float: left;
+ width: 25%;
+ min-width: 20em;
+ }
+
+/* download page */
+#arch-downloads h3 {
+ border-bottom: 1px dotted #bbb;
+}
+
+/* pkglists/devlists */
+table.results {
+ font-size: 0.846em;
+ border-top: 1px dotted #999;
+ border-bottom: 1px dotted #999;
+}
+
+ .results th {
+ padding: 0.5em 1em 0.25em 0.25em;
+ border-bottom: 1px solid #999;
+ white-space: nowrap;
+ background-color:#fff;
+ }
+
+ .results td {
+ padding: .3em 1em .3em 3px;
+ }
+
+ .results tr.odd {
+ background: #fff;
+ }
+
+ .results tr.even {
+ background: #e4eeff;
+ }
+
+ .results .flagged {
+ color: red;
+ }
+
+ .results tr.empty td {
+ text-align: center;
+ }
+
+/* pkglist: layout */
+#pkglist-about {
+ margin-top: 1.5em;
+}
+
+/* pkglist: results navigation */
+.pkglist-stats {
+ font-size: 0.85em;
+}
+
+#pkglist-results .pkglist-nav {
+ float: right;
+ margin-top: -2.2em;
+}
+
+.pkglist-nav .prev {
+ margin-right: 1em;
+}
+
+.pkglist-nav .next {
+ margin-right: 1em;
+}
+
+/* search fields and other filter selections */
+.filter-criteria {
+ margin-bottom: 1em;
+}
+
+.filter-criteria h3 {
+ font-size: 1em;
+ margin-top: 0;
+}
+
+.filter-criteria div {
+ float: left;
+ margin-right: 1.65em;
+ font-size: 0.85em;
+}
+
+.filter-criteria legend {
+ display: none;
+}
+
+.filter-criteria label {
+ width: auto;
+ display: block;
+ font-weight: normal;
+}
+
+/* pkgdetails: details links that float on the right */
+#pkgdetails #detailslinks {
+ float: right;
+}
+
+ #pkgdetails #detailslinks h4 {
+ margin-top: 0;
+ margin-bottom: 0.25em;
+ }
+
+ #pkgdetails #detailslinks ul {
+ list-style: none;
+ padding: 0;
+ margin-bottom: 0;
+ font-size: 0.846em;
+ }
+
+ #pkgdetails #detailslinks > div {
+ padding: 0.5em;
+ margin-bottom: 1em;
+ background: #eee;
+ border: 1px solid #bbb;
+ }
+
+#pkgdetails #actionlist .flagged {
+ color: red;
+ font-size: 0.9em;
+ font-style: italic;
+}
+
+/* pkgdetails: pkg info */
+#pkgdetails #pkginfo {
+ width: auto;
+}
+
+ #pkgdetails #pkginfo td {
+ padding: 0.25em 0 0.25em 1.5em;
+ }
+
+ #pkgdetails #pkginfo .userdata {
+ font-size: 0.85em;
+ padding: 0.5em;
+ }
+
+/* pkgdetails: flag package */
+#flag-pkg-form label {
+ width: 10em;
+}
+
+#flag-pkg-form textarea,
+#flag-pkg-form input[type=text] {
+ width: 45%;
+}
+
+/* pkgdetails: deps, required by and file lists */
+#pkgdetails #metadata {
+ clear: both;
+}
+
+#pkgdetails #metadata h3 {
+ background: #555;
+ color: #fff;
+ font-size: 1em;
+ margin-bottom: 0.5em;
+ padding: 0.2em 0.35em;
+}
+
+#pkgdetails #metadata ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#pkgdetails #metadata li {
+ padding-left: 0.5em;
+}
+
+#pkgdetails #metadata p {
+ padding-left: 0.5em;
+}
+
+#pkgdetails #metadata .message {
+ font-style: italic;
+}
+
+#pkgdetails #metadata br {
+ clear: both;
+}
+
+#pkgdetails #pkgdeps {
+ float: left;
+ width: 48%;
+ margin-right: 2%;
+}
+
+#pkgdetails #metadata .virtual-dep,
+#pkgdetails #metadata .testing-dep,
+#pkgdetails #metadata .staging-dep,
+#pkgdetails #metadata .opt-dep,
+#pkgdetails #metadata .make-dep,
+#pkgdetails #metadata .check-dep,
+#pkgdetails #metadata .dep-desc {
+ font-style: italic;
+}
+#pkgdetails #pkgreqs {
+ float: left;
+ width: 50%;
+}
+
+#pkgdetails #pkgfiles {
+ clear: left;
+ padding-top: 1em;
+}
+
+#pkgfilelist li.d {
+ color: #666;
+}
+
+#pkgfilelist li.f {
+}
+
+/* mirror stuff */
+table td.country {
+ white-space: normal;
+}
+
+#list-generator div ul {
+ list-style: none;
+ display: inline;
+ padding-left: 0;
+}
+
+ #list-generator div ul li {
+ display: inline;
+ }
+
+.visualize-mirror .axis path,
+.visualize-mirror .axis line {
+ fill: none;
+ stroke: #000;
+ stroke-width: 3px;
+ shape-rendering: crispEdges;
+}
+
+.visualize-mirror .url-dot {
+ stroke: #000;
+}
+
+.visualize-mirror .url-line {
+ fill: none;
+ stroke-width: 1.5px;
+}
+
+/* dev/TU biographies */
+#arch-bio-toc {
+ width: 75%;
+ margin: 0 auto;
+ text-align: center;
+}
+
+ #arch-bio-toc a {
+ white-space: nowrap;
+ }
+
+.arch-bio-entry {
+ width: 75%;
+ min-width: 640px;
+ margin: 0 auto;
+}
+
+ .arch-bio-entry td.pic {
+ vertical-align: top;
+ padding-right: 15px;
+ padding-top: 2.25em;
+ }
+
+ .arch-bio-entry td.pic img {
+ padding: 4px;
+ border: 1px solid #ccc;
+ }
+
+ .arch-bio-entry td h3 {
+ border-bottom: 1px dotted #ccc;
+ margin-bottom: 0.5em;
+ }
+
+ .arch-bio-entry table.bio {
+ margin-bottom: 2em;
+ }
+
+ .arch-bio-entry table.bio th {
+ color: #666;
+ font-weight: normal;
+ text-align: right;
+ padding-right: 0.5em;
+ vertical-align: top;
+ white-space: nowrap;
+ }
+
+ .arch-bio-entry table.bio td {
+ width: 100%;
+ padding-bottom: 0.25em;
+ white-space: normal;
+ }
+
+/* dev: login/out */
+#dev-login {
+ width: auto;
+}
+
+/* dev dashboard: flagged packages */
+#dash-pkg-notify {
+ text-align: right;
+ padding: 1em 0 0;
+ margin-top: 1em;
+ font-size: 0.85em;
+ border-top: 1px dotted #bbb;
+}
+
+ #dash-pkg-notify label {
+ width: auto;
+ font-weight: normal;
+ }
+
+ #dash-pkg-notify input {
+ vertical-align: middle;
+ margin: 0 0.25em;
+ }
+
+ #dash-pkg-notify input[type=submit] {
+ margin-top: -0.25em;
+ }
+
+ #dash-pkg-notify p {
+ margin: 0;
+ }
+
+table.dash-stats .key {
+ width: 50%;
+}
+
+/* dev dashboard: admin actions (add news items, todo list, etc) */
+ul.admin-actions {
+ float: right;
+ list-style: none;
+ margin-top: -2.5em;
+}
+
+ ul.admin-actions li {
+ display: inline;
+ padding-left: 1.5em;
+ }
+
+/* colored yes/no type values */
+.todo-table .complete,
+.signoff-yes,
+#key-status .signed-yes,
+#releng-result .success-yes,
+#release-list .available-yes {
+ color: green;
+}
+
+.todo-table .incomplete,
+.signoff-no,
+#key-status .signed-no,
+#releng-result .success-no,
+#release-list .available-no {
+ color: red;
+}
+
+.todo-table .inprogress,
+.signoff-bad {
+ color: darkorange;
+}
+
+
+/* todo lists (public and private) */
+.todo-info {
+ color: #999;
+ border-bottom: 1px dotted #bbb;
+}
+
+.todo-description {
+ margin-top: 1em;
+ padding-left: 2em;
+ max-width: 900px;
+}
+
+.todo-pkgbases {
+ border-top: 1px dotted #bbb;
+}
+
+.todo-list h4 {
+ margin-top: 0;
+ margin-bottom: 0.4em;
+}
+
+/* dev: signoff page */
+#dev-signoffs tr:hover {
+ background: #ffd;
+}
+
+ul.signoff-list {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.signoff-yes {
+ font-weight: bold;
+}
+
+.signoff-disabled {
+ color: gray;
+}
+
+/* iso testing feedback form */
+#releng-feedback label {
+ width: auto;
+ display: inline;
+ font-weight: normal;
+}
+
+#releng-feedback ul {
+ padding-left: 1em;
+}
+
+#releng-feedback li {
+ list-style: none;
+}
+
+#releng-feedback ul+.helptext {
+ position: relative; top: -0.9em;
+}
+
+/* visualizations page */
+.visualize-buttons {
+ margin: 0.5em 0.33em;
+}
+
+ .visualize-buttons button.active {
+ depressed: true;
+ }
+
+.visualize-chart {
+ position: relative;
+ height: 500px;
+ margin: 0.33em;
+}
+
+#visualize-archrepo .treemap-cell {
+ border: solid 1px white;
+ overflow: hidden;
+ position: absolute;
+}
+
+ #visualize-archrepo .treemap-cell span {
+ padding: 3px;
+ font-size: 0.85em;
+ line-height: 1em;
+ }
+
+#visualize-keys svg {
+ width: 100%;
+ height: 100%;
+}
diff --git a/sitestatic/archweb.js b/sitestatic/archweb.js
new file mode 100644
index 00000000..dce9cd0c
--- /dev/null
+++ b/sitestatic/archweb.js
@@ -0,0 +1,577 @@
+/* archweb.js
+ * Homepage: https://projects.archlinux.org/archweb.git/
+ * Copyright: 2007-2013 The Archweb Team
+ * License: GPLv2
+ *
+ * This file is part of Archweb.
+ *
+ * Archweb is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Archweb is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Archweb. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*'use strict';*/
+/* tablesorter custom parsers for various pages:
+ * devel/index.html, mirrors/status.html, todolists/view.html */
+if (typeof $ !== 'undefined' && typeof $.tablesorter !== 'undefined') {
+ $.tablesorter.addParser({
+ id: 'pkgcount',
+ is: function(s) { return false; },
+ format: function(s) {
+ var m = s.match(/\d+/);
+ return m ? parseInt(m[0], 10) : 0;
+ },
+ type: 'numeric'
+ });
+
+ $.tablesorter.addParser({
+ id: 'todostatus',
+ is: function(s) { return false; },
+ format: function(s) {
+ if (s.match(/incomplete/i)) {
+ return 1;
+ } else if (s.match(/in-progress/i)) {
+ return 0.5;
+ }
+ return 0;
+ },
+ type: 'numeric'
+ });
+
+ $.tablesorter.addParser({
+ /* sorts numeric, but put '', 'unknown', and '∞' last. */
+ id: 'mostlydigit',
+ special: ['', 'unknown', '∞'],
+ is: function(s, table) {
+ var c = table.config;
+ return ($.inArray(s, this.special) > -1) || $.tablesorter.isDigit(s, c);
+ },
+ format: function(s, t) {
+ if ($.inArray(s, this.special) > -1) {
+ return Number.MAX_VALUE;
+ }
+ return $.tablesorter.formatFloat(s, t);
+ },
+ type: 'numeric'
+ });
+
+ $.tablesorter.addParser({
+ /* sorts duration; put '', 'unknown', and '∞' last. */
+ id: 'duration',
+ re: /^([0-9]+):([0-5][0-9])$/,
+ special: ['', 'unknown', '∞'],
+ is: function(s) {
+ return ($.inArray(s, this.special) > -1) || this.re.test(s);
+ },
+ format: function(s) {
+ if ($.inArray(s, this.special) > -1) {
+ return Number.MAX_VALUE;
+ }
+ var matches = this.re.exec(s);
+ if (!matches) {
+ return Number.MAX_VALUE;
+ }
+ return matches[1] * 60 + matches[2];
+ },
+ type: 'numeric'
+ });
+ $.tablesorter.addParser({
+ id: 'epochdate',
+ is: function(s) { return false; },
+ format: function(s, t, c) {
+ /* TODO: this assumes our magic class is the only one */
+ var epoch = $(c).attr('class');
+ if (epoch.indexOf('epoch-') !== 0) {
+ return 0;
+ }
+ return epoch.slice(6);
+ },
+ type: 'numeric'
+ });
+
+ $.tablesorter.addParser({
+ id: 'longDateTime',
+ re: /^(\d{4})-(\d{2})-(\d{2}) ([012]\d):([0-5]\d)(:([0-5]\d))?( (\w+))?$/,
+ is: function(s) {
+ return this.re.test(s);
+ },
+ format: function(s, t) {
+ var matches = this.re.exec(s);
+ if (!matches) {
+ return 0;
+ }
+ /* skip group 6, group 7 is optional seconds */
+ if (matches[7] === undefined) {
+ matches[7] = 0;
+ }
+ /* The awesomeness of the JS date constructor. Month needs to be
+ * between 0-11, because things have to be difficult. */
+ var date = new Date(matches[1], matches[2] - 1, matches[3],
+ matches[4], matches[5], matches[7]);
+ return $.tablesorter.formatFloat(date.getTime(), t);
+ },
+ type: 'numeric'
+ });
+
+ $.tablesorter.addParser({
+ id: 'filesize',
+ re: /^(\d+(?:\.\d+)?)[ \u00a0](bytes?|[KMGTPEZY]i?B)$/,
+ is: function(s) {
+ return this.re.test(s);
+ },
+ format: function(s) {
+ var matches = this.re.exec(s);
+ if (!matches) {
+ return 0;
+ }
+ var size = parseFloat(matches[1]),
+ suffix = matches[2];
+
+ switch(suffix) {
+ /* intentional fall-through at each level */
+ case 'YB':
+ case 'YiB':
+ size *= 1024;
+ case 'ZB':
+ case 'ZiB':
+ size *= 1024;
+ case 'EB':
+ case 'EiB':
+ size *= 1024;
+ case 'PB':
+ case 'PiB':
+ size *= 1024;
+ case 'TB':
+ case 'TiB':
+ size *= 1024;
+ case 'GB':
+ case 'GiB':
+ size *= 1024;
+ case 'MB':
+ case 'MiB':
+ size *= 1024;
+ case 'KB':
+ case 'KiB':
+ size *= 1024;
+ }
+ return size;
+ },
+ type: 'numeric'
+ });
+
+ $.tablesorter.removeParser = function(id) {
+ $.tablesorter.parsers = $.grep($.tablesorter.parsers,
+ function(ele, i) {
+ return ele.id !== id;
+ });
+ };
+
+ // We don't use currency, and the parser is over-zealous at deciding it
+ // matches. Kill it from the parser selection.
+ $.tablesorter.removeParser('currency');
+}
+
+(function($) {
+ $.fn.enableCheckboxRangeSelection = function() {
+ var lastCheckbox = null,
+ spec = this;
+
+ spec.unbind("click.checkboxrange");
+ spec.bind("click.checkboxrange", function(e) {
+ if (lastCheckbox !== null && e.shiftKey) {
+ spec.slice(
+ Math.min(spec.index(lastCheckbox), spec.index(e.target)),
+ Math.max(spec.index(lastCheckbox), spec.index(e.target)) + 1
+ ).attr({checked: e.target.checked ? "checked" : ""});
+ }
+ lastCheckbox = e.target;
+ });
+
+ };
+})(jQuery);
+
+/* news/add.html */
+function enablePreview() {
+ $('#news-preview-button').click(function(event) {
+ event.preventDefault();
+ $.post('/news/preview/', {
+ data: $('#id_content').val(),
+ csrfmiddlewaretoken: $('#newsform input[name=csrfmiddlewaretoken]').val()
+ },
+ function(data) {
+ $('#news-preview-data').html(data);
+ $('#news-preview').show();
+ }
+ );
+ $('#news-preview-title').html($('#id_title').val());
+ });
+}
+
+/* packages/details.html */
+function ajaxifyFiles() {
+ $('#filelink').click(function(event) {
+ event.preventDefault();
+ $.getJSON(this.href + 'json/', function(data) {
+ // Map each file item into an <li/> with the correct class
+ var list_items = $.map(data.files, function(value, i) {
+ var cls = value.match(/\/$/) ? 'd' : 'f';
+ return ['<li class="', cls, '">', value, '</li>'];
+ });
+ $('#pkgfilelist').empty();
+ if (data.pkg_last_update > data.files_last_update) {
+ $('#pkgfilelist').append('<p class="message">Note: This file list was generated from a previous version of the package; it may be out of date.</p>');
+ }
+ if (list_items.length > 0) {
+ $('#pkgfilelist').append('<ul>' + list_items.join('') + '</ul>');
+ } else if (data.files_last_update === null) {
+ $('#pkgfilelist').append('<p class="message">No file list available.</p>');
+ } else {
+ $('#pkgfilelist').append('<p class="message">Package has no files.</p>');
+ }
+ });
+ });
+}
+
+function collapseDependsList(list) {
+ list = $(list);
+ // Hide everything past a given limit. Don't do anything if we don't have
+ // enough items, or the link already exists.
+ var limit = 20,
+ linkid = list.attr('id') + 'link',
+ items = list.find('li').slice(limit);
+ if (items.length <= 1 || $('#' + linkid).length > 0) {
+ return;
+ }
+ items.hide();
+ list.after('<p><a id="' + linkid + '" href="#">Show More…</a></p>');
+
+ // add link and wire it up to show the hidden items
+ $('#' + linkid).click(function(event) {
+ event.preventDefault();
+ list.find('li').show();
+ // remove the full <p/> node from the DOM
+ $(this).parent().remove();
+ });
+}
+
+function collapseRelatedTo(elements) {
+ var limit = 5;
+ $(elements).each(function(idx, ele) {
+ ele = $(ele);
+ // Hide everything past a given limit. Don't do anything if we don't
+ // have enough items, or the link already exists.
+ var items = ele.find('span.related').slice(limit);
+ if (items.length <= 1 || ele.find('a.morelink').length > 0) {
+ return;
+ }
+ items.hide();
+ ele.append('<a class="morelink" href="#">More…</a>');
+
+ // add link and wire it up to show the hidden items
+ ele.find('a.morelink').click(function(event) {
+ event.preventDefault();
+ ele.find('span.related').show();
+ $(this).remove();
+ });
+ });
+}
+
+/* packages/differences.html */
+function filter_packages() {
+ /* start with all rows, and then remove ones we shouldn't show */
+ var rows = $('#tbody_differences').children(),
+ all_rows = rows;
+ if (!$('#id_multilib').is(':checked')) {
+ rows = rows.not('.multilib').not('.multilib-testing');
+ }
+ var arch = $('#id_archonly').val();
+ if (arch !== 'all') {
+ rows = rows.filter('.' + arch);
+ }
+ if (!$('#id_minor').is(':checked')) {
+ /* this check is done last because it is the most expensive */
+ var pat = /(.*)-(.+)/;
+ rows = rows.filter(function(index) {
+ var cells = $(this).children('td');
+
+ /* all this just to get the split version out of the table cell */
+ var ver_a = cells.eq(2).text().match(pat);
+ if (!ver_a) {
+ return true;
+ }
+
+ var ver_b = cells.eq(3).text().match(pat);
+ if (!ver_b) {
+ return true;
+ }
+
+ /* first check pkgver */
+ if (ver_a[1] !== ver_b[1]) {
+ return true;
+ }
+ /* pkgver matched, so see if rounded pkgrel matches */
+ if (Math.floor(parseFloat(ver_a[2])) ===
+ Math.floor(parseFloat(ver_b[2]))) {
+ return false;
+ }
+ /* pkgrel didn't match, so keep the row */
+ return true;
+ });
+ }
+ /* hide all rows, then show the set we care about */
+ all_rows.hide();
+ rows.show();
+ /* make sure we update the odd/even styling from sorting */
+ $('.results').trigger('applyWidgets', [false]);
+}
+function filter_packages_reset() {
+ $('#id_archonly').val('both');
+ $('#id_multilib').removeAttr('checked');
+ $('#id_minor').removeAttr('checked');
+ filter_packages();
+}
+
+/* todolists/view.html */
+function todolist_flag() {
+ // TODO: fix usage of this
+ var link = this;
+ $.getJSON(link.href, function(data) {
+ $(link).text(data.status).removeClass(
+ 'complete inprogress incomplete').addClass(
+ data.css_class.toLowerCase());
+ /* let tablesorter know the cell value has changed */
+ $('.results').trigger('updateCell', [$(link).closest('td')[0], false, null]);
+ });
+ return false;
+}
+
+function filter_pkgs_list(filter_ele, tbody_ele) {
+ /* start with all rows, and then remove ones we shouldn't show */
+ var rows = $(tbody_ele).children(),
+ all_rows = rows;
+ /* apply the filters, cheaper ones first */
+ if ($('#id_mine_only').is(':checked')) {
+ rows = rows.filter('.mine');
+ }
+ /* apply arch and repo filters */
+ $(filter_ele + ' .arch_filter').add(
+ filter_ele + ' .repo_filter').each(function() {
+ if (!$(this).is(':checked')) {
+ rows = rows.not('.' + $(this).val());
+ }
+ });
+ /* more expensive filter because of 'has' call */
+ if ($('#id_incomplete').is(':checked')) {
+ rows = rows.has('.incomplete');
+ }
+ /* hide all rows, then show the set we care about */
+ all_rows.hide();
+ rows.show();
+ $('#filter-count').text(rows.length);
+ /* make sure we update the odd/even styling from sorting */
+ $('.results').trigger('applyWidgets', [false]);
+}
+function filter_pkgs_reset(callback) {
+ $('#id_incomplete').removeAttr('checked');
+ $('#id_mine_only').removeAttr('checked');
+ $('.arch_filter').attr('checked', 'checked');
+ $('.repo_filter').attr('checked', 'checked');
+ callback();
+}
+
+function filter_todolist_save(list_id) {
+ var state = $('#todolist_filter').serializeArray();
+ localStorage['filter_todolist_' + list_id] = JSON.stringify(state);
+}
+function filter_todolist_load(list_id) {
+ var state = localStorage['filter_todolist_' + list_id];
+ if (!state)
+ return;
+ state = JSON.parse(state);
+ $('#todolist_filter input[type="checkbox"]').removeAttr('checked');
+ $.each(state, function (i, v) {
+ // this assumes our only filters are checkboxes
+ $('#todolist_filter input[name="' + v['name'] + '"]').attr('checked', 'checked');
+ });
+}
+
+function filter_report_save(report_id) {
+ var state = $('#report_filter').serializeArray();
+ localStorage['filter_report_' + report_id] = JSON.stringify(state);
+}
+function filter_report_load(report_id) {
+ var state = localStorage['filter_report_' + report_id];
+ if (!state)
+ return;
+ state = JSON.parse(state);
+ $('#report_filter input[type="checkbox"]').removeAttr('checked');
+ $.each(state, function (i, v) {
+ // this assumes our only filters are checkboxes
+ $('#report_filter input[name="' + v['name'] + '"]').attr('checked', 'checked');
+ });
+}
+
+/* signoffs.html */
+function signoff_package() {
+ // TODO: fix usage of this
+ var link = this;
+ $.getJSON(link.href, function(data) {
+ link = $(link);
+ var signoff = null,
+ cell = link.closest('td');
+ if (data.created) {
+ signoff = $('<li>').addClass('signed-username').text(data.user);
+ var list = cell.children('ul.signoff-list');
+ if (list.size() === 0) {
+ list = $('<ul class="signoff-list">').prependTo(cell);
+ }
+ list.append(signoff);
+ } else if(data.user) {
+ signoff = link.closest('td').find('li').filter(function(index) {
+ return $(this).text() == data.user;
+ });
+ }
+ if (signoff && data.revoked) {
+ signoff.text(signoff.text() + ' (revoked)');
+ }
+ /* update the approved column to reflect reality */
+ var approved = link.closest('tr').children('.approval');
+ approved.attr('class', 'approval');
+ if (data.known_bad) {
+ approved.text('Bad').addClass('signoff-bad');
+ } else if (!data.enabled) {
+ approved.text('Disabled').addClass('signoff-disabled');
+ } else if (data.approved) {
+ approved.text('Yes').addClass('signoff-yes');
+ } else {
+ approved.text('No').addClass('signoff-no');
+ }
+ link.removeAttr('title');
+ /* Form our new link. The current will be something like
+ * '/packages/repo/arch/package/...' */
+ var base_href = link.attr('href').split('/').slice(0, 5).join('/');
+ if (data.revoked) {
+ link.text('Signoff');
+ link.attr('href', base_href + '/signoff/');
+ /* should we be hiding the link? */
+ if (data.known_bad || !data.enabled) {
+ link.remove();
+ }
+ } else {
+ link.text('Revoke Signoff');
+ link.attr('href', base_href + '/signoff/revoke/');
+ }
+ /* let tablesorter know the cell value has changed */
+ $('.results').trigger('updateCell', [approved[0], false, null]);
+ });
+ return false;
+}
+
+function filter_signoffs() {
+ /* start with all rows, and then remove ones we shouldn't show */
+ var rows = $('#tbody_signoffs').children(),
+ all_rows = rows;
+ /* apply arch and repo filters */
+ $('#signoffs_filter .arch_filter').add(
+ '#signoffs_filter .repo_filter').each(function() {
+ if (!$(this).is(':checked')) {
+ rows = rows.not('.' + $(this).val());
+ }
+ });
+ /* and then the slightly more expensive pending check */
+ if ($('#id_pending').is(':checked')) {
+ rows = rows.has('td.signoff-no');
+ }
+ /* hide all rows, then show the set we care about */
+ all_rows.hide();
+ rows.show();
+ $('#filter-count').text(rows.length);
+ /* make sure we update the odd/even styling from sorting */
+ $('.results').trigger('applyWidgets', [false]);
+ filter_signoffs_save();
+}
+function filter_signoffs_reset() {
+ $('#signoffs_filter .arch_filter').attr('checked', 'checked');
+ $('#signoffs_filter .repo_filter').attr('checked', 'checked');
+ $('#id_pending').removeAttr('checked');
+ filter_signoffs();
+}
+function filter_signoffs_save() {
+ var state = $('#signoffs_filter').serializeArray();
+ localStorage['filter_signoffs'] = JSON.stringify(state);
+}
+function filter_signoffs_load() {
+ var state = localStorage['filter_signoffs'];
+ if (!state)
+ return;
+ state = JSON.parse(state);
+ $('#signoffs_filter input[type="checkbox"]').removeAttr('checked');
+ $.each(state, function (i, v) {
+ // this assumes our only filters are checkboxes
+ $('#signoffs_filter input[name="' + v['name'] + '"]').attr('checked', 'checked');
+ });
+}
+
+function collapseNotes(elements) {
+ // Remove any trailing <br/> tags from the note contents
+ $(elements).children('br').filter(':last-child').filter(function(i, e) { return !e.nextSibling; }).remove();
+
+ var maxElements = 8;
+ $(elements).each(function(idx, ele) {
+ ele = $(ele);
+ // Hide everything past a given limit. Don't do anything if we don't
+ // have enough items, or the link already exists.
+ var contents = ele.contents();
+ if (contents.length <= maxElements || ele.find('a.morelink').length > 0) {
+ return;
+ }
+ contents.slice(maxElements).wrapAll('<div class="hide"/>');
+ ele.append('<br class="morelink-spacer"/><a class="morelink" href="#">Show More…</a>');
+
+ // add link and wire it up to show the hidden items
+ ele.find('a.morelink').click(function(event) {
+ event.preventDefault();
+ $(this).remove();
+ ele.find('br.morelink-spacer').remove();
+ // move the div contents back and delete the empty div
+ var hidden = ele.find('div.hide');
+ hidden.contents().appendTo(ele);
+ hidden.remove();
+ });
+ });
+}
+
+/* visualizations */
+function format_filesize(size, decimals) {
+ /*var labels = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];*/
+ var labels = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
+ label = 0;
+
+ while (size > 2048.0 && label < labels.length - 1) {
+ label++;
+ size /= 1024.0;
+ }
+ if (decimals === undefined) {
+ decimals = 2;
+ }
+
+ return size.toFixed(decimals) + ' ' + labels[label];
+}
+
+/* HTML5 input type and attribute enhancements */
+function modify_attributes(to_change) {
+ /* jQuery doesn't let us change the 'type' attribute directly due to IE
+ woes, so instead we can clone and replace, setting the type. */
+ $.each(to_change, function(id, attrs) {
+ var obj = $(id);
+ obj.replaceWith(obj.clone().attr(attrs));
+ });
+}
diff --git a/sitestatic/ceata-parabola.png b/sitestatic/ceata-parabola.png
new file mode 100644
index 00000000..0afea73a
--- /dev/null
+++ b/sitestatic/ceata-parabola.png
Binary files differ
diff --git a/sitestatic/click_and_pledge.png b/sitestatic/click_and_pledge.png
new file mode 100644
index 00000000..078bf88e
--- /dev/null
+++ b/sitestatic/click_and_pledge.png
Binary files differ
diff --git a/sitestatic/download.png b/sitestatic/download.png
new file mode 100644
index 00000000..9ab858c2
--- /dev/null
+++ b/sitestatic/download.png
Binary files differ
diff --git a/sitestatic/flags/fam.css b/sitestatic/flags/fam.css
new file mode 100644
index 00000000..f4c047d0
--- /dev/null
+++ b/sitestatic/flags/fam.css
@@ -0,0 +1,270 @@
+/**
+ * fam flag icons CSS.
+ */
+
+.fam-flag {
+ display: inline-block;
+ width: 16px;
+ height: 11px;
+ line-height: 11px;
+ background-image: url("fam.png");
+ background-position: -208px -188px;
+ background-repeat: no-repeat;
+}
+
+.fam-flag-zw { background-position: 0px 0px; }
+.fam-flag-zm { background-position: -16px 0px; }
+.fam-flag-za { background-position: 0px -11px; }
+.fam-flag-yt { background-position: -16px -11px; }
+.fam-flag-ye { background-position: -32px 0px; }
+.fam-flag-ws { background-position: -32px -11px; }
+.fam-flag-wf { background-position: 0px -22px; }
+.fam-flag-wales { background-position: -16px -22px; }
+.fam-flag-vu { background-position: -32px -22px; }
+.fam-flag-vn { background-position: 0px -33px; }
+.fam-flag-vi { background-position: -16px -33px; }
+.fam-flag-vg { background-position: -32px -33px; }
+.fam-flag-ve { background-position: -48px 0px; }
+.fam-flag-vc { background-position: -48px -11px; }
+.fam-flag-va { background-position: -48px -22px; }
+.fam-flag-uz { background-position: -48px -33px; }
+.fam-flag-uy { background-position: 0px -44px; }
+.fam-flag-us { background-position: -16px -44px; }
+.fam-flag-um { background-position: -16px -44px; }
+.fam-flag-ug { background-position: -32px -44px; }
+.fam-flag-ua { background-position: -48px -44px; }
+.fam-flag-tz { background-position: -64px 0px; }
+.fam-flag-tw { background-position: -64px -11px; }
+.fam-flag-tv { background-position: -64px -22px; }
+.fam-flag-tt { background-position: -64px -33px; }
+.fam-flag-tr { background-position: -64px -44px; }
+.fam-flag-to { background-position: 0px -55px; }
+.fam-flag-tn { background-position: -16px -55px; }
+.fam-flag-tm { background-position: -32px -55px; }
+.fam-flag-tl { background-position: -48px -55px; }
+.fam-flag-tk { background-position: -64px -55px; }
+.fam-flag-tj { background-position: 0px -66px; }
+.fam-flag-th { background-position: -16px -66px; }
+.fam-flag-tg { background-position: -32px -66px; }
+.fam-flag-tf { background-position: -48px -66px; }
+.fam-flag-td { background-position: -64px -66px; }
+.fam-flag-tc { background-position: -80px 0px; }
+.fam-flag-sz { background-position: -80px -11px; }
+.fam-flag-sy { background-position: -80px -22px; }
+.fam-flag-sx { background-position: -80px -33px; }
+.fam-flag-sv { background-position: -80px -44px; }
+.fam-flag-st { background-position: -80px -55px; }
+.fam-flag-ss { background-position: -80px -66px; }
+.fam-flag-sr { background-position: 0px -77px; }
+.fam-flag-so { background-position: -16px -77px; }
+.fam-flag-sn { background-position: -32px -77px; }
+.fam-flag-sm { background-position: -48px -77px; }
+.fam-flag-sl { background-position: -64px -77px; }
+.fam-flag-sk { background-position: -80px -77px; }
+.fam-flag-si { background-position: -96px 0px; }
+.fam-flag-sh { background-position: -96px -11px; }
+.fam-flag-sg { background-position: -96px -22px; }
+.fam-flag-se { background-position: -96px -33px; }
+.fam-flag-sd { background-position: -96px -44px; }
+.fam-flag-scotland { background-position: -96px -55px; }
+.fam-flag-sc { background-position: -96px -66px; }
+.fam-flag-sb { background-position: -96px -77px; }
+.fam-flag-sa { background-position: 0px -88px; }
+.fam-flag-rw { background-position: -16px -88px; }
+.fam-flag-ru { background-position: -32px -88px; }
+.fam-flag-rs { background-position: -48px -88px; }
+.fam-flag-ro { background-position: -64px -88px; }
+.fam-flag-qa { background-position: -80px -88px; }
+.fam-flag-py { background-position: -96px -88px; }
+.fam-flag-pw { background-position: 0px -99px; }
+.fam-flag-pt { background-position: -16px -99px; }
+.fam-flag-ps { background-position: -32px -99px; }
+.fam-flag-pr { background-position: -48px -99px; }
+.fam-flag-pn { background-position: -64px -99px; }
+.fam-flag-pm { background-position: -80px -99px; }
+.fam-flag-pl { background-position: -96px -99px; }
+.fam-flag-pk { background-position: -112px 0px; }
+.fam-flag-ph { background-position: -112px -11px; }
+.fam-flag-pg { background-position: -112px -22px; }
+.fam-flag-pf { background-position: -112px -33px; }
+.fam-flag-pe { background-position: -112px -44px; }
+.fam-flag-pa { background-position: -112px -55px; }
+.fam-flag-om { background-position: -112px -66px; }
+.fam-flag-nz { background-position: -112px -77px; }
+.fam-flag-nu { background-position: -112px -88px; }
+.fam-flag-nr { background-position: -112px -99px; }
+.fam-flag-no { background-position: 0px -110px; }
+.fam-flag-bv { background-position: 0px -110px; }
+.fam-flag-sj { background-position: 0px -110px; }
+.fam-flag-nl { background-position: -16px -110px; }
+.fam-flag-ni { background-position: -32px -110px; }
+.fam-flag-ng { background-position: -48px -110px; }
+.fam-flag-nf { background-position: -64px -110px; }
+.fam-flag-ne { background-position: -80px -110px; }
+.fam-flag-nc { background-position: -96px -110px; }
+.fam-flag-na { background-position: -112px -110px; }
+.fam-flag-mz { background-position: -128px 0px; }
+.fam-flag-my { background-position: -128px -11px; }
+.fam-flag-mx { background-position: -128px -22px; }
+.fam-flag-mw { background-position: -128px -33px; }
+.fam-flag-mv { background-position: -128px -44px; }
+.fam-flag-mu { background-position: -128px -55px; }
+.fam-flag-mt { background-position: -128px -66px; }
+.fam-flag-ms { background-position: -128px -77px; }
+.fam-flag-mr { background-position: -128px -88px; }
+.fam-flag-mq { background-position: -128px -99px; }
+.fam-flag-mp { background-position: -128px -110px; }
+.fam-flag-mo { background-position: 0px -121px; }
+.fam-flag-mn { background-position: -16px -121px; }
+.fam-flag-mm { background-position: -32px -121px; }
+.fam-flag-ml { background-position: -48px -121px; }
+.fam-flag-mk { background-position: -64px -121px; }
+.fam-flag-mh { background-position: -80px -121px; }
+.fam-flag-mg { background-position: -96px -121px; }
+.fam-flag-me { background-position: 0px -132px; width: 16px; height: 12px; }
+.fam-flag-md { background-position: -112px -121px; }
+.fam-flag-mc { background-position: -128px -121px; }
+.fam-flag-ma { background-position: -16px -132px; }
+.fam-flag-ly { background-position: -32px -132px; }
+.fam-flag-lv { background-position: -48px -132px; }
+.fam-flag-lu { background-position: -64px -132px; }
+.fam-flag-lt { background-position: -80px -132px; }
+.fam-flag-ls { background-position: -96px -132px; }
+.fam-flag-lr { background-position: -112px -132px; }
+.fam-flag-lk { background-position: -128px -132px; }
+.fam-flag-li { background-position: -144px 0px; }
+.fam-flag-lc { background-position: -144px -11px; }
+.fam-flag-lb { background-position: -144px -22px; }
+.fam-flag-la { background-position: -144px -33px; }
+.fam-flag-kz { background-position: -144px -44px; }
+.fam-flag-ky { background-position: -144px -55px; }
+.fam-flag-kw { background-position: -144px -66px; }
+.fam-flag-kr { background-position: -144px -77px; }
+.fam-flag-kp { background-position: -144px -88px; }
+.fam-flag-kn { background-position: -144px -99px; }
+.fam-flag-km { background-position: -144px -110px; }
+.fam-flag-ki { background-position: -144px -121px; }
+.fam-flag-kh { background-position: -144px -132px; }
+.fam-flag-kg { background-position: 0px -144px; }
+.fam-flag-ke { background-position: -16px -144px; }
+.fam-flag-jp { background-position: -32px -144px; }
+.fam-flag-jo { background-position: -48px -144px; }
+.fam-flag-jm { background-position: -64px -144px; }
+.fam-flag-je { background-position: -80px -144px; }
+.fam-flag-it { background-position: -96px -144px; }
+.fam-flag-is { background-position: -112px -144px; }
+.fam-flag-ir { background-position: -128px -144px; }
+.fam-flag-iq { background-position: -144px -144px; }
+.fam-flag-io { background-position: -160px 0px; }
+.fam-flag-in { background-position: -160px -11px; }
+.fam-flag-im { background-position: -160px -22px; width: 16px; height: 9px; }
+.fam-flag-il { background-position: -160px -31px; }
+.fam-flag-ie { background-position: -160px -42px; }
+.fam-flag-id { background-position: -160px -53px; }
+.fam-flag-hu { background-position: -160px -64px; }
+.fam-flag-ht { background-position: -160px -75px; }
+.fam-flag-hr { background-position: -160px -86px; }
+.fam-flag-hn { background-position: -160px -97px; }
+.fam-flag-hk { background-position: -160px -108px; }
+.fam-flag-gy { background-position: -160px -119px; }
+.fam-flag-gw { background-position: -160px -130px; }
+.fam-flag-gu { background-position: -160px -141px; }
+.fam-flag-gt { background-position: 0px -155px; }
+.fam-flag-gs { background-position: -16px -155px; }
+.fam-flag-gr { background-position: -32px -155px; }
+.fam-flag-gq { background-position: -48px -155px; }
+.fam-flag-gp { background-position: -64px -155px; }
+.fam-flag-gn { background-position: -80px -155px; }
+.fam-flag-gm { background-position: -96px -155px; }
+.fam-flag-gl { background-position: -112px -155px; }
+.fam-flag-gi { background-position: -128px -155px; }
+.fam-flag-gh { background-position: -144px -155px; }
+.fam-flag-gg { background-position: -160px -155px; }
+.fam-flag-ge { background-position: -176px 0px; }
+.fam-flag-gd { background-position: -176px -11px; }
+.fam-flag-gb { background-position: -176px -22px; }
+.fam-flag-ga { background-position: -176px -33px; }
+.fam-flag-fr { background-position: -176px -44px; }
+.fam-flag-gf { background-position: -176px -44px; }
+.fam-flag-re { background-position: -176px -44px; }
+.fam-flag-mf { background-position: -176px -44px; }
+.fam-flag-bl { background-position: -176px -44px; }
+.fam-flag-fo { background-position: -176px -55px; }
+.fam-flag-fm { background-position: -176px -66px; }
+.fam-flag-fk { background-position: -176px -77px; }
+.fam-flag-fj { background-position: -176px -88px; }
+.fam-flag-fi { background-position: -176px -99px; }
+.fam-flag-fam { background-position: -176px -110px; }
+.fam-flag-eu { background-position: -176px -121px; }
+.fam-flag-et { background-position: -176px -132px; }
+.fam-flag-es { background-position: -176px -143px; }
+.fam-flag-er { background-position: -176px -154px; }
+.fam-flag-england { background-position: 0px -166px; }
+.fam-flag-eh { background-position: -16px -166px; }
+.fam-flag-eg { background-position: -32px -166px; }
+.fam-flag-ee { background-position: -48px -166px; }
+.fam-flag-ec { background-position: -64px -166px; }
+.fam-flag-dz { background-position: -80px -166px; }
+.fam-flag-do { background-position: -96px -166px; }
+.fam-flag-dm { background-position: -112px -166px; }
+.fam-flag-dk { background-position: -128px -166px; }
+.fam-flag-dj { background-position: -144px -166px; }
+.fam-flag-de { background-position: -160px -166px; }
+.fam-flag-cz { background-position: -176px -166px; }
+.fam-flag-cy { background-position: 0px -177px; }
+.fam-flag-cx { background-position: -16px -177px; }
+.fam-flag-cw { background-position: -32px -177px; }
+.fam-flag-cv { background-position: -48px -177px; }
+.fam-flag-cu { background-position: -64px -177px; }
+.fam-flag-cs { background-position: -80px -177px; }
+.fam-flag-cr { background-position: -96px -177px; }
+.fam-flag-co { background-position: -112px -177px; }
+.fam-flag-cn { background-position: -128px -177px; }
+.fam-flag-cm { background-position: -144px -177px; }
+.fam-flag-cl { background-position: -160px -177px; }
+.fam-flag-ck { background-position: -176px -177px; }
+.fam-flag-ci { background-position: -192px 0px; }
+.fam-flag-cg { background-position: -192px -11px; }
+.fam-flag-cf { background-position: -192px -22px; }
+.fam-flag-cd { background-position: -192px -33px; }
+.fam-flag-cc { background-position: -192px -44px; }
+.fam-flag-catalonia { background-position: -192px -55px; }
+.fam-flag-ca { background-position: -192px -66px; }
+.fam-flag-bz { background-position: -192px -77px; }
+.fam-flag-by { background-position: -192px -88px; }
+.fam-flag-bw { background-position: -192px -99px; }
+.fam-flag-bt { background-position: -192px -110px; }
+.fam-flag-bs { background-position: -192px -121px; }
+.fam-flag-br { background-position: -192px -132px; }
+.fam-flag-bq { background-position: -192px -143px; }
+.fam-flag-bo { background-position: -192px -154px; }
+.fam-flag-bn { background-position: -192px -165px; }
+.fam-flag-bm { background-position: -192px -176px; }
+.fam-flag-bj { background-position: 0px -188px; }
+.fam-flag-bi { background-position: -16px -188px; }
+.fam-flag-bh { background-position: -32px -188px; }
+.fam-flag-bg { background-position: -48px -188px; }
+.fam-flag-bf { background-position: -64px -188px; }
+.fam-flag-be { background-position: -80px -188px; }
+.fam-flag-bd { background-position: -96px -188px; }
+.fam-flag-bb { background-position: -112px -188px; }
+.fam-flag-ba { background-position: -128px -188px; }
+.fam-flag-az { background-position: -144px -188px; }
+.fam-flag-ax { background-position: -160px -188px; }
+.fam-flag-aw { background-position: -176px -188px; }
+.fam-flag-au { background-position: -192px -188px; }
+.fam-flag-hm { background-position: -192px -188px; }
+.fam-flag-at { background-position: -208px 0px; }
+.fam-flag-as { background-position: -208px -11px; }
+.fam-flag-ar { background-position: -208px -22px; }
+.fam-flag-ao { background-position: -208px -33px; }
+.fam-flag-an { background-position: -208px -44px; }
+.fam-flag-am { background-position: -208px -55px; }
+.fam-flag-al { background-position: -208px -66px; }
+.fam-flag-ai { background-position: -208px -77px; }
+.fam-flag-ag { background-position: -208px -88px; }
+.fam-flag-af { background-position: -208px -99px; }
+.fam-flag-ae { background-position: -208px -110px; }
+.fam-flag-ad { background-position: -208px -121px; }
+.fam-flag-np { background-position: -208px -132px; width: 9px; }
+.fam-flag-ch { background-position: -208px -143px; width: 11px; }
diff --git a/sitestatic/flags/fam.png b/sitestatic/flags/fam.png
new file mode 100644
index 00000000..953287b9
--- /dev/null
+++ b/sitestatic/flags/fam.png
Binary files differ
diff --git a/sitestatic/gandi.png b/sitestatic/gandi.png
new file mode 100644
index 00000000..85c8e1ee
--- /dev/null
+++ b/sitestatic/gandi.png
Binary files differ
diff --git a/sitestatic/kartenzia_button.png b/sitestatic/kartenzia_button.png
new file mode 100644
index 00000000..c156fc86
--- /dev/null
+++ b/sitestatic/kartenzia_button.png
Binary files differ
diff --git a/sitestatic/magnet.png b/sitestatic/magnet.png
new file mode 100644
index 00000000..f67e69b9
--- /dev/null
+++ b/sitestatic/magnet.png
Binary files differ
diff --git a/sitestatic/new.png b/sitestatic/new.png
new file mode 100644
index 00000000..6a9bf037
--- /dev/null
+++ b/sitestatic/new.png
Binary files differ
diff --git a/sitestatic/robofun.jpg b/sitestatic/robofun.jpg
new file mode 100644
index 00000000..c01ce645
--- /dev/null
+++ b/sitestatic/robofun.jpg
Binary files differ
diff --git a/sitestatic/vector_tux.png b/sitestatic/vector_tux.png
new file mode 100644
index 00000000..ab4be6d0
--- /dev/null
+++ b/sitestatic/vector_tux.png
Binary files differ
diff --git a/sitestatic/vnet_button.png b/sitestatic/vnet_button.png
new file mode 100644
index 00000000..22cfa9e4
--- /dev/null
+++ b/sitestatic/vnet_button.png
Binary files differ