gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-merchant-demos] 01/02: no web-common


From: gnunet
Subject: [taler-taler-merchant-demos] 01/02: no web-common
Date: Wed, 22 Jul 2020 16:11:35 +0200

This is an automated email from the git hooks/post-receive script.

ms pushed a commit to branch master
in repository taler-merchant-demos.

commit 147658b30dfbce61f6f4e087a0c81e85899dda15
Author: MS <ms@taler.net>
AuthorDate: Wed Jul 22 16:10:39 2020 +0200

    no web-common
---
 talermerchantdemos/blog/__init__.py                |    2 +-
 talermerchantdemos/blog/content.py                 |    6 +-
 .../blog/static/web-common/.gitignore              |    6 -
 talermerchantdemos/blog/static/web-common/AUTHORS  |    2 -
 .../blog/static/web-common/Makefile.am             |   51 -
 .../blog/static/web-common/Makefile_Guix           |    5 -
 .../blog/static/web-common/chrome-any.d.ts         |    2 -
 talermerchantdemos/blog/static/web-common/demo.css |   69 -
 .../blog/static/web-common/dropdown-navbar.html    |   51 -
 .../static/web-common/dropdown-navbar_script.js    |   60 -
 .../static/web-common/dropdown-navbar_style.css    |   58 -
 .../blog/static/web-common/favicon-taler.ico       |  Bin 1150 -> 0 bytes
 talermerchantdemos/blog/static/web-common/lang.css |   29 -
 .../blog/static/web-common/lang.html               |   29 -
 talermerchantdemos/blog/static/web-common/lang.js  |   69 -
 .../blog/static/web-common/licensing.rst           |    2 -
 .../blog/static/web-common/logo-2015-medium.png    |  Bin 75094 -> 0 bytes
 talermerchantdemos/blog/static/web-common/pure.css | 1508 --------------------
 .../blog/static/web-common/style.css               |  198 ---
 .../blog/static/web-common/taler-fallback.css      |   15 -
 .../blog/static/web-common/taler-wallet-lib.js     |  446 ------
 .../blog/static/web-common/taler-wallet-lib.ts     |  488 -------
 .../blog/static/web-common/tsconfig.json           |   17 -
 talermerchantdemos/blog/templates/base.html        |    6 +-
 24 files changed, 7 insertions(+), 3112 deletions(-)

diff --git a/talermerchantdemos/blog/__init__.py 
b/talermerchantdemos/blog/__init__.py
index 2c45f00..6b9d58a 100644
--- a/talermerchantdemos/blog/__init__.py
+++ b/talermerchantdemos/blog/__init__.py
@@ -1,3 +1,3 @@
-from talerblog.blog.blog import app
+from talermerchantdemos.blog.blog import app
 
 __all__ = ["app"]
diff --git a/talermerchantdemos/blog/content.py 
b/talermerchantdemos/blog/content.py
index 0ecfa66..a0e90dd 100644
--- a/talermerchantdemos/blog/content.py
+++ b/talermerchantdemos/blog/content.py
@@ -53,7 +53,7 @@ def add_article(slug, title, teaser, main_file, extra_files):
 # @param image the image filename.
 # @return the path to the image file.
 def get_image_file(image):
-    filex = resource_filename("talerblog", os.path.join("blog/data/", image))
+    filex = resource_filename("talermerchantdemos", os.path.join("blog/data/", 
image))
     return os.path.abspath(filex)
 
 
@@ -63,7 +63,7 @@ def get_image_file(image):
 # @param article the article filename.
 # @return the path to the article HTML file.
 def get_article_file(article):
-    filex = resource_filename("talerblog", article.main_file)
+    filex = resource_filename("talermerchantdemos", article.main_file)
     return os.path.basename(filex)
 
 
@@ -79,7 +79,7 @@ def get_article_file(article):
 #        HTML itself, so give it here if a explicit title needs to be
 #        specified.
 def add_from_html(resource_name, teaser_paragraph=0, title=None):
-    res = resource_stream("talerblog", resource_name)
+    res = resource_stream("talermerchantdemos", resource_name)
     soup = BeautifulSoup(res, 'html.parser')
     res.close()
     if title is None:
diff --git a/talermerchantdemos/blog/static/web-common/.gitignore 
b/talermerchantdemos/blog/static/web-common/.gitignore
deleted file mode 100644
index e64e5c1..0000000
--- a/talermerchantdemos/blog/static/web-common/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile
-Makefile.in
-# these should be commited pre-build to the repo, too:
-#taler-wallet-lib.js
-
-.idea
diff --git a/talermerchantdemos/blog/static/web-common/AUTHORS 
b/talermerchantdemos/blog/static/web-common/AUTHORS
deleted file mode 100644
index 7f16bf5..0000000
--- a/talermerchantdemos/blog/static/web-common/AUTHORS
+++ /dev/null
@@ -1,2 +0,0 @@
-Florian Dold
-Marcello Stanisci
diff --git a/talermerchantdemos/blog/static/web-common/Makefile.am 
b/talermerchantdemos/blog/static/web-common/Makefile.am
deleted file mode 100644
index 71c1d68..0000000
--- a/talermerchantdemos/blog/static/web-common/Makefile.am
+++ /dev/null
@@ -1,51 +0,0 @@
-# This Makefile.am is in the public domain
-EXTRA_DIST = \
- style.css \
- taler-wallet-lib.ts \
- chrome-any.d.ts \
- logo-2015-medium.png \
- licensing.rst \
- favicon-taler.ico \
- dropdown-navbar.html \
- lang.html \
- lang.css \
- lang.js \
- dropdown-navbar_style.css \
- dropdown-navbar_script.js \
- taler-fallback.css \
- tsconfig.json \
- AUTHORS
-
-# Some file may be missing here...
-pkgdata_DATA = \
-  dropdown-navbar.html \
-  favicon-taler.ico \
-  logo-2015-medium.png \
-  style.css \
-  taler-wallet-lib.js
-
-all: taler-wallet-lib.min.js taler-wallet-lib.js.tar.gz taler-wallet-lib.js
-
-%.min.js: %.js
-       python3 -m jsmin $< > $@
-
-%.js.tar.gz: %.js
-       tar czf $@ $<
-
-taler-wallet-lib.js: taler-wallet-lib.ts chrome-any.d.ts
-if HAVE_TSC
-       tsc
-else
-       @echo
-       @if [ ! -f "$@" ] ; then \
-         echo "*** Error: typescript compiler 'tsc' is missing," \
-              "can't build" $@ ; \
-         echo ; \
-         exit 1 ; \
-       else \
-          echo "*** Warning: typescript compiler 'tsc' is missing," \
-               "using pre-build" $@ ; \
-         touch "$@"; \
-       fi
-       @echo
-endif
diff --git a/talermerchantdemos/blog/static/web-common/Makefile_Guix 
b/talermerchantdemos/blog/static/web-common/Makefile_Guix
deleted file mode 100644
index 43dfe04..0000000
--- a/talermerchantdemos/blog/static/web-common/Makefile_Guix
+++ /dev/null
@@ -1,5 +0,0 @@
-# This Makefile is used to update the compiled JavaScripts
-# put under versioning for making Guix packaging easier
-
-all:
-       tsc taler-wallet-lib.ts
diff --git a/talermerchantdemos/blog/static/web-common/chrome-any.d.ts 
b/talermerchantdemos/blog/static/web-common/chrome-any.d.ts
deleted file mode 100644
index b621337..0000000
--- a/talermerchantdemos/blog/static/web-common/chrome-any.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-// We don't really need the full declaration here, so just include this.
-declare let chrome: any;
diff --git a/talermerchantdemos/blog/static/web-common/demo.css 
b/talermerchantdemos/blog/static/web-common/demo.css
deleted file mode 100644
index b2688ad..0000000
--- a/talermerchantdemos/blog/static/web-common/demo.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* style common to all demo pages */
-
-.demobar h1 {
-  text-align: center;
-}
-.demobar > p {
-  padding: 0.5em; 
-}
-.demobar a,
-.demobar a:visited {
-  color: inherit;
-}
-.adorn-brackets::before {
-  content: "❬";
-  color: #aa3939;
-}
-.adorn-brackets::after {
-  content: "❭";
-  color: #aa3939;
-}
-.tt {
-  font-family: 'Lucida Console', Monaco, monospace;
-}
-
-.informational-ok {
-  background: lightgreen;
-  border-radius: 1em;
-  padding: 0.5em;
-}
-
-.informational-fail {
-  background: lightpink;
-  border-radius: 1em;
-  padding: 0.5em;
-}
-
-.content {
-  overflow-x: auto;
-}
-.demobar {
-  overflow-x: auto;
-  background-color: #033;
-  color: white;
-}
-
-body {
-  overflow-y: scroll;
-}
-
-@media (min-width: 500px) {
-  .content {
-    margin-left: 25%;
-    padding-left: 2em;
-    margin-right: 1em;
-    overflow-x: auto;
-  }
-  .demobar {
-    height: 100%;
-    margin: 0;
-    top: 0;
-    left: 0;
-    background-color: #033;
-    color: white;
-    position: fixed;
-    width: 25%;
-    padding-right: 1em;
-    overflow: auto;
-  }
-}
diff --git a/talermerchantdemos/blog/static/web-common/dropdown-navbar.html 
b/talermerchantdemos/blog/static/web-common/dropdown-navbar.html
deleted file mode 100644
index 7d28787..0000000
--- a/talermerchantdemos/blog/static/web-common/dropdown-navbar.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-  This file is part of GNU TALER.
-  Copyright (C) 2014, 2015, 2016 INRIA
-
-  TALER is free software; you can redistribute it and/or modify it under the
-  terms of the GNU Lesser General Public License as published by the Free 
Software
-  Foundation; either version 2.1, or (at your option) any later version.
-
-  TALER 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 Lesser General Public License for more 
details.
-
-  You should have received a copy of the GNU Lesser General Public License 
along with
-  TALER; see the file COPYING.  If not, If not, see 
<http://www.gnu.org/licenses/>
-
-  @author Marcello Stanisci
--->
-
-<!--
-  URLs here use the special redir_app_rel path, which is rewritten by the
-  webserver to be relative to the current application mount path, no matter
-  where it occurs in the path.
--->
-
-<div>
- <link rel="stylesheet" type="text/css" 
href="redir_app_rel/static/web-common/dropdown-navbar_style.css">
- <script src="redir_app_rel/static/web-common/dropdown-navbar_script.js" 
type="application/javascript"></script>
-  <div class="dropdown-navbar">
-    <ul>
-      <li>
-        <a href="https://taler.net/"; class="m_index btn btn-outline-success" 
id="home" target="_blank">Home</a>
-      </li>
-      <li>
-        <a href="redir_app_rel/landing" class="m_demo" 
id="demo">Instructions</a>
-      </li>
-      <li>
-        <a href="javascript:void(0)" class="dropbtn" id="bank">Bank</a>
-        <div class="dropdown-content bank">
-          <a href="redir_app_rel/bank">Main</a>
-          <a href="redir_app_rel/bank/public-accounts">Public accounts</a>
-       </div>
-      </li>
-      <li>
-        <a href="redir_app_rel/shop" class="m_demo" id="shop">Shop</a>
-      </li>
-      <li>
-        <a href="redir_app_rel/donations" class="m_demo" 
id="donations">Donations</a>
-      </li>
-    </ul>
-  </div>
-</div>
diff --git 
a/talermerchantdemos/blog/static/web-common/dropdown-navbar_script.js 
b/talermerchantdemos/blog/static/web-common/dropdown-navbar_script.js
deleted file mode 100644
index 65f6848..0000000
--- a/talermerchantdemos/blog/static/web-common/dropdown-navbar_script.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/* @licstart  The following is the entire license notice for the
-  JavaScript code in this page.
-
-  Copyright (C) 2015, 2016 INRIA
-
-  The JavaScript code in this page is free software: you can
-  redistribute it and/or modify it under the terms of the GNU
-  Lesser General Public License (GNU LGPL) as published by the Free Software
-  Foundation, either version 2.1 of the License, or (at your option)
-  any later version.  The code is distributed WITHOUT ANY WARRANTY;
-  without even the implied warranty of MERCHANTABILITY or FITNESS
-  FOR A PARTICULAR PURPOSE.  See the GNU LGPL for more details.
-
-  As additional permission under GNU LGPL version 2.1 section 7, you
-  may distribute non-source (e.g., minimized or compacted) forms of
-  that code without the copy of the GNU LGPL normally required by
-  section 4, provided you include this license notice and a URL
-  through which recipients can access the Corresponding Source.
-
-  @licend  The above is the entire license notice
-  for the JavaScript code in this page.
-
-  @author Marcello Stanisci
-*/
-window.onclick = function(e) {
-  var dropdowns = document.getElementsByClassName("dropdown-content");
-  if (!e.target.matches('.dropbtn')) {
-    for (var d = 0; d < dropdowns.length; d++) {
-      var openDropdown = dropdowns[d];
-      if (openDropdown.classList.contains('show')) {
-        openDropdown.classList.remove('show');
-      }
-    }
-  }
-  else{ // need to close other tabs belonging to tabs other than the clicked 
one 
-    for (var d = 0; d < dropdowns.length; d++) {
-      var openDropdown = dropdowns[d];
-      if ((openDropdown.parentNode != e.target.parentNode)
-        && (openDropdown.classList.contains("show"))){
-        openDropdown.classList.remove('show');
-      }
-    }        
-  }
-}
-/**
- * Dropdown bar items which are supposed to.  In the current
- * configuration, only the 'bank' item shold dropdown.
- */
-function injectOnclicks(){
-  var where = ["bank"];
-  for (i in where){
-    document.getElementById(where[i]).onclick = function(){
-      this.parentNode.children[1].classList.toggle("show");
-      }
-  }
-}
-function dropMenu(){
-
-}
-document.addEventListener('DOMContentLoaded', injectOnclicks);
diff --git 
a/talermerchantdemos/blog/static/web-common/dropdown-navbar_style.css 
b/talermerchantdemos/blog/static/web-common/dropdown-navbar_style.css
deleted file mode 100644
index 139115d..0000000
--- a/talermerchantdemos/blog/static/web-common/dropdown-navbar_style.css
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-  This file is part of GNU TALER.
-  Copyright (C) 2014, 2015, 2016 INRIA
-
-  TALER is free software; you can redistribute it and/or modify it under the
-  terms of the GNU Lesser General Public License as published by the Free 
Software
-  Foundation; either version 2.1, or (at your option) any later version.
-
-  TALER 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 Lesser General Public License for more 
details.
-
-  You should have received a copy of the GNU Lesser General Public License 
along with
-  TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-
-  @author Marcello Stanisci
-*/
-
-.dropdown-navbar ul {
-  border-radius: 5px;
-  overflow: hidden;
-  background-color: #F4F3F3;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-  max-width: 40em;
-}
-.dropdown-navbar {
-  position: relative;
-  z-index: 1;
-  margin-left: 100px;
-}
-.dropdown-navbar li {
-  float: left; 
-}
-.dropdown-content {
-  border-radius: 5px;
-  border-style: solid;
-  border-color: #B3B3B3;
-  border-width: 1px;
-  background-color: #F4F3F3;
-  position: absolute;
-  display: none;
-}
-.dropdown-navbar a {
-  font-weight: bold;
-  color: black;
-  text-decoration: none;
-  padding: 6px 8px;
-  display: inline-block;
-  position: relative;
-}
-.dropdown-content a {
-  display: block;    
-}
-.show {
-  display: block;
-}
diff --git a/talermerchantdemos/blog/static/web-common/favicon-taler.ico 
b/talermerchantdemos/blog/static/web-common/favicon-taler.ico
deleted file mode 100644
index 141b93d..0000000
Binary files a/talermerchantdemos/blog/static/web-common/favicon-taler.ico and 
/dev/null differ
diff --git a/talermerchantdemos/blog/static/web-common/lang.css 
b/talermerchantdemos/blog/static/web-common/lang.css
deleted file mode 100644
index bae82f0..0000000
--- a/talermerchantdemos/blog/static/web-common/lang.css
+++ /dev/null
@@ -1,29 +0,0 @@
-body.it :lang(en) {
-  display: none;
-}
-
-body.en :lang(it) {
-  display: none;
-}
-
-.bottom-bar {
-  background-color: #F8F8F8;
-  border-color: #E7E7E7;
-  bottom: 0px;
-  margin-bottom: 0px;
-  border-width: 1px 0px 0px;
-  position: fixed;
-  bottom: 0px;
-  min-height: 50px;
-  width: 100%;
-}
-
-.lang-selector {
-  padding-top: 14px;
-  padding-bottom: 10px;
-  margin-left: 50px;
-}
-
-.lang-selector a {
-  text-decoration: none;
-}
diff --git a/talermerchantdemos/blog/static/web-common/lang.html 
b/talermerchantdemos/blog/static/web-common/lang.html
deleted file mode 100644
index 8db1c0d..0000000
--- a/talermerchantdemos/blog/static/web-common/lang.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<div class="bottom-bar">
-  <div class="lang-selector">
-    <a href="#" onclick="setLang('en');">
-      <img>
-        <!-- 
https://upload.wikimedia.org/wikipedia/commons/a/ae/Flag_of_the_United_Kingdom.svg
 -->
