aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Gruntfile.js85
-rw-r--r--README.md66
-rw-r--r--_config.yml1
-rw-r--r--_layouts/page.html1
-rw-r--r--_posts/2014-07-03-our-research-into-the-impact-of-technologies-on-foi.md218
-rw-r--r--assets/css/alaveteli-org.css751
-rw-r--r--assets/css/global.css1187
-rw-r--r--assets/sass/alaveteli-org.scss1
-rw-r--r--docs/customising/translation.md107
-rw-r--r--docs/developers/i18n.md161
-rw-r--r--docs/glossary.md86
-rw-r--r--docs/installing/manual_install.md22
-rw-r--r--docs/running/admin_manual.md19
-rw-r--r--docs/running/upgrading.md54
-rw-r--r--package.json16
m---------theme0
17 files changed, 798 insertions, 1978 deletions
diff --git a/.gitignore b/.gitignore
index 49eac9d72..aa715b2b1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
.sass-cache/
_site/
+node_modules/
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644
index 000000000..f3befd3f6
--- /dev/null
+++ b/Gruntfile.js
@@ -0,0 +1,85 @@
+module.exports = function(grunt) {
+
+ // Project configuration.
+ grunt.initConfig({
+ pkg: grunt.file.readJSON('package.json'),
+
+ jekyll: { site: {} },
+
+ connect: {
+ server: {
+ options: {
+ base: "_site",
+ port: 4000,
+ livereload: true
+ }
+ }
+ },
+
+ uglify: {
+ library: {
+ files: {
+ 'assets/scripts/lib.min.js': [
+ 'bower_components/jquery/jquery.js',
+ 'bower_components/jquery/jquery-migrate.js',
+ 'bower_components/owlcarousel/owl-carousel/owl.carousel.js'
+ ],
+ }
+ },
+ main: {
+ files: {
+ 'assets/scripts/app.min.js': 'assets/scripts/app.js'
+ }
+ },
+ },
+
+ sass: {
+ global: {
+ options: { style: 'compressed' },
+ files: {
+ 'assets/css/global.css': 'theme/sass/global.scss',
+ 'assets/css/alaveteli-org.css': 'assets/sass/alaveteli-org.scss'
+ }
+ }
+ },
+
+ watch: {
+ options: { atBegin: true, },
+ css: {
+ files: [
+ 'assets/**/*.scss',
+ 'theme/**/*.scss',
+ ],
+ tasks: [ 'sass' ],
+ },
+ js: {
+ files: [
+ 'assets/scripts/app.js'
+ ],
+ tasks: [ 'uglify' ],
+ },
+ jekyll: {
+ files: [ 'assets/**', '**/*.html', '**/*.md', '!node_modules/**', '!bower_components/**', '!_site/**' ],
+ tasks: [ 'jekyll' ],
+ },
+ livereload: {
+ options: { atBegin: false, livereload: true, },
+ // Look for Jekyll file changes, and changes to static assets
+ // Ignore SCSS so that live CSS update can work properly
+ files: [ 'assets/**', '**/*.html', '**/*.md', '!node_modules/**', '!bower_components/**', '!_site/**', '!assets/**/*.scss' ],
+ },
+ },
+
+ });
+
+ // Load plugins
+ grunt.loadNpmTasks('grunt-contrib-sass');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-jekyll');
+ grunt.loadNpmTasks('grunt-contrib-connect');
+ grunt.loadNpmTasks('grunt-contrib-watch');
+
+ // Default task(s).
+ grunt.registerTask('default', [ 'connect', 'watch' ]);
+
+};
diff --git a/README.md b/README.md
index e4b181b42..68051b49d 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,77 @@
# Alaveteli documentation (github pages)
The `gh-branch` contains the Alaveteli documentation that is hosted
-as GitHub Pages, and available at code.alaveteli.org
+as GitHub Pages, and available at <http://www.alaveteli.org/docs>
-The styling comes from the
+The mySociety documentation "github pages" sites share the same styling.
+It comes from the
[mysociety-docs-theme](https://github.com/mysociety/mysociety-docs-theme)
repo, which is included as a submodule in the `theme/` directory.
+## Updating the CSS, manually
+
If you're building locally, and you change the theme, rebuild it with:
-`sass --update theme/sass/:assets/css/`
+ sass --update --style=compressed theme/sass/global.scss:assets/css/global.css
+
+There's also an Alaveteli-specific stylesheet, so do:
+
+ sass --update --style=compressed assets/sass/alaveteli-org.scss:assets/css/alaveteli-org.css
+
+
+## Viewing locally manually
To view the documentation locally using Jekyll, do something like:
-`jekyll serve --watch`
+ jekyll serve --watch
+
+
+## Using grunt to work locally
+
+If you run grunt (there's a Gruntfile in the repo for this branch) then the CSS
+will automagically update if you change it, *and* pages magically refresh whenever
+you change any of the files. It's like `--watch` on steroids.
+
+### Installation
+In the below you could of course run `sudo gem install` or `npm install -g` but
+I personally never think that's a good idea. You must already have gem and git
+installed (you probably do).
+
+```
+gem install --no-document --user-install github-pages
+# Add ~/.gem/ruby/2.0.0/bin/ or similar to your $PATH
+# Check you can run "jekyll"
+git clone --recursive -b gh-pages https://github.com/mysociety/alaveteli alaveteli-pages
+cd alaveteli-pages
+```
+
+If you only want to edit the *text* of the site, this is all you need. Run
+`jekyll serve --watch` to run a webserver of the static site, and make changes
+to the text you want.
+
+If you want to edit the CSS or JS, or you'd like live reloading of changes in
+your web browser, you might as well set up the thing that monitors it all for
+you. You will need npm already installed.
+
+```
+gem install --no-document --user-install sass
+npm install grunt-cli
+npm install
+node_modules/.bin/grunt
+```
+
+This will start up a watcher that monitors the files and automatically compiles
+SASS, JavaScript, and runs `jekyll build` when necessary. It also live reloads
+your web pages.
+
+Lastly, if you'd like to add more JavaScript *libraries* than the ones already,
+you'll additionally need to install bower and use it to fetch the libraries
+used:
+```
+npm install bower
+node_modules/.bin/bower install
+```
+Then use bower to install a new library and add it to the `Gruntfile.js`.
diff --git a/_config.yml b/_config.yml
index 37eefa1f8..ad5c74aeb 100644
--- a/_config.yml
+++ b/_config.yml
@@ -4,5 +4,6 @@ baseurl: /
permalink: pretty
markdown: kramdown
url: http://code.alaveteli.org
+exclude: [ node_modules ]
gems:
- jekyll-redirect-from
diff --git a/_layouts/page.html b/_layouts/page.html
index 9d8925f07..f1faa3950 100644
--- a/_layouts/page.html
+++ b/_layouts/page.html
@@ -71,6 +71,7 @@ layout: default
<ul>
<li><a href="{{ site.baseurl }}docs/developers/overview/">High-level overview</a></li>
<li><a href="{{ site.baseurl }}docs/developers/directory_structure/">Directory structure</a></li>
+ <li><a href="{{ site.baseurl }}docs/developers/i18n/">Internationalisation</a></li>
<li><a href="{{ site.baseurl }}docs/developers/api/">API</a></li>
</ul>
</li>
diff --git a/_posts/2014-07-03-our-research-into-the-impact-of-technologies-on-foi.md b/_posts/2014-07-03-our-research-into-the-impact-of-technologies-on-foi.md
new file mode 100644
index 000000000..d9fb7e403
--- /dev/null
+++ b/_posts/2014-07-03-our-research-into-the-impact-of-technologies-on-foi.md
@@ -0,0 +1,218 @@
+---
+author: Tom Longley and Savita Bailur
+comments: true
+date: 2014-07-03 14:54:07+00:00
+layout: post
+slug: 'our-research-into-the-impact-of-technologies-on-foi'
+title: Our research into the impact of technologies on FOI
+wordpress_id: 455
+---
+In March this year mySociety put out [a call for a research consultant](https://www.mysociety.org/2014/03/31/seeking-a-research-contractor-with-transparency-and-accountability-expertise/) to look at the place that Alaveteli - mySociety's open source freedom of information (FOI) filer - might have in creating cultures of transparency and accountability. So, eventually, mySociety chose us - Savita Bailur and Tom Longley. Since we're the strangers here, we'd like to introduce ourselves, give you an idea of the approach that we'll be taking, and what we've found in the first weeks of the research.
+
+##Who are we?
+
+Savita is a consultant who has previously worked for the World Bank, Commonwealth Secretariat, USAID, and Panos and taught at the University of Manchester and London School of Economics. She has a personal interest in freedom of information as her family in India successfully used the Right to Information Act in India to find out about violations of building regulations (although the legal process to change things is taking more time). If there's one thing of Savita's to read, it's [Closing the Feedback Loop : Can Technology Bridge the Accountability Gap?](https://openknowledge.worldbank.org/handle/10986/18408), which she wrote in and co-edited.
+
+Tom is a human rights and technology consultant who's worked on field investigations of crimes against humanity. After years wading through stacks of documentation and interview transcripts, he became interested in how data and technologies could help this work. He has since worked for investigation organisations in Kosovo, Sierra Leone, Bangladesh, Cambodia, Zimbabwe and others helping building up their ability to use data and technologies safely and effectively. Tom also consults for Tactical Technology Collective, Global Witness and Open Society Foundations. If there's one thing of his to read, it's probably ["Deadly Environment"](http://globalwitness.org/deadlyenvironment), a report about murders of environmental defenders.
+
+##What are we doing?
+
+The top level question we're addressing is: "In what circumstances, if any, can tools like Alaveteli be shown to have measurable impacts on the ability of citizens to exert power over underperforming institutions?" To get at this, we'll be doing three things:
+
+* First, a review of the studies so far on the impact of the internet on FOI. Our early findings flag a lot of research into the mechanics of FOI, but very little on its impact, other than anecdotal evidence. There are some great points and questions raised in the literature however, which we combine into roughly ten areas of impact. These include FOI's role in aiding the transition from transparency to accountability, the role of different groups (like the media, movements, non-governmental and community groups), public and institutional perceptions, security and privacy. We find that the overall challenge is that the technology is only part of the FOI value chain - governments also need to respond, and sanctions/enforcements put in place which ensure governments are transparent and accountable.
+
+* Second, a field scan of practitioners. There are nearly 20 FOI websites running Alaveteli. Some sites are just getting started, like [Доступ До Правди ("Access the Truth")](https://dostup.pravda.com.ua/list/all) in Ukraine. By talking with the people setting up and using these sites, we aim to pull together a view of what makes a successful implementation, what the challenges are, and what can be learned for future implementors of FOI sites.
+
+* Third, a list of critical success factors, pulled together from both the literature and practitioner reviews, which will be translated into major languages.
+
+All these documents should be published this September, along with something brief and readable with the topline findings.
+
+
+##What are we asking of you?
+
+If you run an Alaveteli site, we may have already emailed you or will do very soon asking if you can spare some time to talk with us as part of the practioner review. More generally, we're continuing to look for more articles and 'grey' literature, in particular any quantitative studies, about the role of technologies in FOI. We have a shorter list of articles we have found so far [here](#short-reference-list), and a longer list [here](#long-reference-list) - have we missed any? Please let us know.
+
+To wrap up, this is first generation research into this area. We hope to have material that can be useful to you and mySociety. Any questions, get in touch via the comments field, or via twitter at any of our handles ([@alaveteli_foi](https://twitter.com/alaveteli_foi), [@tlongers](https://twitter.com/tlongers), [@savitabailur](https://twitter.com/savitabailur)).
+
+##Short reference list
+
+Baisakh, Pradeep. 2007. “India Together: Villagers Push for Work Benefits in Orissa.” <http://indiatogether.org/egarti-human-rights>.
+
+Bauhr, Monika, and Marcia Grimes. 2014. “Indignation or Resignation: The Implications of Transparency for Societal Accountability.” Governance 27 (2): 291–320. doi:10.1111/gove.12033.
+
+Bertot, John C., Paul T. Jaeger, and Justin M. Grimes. 2010. “Using ICTs to Create a Culture of Transparency: E-Government and Social Media as Openness and Anti-Corruption Tools for Societies.” Government Information Quarterly 27 (3): 264–71. doi:10.1016/j.giq.2010.03.001.
+
+Birkinshaw, Patrick. 2010. “Freedom of Information and Its Impact in the United Kingdom.” Government Information Quarterly, Special Issue: Open/Transparent Government, 27 (4): 312–21. doi:10.1016/j.giq.2010.06.006.
+
+Brooke, Heather. 2011. “Fess up - or Face a Future of Leaks.” British Journalism Review 22 (1): 17–19. doi:10.1177/09564748110220010601.
+
+Cabo, David. (2012). “Tu derecho a saber” David Cabo at TedxMadrid. Accessed June 25. <http://www.youtube.com/watch?v=Okta1VjTM0I>.
+
+Cherry, Morag, and David McMenemy. 2013. “Freedom of Information and ‘vexatious’ Requests — The Case of Scottish Local Government.” Government Information Quarterly 30 (3): 257–66. doi:10.1016/j.giq.2013.02.004.
+
+Consumer Unity and Trust Society. 2010. Analysing the Right to Information Act in India. Jaipur: Consumer Unity and Trust Society.
+
+Costa, Samia. 2013. “Do Freedom of Information Laws Decrease Corruption?” Journal of Law, Economics, and Organization 29 (6): 1317–43. doi:10.1093/jleo/ews016.
+
+Dunion, K. 2011. “Viewpoint: In Defence of Freedom of Information.” Information Polity 16 (2): 93–96. doi:10.3233/IP-2011-0233.
+
+Etzioni, Amitai. 2010. “Is Transparency the Best Disinfectant?” Journal of Political Philosophy 18 (4): 389–404. doi:10.1111/j.1467-9760.2010.00366.x.
+
+Finel, Bernard I., and Kristin M. Lord. 1999. “The Surprising Logic of Transparency.” International Studies Quarterly 43 (2): 325–39. doi:10.1111/0020-8833.00122.
+
+Fox, Jonathan. 2007. “The Uncertain Relationship between Transparency and Accountability.” Development in Practice 17 (4-5): 663–71. doi:10.1080/09614520701469955.
+
+Gandhi, Shailesh. 2007. “The RTI Movement Will Lead India to Swaraj.” Accessed June 24. <http://www.rediff.com/news/2007/oct/11guest.htm>.
+Global Right to Information Rating. 2014. “Country Data.” <http://www.rti-rating.org/>.
+
+Government of India. 2005. “Right to Information, Planning Commission, Governement of India.” <http://planningcommission.gov.in/rti/index.php>.
+
+Grimmelikhuijsen, Stephan. 2012. “A Good Man but a Bad Wizard. About the Limits and Future of Transparency of Democratic Governments.” Information Polity 17 (3): 293–302. doi:10.3233/IP-2012-000288.
+
+Hazell, R., Benjamin Worthy, and M. Glover. 2010. The Impact of the Freedom of Information Act on Central Government in the UK: Does Freedom of Information Work? London: Palgrave Macmillan. <http://www.palgrave.com/products/title.aspx?pid=407804>.
+
+Hazell, Robert, and Ben Worthy. 2010. “Assessing the Performance of Freedom of Information.” Government Information Quarterly, Special Issue: Open/Transparent Government, 27 (4): 352–59. doi:10.1016/j.giq.2010.03.005.
+
+India Together: RTI: An Enormous Power with the People: Vinita Deshmukh - 07 August 2006. 2006. <http://indiatogether.org/arvind-interviews>.
+
+Jaeger, Paul T., and John Carlo Bertot. 2010. “Transparency and Technological Change: Ensuring Equal and Sustained Public Access to Government Information.” Government Information Quarterly, Special Issue: Open/Transparent Government, 27 (4): 371–76. doi:10.1016/j.giq.2010.05.003.
+
+Joshi, Anuradha. 2013. “Do They Work? Assessing the Impact of Transparency and Accountability Initiatives in Service Delivery.” Development Policy Review 31: s29–s48. doi:10.1111/dpr.12018.
+
+McDonagh, Maeve. 2013. “The Right to Information in International Human Rights Law.” Human Rights Law Review 13 (1). <http://papers.ssrn.com/abstract=2446424>.
+
+Meijer, Albert Jacob. 2003. “Transparent Government: Parliamentary and Legal Accountability in an Information Age.” Information Polity 8 (1): 67–78.
+
+Michener, Greg. 2011. “FOI Laws Around the World.” Journal of Democracy 22 (2): 145–59. doi:10.1353/jod.2011.0021.
+
+Michener, Greg, and Katherine Bersch. 2013. “Identifying Transparency.” Information Polity 18 (3): 233–42. doi:10.3233/IP-130299.
+
+Minihan, Mary. 2014. “Cabinet Abolishes €15 Freedom of Information Fee”, July 1. <http://www.irishtimes.com/news/politics/cabinet-abolishes-15-freedom-of-information-fee-1.1851481>.
+
+Nye, Joseph S., Philip Zelikow, and David C. King. 1997. Why People Don’t Trust Government. Boston: Harvard University Press.
+
+Roberts, Alasdair. 2010. “A Great and Revolutionary Law? The First Four Years of India’s Right to Information Act.” Public Administration Review 70 (6): 925–33. doi:10.1111/j.1540-6210.2010.02224.x.
+
+Shepherd, Elizabeth, Alice Stevenson, and Andrew Flinn. 2011. “Freedom of Information and Records Management in Local Government: Help or Hindrance?” Information Polity 16 (2): 111–21. doi:10.3233/IP-2011-0229.
+
+Spence, Kate, and William Dinan. 2011. “Healthy Tensions? Assessing FOI Uptake in the Voluntary Sector in Scotland.” Information Polity 16 (2): 97–109. doi:10.3233/IP-2011-0228.
+
+Srivastava, Smita. 2010. “The Right to Information in India: Implementation and Impact.” Afro Asian Journal of Social Sciences 1 (1): 1–18.
+
+Tuderechoasaber.es (2012). Informe Tuderechoasaber.es 2012. Accessed June 25. <http://blog-tdas.s3.amazonaws.com/blog-tdas/2013/04/informe2012.pdf>
+
+Tuderechoasaber.es (2013). Silencio masivo de las instituciones en el año de la transparencia: Informe Tuderechoasaber.es 2013. Accessed June 25. <http://blog.tuderechoasaber.es/informe2013/>.
+
+UNDP. 2006. A Guide to Measuring the Impact of Right to Information Programmes; Practical Guide Note. New York: UNDP.
+
+Worthy, Ben. 2010. “More Open but Not More Trusted? The Effect of the Freedom of Information Act 2000 on the United Kingdom Central Government.” Governance 23 (4): 561–82. doi:10.1111/j.1468-0491.2010.01498.x.
+
+
+##Long reference list
+
+Baisakh, Pradeep. 2007. “India Together: Villagers Push for Work Benefits in Orissa.” <http://indiatogether.org/egarti-human-rights>.
+
+Bannister, Frank, and Regina Connolly. 2011. “The Trouble with Transparency: A Critical Review of Openness in E-Government.” Policy & Internet 3 (1): 1–30. doi:10.2202/1944-2866.1076.
+
+Bauhr, Monika, and Marcia Grimes. 2014. “Indignation or Resignation: The Implications of Transparency for Societal Accountability.” Governance 27 (2): 291–320. doi:10.1111/gove.12033.
+
+Bentham, Jeremy, and Sir John Bowring. 1839. Works of Jeremy Bentham. W. Tait.
+
+Berliner, Daniel. 2014. “The Political Origins of Transparency.” The Journal of Politics 76 (02): 479–91. doi:10.1017/S0022381613001412.
+
+Bertot, John C., Paul T. Jaeger, and Justin M. Grimes. 2010. “Using ICTs to Create a Culture of Transparency: E-Government and Social Media as Openness and Anti-Corruption Tools for Societies.” Government Information Quarterly 27 (3): 264–71. doi:10.1016/j.giq.2010.03.001.
+
+Birkinshaw, Patrick. 2010. “Freedom of Information and Its Impact in the United Kingdom.” Government Information Quarterly, Special Issue: Open/Transparent Government, 27 (4): 312–21. doi:10.1016/j.giq.2010.06.006.
+
+Breton, Albert. 2007. The Economics of Transparency in Politics. Aldershot: Ashgate Publishing, Ltd.
+
+Brooke, Heather. 2011. “Fess up - or Face a Future of Leaks.” British Journalism Review 22 (1): 17–19. doi:10.1177/09564748110220010601.
+
+Cabo, David. (2012). “Tu derecho a saber” David Cabo at TedxMadrid. Accessed June 25. <http://www.youtube.com/watch?v=Okta1VjTM0I>.
+
+Cherry, Morag, and David McMenemy. 2013. “Freedom of Information and ‘vexatious’ Requests — The Case of Scottish Local Government.” Government Information Quarterly 30 (3): 257–66. doi:10.1016/j.giq.2013.02.004.
+
+Consumer Unity and Trust Society. 2010. Analysing the Right to Information Act in India. Jaipur: Consumer Unity and Trust Society.
+
+Costa, Samia. 2013. “Do Freedom of Information Laws Decrease Corruption?” Journal of Law, Economics, and Organization 29 (6): 1317–43. doi:10.1093/jleo/ews016.
+
+Douglass, Frederick. 2014. “(1857) Frederick Douglass, ‘If There Is No Struggle, There Is No Progress’ - The Black Past: Remembered and Reclaimed.” Accessed June 24. <http://www.blackpast.org/1857-frederick-douglass-if-there-no-struggle-there-no-progress>.
+
+Dunion, K. 2011. “Viewpoint: In Defence of Freedom of Information.” Information Polity 16 (2): 93–96. doi:10.3233/IP-2011-0233.
+
+Etzioni, Amitai. 2010. “Is Transparency the Best Disinfectant?” Journal of Political Philosophy 18 (4): 389–404. doi:10.1111/j.1467-9760.2010.00366.x.
+
+Fenster, Mark. 2010. Seeing the State: Transparency as Metaphor. SSRN Scholarly Paper ID 1562762. Gainesville, Florida: University of Florida. <http://papers.ssrn.com/abstract=1562762>.
+
+Finel, Bernard I., and Kristin M. Lord. 1999. “The Surprising Logic of Transparency.” International Studies Quarterly 43 (2): 325–39. doi:10.1111/0020-8833.00122.
+
+Fox, Jonathan. 2007. “The Uncertain Relationship between Transparency and Accountability.” Development in Practice 17 (4-5): 663–71. doi:10.1080/09614520701469955.
+
+Fung, Archon. 2006. “Varieties of Participation in Complex Governance.” Public Administration Review 66: 66–75. doi:10.1111/j.1540-6210.2006.00667.x.
+
+Gandhi, Shailesh. 2007. “The RTI Movement Will Lead India to Swaraj.”
+Global Right to Information Rating. 2014. “Country Data.” <http://www.rti-rating.org/>.
+
+Government of India. 2005. “Right to Information, Planning Commission, Governement of India.” <http://planningcommission.gov.in/rti/index.php>.
+
+Grimmelikhuijsen, Stephan. 2012. “A Good Man but a Bad Wizard. About the Limits and Future of Transparency of Democratic Governments.” Information Polity 17 (3): 293–302. doi:10.3233/IP-2012-000288.
+
+Hazell, R., Benjamin Worthy, and M. Glover. 2010. The Impact of the Freedom of Information Act on Central Government in the UK: Does Freedom of Information Work? London: Palgrave Macmillan. <http://www.palgrave.com/products/title.aspx?pid=407804>.
+
+Hazell, Robert, and Ben Worthy. 2010. “Assessing the Performance of Freedom of Information.” Government Information Quarterly, Special Issue: Open/Transparent Government, 27 (4): 352–59. doi:10.1016/j.giq.2010.03.005.
+
+Hood, Christopher. 2006. “Transparency in Historical Perspective.” In Transparency: The Key to Better Governance?, edited by Christopher Hood and David Heald, 3–23. Oxford, UK: Oxford University Press. <http://www.oup.co.uk/>.
+
+India Together: RTI: An Enormous Power with the People: Vinita Deshmukh - 07 August 2006. 2006. <http://indiatogether.org/arvind-interviews>.
+
+Jaeger, Paul T., and John Carlo Bertot. 2010. “Transparency and Technological Change: Ensuring Equal and Sustained Public Access to Government Information.” Government Information Quarterly, Special Issue: Open/Transparent Government, 27 (4): 371–76. doi:10.1016/j.giq.2010.05.003.
+
+Joshi, Anuradha. 2013. “Do They Work? Assessing the Impact of Transparency and Accountability Initiatives in Service Delivery.” Development Policy Review 31: s29–s48. doi:10.1111/dpr.12018.
+
+Lathrop, Daniel, and Laurel Ruma. 2010. Open Government: Collaboration, Transparency, and Participation in Practice. Sebastopol, CA: O’Reilly Media, Inc.
+
+Linders, Dennis. 2012. “From E-Government to We-Government: Defining a Typology for Citizen Coproduction in the Age of Social Media.” Government Information Quarterly, Social Media in Government - Selections from the 12th Annual International Conference on Digital Government Research (dg.o2011), 29 (4): 446–54. doi:10.1016/j.giq.2012.06.003.
+
+McDonagh, Maeve. 2013. “The Right to Information in International Human Rights Law.” Human Rights Law Review 13 (1). <http://papers.ssrn.com/abstract=2446424>.
+
+Meijer, Albert J. 2012. “Introduction to the Special Issue on Government Transparency.” International Review of Administrative Sciences 78 (1): 3–9. doi:10.1177/0020852311435639.
+
+Meijer, Albert Jacob. 2003. “Transparent Government: Parliamentary and Legal Accountability in an Information Age.” Information Polity 8 (1): 67–78.
+
+Michener, Greg. 2011. “FOI Laws Around the World.” Journal of Democracy 22 (2): 145–59. doi:10.1353/jod.2011.0021.
+
+Michener, Greg, and Katherine Bersch. 2013. “Identifying Transparency.” Information Polity 18 (3): 233–42. doi:10.3233/IP-130299.
+
+Minihan, Mary. 2014. “Cabinet Abolishes €15 Freedom of Information Fee”, July 1. <http://www.irishtimes.com/news/politics/cabinet-abolishes-15-freedom-of-information-fee-1.1851481>.
+
+Nye, Joseph S., Philip Zelikow, and David C. King. 1997. Why People Don’t Trust Government. Boston: Harvard University Press.
+
+Official Information: Your Right To Know — Ministry of Justice, New Zealand. 2014. Accessed June 24. <http://www.justice.govt.nz/publications/global-publications/o/official-information-your-right-to-know>.
+
+OneWorld. 2011. ICT Facilitated Access to Information Innovations.
+
+Press Association. 2009. “Telegraph Reveals Cost of MP’s Expense Story.”
+
+Roberts, Alasdair. 2010. “A Great and Revolutionary Law? The First Four Years of India’s Right to Information Act.” Public Administration Review 70 (6): 925–33. doi:10.1111/j.1540-6210.2010.02224.x.
+
+Schedler, Andreas. 1999. “Conceptualizing Accountability.” In The Self-Restraining State: Power and Accountability in New Democracies, edited by Larry Diamond and Marc Plattner, 13–28. London: Lynne Rienner Publishers.
+
+Shepherd, Elizabeth, Alice Stevenson, and Andrew Flinn. 2011. “Freedom of Information and Records Management in Local Government: Help or Hindrance?” Information Polity 16 (2): 111–21. doi:10.3233/IP-2011-0229.
+
+Smith, Matthew L., and Katherine M. A. Reilly. 2014. Open Development: Networked Innovations in International Development. Ottawa: MIT Press.
+
+Spence, Kate, and William Dinan. 2011. “Healthy Tensions? Assessing FOI Uptake in the Voluntary Sector in Scotland.” Information Polity 16 (2): 97–109. doi:10.3233/IP-2011-0228.
+
+Srivastava, Smita. 2010. “The Right to Information in India: Implementation and Impact.” Afro Asian Journal of Social Sciences 1 (1): 1–18.
+
+Tuderechoasaber.es (2012). Informe Tuderechoasaber.es 2012. Accessed June 25. <http://blog-tdas.s3.amazonaws.com/blog-tdas/2013/04/informe2012.pdf>
+
+Tuderechoasaber.es (2013). Silencio masivo de las instituciones en el año de la transparencia: Informe Tuderechoasaber.es 2013. Accessed June 25. <http://blog.tuderechoasaber.es/informe2013/>.
+
+UNDP. 2006. A Guide to Measuring the Impact of Right to Information Programmes; Practical Guide Note. New York: UNDP.
+
+Wilson, Woodrow, and William Bayard Hale. 1918. The New Freedom: A Call for the Emancipation of the Generous Energies of a People. Doubleday, Page.
+
+Worthy, Ben. 2010. “More Open but Not More Trusted? The Effect of the Freedom of Information Act 2000 on the United Kingdom Central Government.” Governance 23 (4): 561–82. doi:10.1111/j.1468-0491.2010.01498.x.
+
+Xiao, Weibing. 2010. “The Improved Information Environment as a Key Rationale for Freedom of Information Reform in China.” Information Polity 15 (3): 177–87. doi:10.3233/IP-2010-0214.
diff --git a/assets/css/alaveteli-org.css b/assets/css/alaveteli-org.css
index 47f870b20..4919a7569 100644
--- a/assets/css/alaveteli-org.css
+++ b/assets/css/alaveteli-org.css
@@ -1,724 +1,27 @@
-.image-replacement {
- text-indent: -1000%;
- white-space: nowrap;
- overflow: hidden; }
-
-.container {
- max-width: 63.333333333em;
- padding: 0 1em;
- margin: 0 auto;
- position: relative; }
-
-.unstyled-list, .unstyled, .site-nav ul {
- margin-left: 0;
- padding-left: 0;
- list-style: none outside none; }
-
-.inline-list {
- margin-left: -0.5em;
- margin-bottom: 0; }
- .inline-list li {
- display: inline-block;
- margin-left: 0.5em; }
-
-.text--center {
- text-align: center; }
-
-/* Alaveteli's purple */
-html {
- background-color: #333333;
- height: 100%;
- min-height: 100%; }
-
-body {
- background-color: transparent; }
-
-.no-svg .site-title {
- background-image: url("../img/alaveteli-logo.png"); }
-
-.hero, .what-is-alaveteli, .how-does-it-work, .features, .get-started, .about__intro, .deployments__intro {
- padding: 2em 0; }
- @media (min-width: 40em) {
- .hero, .what-is-alaveteli, .how-does-it-work, .features, .get-started, .about__intro, .deployments__intro {
- padding: 3.5em 0; } }
-
-.hero, .how-does-it-work, .get-started, .about__intro, .deployments__intro {
- background-color: #333333;
- color: #fff; }
- .hero a, .how-does-it-work a, .get-started a, .about__intro a, .deployments__intro a {
- color: #fff;
- border-bottom: 1px dotted rgba(255, 255, 255, 0.3); }
- .hero a:hover, .how-does-it-work a:hover, .get-started a:hover, .about__intro a:hover, .deployments__intro a:hover, .hero a:active, .how-does-it-work a:active, .get-started a:active, .about__intro a:active, .deployments__intro a:active, .hero a:focus, .how-does-it-work a:focus, .get-started a:focus, .about__intro a:focus, .deployments__intro a:focus {
- border-color: rgba(255, 255, 255, 0.6);
- background-color: #863c83;
- text-decoration: none; }
- .hero .button, .how-does-it-work .button, .get-started .button, .about__intro .button, .deployments__intro .button {
- color: #fff;
- border: 1px solid rgba(255, 255, 255, 0.3);
- width: 100%;
- margin-bottom: 1em; }
- @media (min-width: 30em) {
- .hero .button, .how-does-it-work .button, .get-started .button, .about__intro .button, .deployments__intro .button {
- width: auto;
- margin-bottom: 0; } }
- .hero .button:hover, .how-does-it-work .button:hover, .get-started .button:hover, .about__intro .button:hover, .deployments__intro .button:hover, .hero .button:active, .how-does-it-work .button:active, .get-started .button:active, .about__intro .button:active, .deployments__intro .button:active, .hero .button:focus, .how-does-it-work .button:focus, .get-started .button:focus, .about__intro .button:focus, .deployments__intro .button:focus {
- background-color: rgba(0, 0, 0, 0.1);
- border-color: rgba(0, 0, 0, 0.1); }
-
-.what-is-alaveteli__grid-unit, .features__grid-unit, .get-started__grid-unit {
- display: inline-block;
- vertical-align: top; }
-
-.grid-row {
- /**
- * For IE 6/7 only
- * Include this rule to trigger hasLayout and contain floats.
- */ }
- .grid-row:before, .grid-row:after {
- content: " ";
- /* 1 */
- display: table;
- /* 2 */ }
- .grid-row:after {
- clear: both; }
- .grid-row {
- *zoom: 1; }
-
-h1, h2, h4, h5, h6 {
- font-weight: 700; }
-
-h3 {
- font-weight: 600; }
-
-.button {
- display: inline-block;
- padding: 0.4em 2.4em;
- border: 1px solid #e4e3dd;
- vertical-align: middle;
- border-radius: 7px;
- text-align: center; }
- .button:hover, .button:active, .button:focus {
- background-color: #3a3a3a;
- border-color: rgba(255, 255, 255, 0.2);
- text-decoration: none; }
-
-@media (min-width: 47.5em) {
- .nav-position {
- position: absolute;
- top: 0.4em;
- left: 180px; } }
-@media (min-width: 56.88889em) {
- .nav-position {
- left: 240px;
- top: 0.35em; } }
-
-.site-nav ul {
- margin-top: 0;
- margin-bottom: 0; }
-@media (min-width: 47.5em) {
- .site-nav li {
- display: inline-block; } }
-.site-nav a {
- color: #fff;
- margin-right: 0.33em;
- display: block;
- padding: 0.33em;
- border-bottom: 1px solid rgba(255, 255, 255, 0.1); }
- @media (min-width: 47.5em) {
- .site-nav a {
- display: inline-block;
- border-bottom: none; } }
- @media (min-width: 56.88889em) {
- .site-nav a {
- font-size: 1.125em;
- margin-right: 0.66em; } }
-
-/*! responsive-nav.js 1.0.32 by @viljamis */
-.js .nav-collapse {
- clip: rect(0 0 0 0);
- max-height: 0;
- position: absolute;
- display: block;
- overflow: hidden;
- zoom: 1; }
-
-.nav-collapse.opened {
- max-height: 9999px; }
-
-.disable-pointer-events {
- pointer-events: none !important; }
-
-.nav-toggle {
- -webkit-tap-highlight-color: transparent;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- -o-user-select: none;
- user-select: none;
- position: absolute;
- top: 0.4em;
- right: 5em;
- display: inline-block;
- padding: 0.3em 0.75em;
- border: 1px solid rgba(255, 255, 255, 0.1);
- border-radius: 5px;
- color: #fff;
- font-size: 0.875em; }
- @media (min-width: 30em) {
- .nav-toggle {
- right: 10em; } }
-
-@media screen and (min-width: 47.5em) {
- .js .nav-collapse {
- position: relative; }
-
- .js .nav-collapse.closed {
- max-height: none; }
-
- .nav-toggle {
- display: none; } }
-.hero {
- background-color: #974495; }
- .hero h1 {
- display: inline-block;
- font-weight: 600;
- width: auto;
- border-bottom: 1px solid rgba(255, 255, 255, 0.2);
- padding-bottom: 0.5em;
- margin-bottom: 0.25em;
- text-shadow: 0px 2px 1px rgba(0, 0, 0, 0.3); }
- @media (min-width: 56.88889em) {
- .hero h1 {
- font-size: 4em; } }
- .hero span {
- opacity: 0.7;
- display: block; }
- .hero p {
- font-size: 1.125em;
- max-width: 25em; }
-
-.action-buttons {
- margin-top: 2em; }
- .action-buttons .button {
- font-weight: 600;
- margin-right: 1em; }
-
-.what-is-alaveteli {
- position: relative; }
-
-@media (min-width: 56.88889em) {
- .what-is-alaveteli__items-grid {
- width: 66.666%; } }
-
-@media (min-width: 30em) {
- .what-is-alaveteli__grid-unit {
- width: 46%;
- margin-right: 4%; } }
-
-.what-is-alaveteli__item {
- padding-left: 3.625em;
- background-position: top left;
- background-size: 50px 50px;
- background-repeat: no-repeat; }
-
-.what-is-alaveteli__item--foi {
- background-image: url("../img/scales.svg"); }
-
-.no-svg .what-is-alaveteli__item--foi {
- background-image: url("../img/scales.png"); }
-
-.what-is-alaveteli__item--help {
- background-image: url("../img/pointer.svg"); }
-
-.no-svg .what-is-alaveteli__item--help {
- background-image: url("../img/pointer.png"); }
-
-.what-is-alaveteli__item--published {
- background-image: url("../img/binoculars.svg"); }
-
-.no-svg .what-is-alaveteli__item--published {
- background-image: url("../img/binoculars.png"); }
-
-.what-is-alaveteli__item--open {
- background-image: url("../img/open.svg"); }
-
-.no-svg .what-is-alaveteli__item--open {
- background-image: url("../img/open.png"); }
-
-@media (min-width: 56.88889em) {
- .what-is-alaveteli__international-reach-position {
- width: 33.3333%;
- position: absolute;
- top: -13em;
- right: 0; } }
-
-.what-is-alaveteli__international-reach {
- background-color: #f3f1eb;
- background-image: url("../img/worldmap.svg");
- background-position: center 1.5em;
- background-repeat: no-repeat;
- background-size: 280px 158px;
- padding: 10em 1.25em 1em; }
- @media (min-width: 30em) {
- .what-is-alaveteli__international-reach {
- background-size: 360px 204px;
- padding: 11.5em 2em 1em; } }
- @media (min-width: 40em) {
- .what-is-alaveteli__international-reach {
- background-size: 360px 204px;
- padding: 1em 2em 1em 22em;
- background-position: left center; } }
- @media (min-width: 56.88889em) {
- .what-is-alaveteli__international-reach {
- background-size: 360px 204px;
- padding: 12.5em 2em 1em;
- background-position: center 1.5em; } }
- .what-is-alaveteli__international-reach .message {
- font-size: 1.4em; }
- .what-is-alaveteli__international-reach strong {
- color: #a94ca6; }
- .what-is-alaveteli__international-reach a {
- color: #787774;
- border-bottom: 1px dotted #e4e3dd; }
- .what-is-alaveteli__international-reach a:hover, .what-is-alaveteli__international-reach a:active, .what-is-alaveteli__international-reach a:focus {
- text-decoration: none;
- border-color: #2b8cdb;
- color: #2b8cdb; }
-
-.no-svg .what-is-alaveteli__international-reach {
- background-image: url("../img/worldmap.png"); }
-
-.how-does-it-work {
- background-color: #974495;
- overflow: hidden; }
- .how-does-it-work img {
- position: relative; }
- @media (min-width: 56.88889em) {
- .how-does-it-work img {
- bottom: -1px; } }
- @media (min-width: 30em) {
- .how-does-it-work {
- padding-top: 0;
- padding-bottom: 0; }
- .how-does-it-work .how-does-it-work__slide {
- border-top: 4em solid #fff;
- padding-top: 4.7em; }
- .how-does-it-work h2, .how-does-it-work p {
- width: 50%; }
- .how-does-it-work img {
- float: right;
- width: 30em;
- margin-right: -15em;
- margin-top: -13em; } }
- @media (min-width: 43.5em) {
- .how-does-it-work .how-does-it-work__slide {
- border-top: 4em solid #fff;
- padding-top: 4.7em; }
- .how-does-it-work h2, .how-does-it-work p {
- width: 33.333%; }
- .how-does-it-work img {
- margin-right: -5em;
- margin-top: -15em; } }
- @media (min-width: 56.88889em) {
- .how-does-it-work h2, .how-does-it-work p, .how-does-it-work .how-does-it-work__slide__nav {
- width: 33.333%;
- margin-left: 66.666%; }
- .how-does-it-work img {
- float: left;
- width: 63.666%;
- margin-top: -15em; } }
-
-.how-does-it-work__slide {
- /**
- * For IE 6/7 only
- * Include this rule to trigger hasLayout and contain floats.
- */ }
- .how-does-it-work__slide:before, .how-does-it-work__slide:after {
- content: " ";
- /* 1 */
- display: table;
- /* 2 */ }
- .how-does-it-work__slide:after {
- clear: both; }
- .how-does-it-work__slide {
- *zoom: 1; }
-
-.how-does-it-work__slide__nav {
- margin-top: 0.5em;
- text-align: center; }
- @media (min-width: 30em) {
- .how-does-it-work__slide__nav {
- text-align: left; } }
-
-.how-does-it-work__slide__skip {
- display: inline-block;
- padding: 0.3em;
- cursor: pointer; }
- .how-does-it-work__slide__skip span {
- display: block;
- border-radius: 1em;
- width: 0.8em;
- height: 0.8em;
- background-color: rgba(0, 0, 0, 0.3); }
- .how-does-it-work__slide__skip.active span {
- background-color: rgba(255, 255, 255, 0.3); }
- .how-does-it-work__slide__skip:hover span, .how-does-it-work__slide__skip:focus span, .how-does-it-work__slide__skip:active span {
- background-color: rgba(0, 0, 0, 0.3); }
-
-@media (min-width: 40em) {
- .features__grid-unit {
- width: 48.5%; }
- .features__grid-unit:nth-child(n) {
- margin-right: 3%; }
- .features__grid-unit:nth-child(2n) {
- margin-right: 0; } }
-@media (min-width: 56.88889em) {
- .features__grid-unit {
- width: 22.75%; }
- .features__grid-unit:nth-child(n) {
- margin-right: 3%; }
- .features__grid-unit:nth-child(4n) {
- margin-right: 0; } }
-
-@media (min-width: 40em) {
- .features__grid-unit--wide {
- width: 48.5%; }
- .features__grid-unit--wide:nth-child(n) {
- margin-right: 3%; }
- .features__grid-unit--wide:last-child {
- margin-right: 0; } }
-
-.features__item {
- margin-top: 1em;
- margin-bottom: 1em; }
-
-.features__item--primary {
- background-position: center top;
- background-repeat: no-repeat;
- padding-top: 11.5em; }
- @media (min-width: 56.88889em) {
- .features__item--primary {
- background-position: left center;
- padding: 1em 0; }
- .features__item--primary h3, .features__item--primary p {
- padding-left: 63%; } }
- @media (min-width: 65em) {
- .features__item--primary h3, .features__item--primary p {
- padding-left: 53%; } }
- .features__item--primary h3 {
- font-size: 1.4em; }
-
-.features__item--devices {
- background-image: url("../img/devices.svg");
- background-size: 258px 188px; }
-
-.no-svg .features__item--devices {
- background-image: url("../img/devices.png"); }
-
-.features__item--messaging {
- background-image: url("../img/signs.svg");
- background-size: 200px 166px; }
- @media (min-width: 56.88889em) {
- .features__item--messaging {
- background-position: 3em center; } }
-
-.no-svg .features__item--messaging {
- background-image: url("../img/signs.png"); }
-
-.get-started {
- border-bottom: 1px solid rgba(255, 255, 255, 0.1); }
-
-@media (min-width: 30em) {
- .get-started__grid-unit {
- width: 48.5%;
- margin-right: 3%; }
- .get-started__grid-unit:last-child {
- margin-right: 0; } }
-@media (min-width: 56.88889em) {
- .get-started__grid-unit {
- width: 23.5%;
- margin-right: 3%; }
- .get-started__grid-unit:last-child {
- margin-right: 0; } }
-
-.get-started__grid-unit--wide {
- width: 100%;
- margin-right: 0; }
- @media (min-width: 56.88889em) {
- .get-started__grid-unit--wide {
- width: 47%;
- margin-right: 3%; } }
-
-.get-started__item--primary p {
- margin-top: 0;
- font-size: 1.25em;
- margin-bottom: 1.9em; }
-
-@media (min-width: 56.88889em) {
- .push-top {
- margin-top: 2.4em; } }
-
-/* AlaveteliCon 2012 bios*/
-.delegate-bio {
- clear: left;
- padding-bottom: 1em;
- border-top: 1px solid #e4e3dd;
- padding-top: 1.2em; }
-
-.about__intro {
- background-color: #974495;
- margin-bottom: 4em; }
- .about__intro h1 {
- font-weight: 600;
- color: #fff;
- text-shadow: 0px 2px 1px rgba(0, 0, 0, 0.3);
- margin-bottom: 0.25em; }
- @media (min-width: 56.88889em) {
- .about__intro h1 {
- font-size: 4em; } }
- .about__intro p {
- color: #fff; }
- @media (min-width: 40em) {
- .about__intro p {
- font-size: 1.25em; } }
-
-@media (min-width: 40em) {
- .about__column {
- /* Use for multi-column grids where all columns are equal width, it gives them equal spacing */
- float: left;
- padding-left: 1.5%;
- padding-right: 1.5%;
- width: 50%;
- padding: 0 3%; }
- .about__column:nth-child(odd), .about__column:first-child {
- padding-left: 0; }
- .about__column:nth-child(even), .about__column:last-child {
- padding-right: 0; } }
-
-.content-in-columns {
- margin-bottom: 1.5em;
- border-top: 3px dashed #f3f1eb;
- padding-top: 1.5em; }
- .content-in-columns:first-of-type {
- border-top: none;
- padding-top: 0; }
-
-.stamp-graphic {
- position: absolute;
- width: 24%;
- right: 2em;
- -webkit-transform: rotate(9deg);
- -moz-transform: rotate(9deg);
- -o-transform: rotate(9deg);
- transform: rotate(9deg); }
- @media (min-width: 45.4375em) {
- .stamp-graphic {
- top: 20em; } }
- @media (min-width: 50.6875em) {
- .stamp-graphic {
- top: 19em; } }
- @media (min-width: 66.875em) {
- .stamp-graphic {
- top: 9em; } }
-
-@media (min-width: 50.6875em) {
- .about__intro p {
- max-width: 27em; } }
-@media (min-width: 66.875em) {
- .about__intro p {
- max-width: 34em; } }
-
-.deployments__intro {
- background-color: #974495;
- margin-bottom: 4em;
- color: #fff;
- text-align: center;
- background-image: url("../img/worldmap-pale.svg");
- background-position: center center;
- background-repeat: no-repeat;
- background-size: 600px 325px; }
- @media (min-width: 30em) {
- .deployments__intro {
- padding: 8.1em 0;
- background-size: 1000px 541px; } }
- .deployments__intro h1 {
- font-size: 1.2em;
- font-weight: 600;
- text-shadow: 0px 2px 1px rgba(0, 0, 0, 0.3);
- margin-bottom: 1em; }
- @media (min-width: 30em) {
- .deployments__intro h1 {
- font-size: 1.666666667em; } }
- .deployments__intro h1 span {
- display: block;
- font-size: 1.5em;
- margin-top: 0.25em;
- font-weight: 700;
- line-height: 1em; }
- @media (min-width: 30em) {
- .deployments__intro h1 span {
- margin-top: 0.15em;
- font-size: 1.8em; } }
- @media (min-width: 56.88889em) {
- .deployments__intro h1 span {
- font-size: 2.4em; } }
- .deployments__intro p {
- font-size: 1em;
- max-width: 23em;
- margin: 0 auto; }
- @media (min-width: 30em) {
- .deployments__intro p {
- font-size: 1.666666667em; } }
-
-.no-svg .deployments__intro {
- background-image: url("../img/worldmap-pale.png"); }
-
-.deployments__content h2 {
- margin-bottom: 1.5em; }
-
-.deployments__list--minor {
- margin-bottom: 2em; }
- @media (min-width: 30em) {
- .deployments__list--minor {
- margin-bottom: 4em; } }
-
-@media (min-width: 40em) {
- .deployments__unit--major {
- display: inline-block;
- width: 48.5%;
- margin-right: 3%;
- vertical-align: top; } }
-.deployments__unit--major:nth-child(even) {
- margin-right: 0; }
-
-.deployments__unit--minor {
- display: inline-block;
- width: 47.5%;
- vertical-align: top; }
- .deployments__unit--minor:nth-child(n) {
- margin-right: 5%; }
- .deployments__unit--minor:nth-child(even) {
- margin-right: 0; }
- @media (min-width: 37.22222em) {
- .deployments__unit--minor {
- width: 30%; }
- .deployments__unit--minor:nth-child(n) {
- margin-right: 5%; }
- .deployments__unit--minor:nth-child(3n+3) {
- margin-right: 0; } }
- @media (min-width: 56.88889em) {
- .deployments__unit--minor {
- width: 22.25%; }
- .deployments__unit--minor:nth-child(n) {
- margin-right: 3%; }
- .deployments__unit--minor:nth-child(4n+4) {
- margin-right: 0; } }
- @media (min-width: 77.77778em) {
- .deployments__unit--minor {
- width: 14.166666667%; }
- .deployments__unit--minor:nth-child(n) {
- margin-right: 3%; }
- .deployments__unit--minor:nth-child(6n+6) {
- margin-right: 0; } }
-
-.deployment, .deployment--minor, .deployment--major {
- margin-bottom: 2em; }
- @media (min-width: 40em) {
- .deployment, .deployment--minor, .deployment--major {
- margin-bottom: 3em; } }
-
-.deployment__title {
- font-weight: 600;
- font-size: 1.3em;
- margin-bottom: 0.1em;
- padding-top: 0.2em; }
- @media (min-width: 56.88889em) {
- .deployment__title {
- font-size: 1.5em; } }
-
-.deployment__country {
- font-weight: 600;
- font-size: 1em;
- color: #787774;
- margin-top: 0;
- margin-bottom: 0.1em; }
- @media (min-width: 56.88889em) {
- .deployment__country {
- font-size: 1.1em; } }
-
-.deployment__link {
- margin-top: 0;
- margin-bottom: 0.5em;
- font-size: 0.888888889em; }
- .deployment__link a {
- display: block;
- text-overflow: ellipsis;
- text-overflow: ellipsis;
- /* Required for text-overflow to do anything */
- white-space: nowrap;
- overflow: hidden; }
- @media (min-width: 56.88889em) {
- .deployment__link {
- font-size: 1em; } }
-
-.deployment__description {
- font-size: 0.888888889em;
- clear: both; }
-
-.deployment__screenshot {
- border: 1px solid #e4e3dd; }
-
-.deployment--minor .deployment__title {
- padding-top: 0;
- font-size: 1.1em; }
-.deployment--minor .deployment__country {
- font-size: 1em; }
-.deployment--minor .deployment__link {
- font-size: 0.777777778em; }
-
-.deployment--major .deployment__screenshot {
- width: 33%;
- float: left;
- margin-bottom: 1em; }
-.deployment--major .deployment__title,
-.deployment--major .deployment__country,
-.deployment--major .deployment__link {
- margin-left: 37%; }
-
-.blog-title {
- line-height: 1.3em; }
-
-.clearfix {
- /**
- * For IE 6/7 only
- * Include this rule to trigger hasLayout and contain floats.
- */ }
- .clearfix:before, .clearfix:after {
- content: " ";
- /* 1 */
- display: table;
- /* 2 */ }
- .clearfix:after {
- clear: both; }
- .clearfix {
- *zoom: 1; }
-
-.header-link {
- padding-left: 0.2em;
- opacity: 0;
-
- -webkit-transition: opacity 0.2s ease-in-out 0.1s;
- -moz-transition: opacity 0.2s ease-in-out 0.1s;
- -ms-transition: opacity 0.2s ease-in-out 0.1s;
-}
-
-h1:hover .header-link,
-h2:hover .header-link,
-h3:hover .header-link,
-h4:hover .header-link,
-h5:hover .header-link,
-h6:hover .header-link {
- opacity: 1;
-}
-
+.image-replacement{text-indent:-1000%;white-space:nowrap;overflow:hidden}.container{max-width:63.333333333em;padding:0 1em;margin:0 auto;position:relative}.unstyled-list,.unstyled,.site-nav ul{margin-left:0;padding-left:0;list-style:none outside none}.inline-list{margin-left:-0.5em;margin-bottom:0}.inline-list li{display:inline-block;margin-left:0.5em}.text--center{text-align:center}html{background-color:#333;height:100%;min-height:100%}body{background-color:transparent}.no-svg .site-title{background-image:url("../img/alaveteli-logo.png")}.hero,.what-is-alaveteli,.how-does-it-work,.features,.get-started,.about__intro,.deployments__intro{padding:2em 0}@media (min-width: 40em){.hero,.what-is-alaveteli,.how-does-it-work,.features,.get-started,.about__intro,.deployments__intro{padding:3.5em 0}}
+.hero,.how-does-it-work,.get-started,.about__intro,.deployments__intro{background-color:#333;color:#fff}.hero a,.how-does-it-work a,.get-started a,.about__intro a,.deployments__intro a{color:#fff;border-bottom:1px dotted rgba(255,255,255,0.3)}.hero a:hover,.how-does-it-work a:hover,.get-started a:hover,.about__intro a:hover,.deployments__intro a:hover,.hero a:active,.how-does-it-work a:active,.get-started a:active,.about__intro a:active,.deployments__intro a:active,.hero a:focus,.how-does-it-work a:focus,.get-started a:focus,.about__intro a:focus,.deployments__intro a:focus{border-color:rgba(255,255,255,0.6);background-color:#863c83;text-decoration:none}.hero .button,.how-does-it-work .button,.get-started .button,.about__intro .button,.deployments__intro .button{color:#fff;border:1px solid rgba(255,255,255,0.3);width:100%;margin-bottom:1em}@media (min-width: 30em){.hero .button,.how-does-it-work .button,.get-started .button,.about__intro .button,.deployments__intro .button{width:auto;margin-bottom:0}}.hero .button:hover,.how-does-it-work .button:hover,.get-started .button:hover,.about__intro .button:hover,.deployments__intro .button:hover,.hero .button:active,.how-does-it-work .button:active,.get-started .button:active,.about__intro .button:active,.deployments__intro .button:active,.hero .button:focus,.how-does-it-work .button:focus,.get-started .button:focus,.about__intro .button:focus,.deployments__intro .button:focus{background-color:rgba(0,0,0,0.1);border-color:rgba(0,0,0,0.1)}.what-is-alaveteli__grid-unit,.features__grid-unit,.get-started__grid-unit{display:inline-block;vertical-align:top}.grid-row:before,.grid-row:after{content:" ";display:table}.grid-row:after{clear:both}.grid-row{*zoom:1}h1,h2,h4,h5,h6{font-weight:700}h3{font-weight:600}.button{display:inline-block;padding:0.4em 2.4em;border:1px solid #e4e3dd;vertical-align:middle;border-radius:7px;text-align:center}.button:hover,.button:active,.button:focus{background-color:#3a3a3a;border-color:rgba(255,255,255,0.2);text-decoration:none}@media (min-width: 47.5em){.nav-position{position:absolute;top:0.4em;left:180px}}@media (min-width: 56.88889em){.nav-position{left:240px;top:0.35em}}
+.site-nav ul{margin-top:0;margin-bottom:0}@media (min-width: 47.5em){.site-nav li{display:inline-block}}.site-nav a{color:#fff;margin-right:0.33em;display:block;padding:0.33em;border-bottom:1px solid rgba(255,255,255,0.1)}@media (min-width: 47.5em){.site-nav a{display:inline-block;border-bottom:none}}@media (min-width: 56.88889em){.site-nav a{font-size:1.125em;margin-right:0.66em}}
+/*! responsive-nav.js 1.0.32 by @viljamis */.js .nav-collapse{clip:rect(0 0 0 0);max-height:0;position:absolute;display:block;overflow:hidden;zoom:1}.nav-collapse.opened{max-height:9999px}.disable-pointer-events{pointer-events:none !important}.nav-toggle{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;position:absolute;top:0.4em;right:5em;display:inline-block;padding:0.3em 0.75em;border:1px solid rgba(255,255,255,0.1);border-radius:5px;color:#fff;font-size:0.875em}@media (min-width: 30em){.nav-toggle{right:10em}}
+@media screen and (min-width: 47.5em){.js .nav-collapse{position:relative}.js .nav-collapse.closed{max-height:none}.nav-toggle{display:none}}.hero{background-color:#974495}.hero h1{display:inline-block;font-weight:600;width:auto;border-bottom:1px solid rgba(255,255,255,0.2);padding-bottom:0.5em;margin-bottom:0.25em;text-shadow:0px 2px 1px rgba(0,0,0,0.3)}@media (min-width: 56.88889em){.hero h1{font-size:4em}}.hero span{opacity:0.7;display:block}.hero p{font-size:1.125em;max-width:25em}.action-buttons{margin-top:2em}.action-buttons .button{font-weight:600;margin-right:1em}.what-is-alaveteli{position:relative}@media (min-width: 56.88889em){.what-is-alaveteli__items-grid{width:66.666%}}
+@media (min-width: 30em){.what-is-alaveteli__grid-unit{width:46%;margin-right:4%}}
+.what-is-alaveteli__item{padding-left:3.625em;background-position:top left;background-size:50px 50px;background-repeat:no-repeat}.what-is-alaveteli__item--foi{background-image:url("../img/scales.svg")}.no-svg .what-is-alaveteli__item--foi{background-image:url("../img/scales.png")}.what-is-alaveteli__item--help{background-image:url("../img/pointer.svg")}.no-svg .what-is-alaveteli__item--help{background-image:url("../img/pointer.png")}.what-is-alaveteli__item--published{background-image:url("../img/binoculars.svg")}.no-svg .what-is-alaveteli__item--published{background-image:url("../img/binoculars.png")}.what-is-alaveteli__item--open{background-image:url("../img/open.svg")}.no-svg .what-is-alaveteli__item--open{background-image:url("../img/open.png")}@media (min-width: 56.88889em){.what-is-alaveteli__international-reach-position{width:33.3333%;position:absolute;top:-13em;right:0}}
+.what-is-alaveteli__international-reach{background-color:#f3f1eb;background-image:url("../img/worldmap.svg");background-position:center 1.5em;background-repeat:no-repeat;background-size:280px 158px;padding:10em 1.25em 1em}@media (min-width: 30em){.what-is-alaveteli__international-reach{background-size:360px 204px;padding:11.5em 2em 1em}}@media (min-width: 40em){.what-is-alaveteli__international-reach{background-size:360px 204px;padding:1em 2em 1em 22em;background-position:left center}}@media (min-width: 56.88889em){.what-is-alaveteli__international-reach{background-size:360px 204px;padding:12.5em 2em 1em;background-position:center 1.5em}}.what-is-alaveteli__international-reach .message{font-size:1.4em}.what-is-alaveteli__international-reach strong{color:#a94ca6}.what-is-alaveteli__international-reach a{color:#787774;border-bottom:1px dotted #e4e3dd}.what-is-alaveteli__international-reach a:hover,.what-is-alaveteli__international-reach a:active,.what-is-alaveteli__international-reach a:focus{text-decoration:none;border-color:#2b8cdb;color:#2b8cdb}.no-svg .what-is-alaveteli__international-reach{background-image:url("../img/worldmap.png")}.how-does-it-work{background-color:#974495;overflow:hidden}.how-does-it-work img{position:relative}@media (min-width: 56.88889em){.how-does-it-work img{bottom:-1px}}@media (min-width: 30em){.how-does-it-work{padding-top:0;padding-bottom:0}.how-does-it-work .how-does-it-work__slide{border-top:4em solid #fff;padding-top:4.7em}.how-does-it-work h2,.how-does-it-work p{width:50%}.how-does-it-work img{float:right;width:30em;margin-right:-15em;margin-top:-13em}}@media (min-width: 43.5em){.how-does-it-work .how-does-it-work__slide{border-top:4em solid #fff;padding-top:4.7em}.how-does-it-work h2,.how-does-it-work p{width:33.333%}.how-does-it-work img{margin-right:-5em;margin-top:-15em}}@media (min-width: 56.88889em){.how-does-it-work h2,.how-does-it-work p,.how-does-it-work .how-does-it-work__slide__nav{width:33.333%;margin-left:66.666%}.how-does-it-work img{float:left;width:63.666%;margin-top:-15em}}
+.how-does-it-work__slide:before,.how-does-it-work__slide:after{content:" ";display:table}.how-does-it-work__slide:after{clear:both}.how-does-it-work__slide{*zoom:1}.how-does-it-work__slide__nav{margin-top:0.5em;text-align:center}@media (min-width: 30em){.how-does-it-work__slide__nav{text-align:left}}
+.how-does-it-work__slide__skip{display:inline-block;padding:0.3em;cursor:pointer}.how-does-it-work__slide__skip span{display:block;border-radius:1em;width:0.8em;height:0.8em;background-color:rgba(0,0,0,0.3)}.how-does-it-work__slide__skip.active span{background-color:rgba(255,255,255,0.3)}.how-does-it-work__slide__skip:hover span,.how-does-it-work__slide__skip:focus span,.how-does-it-work__slide__skip:active span{background-color:rgba(0,0,0,0.3)}@media (min-width: 40em){.features__grid-unit{width:48.5%}.features__grid-unit:nth-child(n){margin-right:3%}.features__grid-unit:nth-child(2n){margin-right:0}}@media (min-width: 56.88889em){.features__grid-unit{width:22.75%}.features__grid-unit:nth-child(n){margin-right:3%}.features__grid-unit:nth-child(4n){margin-right:0}}
+@media (min-width: 40em){.features__grid-unit--wide{width:48.5%}.features__grid-unit--wide:nth-child(n){margin-right:3%}.features__grid-unit--wide:last-child{margin-right:0}}
+.features__item{margin-top:1em;margin-bottom:1em}.features__item--primary{background-position:center top;background-repeat:no-repeat;padding-top:11.5em}@media (min-width: 56.88889em){.features__item--primary{background-position:left center;padding:1em 0}.features__item--primary h3,.features__item--primary p{padding-left:63%}}@media (min-width: 65em){.features__item--primary h3,.features__item--primary p{padding-left:53%}}.features__item--primary h3{font-size:1.4em}.features__item--devices{background-image:url("../img/devices.svg");background-size:258px 188px}.no-svg .features__item--devices{background-image:url("../img/devices.png")}.features__item--messaging{background-image:url("../img/signs.svg");background-size:200px 166px}@media (min-width: 56.88889em){.features__item--messaging{background-position:3em center}}
+.no-svg .features__item--messaging{background-image:url("../img/signs.png")}.get-started{border-bottom:1px solid rgba(255,255,255,0.1)}@media (min-width: 30em){.get-started__grid-unit{width:48.5%;margin-right:3%}.get-started__grid-unit:last-child{margin-right:0}}@media (min-width: 56.88889em){.get-started__grid-unit{width:23.5%;margin-right:3%}.get-started__grid-unit:last-child{margin-right:0}}
+.get-started__grid-unit--wide{width:100%;margin-right:0}@media (min-width: 56.88889em){.get-started__grid-unit--wide{width:47%;margin-right:3%}}
+.get-started__item--primary p{margin-top:0;font-size:1.25em;margin-bottom:1.9em}@media (min-width: 56.88889em){.push-top{margin-top:2.4em}}
+.delegate-bio{clear:left;padding-bottom:1em;border-top:1px solid #e4e3dd;padding-top:1.2em}.about__intro{background-color:#974495;margin-bottom:4em}.about__intro h1{font-weight:600;color:#fff;text-shadow:0px 2px 1px rgba(0,0,0,0.3);margin-bottom:0.25em}@media (min-width: 56.88889em){.about__intro h1{font-size:4em}}.about__intro p{color:#fff}@media (min-width: 40em){.about__intro p{font-size:1.25em}}
+@media (min-width: 40em){.about__column{float:left;padding-left:1.5%;padding-right:1.5%;width:50%;padding:0 3%}.about__column:nth-child(odd),.about__column:first-child{padding-left:0}.about__column:nth-child(even),.about__column:last-child{padding-right:0}}
+.content-in-columns{margin-bottom:1.5em;border-top:3px dashed #f3f1eb;padding-top:1.5em}.content-in-columns:first-of-type{border-top:none;padding-top:0}.stamp-graphic{position:absolute;width:24%;right:2em;-webkit-transform:rotate(9deg);-moz-transform:rotate(9deg);-o-transform:rotate(9deg);transform:rotate(9deg)}@media (min-width: 45.4375em){.stamp-graphic{top:20em}}@media (min-width: 50.6875em){.stamp-graphic{top:19em}}@media (min-width: 66.875em){.stamp-graphic{top:9em}}
+@media (min-width: 50.6875em){.about__intro p{max-width:27em}}@media (min-width: 66.875em){.about__intro p{max-width:34em}}
+.deployments__intro{background-color:#974495;margin-bottom:4em;color:#fff;text-align:center;background-image:url("../img/worldmap-pale.svg");background-position:center center;background-repeat:no-repeat;background-size:600px 325px}@media (min-width: 30em){.deployments__intro{padding:8.1em 0;background-size:1000px 541px}}.deployments__intro h1{font-size:1.2em;font-weight:600;text-shadow:0px 2px 1px rgba(0,0,0,0.3);margin-bottom:1em}@media (min-width: 30em){.deployments__intro h1{font-size:1.666666667em}}.deployments__intro h1 span{display:block;font-size:1.5em;margin-top:0.25em;font-weight:700;line-height:1em}@media (min-width: 30em){.deployments__intro h1 span{margin-top:0.15em;font-size:1.8em}}@media (min-width: 56.88889em){.deployments__intro h1 span{font-size:2.4em}}.deployments__intro p{font-size:1em;max-width:23em;margin:0 auto}@media (min-width: 30em){.deployments__intro p{font-size:1.666666667em}}
+.no-svg .deployments__intro{background-image:url("../img/worldmap-pale.png")}.deployments__content h2{margin-bottom:1.5em}.deployments__list--minor{margin-bottom:2em}@media (min-width: 30em){.deployments__list--minor{margin-bottom:4em}}
+@media (min-width: 40em){.deployments__unit--major{display:inline-block;width:48.5%;margin-right:3%;vertical-align:top}}.deployments__unit--major:nth-child(even){margin-right:0}.deployments__unit--minor{display:inline-block;width:47.5%;vertical-align:top}.deployments__unit--minor:nth-child(n){margin-right:5%}.deployments__unit--minor:nth-child(even){margin-right:0}@media (min-width: 37.22222em){.deployments__unit--minor{width:30%}.deployments__unit--minor:nth-child(n){margin-right:5%}.deployments__unit--minor:nth-child(3n+3){margin-right:0}}@media (min-width: 56.88889em){.deployments__unit--minor{width:22.25%}.deployments__unit--minor:nth-child(n){margin-right:3%}.deployments__unit--minor:nth-child(4n+4){margin-right:0}}@media (min-width: 77.77778em){.deployments__unit--minor{width:14.166666667%}.deployments__unit--minor:nth-child(n){margin-right:3%}.deployments__unit--minor:nth-child(6n+6){margin-right:0}}
+.deployment,.deployment--minor,.deployment--major{margin-bottom:2em}@media (min-width: 40em){.deployment,.deployment--minor,.deployment--major{margin-bottom:3em}}
+.deployment__title{font-weight:600;font-size:1.3em;margin-bottom:0.1em;padding-top:0.2em}@media (min-width: 56.88889em){.deployment__title{font-size:1.5em}}
+.deployment__country{font-weight:600;font-size:1em;color:#787774;margin-top:0;margin-bottom:0.1em}@media (min-width: 56.88889em){.deployment__country{font-size:1.1em}}
+.deployment__link{margin-top:0;margin-bottom:0.5em;font-size:0.888888889em}.deployment__link a{display:block;text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@media (min-width: 56.88889em){.deployment__link{font-size:1em}}
+.deployment__description{font-size:0.888888889em;clear:both}.deployment__screenshot{border:1px solid #e4e3dd}.deployment--minor .deployment__title{padding-top:0;font-size:1.1em}.deployment--minor .deployment__country{font-size:1em}.deployment--minor .deployment__link{font-size:0.777777778em}.deployment--major .deployment__screenshot{width:33%;float:left;margin-bottom:1em}.deployment--major .deployment__title,.deployment--major .deployment__country,.deployment--major .deployment__link{margin-left:37%}.blog-title{line-height:1.3em}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}.header-link{padding-left:0.2em;opacity:0;-webkit-transition:opacity 0.2s ease-in-out 0.1s;-moz-transition:opacity 0.2s ease-in-out 0.1s;-ms-transition:opacity 0.2s ease-in-out 0.1s}h2:hover .header-link,h3:hover .header-link,h4:hover .header-link,h5:hover .header-link,h6:hover .header-link{opacity:1}
diff --git a/assets/css/global.css b/assets/css/global.css
index 4b6565a8c..8f47cb351 100644
--- a/assets/css/global.css
+++ b/assets/css/global.css
@@ -1,1183 +1,4 @@
-/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
-/* ==========================================================================
- HTML5 display definitions
- ========================================================================== */
-/**
- * Correct `block` display not defined in IE 8/9.
- */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
- display: block; }
-
-/**
- * Correct `inline-block` display not defined in IE 8/9.
- */
-audio,
-canvas,
-video {
- display: inline-block; }
-
-/**
- * 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.
- * Hide the `template` element in IE, Safari, and Firefox < 22.
- */
-[hidden],
-template {
- display: none; }
-
-/* ==========================================================================
- Base
- ========================================================================== */
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after 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; }
-
-/* ==========================================================================
- Links
- ========================================================================== */
-/**
- * Remove the gray background color from active links in IE 10.
- */
-a {
- background: transparent; }
-
-/**
- * Address `outline` inconsistency between Chrome and other browsers.
- */
-a:focus {
- outline: thin dotted; }
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-a:active,
-a:hover {
- outline: 0; }
-
-/* ==========================================================================
- Typography
- ========================================================================== */
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari 5, and Chrome.
- */
-h1 {
- font-size: 2em;
- margin: 0.67em 0; }
-
-/**
- * Address styling not present in IE 8/9, Safari 5, and Chrome.
- */
-abbr[title] {
- border-bottom: 1px dotted; }
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
- */
-b,
-strong {
- font-weight: bold; }
-
-/**
- * Address styling not present in Safari 5 and Chrome.
- */
-dfn {
- font-style: italic; }
-
-/**
- * Address differences between Firefox and other browsers.
- */
-hr {
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- height: 0; }
-
-/**
- * Address styling not present in IE 8/9.
- */
-mark {
- background: #ff0;
- color: #000; }
-
-/**
- * Correct font family set oddly in Safari 5 and Chrome.
- */
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, serif;
- font-size: 1em; }
-
-/**
- * Improve readability of pre-formatted text in all browsers.
- */
-pre {
- white-space: pre-wrap; }
-
-/**
- * Set consistent quote types.
- */
-q {
- quotes: "\201C" "\201D" "\2018" "\2019"; }
-
-/**
- * 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.
- */
-img {
- border: 0; }
-
-/**
- * Correct overflow displayed oddly in IE 9.
- */
-svg:not(:root) {
- overflow: hidden; }
-
-/* ==========================================================================
- Figures
- ========================================================================== */
-/**
- * Address margin not present in IE 8/9 and Safari 5.
- */
-figure {
- margin: 0; }
-
-/* ==========================================================================
- Forms
- ========================================================================== */
-/**
- * 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.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-legend {
- border: 0;
- /* 1 */
- padding: 0;
- /* 2 */ }
-
-/**
- * 1. Correct font family not being inherited in all browsers.
- * 2. Correct font size not being inherited in all browsers.
- * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
- */
-button,
-input,
-select,
-textarea {
- font-family: inherit;
- /* 1 */
- font-size: 100%;
- /* 2 */
- margin: 0;
- /* 3 */ }
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-button,
-input {
- line-height: normal; }
-
-/**
- * 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 Chrome, Safari 5+, and IE 8+.
- * Correct `select` style inheritance in Firefox 4+ and Opera.
- */
-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"],
-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; }
-
-/**
- * 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 */ }
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
- * (include `-moz` to future-proof).
- */
-input[type="search"] {
- -webkit-appearance: textfield;
- /* 1 */
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box;
- /* 2 */
- box-sizing: content-box; }
-
-/**
- * Remove inner padding and search cancel button in Safari 5 and Chrome
- * on OS X.
- */
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none; }
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0; }
-
-/**
- * 1. Remove default vertical scrollbar in IE 8/9.
- * 2. Improve readability and alignment in all browsers.
- */
-textarea {
- overflow: auto;
- /* 1 */
- vertical-align: top;
- /* 2 */ }
-
-/* ==========================================================================
- Tables
- ========================================================================== */
-/**
- * Remove most spacing between table cells.
- */
-table {
- border-collapse: collapse;
- border-spacing: 0; }
-
-.image-replacement, .ms-header__logo, .site-title {
- text-indent: -1000%;
- white-space: nowrap;
- overflow: hidden; }
-
-.container, .ms-header__row, .page {
- max-width: 63.333333333em;
- padding: 0 1em;
- margin: 0 auto;
- position: relative; }
-
-.unstyled-list, .unstyled, .site-footer ul, .breadcrumb, .sidebar ul, .list-of-blog-posts, .definitions {
- margin-left: 0;
- padding-left: 0;
- list-style: none outside none; }
-
-.inline-list, .definitions {
- margin-left: -0.5em;
- margin-bottom: 0; }
- .inline-list li, .definitions li {
- display: inline-block;
- margin-left: 0.5em; }
-
-.text--center {
- text-align: center; }
-
-.highlight {
- background: #ffffff; }
-
-.highlight .c {
- color: #999988;
- font-style: italic; }
-
-/* Comment */
-.highlight .err {
- color: #a61717;
- background-color: #e3d2d2; }
-
-/* Error */
-.highlight .k {
- font-weight: bold; }
-
-/* Keyword */
-.highlight .o {
- font-weight: bold; }
-
-/* Operator */
-.highlight .cm {
- color: #999988;
- font-style: italic; }
-
-/* Comment.Multiline */
-.highlight .cp {
- color: #999999;
- font-weight: bold; }
-
-/* Comment.Preproc */
-.highlight .c1 {
- color: #999988;
- font-style: italic; }
-
-/* Comment.Single */
-.highlight .cs {
- color: #999999;
- font-weight: bold;
- font-style: italic; }
-
-/* Comment.Special */
-.highlight .gd {
- color: #000000;
- background-color: #ffdddd; }
-
-/* Generic.Deleted */
-.highlight .gd .x {
- color: #000000;
- background-color: #ffaaaa; }
-
-/* Generic.Deleted.Specific */
-.highlight .ge {
- font-style: italic; }
-
-/* Generic.Emph */
-.highlight .gr {
- color: #aa0000; }
-
-/* Generic.Error */
-.highlight .gh {
- color: #999999; }
-
-/* Generic.Heading */
-.highlight .gi {
- color: #000000;
- background-color: #ddffdd; }
-
-/* Generic.Inserted */
-.highlight .gi .x {
- color: #000000;
- background-color: #aaffaa; }
-
-/* Generic.Inserted.Specific */
-.highlight .go {
- color: #888888; }
-
-/* Generic.Output */
-.highlight .gp {
- color: #555555; }
-
-/* Generic.Prompt */
-.highlight .gs {
- font-weight: bold; }
-
-/* Generic.Strong */
-.highlight .gu {
- color: #800080;
- font-weight: bold; }
-
-/* Generic.Subheading */
-.highlight .gt {
- color: #aa0000; }
-
-/* Generic.Traceback */
-.highlight .kc {
- font-weight: bold; }
-
-/* Keyword.Constant */
-.highlight .kd {
- font-weight: bold; }
-
-/* Keyword.Declaration */
-.highlight .kn {
- font-weight: bold; }
-
-/* Keyword.Namespace */
-.highlight .kp {
- font-weight: bold; }
-
-/* Keyword.Pseudo */
-.highlight .kr {
- font-weight: bold; }
-
-/* Keyword.Reserved */
-.highlight .kt {
- color: #445588;
- font-weight: bold; }
-
-/* Keyword.Type */
-.highlight .m {
- color: #009999; }
-
-/* Literal.Number */
-.highlight .s {
- color: #dd1144; }
-
-/* Literal.String */
-.highlight .na {
- color: teal; }
-
-/* Name.Attribute */
-.highlight .nb {
- color: #0086b3; }
-
-/* Name.Builtin */
-.highlight .nc {
- color: #445588;
- font-weight: bold; }
-
-/* Name.Class */
-.highlight .no {
- color: teal; }
-
-/* Name.Constant */
-.highlight .ni {
- color: purple; }
-
-/* Name.Entity */
-.highlight .ne {
- color: #990000;
- font-weight: bold; }
-
-/* Name.Exception */
-.highlight .nf {
- color: #990000;
- font-weight: bold; }
-
-/* Name.Function */
-.highlight .nn {
- color: #555555; }
-
-/* Name.Namespace */
-.highlight .nt {
- color: navy; }
-
-/* Name.Tag */
-.highlight .nv {
- color: teal; }
-
-/* Name.Variable */
-.highlight .ow {
- font-weight: bold; }
-
-/* Operator.Word */
-.highlight .w {
- color: #bbbbbb; }
-
-/* Text.Whitespace */
-.highlight .mf {
- color: #009999; }
-
-/* Literal.Number.Float */
-.highlight .mh {
- color: #009999; }
-
-/* Literal.Number.Hex */
-.highlight .mi {
- color: #009999; }
-
-/* Literal.Number.Integer */
-.highlight .mo {
- color: #009999; }
-
-/* Literal.Number.Oct */
-.highlight .sb {
- color: #dd1144; }
-
-/* Literal.String.Backtick */
-.highlight .sc {
- color: #dd1144; }
-
-/* Literal.String.Char */
-.highlight .sd {
- color: #dd1144; }
-
-/* Literal.String.Doc */
-.highlight .s2 {
- color: #dd1144; }
-
-/* Literal.String.Double */
-.highlight .se {
- color: #dd1144; }
-
-/* Literal.String.Escape */
-.highlight .sh {
- color: #dd1144; }
-
-/* Literal.String.Heredoc */
-.highlight .si {
- color: #dd1144; }
-
-/* Literal.String.Interpol */
-.highlight .sx {
- color: #dd1144; }
-
-/* Literal.String.Other */
-.highlight .sr {
- color: #009926; }
-
-/* Literal.String.Regex */
-.highlight .s1 {
- color: #dd1144; }
-
-/* Literal.String.Single */
-.highlight .ss {
- color: #990073; }
-
-/* Literal.String.Symbol */
-.highlight .bp {
- color: #999999; }
-
-/* Name.Builtin.Pseudo */
-.highlight .vc {
- color: teal; }
-
-/* Name.Variable.Class */
-.highlight .vg {
- color: teal; }
-
-/* Name.Variable.Global */
-.highlight .vi {
- color: teal; }
-
-/* Name.Variable.Instance */
-.highlight .il {
- color: #009999; }
-
-/* Literal.Number.Integer.Long */
-.type-csharp .highlight .k {
- color: blue; }
-
-.type-csharp .highlight .kt {
- color: blue; }
-
-.type-csharp .highlight .nf {
- color: #000000;
- font-weight: normal; }
-
-.type-csharp .highlight .nc {
- color: #2b91af; }
-
-.type-csharp .highlight .nn {
- color: black; }
-
-.type-csharp .highlight .s {
- color: #a31515; }
-
-.type-csharp .highlight .sc {
- color: #a31515; }
-
-/* Alaveteli's purple */
-*, *:before, *:after {
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-
-html {
- height: 100%; }
-
-body {
- font-family: "Source Sans Pro", "Helvetica Neue", Arial, Helvetica, serif;
- background-color: #fff;
- color: #333333;
- font-size: 1.125em;
- line-height: 1.555555556em;
- height: 100%;
- min-height: 100%; }
-
-a {
- color: #2b8cdb;
- text-decoration: none; }
- a:hover, a:active, a:focus {
- text-decoration: underline; }
-
-h1, h2, h3, h4, h5, h6 {
- margin-top: 0;
- margin-bottom: 0.5em;
- text-rendering: optimizeLegibility; }
-
-h1,
-.primary-heading {
- font-size: 2.666666667em;
- line-height: 1.1em;
- font-weight: normal; }
-
-h2,
-.secondary-heading {
- font-size: 1.666666667em;
- font-weight: 600; }
-
-h3,
-.tertiary-heading {
- font-size: 1.166666667em;
- font-weight: 600; }
-
-h4,
-.quarternary-heading {
- font-size: 1em;
- text-transform: uppercase; }
-
-p {
- line-height: 1.4375em; }
-
-.lead {
- font-size: 1.1875em;
- color: #787774;
- border-bottom: 1px solid #e4e3dd;
- padding-bottom: 1em;
- margin-bottom: 1.2em;
- margin-top: 0; }
-
-.title {
- font-weight: normal; }
-
-pre, code, kbd, samp {
- font-family: Consolas, 'Liberation Mono', Courier, monospace; }
-
-code {
- border: 1px solid #e4e3dd;
- background: #f3f1eb;
- color: #dd4e4d;
- border-radius: 3px;
- padding: 0 0.2em; }
-
-a code {
- border-color: none;
- color: inherit; }
-
-pre {
- display: block;
- white-space: pre-wrap;
- background-color: #f3f1eb;
- border-top: 3px solid #e4e3dd;
- border-bottom: 3px solid #e4e3dd;
- padding: 1em;
- max-width: 100%;
- overflow-x: scroll;
- font-size: .9375em;
- line-height: 1.4375em; }
- pre code {
- border: none;
- padding: 0;
- background: none; }
-
-hr {
- border: none;
- border-top: 1px solid #e4e3dd;
- margin: 0; }
-
-img {
- max-width: 100%;
- height: auto; }
-
-ul {
- padding-left: 1.3em; }
-
-/* To avoid floaty footer, make background footer colour */
-.page-wrapper {
- background: #f3f1eb;
- float: left;
- width: 100%; }
-
-.page-wrapper--white {
- width: 100%;
- background: #fff; }
-
-/* mySociety header */
-.ms-header {
- background: transparent;
- border-top: 4px solid #424242; }
-
-.ms-header__logo {
- display: block;
- position: absolute;
- right: 0.75em;
- top: 0;
- background-color: #424242;
- background-repeat: no-repeat;
- height: 38px;
- width: 44px;
- border-radius: 0 0 0.75em 0.75em;
- background-size: 22px;
- background-position: 11px 7px;
- background-image: url("../../theme/img/mysociety-bloom.png"); }
- @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {
- .ms-header__logo {
- background-image: url("../../theme/img/mysociety-bloom@2.png"); } }
- @media (min-width: 30em) {
- .ms-header__logo {
- border-radius: 0 0 1em 1em;
- background-position: 16px 10px;
- background-size: 93px 19px;
- background-repeat: no-repeat;
- background-image: url("../../theme/img/mysociety-logo.png");
- width: 125px;
- height: 39px; } }
- @media (min-width: 30em) and (-webkit-min-device-pixel-ratio: 1.5), (min-width: 30em) and (min-resolution: 144dpi) {
- .ms-header__logo {
- background-image: url("../../theme/img/mysociety-logo@2.png"); } }
-
-.site-title {
- height: 60px;
- width: 140px;
- max-width: 100%;
- display: block;
- background-position: top left;
- background-repeat: no-repeat;
- background-image: url("../img/alaveteli-logo.svg"); }
-
-.site-header {
- border-top: 0.375em solid #424242;
- padding: 1em 0;
- background-position: center;
- background-color: #a94ca6; }
-
-.main-content-column {
- padding-left: 0 !Important; }
- @media (min-width: 56.88889em) {
- .main-content-column {
- /* Use for grids where the columns are different widths */
- float: left;
- padding-left: 3%;
- width: 75%; }
- .main-content-column:first-child {
- padding-left: 0; } }
-
-.main-content-column-full-width {
- float: left;
- padding: 0;
- width: 100%; }
-
-.main-content {
- background: #fff;
- padding: 1.6em 5%;
- position: relative;
- margin-bottom: 32px; }
- .main-content h2 {
- border-top: 1px solid #e4e3dd;
- padding-top: 1.2em; }
- .main-content .lead + h2 {
- border-top: none;
- padding-top: 0; }
- .main-content .reveal-on-click + h2 {
- border-top: none; }
-
-@media (min-width: 56.88889em) {
- .secondary-content-column {
- /* Use for grids where the columns are different widths */
- float: left;
- padding-left: 3%;
- width: 25%; }
- .secondary-content-column:first-child {
- padding-left: 0; } }
-
-.breadcrumb {
- padding: 8px 0; }
- .breadcrumb li {
- display: inline;
- font-size: 0.75em; }
- .breadcrumb li:after {
- content: '/';
- margin: 0 0.33em;
- color: #e4e3dd; }
- .breadcrumb li a {
- color: #787774; }
-
-.sidebar ul {
- -webkit-column-count: 2;
- -moz-column-count: 2;
- -o-column-count: 2;
- column-count: 2; }
- @media (min-width: 56.88889em) {
- .sidebar ul {
- -webkit-column-count: 1;
- -moz-column-count: 1;
- -o-column-count: 1;
- column-count: 1; } }
- .sidebar ul ul {
- -webkit-column-count: 1;
- -moz-column-count: 1;
- -o-column-count: 1;
- column-count: 1; }
-.sidebar h2 {
- color: #333333;
- text-transform: uppercase;
- font-weight: 700;
- font-size: 0.875em;
- margin: 0; }
- .sidebar h2 a {
- color: #333333;
- font-size: 1em;
- text-decoration: underline; }
-.sidebar a {
- color: #787774;
- font-size: 0.875em; }
- .sidebar a:hover, .sidebar a:active, .sidebar a:focus {
- color: #2b8cdb; }
-.sidebar li li {
- line-height: 1.4em;
- margin-left: 1em; }
-
-.listed-blog-post {
- margin-bottom: 2em;
- padding-bottom: 1em; }
- .listed-blog-post .blog-title {
- font-weight: 700; }
- .listed-blog-post .blog-title .meta {
- font-weight: normal; }
-
-.blog-post-header .blog-title {
- margin-bottom: 0; }
-.blog-post-header .meta {
- margin-top: 0; }
-
-.meta {
- color: #787774; }
-
-.r, .l {
- margin-bottom: 1em;
- max-width: 50%; }
-
-.r {
- float: right;
- margin-left: 1em; }
-
-.l {
- float: left;
- margin-right: 1em; }
-
-.reveal-on-click {
- border: 1px solid #e4e3dd; }
- .reveal-on-click dt {
- border-top: 1px solid #e4e3dd;
- padding: 1em;
- cursor: pointer;
- position: relative; }
- .reveal-on-click dt:hover {
- text-decoration: underline; }
- .reveal-on-click dt:first-child {
- border-top: none; }
- .reveal-on-click dt:after {
- content: "+";
- position: absolute;
- top: 0.8em;
- right: 1em;
- display: inline-block;
- background: #f3f1eb;
- border-radius: 50%;
- height: 1.5em;
- width: 1.5em;
- text-align: center;
- color: #787774;
- -webkit-transition: -webkit-transform 0.2s ease-out;
- -moz-transition: -moz-transform 0.2s ease-out;
- -o-transition: -o-transform 0.2s ease-out;
- transition: transform 0.2s ease-out; }
- .reveal-on-click dt:hover:after {
- background: #2b8cdb;
- color: #fff; }
- .reveal-on-click dt.revealed:after {
- -webkit-transform: rotate(45deg);
- -moz-transform: rotate(45deg);
- -ms-transform: rotate(45deg);
- -o-transform: rotate(45deg);
- transform: rotate(45deg);
- -webkit-transition: -webkit-transform 0.2s ease-out;
- -moz-transition: -moz-transform 0.2s ease-out;
- -o-transition: -o-transform 0.2s ease-out;
- transition: transform 0.2s ease-out; }
- .reveal-on-click dd {
- margin-left: 0;
- padding: 0 1em 0;
- position: relative;
- top: -1em; }
-
-dl.dir-structure, dl.dir-structure dl {
- background: url(../../theme/img/tree-last.png) no-repeat;
- background-position: 0 -29px;
- padding: 0 0 0 21px;
- margin: 0.5em 0 0 0; }
-
-dl.dir-structure {
- margin-bottom: 1.5em; }
-
-dl.dir-structure dt {
- background: url(../../theme/img/tree-branch.png) no-repeat;
- background-position: 0 0;
- padding: 20px 0 0 28px;
- margin: 0; }
-
-dl.dir-structure dd {
- background: url(../../theme/img/tree-upright.png) repeat-y;
- padding: 0 0 0em 40px;
- margin: 0; }
-
-dl.dir-structure dd p {
- margin: 0;
- padding: 0 0 0.5em 0; }
-
-dl.dir-structure dt.last {
- background: url(../../theme/img/tree-last.png) no-repeat; }
-
-dl.dir-structure dd.last {
- background-image: none;
- padding-bottom: 0;
- /* gap at bottom of nested trees is big enough as it is */ }
-
-table.table {
- border: 1px solid #ccc;
- margin: 0.5em 0 1em;
- border-collapse: collapse; }
-
-table.table th {
- background-color: #f5f5f5; }
-
-table.table th,
-table.table td {
- border: 1px solid #ccc;
- padding: 0.666em; }
-
-.attention-box {
- padding: 1em;
- border: 1px solid #e4e3dd;
- margin-bottom: 1.2em; }
-
-.definitions li {
- margin-left: 0.25em; }
-.definitions a {
- display: inline-block;
- background-color: #f3f1eb;
- border-radius: 2em;
- padding: 0.33em 0.66em;
- color: #333333;
- font-size: 0.875em;
- margin-bottom: 1em; }
- .definitions a:hover, .definitions a:active, .definitions a:focus {
- color: #fff;
- background-color: #333333;
- text-decoration: none; }
-
-.glossary {
- margin: 2em 0 8em 0;
- /* big margin helps scroll-to #name at bottom of page */ }
-
-.glossary dt {
- background-color: #f3f1eb;
- padding: 0.66em 1em;
- margin-top: 3em;
- border: 1px solid #e4e3dd;
- border-bottom: none;
- color: #787774; }
- .glossary dt a {
- color: #333333;
- font-size: 1.5em;
- font-weight: 300; }
-
-.glossary dt a:hover {
- text-decoration: none; }
-
-.glossary dd {
- border: 1px solid #e4e3dd;
- border-top: none;
- padding: 1em 2em;
- margin: 0; }
-
-.glossary dd p {
- margin-top: 0.666em; }
-
-.glossary .more-info {
- margin: 1em 0 0 0; }
-
-.glossary .more-info > p {
- float: left;
- color: #787774;
- width: 8em;
- margin: 0; }
-
-.glossary .more-info ul {
- margin-top: 0.5em;
- margin-left: 10em; }
-
-/* examples benefit from full-width (because they're often code snippets) */
-.glossary .more-info ul.examples {
- clear: both;
- padding-top: 0.666em;
- margin-left: 0em; }
-
-.site-footer {
- width: 100%;
- clear: left;
- background: #333333;
- padding: 32px 0;
- /**
- * For IE 6/7 only
- * Include this rule to trigger hasLayout and contain floats.
- */ }
- .site-footer:before, .site-footer:after {
- content: " ";
- /* 1 */
- display: table;
- /* 2 */ }
- .site-footer:after {
- clear: both; }
- .site-footer {
- *zoom: 1; }
- .site-footer .column {
- /* Use for multi-column grids where all columns are equal width, it gives them equal spacing */
- float: left;
- padding-left: 1.5%;
- padding-right: 1.5%;
- width: 50%; }
- .site-footer .column:nth-child(odd), .site-footer .column:first-child {
- padding-left: 0; }
- .site-footer .column:nth-child(even), .site-footer .column:last-child {
- padding-right: 0; }
- @media (min-width: 30em) {
- .site-footer .column {
- /* Use for grids where the columns are different widths */
- float: left;
- padding-left: 3%;
- width: 25%; }
- .site-footer .column:first-child {
- padding-left: 0; } }
- @media (min-width: 56.88889em) {
- .site-footer .column {
- /* Use for grids where the columns are different widths */
- float: left;
- padding-left: 3%;
- width: 20%; }
- .site-footer .column:first-child {
- padding-left: 0; } }
- .site-footer .column:last-child h3 {
- margin-top: 1em; }
- @media (min-width: 30em) {
- .site-footer .column:last-child h3 {
- margin-top: 0; } }
- .site-footer .central {
- float: right; }
- @media (min-width: 30em) {
- .site-footer .central {
- /* Use for grids where the columns are different widths */
- float: left;
- padding-left: 3%;
- width: 50%; }
- .site-footer .central ul {
- -webkit-column-count: 1;
- -moz-column-count: 1;
- -o-column-count: 1;
- column-count: 1; }
- .site-footer .central:first-child {
- padding-left: 0; } }
- @media (min-width: 40em) {
- .site-footer .central {
- /* Use for grids where the columns are different widths */
- float: left;
- padding-left: 3%;
- width: 50%; }
- .site-footer .central ul {
- -webkit-column-count: 2;
- -moz-column-count: 2;
- -o-column-count: 2;
- column-count: 2; }
- .site-footer .central:first-child {
- padding-left: 0; } }
- @media (min-width: 56.88889em) {
- .site-footer .central {
- /* Use for grids where the columns are different widths */
- float: left;
- padding-left: 3%;
- width: 60%; }
- .site-footer .central ul {
- -webkit-column-count: 3;
- -moz-column-count: 3;
- -o-column-count: 3;
- column-count: 3; }
- .site-footer .central:first-child {
- padding-left: 0; } }
- .site-footer h3 {
- font-size: 1em;
- font-weight: normal;
- margin-bottom: 0;
- color: #888; }
- .site-footer ul {
- margin: 0; }
- .site-footer a {
- color: #eeeeee; }
+/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:0.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace, serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.image-replacement,.ms-header__logo,.site-title{text-indent:-1000%;white-space:nowrap;overflow:hidden}.container,.ms-header__row,.page{max-width:63.333333333em;padding:0 1em;margin:0 auto;position:relative}.unstyled-list,.unstyled,.site-footer ul,.breadcrumb,.sidebar ul,.list-of-blog-posts,.definitions{margin-left:0;padding-left:0;list-style:none outside none}.inline-list,.definitions{margin-left:-0.5em;margin-bottom:0}.inline-list li,.definitions li{display:inline-block;margin-left:0.5em}.text--center{text-align:center}.highlight{background:#ffffff}.highlight .c{color:#999988;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .k{font-weight:bold}.highlight .o{font-weight:bold}.highlight .cm{color:#999988;font-style:italic}.highlight .cp{color:#999999;font-weight:bold}.highlight .c1{color:#999988;font-style:italic}.highlight .cs{color:#999999;font-weight:bold;font-style:italic}.highlight .gd{color:#000000;background-color:#fdd}.highlight .gd .x{color:#000000;background-color:#faa}.highlight .ge{font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#999}.highlight .gi{color:#000000;background-color:#dfd}.highlight .gi .x{color:#000000;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gs{font-weight:bold}.highlight .gu{color:#800080;font-weight:bold}.highlight .gt{color:#a00}.highlight .kc{font-weight:bold}.highlight .kd{font-weight:bold}.highlight .kn{font-weight:bold}.highlight .kp{font-weight:bold}.highlight .kr{font-weight:bold}.highlight .kt{color:#445588;font-weight:bold}.highlight .m{color:#099}.highlight .s{color:#d14}.highlight .na{color:teal}.highlight .nb{color:#0086b3}.highlight .nc{color:#445588;font-weight:bold}.highlight .no{color:teal}.highlight .ni{color:purple}.highlight .ne{color:#990000;font-weight:bold}.highlight .nf{color:#990000;font-weight:bold}.highlight .nn{color:#555}.highlight .nt{color:navy}.highlight .nv{color:teal}.highlight .ow{font-weight:bold}.highlight .w{color:#bbb}.highlight .mf{color:#099}.highlight .mh{color:#099}.highlight .mi{color:#099}.highlight .mo{color:#099}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc{color:teal}.highlight .vg{color:teal}.highlight .vi{color:teal}.highlight .il{color:#099}.type-csharp .highlight .k{color:blue}.type-csharp .highlight .kt{color:blue}.type-csharp .highlight .nf{color:#000000;font-weight:normal}.type-csharp .highlight .nc{color:#2b91af}.type-csharp .highlight .nn{color:#000}.type-csharp .highlight .s{color:#a31515}.type-csharp .highlight .sc{color:#a31515}*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{height:100%}body{font-family:"Source Sans Pro","Helvetica Neue",Arial,Helvetica,serif;background-color:#fff;color:#333;font-size:1.125em;line-height:1.555555556em;height:100%;min-height:100%}a{color:#2b8cdb;text-decoration:none}a:hover,a:active,a:focus{text-decoration:underline}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0.5em;text-rendering:optimizeLegibility}h1,.primary-heading{font-size:2.666666667em;line-height:1.1em;font-weight:normal}h2,.secondary-heading{font-size:1.666666667em;font-weight:600}h3,.tertiary-heading{font-size:1.166666667em;font-weight:600}h4,.quarternary-heading{font-size:1em;text-transform:uppercase}p{line-height:1.4375em}.lead{font-size:1.1875em;color:#787774;border-bottom:1px solid #e4e3dd;padding-bottom:1em;margin-bottom:1.2em;margin-top:0}.title{font-weight:normal}pre,code,kbd,samp{font-family:Consolas, 'Liberation Mono', Courier, monospace}code{border:1px solid #e4e3dd;background:#f3f1eb;color:#dd4e4d;border-radius:3px;padding:0 0.2em}a code{border-color:none;color:inherit}pre{display:block;white-space:pre-wrap;background-color:#f3f1eb;border-top:3px solid #e4e3dd;border-bottom:3px solid #e4e3dd;padding:1em;max-width:100%;overflow-x:scroll;font-size:.9375em;line-height:1.4375em}pre code{border:none;padding:0;background:none}hr{border:none;border-top:1px solid #e4e3dd;margin:0}img{max-width:100%;height:auto}ul{padding-left:1.3em}.page-wrapper{background:#f3f1eb;float:left;width:100%}.page-wrapper--white{width:100%;background:#fff}.ms-header{background:transparent;border-top:4px solid #424242}.ms-header__logo{display:block;position:absolute;right:0.75em;top:0;background-color:#424242;background-repeat:no-repeat;height:38px;width:44px;border-radius:0 0 0.75em 0.75em;background-size:22px;background-position:11px 7px;background-image:url("../../theme/img/mysociety-bloom.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi){.ms-header__logo{background-image:url("../../theme/img/mysociety-bloom@2.png")}}@media (min-width: 30em){.ms-header__logo{border-radius:0 0 1em 1em;background-position:16px 10px;background-size:93px 19px;background-repeat:no-repeat;background-image:url("../../theme/img/mysociety-logo.png");width:125px;height:39px}}@media (min-width: 30em) and (-webkit-min-device-pixel-ratio: 1.5), (min-width: 30em) and (min-resolution: 144dpi){.ms-header__logo{background-image:url("../../theme/img/mysociety-logo@2.png")}}
+.site-title{height:60px;width:140px;max-width:100%;display:block;background-position:top left;background-repeat:no-repeat;background-image:url("../img/alaveteli-logo.svg")}.site-header{border-top:0.375em solid #424242;padding:1em 0;background-position:center;background-color:#a94ca6}.main-content-column{padding-left:0 !Important}@media (min-width: 56.88889em){.main-content-column{float:left;padding-left:3%;width:75%}.main-content-column:first-child{padding-left:0}}
+.main-content-column-full-width{float:left;padding:0;width:100%}.main-content{background:#fff;padding:1.6em 5%;position:relative;margin-bottom:32px}.main-content h2{border-top:1px solid #e4e3dd;padding-top:1.2em}.main-content .lead+h2{border-top:none;padding-top:0}.main-content .reveal-on-click+h2{border-top:none}@media (min-width: 56.88889em){.secondary-content-column{float:left;padding-left:3%;width:25%}.secondary-content-column:first-child{padding-left:0}}
+.breadcrumb{padding:8px 0}.breadcrumb li{display:inline;font-size:0.75em}.breadcrumb li:after{content:'/';margin:0 0.33em;color:#e4e3dd}.breadcrumb li a{color:#787774}.sidebar ul{-webkit-column-count:2;-moz-column-count:2;-o-column-count:2;column-count:2}@media (min-width: 56.88889em){.sidebar ul{-webkit-column-count:1;-moz-column-count:1;-o-column-count:1;column-count:1}}.sidebar ul ul{-webkit-column-count:1;-moz-column-count:1;-o-column-count:1;column-count:1}.sidebar h2{color:#333;text-transform:uppercase;font-weight:700;font-size:0.875em;margin:0}.sidebar h2 a{color:#333;font-size:1em;text-decoration:underline}.sidebar a{color:#787774;font-size:0.875em}.sidebar a:hover,.sidebar a:active,.sidebar a:focus{color:#2b8cdb}.sidebar li li{line-height:1.4em;margin-left:1em}.listed-blog-post{margin-bottom:2em;padding-bottom:1em}.listed-blog-post .blog-title{font-weight:700}.listed-blog-post .blog-title .meta{font-weight:normal}.blog-post-header .blog-title{margin-bottom:0}.blog-post-header .meta{margin-top:0}.meta{color:#787774}.r,.l{margin-bottom:1em;max-width:50%}.r{float:right;margin-left:1em}.l{float:left;margin-right:1em}.reveal-all{display:inline-block;width:auto;position:relative;right:0;text-decoration:underline;cursor:pointer;color:#787774;padding-left:1em}.reveal-all:after{content:"+";position:absolute;top:0;left:0;display:inline-block;text-align:center;color:#787774;-webkit-transition:-webkit-transform 0.2s ease-out;-moz-transition:-moz-transform 0.2s ease-out;-o-transition:-o-transform 0.2s ease-out;transition:transform 0.2s ease-out}.reveal-all.revealed:after{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);-webkit-transition:-webkit-transform 0.2s ease-out;-moz-transition:-moz-transform 0.2s ease-out;-o-transition:-o-transform 0.2s ease-out;transition:transform 0.2s ease-out}.reveal-on-click{border:1px solid #e4e3dd}.reveal-on-click dt{border-top:1px solid #e4e3dd;padding:1em;cursor:pointer;position:relative}.reveal-on-click dt:hover{text-decoration:underline}.reveal-on-click dt:first-child{border-top:none}.reveal-on-click dt:after{content:"+";position:absolute;top:0.8em;right:1em;display:inline-block;background:#f3f1eb;border-radius:50%;height:1.5em;width:1.5em;text-align:center;color:#787774;-webkit-transition:-webkit-transform 0.2s ease-out;-moz-transition:-moz-transform 0.2s ease-out;-o-transition:-o-transform 0.2s ease-out;transition:transform 0.2s ease-out}.reveal-on-click dt:hover:after{background:#2b8cdb;color:#fff}.reveal-on-click dt.revealed:after{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);-webkit-transition:-webkit-transform 0.2s ease-out;-moz-transition:-moz-transform 0.2s ease-out;-o-transition:-o-transform 0.2s ease-out;transition:transform 0.2s ease-out}.reveal-on-click dd{margin-left:0;padding:0 1em 0;position:relative;top:-1em}dl.dir-structure,dl.dir-structure dl{background:url(../../theme/img/tree-last.png) no-repeat;background-position:0 -29px;padding:0 0 0 21px;margin:0.5em 0 0 0}dl.dir-structure{margin-bottom:1.5em}dl.dir-structure dt{background:url(../../theme/img/tree-branch.png) no-repeat;background-position:0 0;padding:20px 0 0 28px;margin:0}dl.dir-structure dd{background:url(../../theme/img/tree-upright.png) repeat-y;padding:0 0 0em 40px;margin:0}dl.dir-structure dd p{margin:0;padding:0 0 0.5em 0}dl.dir-structure dt.last{background:url(../../theme/img/tree-last.png) no-repeat}dl.dir-structure dd.last{background-image:none;padding-bottom:0}table.table{border:1px solid #ccc;margin:0.5em 0 1em;border-collapse:collapse}table.table th{background-color:#f5f5f5}table.table th,table.table td{border:1px solid #ccc;padding:0.666em}.attention-box{padding:1em;border:1px solid #e4e3dd;margin-bottom:1.2em}.definitions li{margin-left:0.25em}.definitions a{display:inline-block;background-color:#f3f1eb;border-radius:2em;padding:0.33em 0.66em;color:#333;font-size:0.875em;margin-bottom:1em}.definitions a:hover,.definitions a:active,.definitions a:focus{color:#fff;background-color:#333;text-decoration:none}.glossary{margin:2em 0 8em 0}.glossary dt{background-color:#f3f1eb;padding:0.66em 1em;margin-top:3em;border:1px solid #e4e3dd;border-bottom:none;color:#787774}.glossary dt a{color:#333;font-size:1.5em;font-weight:300}.glossary dt a:hover{text-decoration:none}.glossary dd{border:1px solid #e4e3dd;border-top:none;padding:1em 2em;margin:0}.glossary dd p{margin-top:0.666em}.glossary .more-info{margin:1em 0 0 0}.glossary .more-info>p{float:left;color:#787774;width:8em;margin:0}.glossary .more-info ul{margin-top:0.5em;margin-left:10em}.glossary .more-info ul.examples{clear:both;padding-top:0.666em;margin-left:0em}.glossary__link{display:inline-block;color:#787774;text-decoration:underline;position:relative;padding-left:.5em}.glossary__link:before{content:'#';opacity:0.5;text-decoration:none;position:absolute;left:0}.glossary__link:hover,.glossary__link:active,.glossary__link:focus{color:#333}.glossary__link:hover:before,.glossary__link:active:before,.glossary__link:focus:before{opacity:1}.site-footer{width:100%;clear:left;background:#333;padding:32px 0}.site-footer:before,.site-footer:after{content:" ";display:table}.site-footer:after{clear:both}.site-footer{*zoom:1}.site-footer .column{float:left;padding-left:1.5%;padding-right:1.5%;width:50%}.site-footer .column:nth-child(odd),.site-footer .column:first-child{padding-left:0}.site-footer .column:nth-child(even),.site-footer .column:last-child{padding-right:0}@media (min-width: 30em){.site-footer .column{float:left;padding-left:3%;width:25%}.site-footer .column:first-child{padding-left:0}}@media (min-width: 56.88889em){.site-footer .column{float:left;padding-left:3%;width:20%}.site-footer .column:first-child{padding-left:0}}.site-footer .column:last-child h3{margin-top:1em}@media (min-width: 30em){.site-footer .column:last-child h3{margin-top:0}}.site-footer .central{float:right}@media (min-width: 30em){.site-footer .central{float:left;padding-left:3%;width:50%}.site-footer .central ul{-webkit-column-count:1;-moz-column-count:1;-o-column-count:1;column-count:1}.site-footer .central:first-child{padding-left:0}}@media (min-width: 40em){.site-footer .central{float:left;padding-left:3%;width:50%}.site-footer .central ul{-webkit-column-count:2;-moz-column-count:2;-o-column-count:2;column-count:2}.site-footer .central:first-child{padding-left:0}}@media (min-width: 56.88889em){.site-footer .central{float:left;padding-left:3%;width:60%}.site-footer .central ul{-webkit-column-count:3;-moz-column-count:3;-o-column-count:3;column-count:3}.site-footer .central:first-child{padding-left:0}}.site-footer h3{font-size:1em;font-weight:normal;margin-bottom:0;color:#888}.site-footer ul{margin:0}.site-footer a{color:#eeeeee}
diff --git a/assets/sass/alaveteli-org.scss b/assets/sass/alaveteli-org.scss
index e7aa6a2a9..8a87f6bef 100644
--- a/assets/sass/alaveteli-org.scss
+++ b/assets/sass/alaveteli-org.scss
@@ -867,6 +867,7 @@ h3 {
.clearfix {
@include clearfix;
+}
.header-link {
padding-left: 0.2em;
opacity: 0;
diff --git a/docs/customising/translation.md b/docs/customising/translation.md
index bcf6514e5..d4ccedfa7 100644
--- a/docs/customising/translation.md
+++ b/docs/customising/translation.md
@@ -12,38 +12,85 @@ title: Translation
it. This page explains how.
</p>
+## Alaveteli already contains translations!
+
+Alaveteli ships ready to run in a number of different languages.
+If Alaveteli has already been translated into the language (or languages) you
+need, you just need to configure it -- see
+[`AVAILABLE_LOCALES`]({{ site.baseurl }}docs/customising/config/#available_locales).
+
+[Look in the `locale/` directory](https://github.com/mysociety/alaveteli/tree/master/locale)
+to see what translations are already available. Some are complete
+translations of the site. Others are only partial -- either because the translations
+have not been finished yet, or else because the translators have not updated the
+texts since developers changed or added text on the site.
+
+There are two reasons the translations may need more work before you can use them:
+
+* **the language you want is not one of those we already have** <br> In this
+ case, there will be no entry in ``locale/`` for it, because nobody has yet
+ translated Alaveteli into your language. See the rest of this page to learn
+ how to add a new translation.
+
+* **the translation for your language is incomplete, or lagging behind** <br>
+ This might simply be because it is a work in progress. Furthermore, sometimes
+ an incomplete translation already covers all the areas of the site you need
+ anyway. Of course, you can add to a partial translation, but it's a good idea
+ to check with us first, since we'll probably know who is working on the
+ current translation and what state it's in.
+
+Translators are members of the Alaveteli
+[community]({{site.baseurl}}community/), and often work separately from the
+developers. This means translations can lag a little behind the code. However,
+our release process includes a "translation freeze", which gives the
+translators a chance to catch up -- read the rest of this page for details.
+
## Alaveteli's translations
-The software translations are implemented using GNU gettext, and the resource
-files are managed in Transifex.
+You don't need to be a programmer to translate Alaveteli -- we use an external
+website called Transifex to help manage translations. This makes it easy for
+translators to get to work, but it does mean you (or your technical team)
+need to do a little extra work to get those translations back into Alaveteli
+when they are ready.
The Transifex project is at
-[https://www.transifex.net/projects/p/alaveteli](https://www.transifex.net/projects/p/alaveteli) -- you'll probably want an account there (ask on the mailing
-list). It has a fairly easy-to-use interface for contributing translations.
+[https://www.transifex.net/projects/p/alaveteli](https://www.transifex.net/projects/p/alaveteli)
+-- you'll probably want an account there (ask on the mailing list). It has a
+fairly easy-to-use interface for contributing translations.
+
+Alaveteli localises strings using GNU gettext and
+<a href="{{site.baseurl}}docs/glossary/#po" class="glossary__link"><code>.pot</code> &amp; <code>.po</code> files</a>.
+If you're a developer, you should read
+[internationalising Alaveteli]({{ site.baseurl }}docs/developers/i18n/).
-There are three roles in the translation process, and each one is described
-below: **translator**, **developer**, and **release manager**. You probably only
-need to know about the one that applies to you.
-## Translation process: translator's view
+## What a translator needs to do
**If you're just working on translating Alaveteli into a language you know, then
this section is for you.**
+> Remember that Alaveteli
+> [already comes with some translations](#alaveteli-already-contains-translations),
+> so check first that you really need to do this. Maybe someone has already
+> translated Alaveteli into the language you need!
+
When a developer adds a new feature to the user interface in Alaveteli, they
use some code to mark sentences or words ("strings") that they think will need
to be translated.
-When the Alaveteli release manager is planning a release, they will upload a
-template containing all the strings to be translated (called a POT) to
-Transifex. This causes your own translations in Transifex to be updated with
+When the Alaveteli
+<a href="{{site.baseurl}}docs/glossary/#release" class="glossary__link">release manager</a>
+is planning a release, they will upload a
+template containing all the strings to be translated (called a
+<a href="{{site.baseurl}}docs/glossary/#po" class="glossary__link"><code>.pot</code> file</a>)
+to Transifex. This causes your own translations in Transifex to be updated with
the latest strings.
When you visit Transifex, it will prompt you to fill out values for all new
strings, and all strings that have been modified. In the case where a string
has only been slightly modified, such as with punctuation ("Hello" has become
"Hello!"), Transifex will suggest a suitable translation for you (look for the
-"suggestions" tab under the source string).
+*Suggestions* tab under the source string).
In order for this feature to work properly, the release manager has to download
your translations, run a program that inserts the suggestions, and then upload
@@ -59,11 +106,12 @@ The release manager will also give you a **translation deadline**. After this
date, you can continue to contribute new translations, but they won't make it
into the release.
+
### General notes on translation in Transifex
Some strings will have comments attached to them from the Alaveteli
application developers about the context in which the text appears in the
-application — these comments will appear under the 'Details' tab for the text
+application — these comments will appear under the *Details* tab for the text
in Transifex.
Some strings will have **placeholders** in them to indicate that Alaveteli
@@ -104,19 +152,24 @@ they do not appear on the site anywhere at the moment, and when they do, they
will only be used in the admin interface. If you do translate them, only
translate the text that comes *after* the `|`.
-## Translation process: developers' view
-**If you're writing new code for Alaveteli, then you're a developer, and you
+## How the translations get into Alaveteli
+
+In order to get the translated strings from Transifex into Alaveteli, follow
+the instructions in these [deployment notes]({{ site.baseurl }}docs/developers/i18n/#deployment-notes).
+This will be the job of the technical people on your team (or
+even mySociety's release manager). If translators aren't technical, they can
+use Transifex without needing to worry about this.
+
+
+## Developers and internationalisation
+
+If you're writing new code for Alaveteli, then you're a developer, and you
need to understand how to make any text you add easy for translators to work
-with.**
-
-Please read our [internationalisation
-guide](http://mysociety.github.io/internationalization.html) for our advice on
-using strings that will need translation. This applies across all mySociety
-projects, not just Alaveteli.
-
-The release manager will enforce a translation freeze just before a new release
-is cut. During such time, you must not introduce new strings to the code if
-your work is due for inclusion in this release. This is necessary to allow
-translators time to complete and check their translations against all the known
-strings.
+with -- see the page about
+[internationalising Alaveteli]({{site.baseurl}}docs/developers/i18n/).
+
+If you are a developer or translator actively working on internationalising
+Alaveteli code, you should talk to us to find out when the next release is due,
+so your translations can be prepared in time to be included in it.
+
diff --git a/docs/developers/i18n.md b/docs/developers/i18n.md
new file mode 100644
index 000000000..deabc99a1
--- /dev/null
+++ b/docs/developers/i18n.md
@@ -0,0 +1,161 @@
+---
+layout: page
+title: Internationalisation (for devs)
+---
+
+# Internationalisation in the code
+
+<p class="lead">
+ This page describes some technical aspects of internationalising the
+ Alaveteli code. It's mostly aimed at devs who are working on the
+ codebase &mdash; if you just want to translate Alaveteli into your
+ own language, see
+ <a href="{{ site.baseurl }}docs/customising/translation">translating Alaveteli</a>
+ instead.
+</p>
+
+## Deployment notes
+
+Deployed translations for the project live in ``locale/``.
+
+We encourage translations to be done on
+[Transifex](https://www.transifex.net/projects/p/alaveteli/)
+because translators can work through its web interface rather than needing to edit the
+<a href="{{ site.baseurl }}docs/glossary/#po" class="glossary__link">`.po` and `.pot` files</a>
+directly. Ultimately, Transifex just captures translators'
+work and turns it into the files that Alaveteli needs (using gettext).
+
+### How to get the latest translations onto your site
+
+For example, to deploy English and Spanish translations at once:
+
+ * Ensure their `.po` files are at ```locale/en/app.po``` and ```locale/es/app.po```
+ (for example, by downloading them from Transifex)
+ * Set <code><a href="{{ site.baseurl }}docs/customising/config/#available_locales">AVAILABLE_LOCALES</a></code>
+ to <code>en&nbsp;es</code>
+
+### How to add new strings to the translations
+
+You need to do this if you've added any new strings to the code that need
+translations (or if you change an existing one).
+
+To update the
+<a href="{{ site.baseurl }}docs/glossary/#po" class="glossary__link">`.po` or `.pot` files</a>
+for each language, run:
+
+ bundle exec rake gettext:store_model_attributes
+
+followed by:
+
+ bundle exec rake gettext:find
+
+If `gettext:find` only creates the file `locale/im-config.pot` then you need to
+unset the `TEXTDOMAIN` environment variable and try again.
+
+For more details about the translations, see the page about
+[translating Alaveteli]({{ site.baseurl }}docs/customising/translation/).
+
+
+## Technical implementation details
+
+### Getting the current locale
+
+This is complicated by the fact that there are two competing ways to define a
+locale+territory combination. The POSIX (and gettext and Transifex) way is
+like `en_GB`; the Rails way is like `en-US`. Because we are using gettext and
+Transifex for translations, we must deal with both.
+
+ * for the Rails version of the currently selected locale, use `I18n.locale`
+ * for the POSIX version of the locale, use `FastGettext.locale`
+
+## I18n in templates
+
+Before you add i18n strings to the source, you should read
+[internationalisation guidelines](http://mysociety.github.io/internationalization.html)
+that apply to all our projects.
+
+Some hints for adding the strings into the Alaveteli code:
+
+* Simple strings: ```<% = _("String to translate") %>```
+* Strings that include variables: give the translator a hand by inserting
+ strings that can be interpolated, so the variable has meaning. For example,
+ ```<%= "Nothing found for '" + h(@query) + "'" %>``` might become ```<%=
+ _("Nothing found for '{{search_terms}}'", :search_terms => h(@query)) %>```
+* Strings containing numbers: ```<%= n_('%d request', '%d requests', @quantity) % @quantity %>```
+* We allow some inline HTML where it helps with meaningful context, for example:
+
+```
+_('<a href="{{browse_url}}">Browse all</a> or <a href="{{add_url}}">ask us to add it</a>.',
+ :browse_url => @browse_url, :add_url => @add_url)
+```
+
+Similar rules can apply to strings in the Ruby source code.
+
+## Programmatic access of translated PublicBodies
+
+Apart from the templates, the only other area of i18n currently implemented is
+in the PublicBodies.
+
+The implementation allows for getting different locales of a PublicBody like so:
+
+```ruby
+ PublicBody.with_locale("es") do
+ puts PublicBody.find(230).name
+ end
+```
+
+Usually, that's all the code you need to know about. There's a method
+```self.locale_from_params()``` available on all models which returns a locale
+specified as ```locale=xx``` in the query string, and which falls back to the
+default locale, that you can use in conjunction with the ```with_locale```
+method above. All the joining on internal translation tables should usually be
+handled automagically -- but there are some exceptions, that follow below.
+
+### Overriding model field setters
+
+Internally, we use the [Globalize plugin](https://github.com/globalize/globalize)
+to localize model fields. Where column "foo" has been marked in the model as
+```:translates```, globalize overrides ```foo.baz = 12``` to actually set the
+value in column ```baz``` of table ```foo_translations```.
+
+A side effect of the way it does this is that if you wish to override a
+specific attribute setter, you will need to explicitly call the Globalize
+machinery; something like:
+
+```ruby
+ def name=(name)
+ globalize.write(self.class.locale || I18n.locale, "name", name)
+ self["name"] = short_name
+ # your other stuff here
+ end
+```
+
+### Searching
+
+The ```find_first_by_<attr>``` and ```find_all_by_<attr>``` magic methods
+should work. If you want to do a more programmatic search, you will need to
+join on the translation table. For example:
+
+```ruby
+ query = "#{translated_attr_name(someattr) = ? AND #{translated_attr_name('locale')} IN (?)"
+ locales = Globalize.fallbacks(locale || I18n.locale).map(&:to_s)
+ find(
+ :first,
+ :joins => :translations,
+ :conditions => [query, value, locales],
+ :readonly => false
+ )
+```
+
+You may also need to do some lower-level SQL joins or conditions. See
+```PublicBodyController.list``` for an example of a query that has a condition
+that is explicitly locale-aware (look for the ```locale_condition``` variable)
+
+## Translation and releases
+
+The release manager will enforce a translation freeze just before a new release
+is cut. During such time, you must not introduce new strings to the code if
+your work is due for inclusion in this release. This is necessary to allow
+translators time to complete and check their translations against all the known
+strings. See more about [translating Alaveteli]({{ site.baseurl }}docs/customising/translation/).
+
diff --git a/docs/glossary.md b/docs/glossary.md
index 64c75c603..d35454cbf 100644
--- a/docs/glossary.md
+++ b/docs/glossary.md
@@ -27,12 +27,14 @@ Definitions
<li><a href="#holding_pen">holding pen</a></li>
<li><a href="#newrelic">New Relic</a></li>
<li><a href="#mta">MTA</a></li>
+ <li><a href="#po">.po files</a></li>
<li><a href="#production">production site</a></li>
<li><a href="#publish">publish</a></li>
<li><a href="#recaptcha">recaptcha</a></li>
<li><a href="#redact">redacting</a></li>
<li><a href="#regexp">regular expression</a></li>
<li><a href="#request">request</a></li>
+ <li><a href="#release">release</a></li>
<li><a href="#response">response</a></li>
<li><a href="#rails">Ruby&nbsp;on&nbsp;Rails</a></li>
<li><a href="#sass">Sass</a></li>
@@ -333,6 +335,36 @@ Definitions
</dd>
<dt>
+ <a name="po"><code>.po</code> file</a> (and <code>.pot</code> file)
+ </dt>
+ <dd>
+ These are the files needed by the gettext mechanism Alaveteli uses for
+ localisation. A <code>.pot</code> file is effectively a list of all the
+ strings in the application that need translating. Each <code>.po</code>
+ file contains the mapping between those strings, used as keys, and their
+ translations for one particular language. The key is called the
+ <em>msgid</em>, and its corresponding translation is the <em>msgstr</em>.
+ <div class="more-info">
+ <p>More information:</p>
+ <ul>
+ <li>
+ See <a href="{{ site.baseurl }}docs/customising/translation/">translating
+ Alaveteli</a> for an overview from a translator's point of view.
+ </li>
+ <li>
+ See <a href="{{ site.baseurl }}docs/developers/i18n/">Internationalising
+ Alaveteli</a> for more technical details.
+ </li>
+ <li>
+ Alaveteli is on the <a href="https://www.transifex.net/projects/p/alaveteli/">Transifex</a>
+ website, which lets translators work on Alaveteli in a browser, without needing
+ to worry about this underlying structure.
+ </li>
+ </ul>
+ </div>
+ </dd>
+
+ <dt>
<a name="production">production site</a> (also: live, production server)
</dt>
<dd>
@@ -378,15 +410,6 @@ Definitions
</dd>
<dt>
- <a name="response">response</a>
- </dt>
- <dd>
- A <strong>response</strong> is the email sent by an
- <a href="#authority" class="glossary">authority</a> in reply to
- a user's <a href="#request" class="glossary">requests</a>.
- </dd>
-
- <dt>
<a name="recaptcha">recaptcha</a>
</dt>
<dd>
@@ -482,6 +505,42 @@ Definitions
</dd>
<dt>
+ <a name="release">release</a> (also: release manager)
+ </dt>
+ <dd>
+ We issue new <strong>releases</strong> of the Alaveteli code whenever key
+ work (new features, improvements, bugfixes, and so on) have been added to
+ the core code. Releases are identified by their tag, which comprises two or
+ three numbers: major, minor, and &mdash; if necessary &mdash; a patch
+ number. We recommend you always use the latest version. The process is
+ handled by the Alaveteli <strong>release manager</strong>, who decides what
+ changes are to be included in the current release, and the cut-off date for
+ the work. Currently this is Alaveteli's lead developer at mySociety.
+ <div class="more-info">
+ <p>More information:</p>
+ <ul>
+ <li>
+ The latest stable release is on the
+ <a href="https://github.com/mysociety/alaveteli/tree/master">master branch</a>.
+ </li>
+ <li>
+ See a <a href="https://github.com/mysociety/alaveteli/releases">list of all releases</a>
+ and their explicit tags.
+ </li>
+ <li>
+ We try to coordinate releases with any active translation work too.
+ See <a href="http://localhost:4000/docs/customising/translation/">translating
+ Alaveteli</a> for more information.
+ </li>
+ <li>
+ We encourage you use the <a href="{{site.baseurl}}docs/installing/deploy/">deployment
+ mechanism</a>, which makes it easier to keep your production server up-to-date.
+ </li>
+ </ul>
+ </div>
+ </dd>
+
+ <dt>
<a name="request">request</a>
</dt>
<dd>
@@ -495,6 +554,15 @@ Definitions
</dd>
<dt>
+ <a name="response">response</a>
+ </dt>
+ <dd>
+ A <strong>response</strong> is the email sent by an
+ <a href="#authority" class="glossary">authority</a> in reply to
+ a user's <a href="#request" class="glossary">requests</a>.
+ </dd>
+
+ <dt>
<a name="rails">Ruby on Rails</a> (also Rails)
</dt>
<dd>
diff --git a/docs/installing/manual_install.md b/docs/installing/manual_install.md
index c84e0f145..0c53fa91b 100644
--- a/docs/installing/manual_install.md
+++ b/docs/installing/manual_install.md
@@ -339,28 +339,6 @@ localhost interface by adding `--binding=127.0.0.1`
The server should have told you the URL to access in your browser to see the
site in action.
-## Administrator privileges
-
-The administrative interface is at the URL `/admin`.
-
-Only users with the `super` admin level can access the admin interface. Users
-create their own accounts in the usual way, and then administrators can give
-them `super` privileges.
-
-There is an emergency user account which can be accessed via
-`/admin?emergency=1`, using the credentials `ADMIN_USERNAME` and
-`ADMIN_PASSWORD`, which are set in `general.yml`. To bootstrap the
-first `super` level accounts, you will need to log in as the emergency
-user. You can disable the emergency user account by setting `DISABLE_EMERGENCY_USER` to `true` in `general.yml`.
-
-Users with the superuser role also have extra privileges in the website
-frontend, such as being able to categorise any request, being able to view
-items that have been hidden from the search, and being presented with "admin"
-links next to individual requests and comments in the front end.
-
-It is possible completely to override the administrator authentication by
-setting `SKIP_ADMIN_AUTH` to `true` in `general.yml`.
-
## Cron jobs and init scripts
The crontab and init scripts use the `.ugly` file format, which is a strange
diff --git a/docs/running/admin_manual.md b/docs/running/admin_manual.md
index 77bacdf1b..cde828c9a 100644
--- a/docs/running/admin_manual.md
+++ b/docs/running/admin_manual.md
@@ -297,5 +297,24 @@ hanging the application altogether), so please:
* Restrict your use of them to cases that can't otherwise be easily covered.
* Keep them as simple and specific as possible.
+## Administrator privileges
+The administrative interface is at the URL `/admin`.
+Only users with the `super` admin level can access the admin interface. Users
+create their own accounts in the usual way, and then administrators can give
+them `super` privileges.
+
+There is an emergency user account which can be accessed via
+`/admin?emergency=1`, using the credentials `ADMIN_USERNAME` and
+`ADMIN_PASSWORD`, which are set in `general.yml`. To bootstrap the
+first `super` level accounts, you will need to log in as the emergency
+user. You can disable the emergency user account by setting `DISABLE_EMERGENCY_USER` to `true` in `general.yml`.
+
+Users with the superuser role also have extra privileges in the website
+front end, such as being able to categorise any request, being able to view
+items that have been hidden from the search, and being presented with "admin"
+links next to individual requests and comments in the front end.
+
+It is possible completely to override the administrator authentication by
+setting `SKIP_ADMIN_AUTH` to `true` in `general.yml`.
diff --git a/docs/running/upgrading.md b/docs/running/upgrading.md
index a3b292cf0..2142bfd47 100644
--- a/docs/running/upgrading.md
+++ b/docs/running/upgrading.md
@@ -5,20 +5,53 @@ title: Upgrading
Upgrading Alaveteli
====================
-The developer team policy is that the master branch in git should always
-contain the latest stable release. Therefore, in production, you should usually
-have your software deployed from the master branch, and an upgrade can be
-simply `git pull`.
+<p class="lead">
+ Alaveteli is under active development &mdash; don't let the
+ version you're running get too far behind our latest
+ <a href="{{site.baseurl}}docs/glossary/#release" class="glossary__link">release</a>.
+ This page describes how to keep your site up-to-date
+</p>
+
+## Master branch contains the latest stable release
+
+The developer team policy is that the `master` branch in git should always
+contain the latest stable release -- so you'll be up to date if you pull from
+the `master` branch. However, on your
+<a href="{{site.baseurl}}docs/glossary/#production" class="glossary">production
+site</a>, you should know precisely what version you're running, and deploy
+Alaveteli from a [*specific* release
+tag](https://github.com/mysociety/alaveteli/releases).
+
+Upgrading may just require pulling in the latest code -- but it may also require
+other changes ("further action"). For this reason, for anything other than a
+*patch* (see below), always read the
+[`CHANGES.md`](https://github.com/mysociety/alaveteli/blob/master/doc/CHANGES.md)
+document **before** doing an uprade. This way you'll be able to prepare for any
+other changes that might be needed to make the new code work.
+
+## How to upgrade the code
+
+* If you're using Capistrano for deployment,
+ simply [deploy the code]({{site.baseurl}}docs/installing/deploy/#usage):
+ set the repo and branch in `deploy.yml` to be the version you want.
+ We recommend you set this to the explicit tag name (for example,
+ `0.18`, and not `master`) so there's no risk of you accidentally deploying
+ a new version before you're aware it's been released.
+* otherwise, you can simply upgrade by running `git pull`
+
+## Patches
Patch version increases (e.g. 1.2.3 &rarr; 1.2.**4**) should not require any further
action on your part.
+## Minor version increases
+
Minor version increases (e.g. 1.2.4 &rarr; 1.**3**.0) will usually require further
-action. You should read the [`CHANGES.md`](https://github.com/mysociety/alaveteli/blob/master/doc/CHANGES.md) document to see what's changed since
-your last deployment, paying special attention to anything in the "Upgrade notes"
-sections.
+action. You should read the [`CHANGES.md`](https://github.com/mysociety/alaveteli/blob/master/doc/CHANGES.md)
+document to see what's changed since your last deployment, paying special attention
+to anything in the "Upgrade notes" sections.
-Any upgrade may include new translations strings, i.e. new or altered messages
+Any upgrade may include new translations strings, that is, new or altered messages
to the user that need translating to your locale. You should visit Transifex
and try to get your translation up to 100% on each new release. Failure to do
so means that any new words added to the Alaveteli source code will appear in
@@ -26,7 +59,10 @@ your website in English by default. If your translations didn't make it to the
latest release, you will need to download the updated `app.po` for your locale
from Transifex and save it in the `locale/` folder.
-Unless you're using Capistrano for deployment, you should always run the script `scripts/rails-post-deploy` after each
+## Run the post-deploy script
+
+Unless you're [using Capistrano for deployment]({{site.baseurl}}docs/installing/deploy/),
+you should always run the script `scripts/rails-post-deploy` after each
deployment. This runs any database migrations for you, plus various other
things that can be automated for deployment.
diff --git a/package.json b/package.json
new file mode 100644
index 000000000..ea5492dfd
--- /dev/null
+++ b/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "fixmystreet-documentation",
+ "description": "Documentation for the FixMyStreet Platform",
+ "license": "AGPL-3.0",
+ "version": "1.0.0",
+ "homepage": "http://fixmystreet.org/",
+ "scripts": {},
+ "devDependencies": {
+ "grunt": "~0.4.1",
+ "grunt-contrib-uglify": "~0.2.5",
+ "grunt-contrib-watch": "~0.6.1",
+ "grunt-contrib-sass": "~0.7.3",
+ "grunt-jekyll": "~0.4.1",
+ "grunt-contrib-connect": "~0.7.1"
+ }
+}
diff --git a/theme b/theme
-Subproject 7be17a2e930b5671992380cf55c02b6b11e7317
+Subproject d3992d1877faf807db2799e333570fbbd7931d0