-        <svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 60 30" width="45" 
height="22.5">
-        <clipPath id="t">
-               <path d="M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z"/>
-        </clipPath>
-        <path d="M0,0 v30 h60 v-30 z" fill="#00247d"/>
-        <path d="M0,0 L60,30 M60,0 L0,30" stroke="#fff" stroke-width="6"/>
-        <path d="M0,0 L60,30 M60,0 L0,30" clip-path="url(#t)" stroke="#cf142b" 
stroke-width="4"/>
-        <path d="M30,0 v30 M0,15 h60" stroke="#fff" stroke-width="10"/>
-        <path d="M30,0 v30 M0,15 h60" stroke="#cf142b" stroke-width="6"/>
-        </svg>
-      </img>
-    </a>
-    <a href="#" onclick="setLang('it');">
-      <img>
-       <!-- https://upload.wikimedia.org/wikipedia/en/0/03/Flag_of_Italy.svg 
-->
-        <svg xmlns="http://www.w3.org/2000/svg"; width="45" height="22.5" 
viewBox="0 0 3 2">
-        <rect width="1" height="2" fill="#009246"/>
-        <rect width="1" height="2" x="1" fill="#fff"/>
-        <rect width="1" height="2" x="2" fill="#ce2b37"/>
-        </svg>
-      </img>
-    </a>
-  </div>
-</div>
diff --git a/talermerchantdemos/blog/static/web-common/lang.js 
b/talermerchantdemos/blog/static/web-common/lang.js
deleted file mode 100644
index 356a152..0000000
--- a/talermerchantdemos/blog/static/web-common/lang.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * @licstart  The following is the entire license notice for the
- *  JavaScript code in this page.
- *
- * Copyright (C) 2014 GNUnet e.V.
- *
- * The JavaScript code in this page is free software: you can
- * redistribute it and/or modify it under the terms of the GNU
- * General Public License (GNU GPL) as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option)
- * any later version.  The code is distributed WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
- *
- * As additional permission under GNU GPL version 3 section 7, you
- * may distribute non-source (e.g., minimized or compacted) forms of
- * that code without the copy of the GNU GPL normally required by
- * section 4, provided you include this license notice and a URL
- * through which recipients can access the Corresponding Source.
- *
- * @licend  The above is the entire license notice
- * for the JavaScript code in this page.
- */
-
-// @license 
magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt 
GPL-v3-or-Later
-
-function supports_html5_storage() {
-  try {
-    return 'sessionStorage' in window && window['sessionStorage'] !== null;
-  }
-  catch (e) {
-    return false;
-  }
-}
-
-function setLang(l)
-{
-  document.body.className=l;
-  if (supports_html5_storage()) {
-    sessionStorage.setItem('lang', l);
-  }
-  if (l == 'en') document.title = 'GNU Taler - Merchant demonstrator';
-  if (l == 'it') document.title = 'GNU Taler - Dimostrazione d\'acquisto';
-}
-
-function get_default_lang()
-{
-  langs = ['en', 'it'];
-  for (var i in navigator.languages) {
-    for (var j in langs) {
-      if (navigator.languages[i].indexOf(langs[j]) != -1)
-        return langs[j];
-    }
-  }
-  return 'en';
-}
-
-/*To be called on each onLoad*/
-function loadLang()
-{
-  l = null;
-  if (supports_html5_storage()) {
-    l = sessionStorage.getItem('lang');
-  }
-  if (!l)
-    l = get_default_lang();
-  setLang(l);
-}
-// @license-end
diff --git a/talermerchantdemos/blog/static/web-common/licensing.rst 
b/talermerchantdemos/blog/static/web-common/licensing.rst
deleted file mode 100644
index 05c13b9..0000000
--- a/talermerchantdemos/blog/static/web-common/licensing.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-The copyright of all the HTML/CSS/JavaScript files in this directory
-is owned by INRIA.
diff --git a/talermerchantdemos/blog/static/web-common/logo-2015-medium.png 
b/talermerchantdemos/blog/static/web-common/logo-2015-medium.png
deleted file mode 100644
index 78159bb..0000000
Binary files a/talermerchantdemos/blog/static/web-common/logo-2015-medium.png 
and /dev/null differ
diff --git a/talermerchantdemos/blog/static/web-common/pure.css 
b/talermerchantdemos/blog/static/web-common/pure.css
deleted file mode 100644
index 7391139..0000000
--- a/talermerchantdemos/blog/static/web-common/pure.css
+++ /dev/null
@@ -1,1508 +0,0 @@
-/*!
-Pure v0.6.2
-Copyright 2013 Yahoo!
-Licensed under the BSD License.
-https://github.com/yahoo/pure/blob/master/LICENSE.md
-*/
-/*!
-normalize.css v^3.0 | MIT License | git.io/normalize
-Copyright (c) Nicolas Gallagher and Jonathan Neal
-*/
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
-
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS and IE text size adjust after device orientation change,
- *    without disabling user zoom.
- */
-
-html {
-  font-family: sans-serif; /* 1 */
-  -ms-text-size-adjust: 100%; /* 2 */
-  -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-
-body {
-  margin: 0;
-}
-
-/* HTML5 display definitions
-   ========================================================================== 
*/
-
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
-  display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-
-audio,
-canvas,
-progress,
-video {
-  display: inline-block; /* 1 */
-  vertical-align: baseline; /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
- */
-
-[hidden],
-template {
-  display: none;
-}
-
-/* Links
-   ========================================================================== 
*/
-
-/**
- * Remove the gray background color from active links in IE 10.
- */
-
-a {
-  background-color: transparent;
-}
-
-/**
- * Improve readability of focused elements when they are also in an
- * active/hover state.
- */
-
-a:active,
-a:hover {
-  outline: 0;
-}
-
-/* Text-level semantics
-   ========================================================================== 
*/
-
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-
-b,
-strong {
-  font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-
-dfn {
-  font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0;
-}
-
-/**
- * Address styling not present in IE 8/9.
- */
-
-mark {
-  background: #ff0;
-  color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-
-small {
-  font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-
-sup {
-  top: -0.5em;
-}
-
-sub {
-  bottom: -0.25em;
-}
-
-/* Embedded content
-   ========================================================================== 
*/
-
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-
-img {
-  border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-
-svg:not(:root) {
-  overflow: hidden;
-}
-
-/* Grouping content
-   ========================================================================== 
*/
-
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-
-figure {
-  margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
-  box-sizing: content-box;
-  height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-
-pre {
-  overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-
-/* Forms
-   ========================================================================== 
*/
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
-/**
- * 1. Correct color not being inherited.
- *    Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit; /* 1 */
-  font: inherit; /* 2 */
-  margin: 0; /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-
-button {
-  overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-
-button,
-select {
-  text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- *    and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- *    `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button; /* 2 */
-  cursor: pointer; /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-input {
-  line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box; /* 1 */
-  padding: 0; /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
- */
-
-input[type="search"] {
-  -webkit-appearance: textfield; /* 1 */
-  box-sizing: content-box; /* 2 */
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
-  border: 0; /* 1 */
-  padding: 0; /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-
-textarea {
-  overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-
-optgroup {
-  font-weight: bold;
-}
-
-/* Tables
-   ========================================================================== 
*/
-
-/**
- * Remove most spacing between table cells.
- */
-
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-td,
-th {
-  padding: 0;
-}
-
-/*csslint important:false*/
-
-/* ==========================================================================
-   Pure Base Extras
-   ========================================================================== 
*/
-
-/**
- * Extra rules that Pure adds on top of Normalize.css
- */
-
-/**
- * Always hide an element when it has the `hidden` HTML attribute.
- */
-
-.hidden,
-[hidden] {
-    display: none !important;
-}
-
-/**
- * Add this class to an image to make it fit within it's fluid parent wrapper 
while maintaining
- * aspect ratio.
- */
-.pure-img {
-    max-width: 100%;
-    height: auto;
-    display: block;
-}
-
-/*csslint regex-selectors:false, known-properties:false, 
duplicate-properties:false*/
-
-.pure-g {
-    letter-spacing: -0.31em; /* Webkit: collapse white-space between units */
-    *letter-spacing: normal; /* reset IE < 8 */
-    *word-spacing: -0.43em; /* IE < 8: collapse white-space between units */
-    text-rendering: optimizespeed; /* Webkit: fixes text-rendering: 
optimizeLegibility */
-
-    /*
-    Sets the font stack to fonts known to work properly with the above letter
-    and word spacings. See: https://github.com/yahoo/pure/issues/41/
-
-    The following font stack makes Pure Grids work on all known environments.
-
-    * FreeSans: Ships with many Linux distros, including Ubuntu
-
-    * Arimo: Ships with Chrome OS. Arimo has to be defined before Helvetica and
-      Arial to get picked up by the browser, even though neither is available
-      in Chrome OS.
-
-    * Droid Sans: Ships with all versions of Android.
-
-    * Helvetica, Arial, sans-serif: Common font stack on OS X and Windows.
-    */
-    font-family: FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif;
-
-    /* Use flexbox when possible to avoid `letter-spacing` side-effects. */
-    display: -webkit-box;
-    display: -webkit-flex;
-    display: -ms-flexbox;
-    display: flex;
-    -webkit-flex-flow: row wrap;
-        -ms-flex-flow: row wrap;
-            flex-flow: row wrap;
-
-    /* Prevents distributing space between rows */
-    -webkit-align-content: flex-start;
-        -ms-flex-line-pack: start;
-            align-content: flex-start;
-}
-
-/* IE10 display: -ms-flexbox (and display: flex in IE 11) does not work inside 
a table; fall back to block and rely on font hack */
-@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
-       table .pure-g {
-               display: block;
-       }
-}
-
-/* Opera as of 12 on Windows needs word-spacing.
-   The ".opera-only" selector is used to prevent actual prefocus styling
-   and is not required in markup.
-*/
-.opera-only :-o-prefocus,
-.pure-g {
-    word-spacing: -0.43em;
-}
-
-.pure-u {
-    display: inline-block;
-    *display: inline; /* IE < 8: fake inline-block */
-    zoom: 1;
-    letter-spacing: normal;
-    word-spacing: normal;
-    vertical-align: top;
-    text-rendering: auto;
-}
-
-/*
-Resets the font family back to the OS/browser's default sans-serif font,
-this the same font stack that Normalize.css sets for the `body`.
-*/
-.pure-g [class *= "pure-u"] {
-    font-family: sans-serif;
-}
-
-.pure-u-1,
-.pure-u-1-1,
-.pure-u-1-2,
-.pure-u-1-3,
-.pure-u-2-3,
-.pure-u-1-4,
-.pure-u-3-4,
-.pure-u-1-5,
-.pure-u-2-5,
-.pure-u-3-5,
-.pure-u-4-5,
-.pure-u-5-5,
-.pure-u-1-6,
-.pure-u-5-6,
-.pure-u-1-8,
-.pure-u-3-8,
-.pure-u-5-8,
-.pure-u-7-8,
-.pure-u-1-12,
-.pure-u-5-12,
-.pure-u-7-12,
-.pure-u-11-12,
-.pure-u-1-24,
-.pure-u-2-24,
-.pure-u-3-24,
-.pure-u-4-24,
-.pure-u-5-24,
-.pure-u-6-24,
-.pure-u-7-24,
-.pure-u-8-24,
-.pure-u-9-24,
-.pure-u-10-24,
-.pure-u-11-24,
-.pure-u-12-24,
-.pure-u-13-24,
-.pure-u-14-24,
-.pure-u-15-24,
-.pure-u-16-24,
-.pure-u-17-24,
-.pure-u-18-24,
-.pure-u-19-24,
-.pure-u-20-24,
-.pure-u-21-24,
-.pure-u-22-24,
-.pure-u-23-24,
-.pure-u-24-24 {
-    display: inline-block;
-    *display: inline;
-    zoom: 1;
-    letter-spacing: normal;
-    word-spacing: normal;
-    vertical-align: top;
-    text-rendering: auto;
-}
-
-.pure-u-1-24 {
-    width: 4.1667%;
-    *width: 4.1357%;
-}
-
-.pure-u-1-12,
-.pure-u-2-24 {
-    width: 8.3333%;
-    *width: 8.3023%;
-}
-
-.pure-u-1-8,
-.pure-u-3-24 {
-    width: 12.5000%;
-    *width: 12.4690%;
-}
-
-.pure-u-1-6,
-.pure-u-4-24 {
-    width: 16.6667%;
-    *width: 16.6357%;
-}
-
-.pure-u-1-5 {
-    width: 20%;
-    *width: 19.9690%;
-}
-
-.pure-u-5-24 {
-    width: 20.8333%;
-    *width: 20.8023%;
-}
-
-.pure-u-1-4,
-.pure-u-6-24 {
-    width: 25%;
-    *width: 24.9690%;
-}
-
-.pure-u-7-24 {
-    width: 29.1667%;
-    *width: 29.1357%;
-}
-
-.pure-u-1-3,
-.pure-u-8-24 {
-    width: 33.3333%;
-    *width: 33.3023%;
-}
-
-.pure-u-3-8,
-.pure-u-9-24 {
-    width: 37.5000%;
-    *width: 37.4690%;
-}
-
-.pure-u-2-5 {
-    width: 40%;
-    *width: 39.9690%;
-}
-
-.pure-u-5-12,
-.pure-u-10-24 {
-    width: 41.6667%;
-    *width: 41.6357%;
-}
-
-.pure-u-11-24 {
-    width: 45.8333%;
-    *width: 45.8023%;
-}
-
-.pure-u-1-2,
-.pure-u-12-24 {
-    width: 50%;
-    *width: 49.9690%;
-}
-
-.pure-u-13-24 {
-    width: 54.1667%;
-    *width: 54.1357%;
-}
-
-.pure-u-7-12,
-.pure-u-14-24 {
-    width: 58.3333%;
-    *width: 58.3023%;
-}
-
-.pure-u-3-5 {
-    width: 60%;
-    *width: 59.9690%;
-}
-
-.pure-u-5-8,
-.pure-u-15-24 {
-    width: 62.5000%;
-    *width: 62.4690%;
-}
-
-.pure-u-2-3,
-.pure-u-16-24 {
-    width: 66.6667%;
-    *width: 66.6357%;
-}
-
-.pure-u-17-24 {
-    width: 70.8333%;
-    *width: 70.8023%;
-}
-
-.pure-u-3-4,
-.pure-u-18-24 {
-    width: 75%;
-    *width: 74.9690%;
-}
-
-.pure-u-19-24 {
-    width: 79.1667%;
-    *width: 79.1357%;
-}
-
-.pure-u-4-5 {
-    width: 80%;
-    *width: 79.9690%;
-}
-
-.pure-u-5-6,
-.pure-u-20-24 {
-    width: 83.3333%;
-    *width: 83.3023%;
-}
-
-.pure-u-7-8,
-.pure-u-21-24 {
-    width: 87.5000%;
-    *width: 87.4690%;
-}
-
-.pure-u-11-12,
-.pure-u-22-24 {
-    width: 91.6667%;
-    *width: 91.6357%;
-}
-
-.pure-u-23-24 {
-    width: 95.8333%;
-    *width: 95.8023%;
-}
-
-.pure-u-1,
-.pure-u-1-1,
-.pure-u-5-5,
-.pure-u-24-24 {
-    width: 100%;
-}
-.pure-button {
-    /* Structure */
-    display: inline-block;
-    zoom: 1;
-    line-height: normal;
-    white-space: nowrap;
-    vertical-align: middle;
-    text-align: center;
-    cursor: pointer;
-    -webkit-user-drag: none;
-    -webkit-user-select: none;
-       -moz-user-select: none;
-        -ms-user-select: none;
-            user-select: none;
-    box-sizing: border-box;
-}
-
-/* Firefox: Get rid of the inner focus border */
-.pure-button::-moz-focus-inner {
-    padding: 0;
-    border: 0;
-}
-
-/* Inherit .pure-g styles */
-.pure-button-group {
-    letter-spacing: -0.31em; /* Webkit: collapse white-space between units */
-    *letter-spacing: normal; /* reset IE < 8 */
-    *word-spacing: -0.43em; /* IE < 8: collapse white-space between units */
-    text-rendering: optimizespeed; /* Webkit: fixes text-rendering: 
optimizeLegibility */
-}
-
-.opera-only :-o-prefocus,
-.pure-button-group {
-    word-spacing: -0.43em;
-}
-
-.pure-button-group .pure-button {
-    letter-spacing: normal;
-    word-spacing: normal;
-    vertical-align: top;
-    text-rendering: auto;
-}
-
-/*csslint outline-none:false*/
-
-.pure-button {
-    font-family: inherit;
-    font-size: 100%;
-    padding: 0.5em 1em;
-    color: #444; /* rgba not supported (IE 8) */
-    color: rgba(0, 0, 0, 0.80); /* rgba supported */
-    border: 1px solid #999;  /*IE 6/7/8*/
-    border: none rgba(0, 0, 0, 0);  /*IE9 + everything else*/
-    background-color: #E6E6E6;
-    text-decoration: none;
-    border-radius: 2px;
-}
-
-.pure-button-hover,
-.pure-button:hover,
-.pure-button:focus {
-    /* csslint ignore:start */
-    filter: alpha(opacity=90);
-    /* csslint ignore:end */
-    background-image: -webkit-linear-gradient(transparent, rgba(0,0,0, 0.05) 
40%, rgba(0,0,0, 0.10));
-    background-image: linear-gradient(transparent, rgba(0,0,0, 0.05) 40%, 
rgba(0,0,0, 0.10));
-}
-.pure-button:focus {
-    outline: 0;
-}
-.pure-button-active,
-.pure-button:active {
-    box-shadow: 0 0 0 1px rgba(0,0,0, 0.15) inset, 0 0 6px rgba(0,0,0, 0.20) 
inset;
-    border-color: #000\9;
-}
-
-.pure-button[disabled],
-.pure-button-disabled,
-.pure-button-disabled:hover,
-.pure-button-disabled:focus,
-.pure-button-disabled:active {
-    border: none;
-    background-image: none;
-    /* csslint ignore:start */
-    filter: alpha(opacity=40);
-    /* csslint ignore:end */
-    opacity: 0.40;
-    cursor: not-allowed;
-    box-shadow: none;
-    pointer-events: none;
-}
-
-.pure-button-hidden {
-    display: none;
-}
-
-.pure-button-primary,
-.pure-button-selected,
-a.pure-button-primary,
-a.pure-button-selected {
-    background-color: rgb(0, 120, 231);
-    color: #fff;
-}
-
-/* Button Groups */
-.pure-button-group .pure-button {
-    margin: 0;
-    border-radius: 0;
-    border-right: 1px solid #111;  /* fallback color for rgba() for IE7/8 */
-    border-right: 1px solid rgba(0, 0, 0, 0.2);
-
-}
-
-.pure-button-group .pure-button:first-child {
-    border-top-left-radius: 2px;
-    border-bottom-left-radius: 2px;
-}
-.pure-button-group .pure-button:last-child {
-    border-top-right-radius: 2px;
-    border-bottom-right-radius: 2px;
-    border-right: none;
-}
-
-/*csslint box-model:false*/
-/*
-Box-model set to false because we're setting a height on select elements, which
-also have border and padding. This is done because some browsers don't render
-the padding. We explicitly set the box-model for select elements to border-box,
-so we can ignore the csslint warning.
-*/
-
-.pure-form input[type="text"],
-.pure-form input[type="password"],
-.pure-form input[type="email"],
-.pure-form input[type="url"],
-.pure-form input[type="date"],
-.pure-form input[type="month"],
-.pure-form input[type="time"],
-.pure-form input[type="datetime"],
-.pure-form input[type="datetime-local"],
-.pure-form input[type="week"],
-.pure-form input[type="number"],
-.pure-form input[type="search"],
-.pure-form input[type="tel"],
-.pure-form input[type="color"],
-.pure-form select,
-.pure-form textarea {
-    padding: 0.5em 0.6em;
-    display: inline-block;
-    border: 1px solid #ccc;
-    box-shadow: inset 0 1px 3px #ddd;
-    border-radius: 4px;
-    vertical-align: middle;
-    box-sizing: border-box;
-}
-
-/*
-Need to separate out the :not() selector from the rest of the CSS 2.1 selectors
-since IE8 won't execute CSS that contains a CSS3 selector.
-*/
-.pure-form input:not([type]) {
-    padding: 0.5em 0.6em;
-    display: inline-block;
-    border: 1px solid #ccc;
-    box-shadow: inset 0 1px 3px #ddd;
-    border-radius: 4px;
-    box-sizing: border-box;
-}
-
-
-/* Chrome (as of v.32/34 on OS X) needs additional room for color to display. 
*/
-/* May be able to remove this tweak as color inputs become more standardized 
across browsers. */
-.pure-form input[type="color"] {
-    padding: 0.2em 0.5em;
-}
-
-
-.pure-form input[type="text"]:focus,
-.pure-form input[type="password"]:focus,
-.pure-form input[type="email"]:focus,
-.pure-form input[type="url"]:focus,
-.pure-form input[type="date"]:focus,
-.pure-form input[type="month"]:focus,
-.pure-form input[type="time"]:focus,
-.pure-form input[type="datetime"]:focus,
-.pure-form input[type="datetime-local"]:focus,
-.pure-form input[type="week"]:focus,
-.pure-form input[type="number"]:focus,
-.pure-form input[type="search"]:focus,
-.pure-form input[type="tel"]:focus,
-.pure-form input[type="color"]:focus,
-.pure-form select:focus,
-.pure-form textarea:focus {
-    outline: 0;
-    border-color: #129FEA;
-}
-
-/*
-Need to separate out the :not() selector from the rest of the CSS 2.1 selectors
-since IE8 won't execute CSS that contains a CSS3 selector.
-*/
-.pure-form input:not([type]):focus {
-    outline: 0;
-    border-color: #129FEA;
-}
-
-.pure-form input[type="file"]:focus,
-.pure-form input[type="radio"]:focus,
-.pure-form input[type="checkbox"]:focus {
-    outline: thin solid #129FEA;
-    outline: 1px auto #129FEA;
-}
-.pure-form .pure-checkbox,
-.pure-form .pure-radio {
-    margin: 0.5em 0;
-    display: block;
-}
-
-.pure-form input[type="text"][disabled],
-.pure-form input[type="password"][disabled],
-.pure-form input[type="email"][disabled],
-.pure-form input[type="url"][disabled],
-.pure-form input[type="date"][disabled],
-.pure-form input[type="month"][disabled],
-.pure-form input[type="time"][disabled],
-.pure-form input[type="datetime"][disabled],
-.pure-form input[type="datetime-local"][disabled],
-.pure-form input[type="week"][disabled],
-.pure-form input[type="number"][disabled],
-.pure-form input[type="search"][disabled],
-.pure-form input[type="tel"][disabled],
-.pure-form input[type="color"][disabled],
-.pure-form select[disabled],
-.pure-form textarea[disabled] {
-    cursor: not-allowed;
-    background-color: #eaeded;
-    color: #cad2d3;
-}
-
-/*
-Need to separate out the :not() selector from the rest of the CSS 2.1 selectors
-since IE8 won't execute CSS that contains a CSS3 selector.
-*/
-.pure-form input:not([type])[disabled] {
-    cursor: not-allowed;
-    background-color: #eaeded;
-    color: #cad2d3;
-}
-.pure-form input[readonly],
-.pure-form select[readonly],
-.pure-form textarea[readonly] {
-    background-color: #eee; /* menu hover bg color */
-    color: #777; /* menu text color */
-    border-color: #ccc;
-}
-
-.pure-form input:focus:invalid,
-.pure-form textarea:focus:invalid,
-.pure-form select:focus:invalid {
-    color: #b94a48;
-    border-color: #e9322d;
-}
-.pure-form input[type="file"]:focus:invalid:focus,
-.pure-form input[type="radio"]:focus:invalid:focus,
-.pure-form input[type="checkbox"]:focus:invalid:focus {
-    outline-color: #e9322d;
-}
-.pure-form select {
-    /* Normalizes the height; padding is not sufficient. */
-    height: 2.25em;
-    border: 1px solid #ccc;
-    background-color: white;
-}
-.pure-form select[multiple] {
-    height: auto;
-}
-.pure-form label {
-    margin: 0.5em 0 0.2em;
-}
-.pure-form fieldset {
-    margin: 0;
-    padding: 0.35em 0 0.75em;
-    border: 0;
-}
-.pure-form legend {
-    display: block;
-    width: 100%;
-    padding: 0.3em 0;
-    margin-bottom: 0.3em;
-    color: #333;
-    border-bottom: 1px solid #e5e5e5;
-}
-
-.pure-form-stacked input[type="text"],
-.pure-form-stacked input[type="password"],
-.pure-form-stacked input[type="email"],
-.pure-form-stacked input[type="url"],
-.pure-form-stacked input[type="date"],
-.pure-form-stacked input[type="month"],
-.pure-form-stacked input[type="time"],
-.pure-form-stacked input[type="datetime"],
-.pure-form-stacked input[type="datetime-local"],
-.pure-form-stacked input[type="week"],
-.pure-form-stacked input[type="number"],
-.pure-form-stacked input[type="search"],
-.pure-form-stacked input[type="tel"],
-.pure-form-stacked input[type="color"],
-.pure-form-stacked input[type="file"],
-.pure-form-stacked select,
-.pure-form-stacked label,
-.pure-form-stacked textarea {
-    display: block;
-    margin: 0.25em 0;
-}
-
-/*
-Need to separate out the :not() selector from the rest of the CSS 2.1 selectors
-since IE8 won't execute CSS that contains a CSS3 selector.
-*/
-.pure-form-stacked input:not([type]) {
-    display: block;
-    margin: 0.25em 0;
-}
-.pure-form-aligned input,
-.pure-form-aligned textarea,
-.pure-form-aligned select,
-/* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline 
instead. */
-.pure-form-aligned .pure-help-inline,
-.pure-form-message-inline {
-    display: inline-block;
-    *display: inline;
-    *zoom: 1;
-    vertical-align: middle;
-}
-.pure-form-aligned textarea {
-    vertical-align: top;
-}
-
-/* Aligned Forms */
-.pure-form-aligned .pure-control-group {
-    margin-bottom: 0.5em;
-}
-.pure-form-aligned .pure-control-group label {
-    text-align: right;
-    display: inline-block;
-    vertical-align: middle;
-    width: 10em;
-    margin: 0 1em 0 0;
-}
-.pure-form-aligned .pure-controls {
-    margin: 1.5em 0 0 11em;
-}
-
-/* Rounded Inputs */
-.pure-form input.pure-input-rounded,
-.pure-form .pure-input-rounded {
-    border-radius: 2em;
-    padding: 0.5em 1em;
-}
-
-/* Grouped Inputs */
-.pure-form .pure-group fieldset {
-    margin-bottom: 10px;
-}
-.pure-form .pure-group input,
-.pure-form .pure-group textarea {
-    display: block;
-    padding: 10px;
-    margin: 0 0 -1px;
-    border-radius: 0;
-    position: relative;
-    top: -1px;
-}
-.pure-form .pure-group input:focus,
-.pure-form .pure-group textarea:focus {
-    z-index: 3;
-}
-.pure-form .pure-group input:first-child,
-.pure-form .pure-group textarea:first-child {
-    top: 1px;
-    border-radius: 4px 4px 0 0;
-    margin: 0;
-}
-.pure-form .pure-group input:first-child:last-child,
-.pure-form .pure-group textarea:first-child:last-child {
-    top: 1px;
-    border-radius: 4px;
-    margin: 0;
-}
-.pure-form .pure-group input:last-child,
-.pure-form .pure-group textarea:last-child {
-    top: -2px;
-    border-radius: 0 0 4px 4px;
-    margin: 0;
-}
-.pure-form .pure-group button {
-    margin: 0.35em 0;
-}
-
-.pure-form .pure-input-1 {
-    width: 100%;
-}
-.pure-form .pure-input-3-4 {
-    width: 75%;
-}
-.pure-form .pure-input-2-3 {
-    width: 66%;
-}
-.pure-form .pure-input-1-2 {
-    width: 50%;
-}
-.pure-form .pure-input-1-3 {
-    width: 33%;
-}
-.pure-form .pure-input-1-4 {
-    width: 25%;
-}
-
-/* Inline help for forms */
-/* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline 
instead. */
-.pure-form .pure-help-inline,
-.pure-form-message-inline {
-    display: inline-block;
-    padding-left: 0.3em;
-    color: #666;
-    vertical-align: middle;
-    font-size: 0.875em;
-}
-
-/* Block help for forms */
-.pure-form-message {
-    display: block;
-    color: #666;
-    font-size: 0.875em;
-}
-
-@media only screen and (max-width : 480px) {
-    .pure-form button[type="submit"] {
-        margin: 0.7em 0 0;
-    }
-
-    .pure-form input:not([type]),
-    .pure-form input[type="text"],
-    .pure-form input[type="password"],
-    .pure-form input[type="email"],
-    .pure-form input[type="url"],
-    .pure-form input[type="date"],
-    .pure-form input[type="month"],
-    .pure-form input[type="time"],
-    .pure-form input[type="datetime"],
-    .pure-form input[type="datetime-local"],
-    .pure-form input[type="week"],
-    .pure-form input[type="number"],
-    .pure-form input[type="search"],
-    .pure-form input[type="tel"],
-    .pure-form input[type="color"],
-    .pure-form label {
-        margin-bottom: 0.3em;
-        display: block;
-    }
-
-    .pure-group input:not([type]),
-    .pure-group input[type="text"],
-    .pure-group input[type="password"],
-    .pure-group input[type="email"],
-    .pure-group input[type="url"],
-    .pure-group input[type="date"],
-    .pure-group input[type="month"],
-    .pure-group input[type="time"],
-    .pure-group input[type="datetime"],
-    .pure-group input[type="datetime-local"],
-    .pure-group input[type="week"],
-    .pure-group input[type="number"],
-    .pure-group input[type="search"],
-    .pure-group input[type="tel"],
-    .pure-group input[type="color"] {
-        margin-bottom: 0;
-    }
-
-    .pure-form-aligned .pure-control-group label {
-        margin-bottom: 0.3em;
-        text-align: left;
-        display: block;
-        width: 100%;
-    }
-
-    .pure-form-aligned .pure-controls {
-        margin: 1.5em 0 0 0;
-    }
-
-    /* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline 
instead. */
-    .pure-form .pure-help-inline,
-    .pure-form-message-inline,
-    .pure-form-message {
-        display: block;
-        font-size: 0.75em;
-        /* Increased bottom padding to make it group with its related input 
element. */
-        padding: 0.2em 0 0.8em;
-    }
-}
-
-/*csslint adjoining-classes: false, box-model:false*/
-.pure-menu {
-    box-sizing: border-box;
-}
-
-.pure-menu-fixed {
-    position: fixed;
-    left: 0;
-    top: 0;
-    z-index: 3;
-}
-
-.pure-menu-list,
-.pure-menu-item {
-    position: relative;
-}
-
-.pure-menu-list {
-    list-style: none;
-    margin: 0;
-    padding: 0;
-}
-
-.pure-menu-item {
-    padding: 0;
-    margin: 0;
-    height: 100%;
-}
-
-.pure-menu-link,
-.pure-menu-heading {
-    display: block;
-    text-decoration: none;
-    white-space: nowrap;
-}
-
-/* HORIZONTAL MENU */
-.pure-menu-horizontal {
-    width: 100%;
-    white-space: nowrap;
-}
-
-.pure-menu-horizontal .pure-menu-list {
-    display: inline-block;
-}
-
-/* Initial menus should be inline-block so that they are horizontal */
-.pure-menu-horizontal .pure-menu-item,
-.pure-menu-horizontal .pure-menu-heading,
-.pure-menu-horizontal .pure-menu-separator {
-    display: inline-block;
-    *display: inline;
-    zoom: 1;
-    vertical-align: middle;
-}
-
-/* Submenus should still be display: block; */
-.pure-menu-item .pure-menu-item {
-    display: block;
-}
-
-.pure-menu-children {
-    display: none;
-    position: absolute;
-    left: 100%;
-    top: 0;
-    margin: 0;
-    padding: 0;
-    z-index: 3;
-}
-
-.pure-menu-horizontal .pure-menu-children {
-    left: 0;
-    top: auto;
-    width: inherit;
-}
-
-.pure-menu-allow-hover:hover > .pure-menu-children,
-.pure-menu-active > .pure-menu-children {
-    display: block;
-    position: absolute;
-}
-
-/* Vertical Menus - show the dropdown arrow */
-.pure-menu-has-children > .pure-menu-link:after {
-    padding-left: 0.5em;
-    content: "\25B8";
-    font-size: small;
-}
-
-/* Horizontal Menus - show the dropdown arrow */
-.pure-menu-horizontal .pure-menu-has-children > .pure-menu-link:after {
-    content: "\25BE";
-}
-
-/* scrollable menus */
-.pure-menu-scrollable {
-    overflow-y: scroll;
-    overflow-x: hidden;
-}
-
-.pure-menu-scrollable .pure-menu-list {
-    display: block;
-}
-
-.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list {
-    display: inline-block;
-}
-
-.pure-menu-horizontal.pure-menu-scrollable {
-    white-space: nowrap;
-    overflow-y: hidden;
-    overflow-x: auto;
-    -ms-overflow-style: none;
-    -webkit-overflow-scrolling: touch;
-    /* a little extra padding for this style to allow for scrollbars */
-    padding: .5em 0;
-}
-
-.pure-menu-horizontal.pure-menu-scrollable::-webkit-scrollbar {
-    display: none;
-}
-
-/* misc default styling */
-
-.pure-menu-separator,
-.pure-menu-horizontal .pure-menu-children .pure-menu-separator {
-    background-color: #ccc;
-    height: 1px;
-    margin: .3em 0;
-}
-
-.pure-menu-horizontal .pure-menu-separator {
-    width: 1px;
-    height: 1.3em;
-    margin: 0 .3em ;
-}
-
-/* Need to reset the separator since submenu is vertical */
-.pure-menu-horizontal .pure-menu-children .pure-menu-separator {
-    display: block;
-    width: auto;
-}
-
-.pure-menu-heading {
-    text-transform: uppercase;
-    color: #565d64;
-}
-
-.pure-menu-link {
-    color: #777;
-}
-
-.pure-menu-children {
-    background-color: #fff;
-}
-
-.pure-menu-link,
-.pure-menu-disabled,
-.pure-menu-heading {
-    padding: .5em 1em;
-}
-
-.pure-menu-disabled {
-    opacity: .5;
-}
-
-.pure-menu-disabled .pure-menu-link:hover {
-    background-color: transparent;
-}
-
-.pure-menu-active > .pure-menu-link,
-.pure-menu-link:hover,
-.pure-menu-link:focus {
-    background-color: #eee;
-}
-
-.pure-menu-selected .pure-menu-link,
-.pure-menu-selected .pure-menu-link:visited {
-    color: #000;
-}
-
-.pure-table {
-    /* Remove spacing between table cells (from Normalize.css) */
-    border-collapse: collapse;
-    border-spacing: 0;
-    empty-cells: show;
-    border: 1px solid #cbcbcb;
-}
-
-.pure-table caption {
-    color: #000;
-    font: italic 85%/1 arial, sans-serif;
-    padding: 1em 0;
-    text-align: center;
-}
-
-.pure-table td,
-.pure-table th {
-    border-left: 1px solid #cbcbcb;/*  inner column border */
-    border-width: 0 0 0 1px;
-    font-size: inherit;
-    margin: 0;
-    overflow: visible; /*to make ths where the title is really long work*/
-    padding: 0.5em 1em; /* cell padding */
-}
-
-/* Consider removing this next declaration block, as it causes problems when
-there's a rowspan on the first cell. Case added to the tests. issue#432 */
-.pure-table td:first-child,
-.pure-table th:first-child {
-    border-left-width: 0;
-}
-
-.pure-table thead {
-    background-color: #e0e0e0;
-    color: #000;
-    text-align: left;
-    vertical-align: bottom;
-}
-
-/*
-striping:
-   even - #fff (white)
-   odd  - #f2f2f2 (light gray)
-*/
-.pure-table td {
-    background-color: transparent;
-}
-.pure-table-odd td {
-    background-color: #f2f2f2;
-}
-
-/* nth-child selector for modern browsers */
-.pure-table-striped tr:nth-child(2n-1) td {
-    background-color: #f2f2f2;
-}
-
-/* BORDERED TABLES */
-.pure-table-bordered td {
-    border-bottom: 1px solid #cbcbcb;
-}
-.pure-table-bordered tbody > tr:last-child > td {
-    border-bottom-width: 0;
-}
-
-
-/* HORIZONTAL BORDERED TABLES */
-
-.pure-table-horizontal td,
-.pure-table-horizontal th {
-    border-width: 0 0 1px 0;
-    border-bottom: 1px solid #cbcbcb;
-}
-.pure-table-horizontal tbody > tr:last-child > td {
-    border-bottom-width: 0;
-}
diff --git a/talermerchantdemos/blog/static/web-common/style.css 
b/talermerchantdemos/blog/static/web-common/style.css
deleted file mode 100644
index b63fdd1..0000000
--- a/talermerchantdemos/blog/static/web-common/style.css
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-  This file is part of GNU TALER.
-  Copyright (C) 2014, 2015, 2016 INRIA
-
-  TALER is free software; you can redistribute it and/or modify it under the
-  terms of the GNU Lesser General Public License as published by the Free 
Software
-  Foundation; either version 2.1, or (at your option) any later version.
-
-  TALER 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 Lesser General Public License for more 
details.
-
-  You should have received a copy of the GNU Lesser General Public License 
along with
-  TALER; see the file COPYING.  If not, If not, see 
<http://www.gnu.org/licenses/>
-
-  @author Marcello Stanisci
-  @author Gabor Toth
-*/
-
-body {
-    background-color: white;
-    margin: 0;
-    padding: 0;
-    font-family: Verdana, sans;
-}
-
-header {
-    width: 100%;
-    height: 100px;
-    margin: 0;
-    padding: 0;
-    border-bottom: 1px solid black;
-}
-
-/* NOTE: this class is needed to differentiate h1's which need to coexist
-  with the navigation bar, and h1's which don't (like the ones in the blog's
-  articles) */
-header h1.nav {
-    font-size: 200%;
-/*  position: relative;
-    margin: 15 0 0 120px;
-    top: 50%;
-    transform: translateY(-50%);*/
-}
-
-body.article {
-    transform: translateY(-22px);
-}
-
-/* Redundant for testing reasons */
-header h1.book-title {
-    font-size: 200%;
-    transform: translateY(30px);
-    margin-left: 100px;
-}
-/*
-    margin: 15 0 0 120px;
-    position: relative;
-    top: 50%;
-    transform: translateY(-50%);
-}*/
-header #logo {
-    float: left;
-    width: 100px;
-    height: 100px;
-    padding: 0;
-    margin: 0;
-    text-align: center;
-    border-right: 1px solid black;
-}
-
-section#menu {
-    margin: 0 0 90 0;
-    padding: 5px;
-    border-right: 1px solid black;
-    height: 100%;
-    width: 90px;
-    float: left;
-}
-
-section#main {
-    margin: 0 0 0 100px;
-    padding: 20px;
-    border-left: 1px solid black;
-    height: 100%;
-    /*max-width: 40em;*/
-}
-
-div.copyright {
-    margin: 40px 1000px 0px 150px;
-    padding: 20px;
-    border-top: 1px solid black;
-    height: 100%;
-    max-width: 40em;
-    font-size: 70%;
-    text-align: center;
-}
-
-section#main h1:first-child {
-    margin-top: 0;
-}
-
-div.login-form, div.register-form {
-    border-radius: 10px;
-    background-color: #f2f2f2;
-    padding: 11px 27px 44px 27px;
-    max-width: 200px;
-}
-
-div.login-form input[type=submit],
-div.register-form input[type=submit] {
-    width-max: 30%;
-    float: right;
-    padding: 6px;
-}
-
-.selected-item {
-    border-style: solid;
-    border-width: 1px;
-}
-
-.informational {
-    border-radius: 8px;
-    padding: 8px;
-}
-
-.informational-ok {
-    background: #ccffcc;
-}
-
-.informational-fail {
-    background: #ff8566;
-}
-
-div.login-form input[type=text],
-div.login-form input[type=password],
-div.register-form input[type=text],
-div.register-form input[type=password] {
-    width: 100%;
-    padding: 12px 20px;
-    margin: 8px 0;
-    display: inline-block;
-    border: 1px solid #ccc;
-    border-radius: 4px;
-    box-sizing: border-box;
-}
-
-h1 {
-    font-size: 160%;
-}
-
-h2 {
-    font-size: 140%;
-}
-
-h3 {
-    font-size: 120%;
-}
-
-h4, h5, h6 {
-    font-size: 100%;
-}
-
-table.history {
-       margin: 30px 0px;
-       border-width: 1px;
-       border-spacing: 3px;
-       border-style: groove;
-       border-color: gray;
-       border-collapse: separate;
-       background-color: white;
-       white-space: nowrap;
-}
-table.history th {
-       border-width: 1px;
-       padding: 5px;
-       border-style: outset;
-       border-color: gray;
-       background-color: white;
-       -moz-border-radius: ;
-}
-table.history td {
-       border-width: 1px;
-       padding: 5px;
-       border-style: outset;
-       border-color: gray;
-       background-color: white;
-       -moz-border-radius: ;
-}
-div.track-results {
-        position: absolute;
-}
-
-.fade {
-        -webkit-animation: fade 0.7s;
-        animation: fade 0.7s;
-        opacity: 1;
-}
diff --git a/talermerchantdemos/blog/static/web-common/taler-fallback.css 
b/talermerchantdemos/blog/static/web-common/taler-fallback.css
deleted file mode 100644
index e403d71..0000000
--- a/talermerchantdemos/blog/static/web-common/taler-fallback.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Fallback stylesheet.  Should be included in the document as follows:
- *
- * <link rel="stylesheet"
- *       href="taler-fallback.css"
- *       id="taler-presence-stylesheet />
- *
- * When either the taler-wallet-lib is included or the wallet is presence,
- * it will take over this stylesheet for presence detection.
- *
- * This fallback stylesheet makes sure that classes for presence detection
- * are displayed correctly, even if JavaScript is disabled and the wallet
- * is not present.
- */
-
-.taler-installed-show { display: none; }
diff --git a/talermerchantdemos/blog/static/web-common/taler-wallet-lib.js 
b/talermerchantdemos/blog/static/web-common/taler-wallet-lib.js
deleted file mode 100644
index 2fe1c20..0000000
--- a/talermerchantdemos/blog/static/web-common/taler-wallet-lib.js
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
-  @source 
https://www.git.taler.net/?p=web-common.git;a=blob_plain;f=taler-wallet-lib.ts;hb=HEAD
-  @license 
magnet:?xt=urn:btih:5de60da917303dbfad4f93fb1b985ced5a89eac2&dn=lgpl-2.1.txt 
LGPL v21
-
-  @licstart  The following is the entire license notice for the
-  JavaScript code in this page.
-
-  Copyright (C) 2015, 2016 INRIA
-
-  The JavaScript code in this page is free software: you can
-  redistribute it and/or modify it under the terms of the GNU
-  Lesser General Public License (GNU LGPL) as published by the Free Software
-  Foundation, either version 2.1 of the License, or (at your option)
-  any later version.  The code is distributed WITHOUT ANY WARRANTY;
-  without even the implied warranty of MERCHANTABILITY or FITNESS
-  FOR A PARTICULAR PURPOSE.  See the GNU LGPL for more details.
-
-  As additional permission under GNU LGPL version 2.1 section 7, you
-  may distribute non-source (e.g., minimized or compacted) forms of
-  that code without the copy of the GNU LGPL normally required by
-  section 4, provided you include this license notice and a URL
-  through which recipients can access the Corresponding Source.
-
-  @licend  The above is the entire license notice
-  for the JavaScript code in this page.
-
-  @author Marcello Stanisci
-  @author Florian Dold
-*/
-(function (factory) {
-    if (typeof module === "object" && typeof module.exports === "object") {
-        var v = factory(require, exports);
-        if (v !== undefined) module.exports = v;
-    }
-    else if (typeof define === "function" && define.amd) {
-        define(["require", "exports"], factory);
-    }
-})(function (require, exports) {
-    "use strict";
-    var taler;
-    (function (taler) {
-        "use strict";
-        var logVerbose = false;
-        try {
-            logVerbose = !!localStorage.getItem("taler-log-verbose");
-        }
-        catch (e) {
-        }
-        var presentHandlers = [];
-        var absentHandlers = [];
-        // Are we running as the content script of an 
-        // extension (and not just from a normal page)?
-        var runningInExtension = false;
-        var callSeqId = 1;
-        var installed = false;
-        var probeExecuted = false;
-        var pageLoaded = false;
-        var errorHandler = undefined;
-        var sheet;
-        function onError(handler) {
-            if (errorHandler) {
-                console.warn("Overriding error handler");
-            }
-            errorHandler = handler;
-        }
-        taler.onError = onError;
-        /**
-         * Error handler for things that go wrong in the merchant
-         * frontend browser code.
-         */
-        function raise_error(reason, detail) {
-            if (errorHandler) {
-                errorHandler(reason, detail);
-                return;
-            }
-            alert("Failure: " + reason + ".  No error handler installed.  Open 
the developer console for more information.");
-            console.error(reason, detail);
-            console.warn("No custom error handler set.");
-        }
-        function callWallet(funcName, args, onResult) {
-            var detail = JSON.parse(JSON.stringify(args || {}));
-            var callId = callSeqId++;
-            detail.callId = callId;
-            var onTimeout = function () {
-                console.warn("timeout for invocation of " + funcName);
-            };
-            var timeoutHandle = setTimeout(onTimeout, 1000);
-            var handler = function (evt) {
-                if (evt.detail.callId !== callId) {
-                    return;
-                }
-                if (onResult) {
-                    onResult(evt.detail);
-                }
-                clearTimeout(timeoutHandle);
-                document.removeEventListener(funcName + "-result", handler);
-            };
-            document.addEventListener(funcName + "-result", handler);
-            var evt = new CustomEvent(funcName, { detail: detail });
-            document.dispatchEvent(evt);
-        }
-        /**
-         * Confirm that a reserve was created.
-         *
-         * Used by tightly integrated bank portals.
-         */
-        function confirmReserve(reservePub) {
-            if (!installed) {
-                logVerbose && console.log("delaying confirmReserve");
-                taler.onPresent(function () {
-                    confirmReserve(reservePub);
-                });
-                return;
-            }
-            callWallet("taler-confirm-reserve", { reserve_pub: reservePub });
-        }
-        taler.confirmReserve = confirmReserve;
-        function createReserve(callbackUrl, amount, wtTypes, 
suggestedExchangeUrl) {
-            if (!installed) {
-                logVerbose && console.log("delaying createReserve");
-                taler.onPresent(function () {
-                    createReserve(callbackUrl, amount, wtTypes, 
suggestedExchangeUrl);
-                });
-                return;
-            }
-            var args = {
-                callback_url: callbackUrl,
-                amount: amount,
-                wt_types: wtTypes,
-                suggested_exchange_url: suggestedExchangeUrl
-            };
-            callWallet("taler-create-reserve", args);
-        }
-        taler.createReserve = createReserve;
-        function handlePaymentResponse(walletResp) {
-            /**
-             * Handle a failed payment.
-             *
-             * Try to notify the wallet first, before we show a potentially
-             * synchronous error message (such as an alert) or leave the page.
-             */
-            function handleFailedPayment(r) {
-                var timeoutHandle = null;
-                function err() {
-                    raise_error("pay-failed", { status: r.status, response: 
r.responseText });
-                }
-                function onResp() {
-                    if (timeoutHandle != null) {
-                        clearTimeout(timeoutHandle);
-                        timeoutHandle = null;
-                    }
-                    err();
-                }
-                function onTimeout() {
-                    timeoutHandle = null;
-                    err();
-                }
-                callWallet("taler-payment-failed", { H_contract: 
walletResp.H_contract }, onResp);
-                timeoutHandle = setTimeout(onTimeout, 200);
-            }
-            logVerbose && console.log("handling taler-notify-payment: ", 
walletResp);
-            // Payment timeout in ms.
-            var timeout_ms = 1000;
-            // Current request.
-            var r;
-            var timeoutHandle = null;
-            function sendPay() {
-                r = new XMLHttpRequest();
-                r.open("post", walletResp.contract.pay_url);
-                r.setRequestHeader("Content-Type", 
"application/json;charset=UTF-8");
-                r.send(JSON.stringify(walletResp.payReq));
-                r.onload = function () {
-                    if (!r) {
-                        return;
-                    }
-                    switch (r.status) {
-                        case 200:
-                            var merchantResp = JSON.parse(r.responseText);
-                            logVerbose && console.log("got success from 
pay_url");
-                            callWallet("taler-payment-succeeded", { 
H_contract: walletResp.H_contract, merchantSig: merchantResp.sig }, function () 
{
-                                var nextUrl = 
walletResp.contract.fulfillment_url;
-                                logVerbose && 
console.log("taler-payment-succeeded done, going to", nextUrl);
-                                window.location.href = nextUrl;
-                                window.location.reload(true);
-                            });
-                            break;
-                        default:
-                            handleFailedPayment(r);
-                            break;
-                    }
-                    r = null;
-                    if (timeoutHandle != null) {
-                        clearTimeout(timeoutHandle);
-                        timeoutHandle = null;
-                    }
-                };
-                function retry() {
-                    if (r) {
-                        r.abort();
-                        r = null;
-                    }
-                    timeout_ms = Math.min(timeout_ms * 2, 10 * 1000);
-                    logVerbose && console.log("sendPay timed out, retrying in 
", timeout_ms, "ms");
-                    sendPay();
-                }
-                timeoutHandle = setTimeout(retry, timeout_ms);
-            }
-            sendPay();
-        }
-        function onPresent(f) {
-            presentHandlers.push(f);
-        }
-        taler.onPresent = onPresent;
-        function onAbsent(f) {
-            absentHandlers.push(f);
-        }
-        taler.onAbsent = onAbsent;
-        function internalPay(p) {
-            // either the callback gets called,
-            // or the wallet will redirect the browser
-            callWallet("taler-pay", p, handlePaymentResponse);
-        }
-        taler.internalPay = internalPay;
-        function pay(p) {
-            if (!installed) {
-                logVerbose && console.log("delaying call to 'pay' until GNU 
Taler wallet is present");
-                taler.onPresent(function () {
-                    pay(p);
-                });
-                return;
-            }
-            internalPay(p);
-        }
-        taler.pay = pay;
-        function internalAddAuditor(d) {
-            // either the callback gets called,
-            // or the wallet will redirect the browser
-            callWallet("taler-add-auditor", d);
-        }
-        taler.internalAddAuditor = internalAddAuditor;
-        function addAuditor(d) {
-            if (!installed) {
-                logVerbose && console.log("delaying call to 'addAuditor' until 
GNU Taler wallet is present");
-                taler.onPresent(function () {
-                    addAuditor(d);
-                });
-                return;
-            }
-            internalAddAuditor(d);
-        }
-        taler.addAuditor = addAuditor;
-        function internalCheckAuditor(url) {
-            return new Promise(function (resolve, reject) {
-                callWallet("taler-check-auditor", url, function (x) { return 
resolve(x); });
-            });
-        }
-        taler.internalCheckAuditor = internalCheckAuditor;
-        /**
-         * Check if an auditor is already added to the wallet.
-         *
-         * Same-origin restrictions apply.
-         */
-        function checkAuditor(url) {
-            if (!installed) {
-                logVerbose && console.log("delaying call to 'checkAuditor' 
until GNU Taler wallet is present");
-                return new Promise(function (resolve, reject) {
-                    taler.onPresent(function () {
-                        resolve(checkAuditor(url));
-                    });
-                });
-            }
-            return internalCheckAuditor(url);
-        }
-        taler.checkAuditor = checkAuditor;
-        function initTaler() {
-            function handleUninstall() {
-                installed = false;
-                // not really true, but we want "uninstalled" to be shown
-                firstTimeoutCalled = true;
-                announce();
-            }
-            function handleProbe() {
-                probeExecuted = true;
-                if (!installed) {
-                    logVerbose && console.log("taler install detected");
-                    installed = true;
-                    announce();
-                }
-            }
-            function probeTaler() {
-                probeExecuted = false;
-                var eve = new Event("taler-probe");
-                document.dispatchEvent(eve);
-            }
-            var firstTimeoutCalled = false;
-            function onProbeTimeout() {
-                if (!probeExecuted) {
-                    if (installed || !firstTimeoutCalled) {
-                        installed = false;
-                        firstTimeoutCalled = true;
-                        logVerbose && console.log("taler uninstall detected");
-                        announce();
-                    }
-                }
-                // try again, maybe it'll be installed ...
-                probeTaler();
-            }
-            /**
-             * Announce presence/absence and update stylesheets.
-             *
-             * Only called after document.readyState is at least "interactive".
-             */
-            function announce() {
-                if (!pageLoaded) {
-                    logVerbose && console.log("page not loaded yet, announcing 
later");
-                    return;
-                }
-                setStyles();
-                if (installed) {
-                    logVerbose && console.log("announcing installed");
-                    for (var i = 0; i < presentHandlers.length; i++) {
-                        presentHandlers[i]();
-                    }
-                }
-                else {
-                    if (firstTimeoutCalled) {
-                        logVerbose && console.log("announcing uninstalled");
-                        for (var i = 0; i < absentHandlers.length; i++) {
-                            absentHandlers[i]();
-                        }
-                    }
-                    else {
-                        logVerbose && console.log("announcing nothing");
-                    }
-                }
-            }
-            function setStyles() {
-                if (!sheet || !sheet.cssRules) {
-                    return;
-                }
-                while (sheet.cssRules.length > 0) {
-                    sheet.deleteRule(0);
-                }
-                if (installed) {
-                    sheet.insertRule(".taler-installed-hide { display: none; 
}", 0);
-                    sheet.insertRule(".taler-probed-hide { display: none; }", 
0);
-                }
-                else {
-                    sheet.insertRule(".taler-installed-show { display: none; 
}", 0);
-                    if (firstTimeoutCalled) {
-                        sheet.insertRule(".taler-probed-hide { display: none; 
}", 0);
-                    }
-                    else {
-                        // We're still doing the detection
-                        sheet.insertRule(".taler-installed-hide { display: 
none; }", 0);
-                    }
-                }
-            }
-            function initStyle() {
-                logVerbose && console.log("taking over styles");
-                var name = "taler-presence-stylesheet";
-                var content = "/* Taler stylesheet controlled by JS */";
-                var style = document.getElementById(name);
-                if (!style) {
-                    style = document.createElement("style");
-                    // Needed by WebKit
-                    style.appendChild(document.createTextNode(content));
-                    style.id = name;
-                    document.head.appendChild(style);
-                    sheet = style.sheet;
-                }
-                else {
-                    // We've taken over the stylesheet now,
-                    // make it clear by clearing all the rules in it
-                    // and making it obvious in the DOM.
-                    if (style.tagName.toLowerCase() === "style") {
-                        style.innerText = content;
-                    }
-                    if (!style.sheet) {
-                        throw Error("taler-presence-stylesheet should be a 
style sheet (<link> or <style>)");
-                    }
-                    sheet = style.sheet;
-                    while (sheet.cssRules.length > 0) {
-                        sheet.deleteRule(0);
-                    }
-                }
-            }
-            function onPageLoad() {
-                pageLoaded = true;
-                if (document.readyState == "complete") {
-                    initStyle();
-                }
-                else {
-                    var listener = function () {
-                        initStyle();
-                        setStyles();
-                    };
-                    window.addEventListener("load", listener);
-                }
-                // We only start the timeout after the page is interactive.
-                window.setInterval(onProbeTimeout, 300);
-                announce();
-            }
-            probeTaler();
-            document.addEventListener("taler-probe-result", handleProbe, 
false);
-            document.addEventListener("taler-uninstall", handleUninstall, 
false);
-            // Handle the case where the JavaScript is loaded after the page
-            // has been loaded for the first time.
-            if (document.readyState == "loading") {
-                document.addEventListener("DOMContentLoaded", onPageLoad, 
false);
-            }
-            else {
-                onPageLoad();
-            }
-        }
-        function onPageLoadInExtension() {
-            if (document.documentElement.getAttribute("data-taler-nojs")) {
-                logVerbose && console.log("doing taler initialization from 
extension (nojs)");
-                initTaler();
-            }
-        }
-        var caught = false;
-        try {
-            chrome.runtime.sendMessage({ type: "ping" });
-        }
-        catch (e) {
-            caught = true;
-        }
-        if (caught) {
-            logVerbose && console.log("running taler-wallet-lib from page");
-            initTaler();
-        }
-        else {
-            logVerbose && console.log("running taler-wallet-lib from 
extension");
-            runningInExtension = true;
-            // Wait for even style sheets to load
-            if (document.readyState != "complete") {
-                window.addEventListener("load", function () { return 
onPageLoadInExtension(); });
-            }
-            else {
-                onPageLoadInExtension();
-            }
-        }
-    })(taler = exports.taler || (exports.taler = {}));
-});
-// @license-end
diff --git a/talermerchantdemos/blog/static/web-common/taler-wallet-lib.ts 
b/talermerchantdemos/blog/static/web-common/taler-wallet-lib.ts
deleted file mode 100644
index cbf32e8..0000000
--- a/talermerchantdemos/blog/static/web-common/taler-wallet-lib.ts
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
-  @source 
https://www.git.taler.net/?p=web-common.git;a=blob_plain;f=taler-wallet-lib.ts;hb=HEAD
-  @license 
magnet:?xt=urn:btih:5de60da917303dbfad4f93fb1b985ced5a89eac2&dn=lgpl-2.1.txt 
LGPL v21
-
-  @licstart  The following is the entire license notice for the
-  JavaScript code in this page.
-
-  Copyright (C) 2015, 2016 INRIA
-
-  The JavaScript code in this page is free software: you can
-  redistribute it and/or modify it under the terms of the GNU
-  Lesser General Public License (GNU LGPL) as published by the Free Software
-  Foundation, either version 2.1 of the License, or (at your option)
-  any later version.  The code is distributed WITHOUT ANY WARRANTY;
-  without even the implied warranty of MERCHANTABILITY or FITNESS
-  FOR A PARTICULAR PURPOSE.  See the GNU LGPL for more details.
-
-  As additional permission under GNU LGPL version 2.1 section 7, you
-  may distribute non-source (e.g., minimized or compacted) forms of
-  that code without the copy of the GNU LGPL normally required by
-  section 4, provided you include this license notice and a URL
-  through which recipients can access the Corresponding Source.
-
-  @licend  The above is the entire license notice
-  for the JavaScript code in this page.
-
-  @author Marcello Stanisci
-  @author Florian Dold
-*/
-
-
-export namespace taler {
-  "use strict";
-
-  let logVerbose: boolean = false;
-  try {
-    logVerbose = !!localStorage.getItem("taler-log-verbose");
-  } catch (e) {
-    // can't read from local storage
-  }
-
-  const presentHandlers: any[] = [];
-  const absentHandlers: any[] = [];
-
-  // Are we running as the content script of an 
-  // extension (and not just from a normal page)?
-  let runningInExtension = false;
-
-  let callSeqId = 1;
-
-  let installed = false;
-  let probeExecuted = false;
-  let pageLoaded = false;
-
-  let errorHandler: any = undefined;
-
-  let sheet: CSSStyleSheet;
-
-  export function onError(handler: any) {
-    if (errorHandler) {
-      console.warn("Overriding error handler");
-    }
-    errorHandler = handler;
-  }
-
-
-  /**
-   * Error handler for things that go wrong in the merchant
-   * frontend browser code.
-   */
-  function raise_error(reason: string, detail: any) {
-    if (errorHandler) {
-      errorHandler(reason, detail);
-      return;
-    }
-    alert(`Failure: ${reason}.  No error handler installed.  Open the 
developer console for more information.`);
-    console.error(reason, detail);
-    console.warn("No custom error handler set.");
-  }
-
-
-  function callWallet(funcName: string, args: any, onResult?: any): void {
-    const detail = JSON.parse(JSON.stringify(args || {}));
-    const callId = callSeqId++;
-    detail.callId = callId;
-    let onTimeout = () => {
-      console.warn("timeout for invocation of " + funcName);
-    }
-    const timeoutHandle: number = setTimeout(onTimeout, 1000);
-    let handler = (evt: CustomEvent) => {
-      if (evt.detail.callId !== callId) {
-        return;
-      }
-      if (onResult) {
-        onResult(evt.detail);
-      }
-      clearTimeout(timeoutHandle);
-      document.removeEventListener(funcName + "-result", handler);
-    };
-    document.addEventListener(funcName + "-result", handler);
-    const evt = new CustomEvent(funcName, {detail});
-    document.dispatchEvent(evt)
-  }
-
-
-  /**
-   * Confirm that a reserve was created.
-   *
-   * Used by tightly integrated bank portals.
-   */
-  export function confirmReserve(reservePub: string) {
-    if (!installed) {
-      logVerbose && console.log("delaying confirmReserve");
-      taler.onPresent(() => {
-        confirmReserve(reservePub);
-      });
-      return;
-    }
-    callWallet("taler-confirm-reserve", {reserve_pub: reservePub});
-  }
-
-
-  export function createReserve(callbackUrl: string, amount: any, wtTypes: 
string[], suggestedExchangeUrl?: string) {
-    if (!installed) {
-      logVerbose && console.log("delaying createReserve");
-      taler.onPresent(() => {
-        createReserve(callbackUrl, amount, wtTypes, suggestedExchangeUrl);
-      });
-      return;
-    }
-    let args = {
-      callback_url: callbackUrl,
-      amount: amount,
-      wt_types: wtTypes,
-      suggested_exchange_url: suggestedExchangeUrl
-    };
-    callWallet("taler-create-reserve", args);
-  }
-
-
-  function handlePaymentResponse(walletResp: any) {
-    /**
-     * Handle a failed payment.
-     *
-     * Try to notify the wallet first, before we show a potentially
-     * synchronous error message (such as an alert) or leave the page.
-     */
-    function handleFailedPayment(r: XMLHttpRequest) {
-      let timeoutHandle: number|null = null;
-      function err() {
-        raise_error("pay-failed", {status: r.status, response: 
r.responseText});
-      }
-      function onResp() {
-        if (timeoutHandle != null) {
-          clearTimeout(timeoutHandle);
-          timeoutHandle = null;
-        }
-        err();
-      }
-      function onTimeout() {
-        timeoutHandle = null
-        err();
-      }
-      callWallet("taler-payment-failed", {H_contract: walletResp.H_contract}, 
onResp);
-      timeoutHandle = setTimeout(onTimeout, 200);
-    }
-
-
-    logVerbose && console.log("handling taler-notify-payment: ", walletResp);
-    // Payment timeout in ms.
-    let timeout_ms = 1000;
-    // Current request.
-    let r: XMLHttpRequest|null;
-    let timeoutHandle: number|null = null;
-    function sendPay() {
-      r = new XMLHttpRequest();
-      r.open("post", walletResp.contract.pay_url);
-      r.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
-      r.send(JSON.stringify(walletResp.payReq));
-      r.onload = function() {
-        if (!r) {
-          return;
-        }
-        switch (r.status) {
-          case 200:
-            const merchantResp = JSON.parse(r.responseText);
-            logVerbose && console.log("got success from pay_url");
-            callWallet("taler-payment-succeeded", {H_contract: 
walletResp.H_contract, merchantSig: merchantResp.sig}, () => {
-              let nextUrl = walletResp.contract.fulfillment_url;
-              logVerbose && console.log("taler-payment-succeeded done, going 
to", nextUrl);
-              window.location.href = nextUrl;
-              window.location.reload(true);
-            });
-            break;
-          default:
-            handleFailedPayment(r);
-            break;
-        }
-        r = null;
-        if (timeoutHandle != null) {
-          clearTimeout(timeoutHandle!);
-          timeoutHandle = null;
-        }
-      };
-      function retry() {
-        if (r) {
-          r.abort();
-          r = null;
-        }
-        timeout_ms = Math.min(timeout_ms * 2, 10 * 1000);
-        logVerbose && console.log("sendPay timed out, retrying in ", 
timeout_ms, "ms");
-        sendPay();
-      }
-      timeoutHandle = setTimeout(retry, timeout_ms);
-    }
-    sendPay();
-  }
-
-
-  export function onPresent(f: any) {
-    presentHandlers.push(f);
-  }
-
-  export function onAbsent(f: any) {
-    absentHandlers.push(f);
-  }
-
-  interface FulfillmentQuery {
-    type: "fulfillment_url";
-  }
-
-  interface OrderIdQuery {
-    type: "order_id";
-    order_id: string;
-  }
-
-
-  interface PayDetail {
-    contract_url?: string;
-    offer_url?: string;
-  }
-
-  export function internalPay(p: PayDetail) {
-    // either the callback gets called,
-    // or the wallet will redirect the browser
-    callWallet("taler-pay", p, handlePaymentResponse);
-  }
-
-  export function pay(p: PayDetail) {
-    if (!installed) {
-      logVerbose && console.log("delaying call to 'pay' until GNU Taler wallet 
is present");
-      taler.onPresent(() => {
-        pay(p);
-      });
-      return;
-    }
-    internalPay(p);
-  }
-
-  export interface AuditorDetail {
-    currency: string;
-    url: string;
-    auditorPub: string;
-    expirationStamp: number;
-  }
-
-
-  export function internalAddAuditor(d: AuditorDetail) {
-    // either the callback gets called,
-    // or the wallet will redirect the browser
-    callWallet("taler-add-auditor", d);
-  }
-
-
-  export function addAuditor(d: AuditorDetail) {
-    if (!installed) {
-      logVerbose && console.log("delaying call to 'addAuditor' until GNU Taler 
wallet is present");
-      taler.onPresent(() => {
-        addAuditor(d);
-      });
-      return;
-    }
-    internalAddAuditor(d);
-  }
-
-
-  export function internalCheckAuditor(url: string): 
Promise<AuditorDetail|undefined> {
-    return new Promise<AuditorDetail|undefined>((resolve, reject) => {
-      callWallet("taler-check-auditor", url, (x: any) => resolve(x as 
AuditorDetail));
-    });
-  }
-
-
-  /**
-   * Check if an auditor is already added to the wallet.
-   *
-   * Same-origin restrictions apply.
-   */
-  export function checkAuditor(url: string): Promise<AuditorDetail|undefined> {
-    if (!installed) {
-      logVerbose && console.log("delaying call to 'checkAuditor' until GNU 
Taler wallet is present");
-      return new Promise<AuditorDetail|undefined>((resolve, reject) => {
-        taler.onPresent(() => {
-          resolve(checkAuditor(url));
-        });
-      });
-    }
-    return internalCheckAuditor(url);
-  }
-
-
-  function initTaler() {
-
-    function handleUninstall() {
-      installed = false;
-      // not really true, but we want "uninstalled" to be shown
-      firstTimeoutCalled = true;
-      announce();
-    }
-
-    function handleProbe() {
-      probeExecuted = true;
-      if (!installed) {
-        logVerbose && console.log("taler install detected");
-        installed = true;
-        announce();
-      }
-    }
-
-    function probeTaler() {
-      probeExecuted = false;
-      var eve = new Event("taler-probe");
-      document.dispatchEvent(eve);
-    }
-
-    let firstTimeoutCalled = false;
-
-    function onProbeTimeout() {
-      if (!probeExecuted) {
-        if (installed || !firstTimeoutCalled) {
-          installed = false;
-          firstTimeoutCalled = true;
-          logVerbose && console.log("taler uninstall detected");
-          announce();
-        }
-      }
-      // try again, maybe it'll be installed ...
-      probeTaler();
-    }
-
-    /**
-     * Announce presence/absence and update stylesheets.
-     *
-     * Only called after document.readyState is at least "interactive".
-     */
-    function announce() {
-      if (!pageLoaded) {
-        logVerbose && console.log("page not loaded yet, announcing later");
-        return;
-      }
-      setStyles();
-      if (installed) {
-        logVerbose && console.log("announcing installed");
-        for (var i = 0; i < presentHandlers.length; i++) {
-          presentHandlers[i]();
-        }
-      } else {
-        if (firstTimeoutCalled) {
-          logVerbose && console.log("announcing uninstalled");
-          for (var i = 0; i < absentHandlers.length; i++) {
-            absentHandlers[i]();
-          }
-        } else {
-          logVerbose && console.log("announcing nothing");
-        }
-      }
-    }
-
-    function setStyles() {
-      if (!sheet || !sheet.cssRules) {
-        return;
-      }
-      while (sheet.cssRules.length > 0) {
-        sheet.deleteRule(0);
-      }
-      if (installed) {
-        sheet.insertRule(".taler-installed-hide { display: none; }", 0);
-        sheet.insertRule(".taler-probed-hide { display: none; }", 0);
-      } else {
-        sheet.insertRule(".taler-installed-show { display: none; }", 0);
-
-        if (firstTimeoutCalled) {
-          sheet.insertRule(".taler-probed-hide { display: none; }", 0);
-        } else {
-          // We're still doing the detection
-          sheet.insertRule(".taler-installed-hide { display: none; }", 0);
-        }
-      }
-    }
-
-    function initStyle() {
-      logVerbose && console.log("taking over styles");
-      const name = "taler-presence-stylesheet";
-      const content = "/* Taler stylesheet controlled by JS */";
-      let style = document.getElementById(name) as HTMLStyleElement|null; 
-      if (!style) {
-        style = document.createElement("style");
-        // Needed by WebKit
-        style.appendChild(document.createTextNode(content));
-        style.id = name;
-        document.head.appendChild(style);
-        sheet = style.sheet as CSSStyleSheet;
-      } else {
-        // We've taken over the stylesheet now,
-        // make it clear by clearing all the rules in it
-        // and making it obvious in the DOM.
-        if (style.tagName.toLowerCase() === "style") {
-          style.innerText = content;
-        }
-        if (!style.sheet) {
-          throw Error("taler-presence-stylesheet should be a style sheet 
(<link> or <style>)");
-        }
-        sheet = style.sheet as CSSStyleSheet;
-        while (sheet.cssRules.length > 0) {
-          sheet.deleteRule(0);
-        }
-      }
-    }
-
-    function onPageLoad() {
-      pageLoaded = true;
-      if (document.readyState == "complete") {
-        initStyle();
-      } else {
-        let listener = () => {
-          initStyle();
-          setStyles();
-        };
-        window.addEventListener("load", listener);
-      }
-
-      // We only start the timeout after the page is interactive.
-      window.setInterval(onProbeTimeout, 300);
-
-      announce();
-    }
- 
-    probeTaler();
-    document.addEventListener("taler-probe-result", handleProbe, false);
-    document.addEventListener("taler-uninstall", handleUninstall, false);
-    // Handle the case where the JavaScript is loaded after the page
-    // has been loaded for the first time.
-    if (document.readyState == "loading") {
-      document.addEventListener("DOMContentLoaded", onPageLoad, false);
-    } else {
-      onPageLoad();
-    }
-  }
-
-  function onPageLoadInExtension() {
-    if (document.documentElement.getAttribute("data-taler-nojs")) {
-      logVerbose && console.log("doing taler initialization from extension 
(nojs)");
-      initTaler();
-    }
-  }
-
-  let caught = false;
-  try {
-    (chrome as any).runtime.sendMessage({type: "ping"});
-  } catch (e) {
-    caught = true;
-  }
-
-  if (caught) {
-    logVerbose && console.log("running taler-wallet-lib from page");
-    initTaler();
-  } else {
-    logVerbose && console.log("running taler-wallet-lib from extension");
-    runningInExtension = true;
-    // Wait for even style sheets to load
-    if (document.readyState != "complete") {
-      window.addEventListener("load", () => onPageLoadInExtension());
-    } else {
-      onPageLoadInExtension();
-    }
-  }
-}
-// @license-end
diff --git a/talermerchantdemos/blog/static/web-common/tsconfig.json 
b/talermerchantdemos/blog/static/web-common/tsconfig.json
deleted file mode 100644
index 7d51196..0000000
--- a/talermerchantdemos/blog/static/web-common/tsconfig.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "compilerOptions": {
-    "target": "es3",
-    "jsx": "react",
-    "module": "umd",
-    "experimentalDecorators": true,
-    "noImplicitReturns": true,
-    "noFallthroughCasesInSwitch": true,
-    "strictNullChecks": true,
-    "noImplicitAny": true,
-    "lib": ["ES6", "DOM"]
-  },
-  "files": [
-    "taler-wallet-lib.ts",
-    "chrome-any.d.ts"
-  ]
-}
diff --git a/talermerchantdemos/blog/templates/base.html 
b/talermerchantdemos/blog/templates/base.html
index 52e97b7..4507d9e 100644
--- a/talermerchantdemos/blog/templates/base.html
+++ b/talermerchantdemos/blog/templates/base.html
@@ -21,9 +21,9 @@
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   {% block meta %}{% endblock %}
   <title>Taler Essay Shop Demo</title>
-  <link rel="stylesheet" type="text/css" href="{{ url_for('static', 
filename='web-common/pure.css') }}" />
-  <link rel="stylesheet" type="text/css" href="{{ url_for('static', 
filename='web-common/demo.css') }}" />
-  <link rel="stylesheet" type="text/css" href="{{ url_for('static', 
filename='web-common/taler-fallback.css') }}" id="taler-presence-stylesheet" />
+  <link rel="stylesheet" type="text/css" href="{{ url_for('static', 
filename='pure.css') }}" />
+  <link rel="stylesheet" type="text/css" href="{{ url_for('static', 
filename='demo.css') }}" />
+  <link rel="stylesheet" type="text/css" href="{{ url_for('static', 
filename='taler-fallback.css') }}" id="taler-presence-stylesheet" />
   <style>
     .warn {
       background-color: #aa393977;

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]