diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index c0e8397..0000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "permissions": { - "allow": [ - "WebFetch(domain:bephpug.de)", - "WebFetch(domain:berlinphp.github.io)", - "WebFetch(domain:www.bephpug.de)", - "Bash(mkdir:*)", - "Bash(curl:*)", - "Bash(zola serve:*)", - "Bash(git add:*)", - "mcp__playwright__browser_navigate", - "WebFetch(domain:www.meetup.com)", - "Bash(rg:*)", - "Bash(zola build:*)", - "WebFetch(domain:127.0.0.1)", - "Bash(grep:*)", - "Bash(cp:*)", - "Bash(cat:*)" - ], - "deny": [], - "defaultMode": "acceptEdits" - } -} \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index ac9c943..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Deploy Zola site to GitHub Pages - -on: - push: - branches: - - main - pull_request: - -jobs: - build: - runs-on: ubuntu-latest - if: github.ref != 'refs/heads/main' - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Zola - uses: taiki-e/install-action@v2 - with: - tool: zola@0.21.0 - - - name: Build site - run: zola build - - - name: Check internal links - run: zola check - - deploy: - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' - permissions: - contents: read - pages: write - id-token: write - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Zola - uses: taiki-e/install-action@v2 - with: - tool: zola@0.21.0 - - - name: Build site - run: zola build - - - name: Setup Pages - uses: actions/configure-pages@v4 - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./public - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 28e16ef..0baf015 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1 @@ -# Zola build output -public/ - -# OS generated files -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -ehthumbs.db -Thumbs.db - -# Editor files -*.swp -*.swo -*~ -.vscode/ -.idea/ - -# Temporary files -*.tmp -*.temp \ No newline at end of file +/_site diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 9af2095..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,161 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -This is the **Berlin PHP Usergroup** website built with **Zola** static site generator. The site was migrated from Jekyll and focuses on showcasing meetup events, talks, and community information. - -**Key Architecture Decisions:** -- **Zola SSG**: Uses Zola for fast static site generation -- **Bulma CSS**: All styling uses Bulma framework (NEVER use Tailwind CSS) -- **Event-Centric**: Content is organized around meetup events with rich metadata -- **English Content**: Events and pages support only English - -## Essential Commands - -```bash -# Development server -zola serve --port 8082 - -# Build for production -zola build - -# Check internal links -zola check -``` - -## Content Structure & Architecture - -### Events Architecture -Events are the core content type with a specific structure: - -**Directory Structure:** -``` -content/events/ -├── _index.md # Events listing page (paginated, 20 per page) -└── YYYY-MM-DD-topic1-topic2-topic3/ - └── index.md # Individual event page -``` - -**Event Frontmatter Schema:** -```toml -+++ -title = "Event Title" -description = "SEO description" -date = "YYYY-MM-DD" - -[taxonomies] -speaker = ["Speaker Name 1", "Speaker Name 2"] -topic = ["Topic1", "Topic2"] - -[extra] -location = "Venue Name" -+++ -``` - -### Taxonomies System -The site uses two main taxonomies defined in `config.toml`: -- `speaker`: Links events by speakers (generates `/speaker/` pages) -- `topic`: Links events by topics (generates `/topic/` pages) - -### Template Architecture -- `base.html`: Main layout with Bulma navbar, footer, meta tags -- `events.html`: Event listing with pagination and sidebar -- `event.html`: Individual event page template -- `taxonomy_list.html`: Lists all speakers/tags -- `taxonomy_single.html`: Shows all events for a specific speaker/topic - -## CSS Framework: Bulma Only - -**CRITICAL**: This site uses **Bulma CSS framework exclusively**. - -**Bulma Classes to Use:** -- Layout: `container`, `columns`, `column`, `section` -- Components: `box`, `tag`, `button`, `pagination` -- Typography: `title is-1`, `subtitle`, `content` -- Styling: `is-primary`, `is-light`, `is-php` (custom), `is-magenta` (custom) - -**Color System:** -All colors are defined in `static/styles.css` as CSS custom properties based on the Berlin PHP brand palette: - -```css -:root { - --dark-charcoal: #333333; /* Dark gray/black */ - --dark-blue: #4F5B93; /* Primary brand blue */ - --php-blue: #8892BF; /* Light PHP blue */ - --orange-red: #F75900; /* Bright orange accent */ - --warning-yellow: #FFAA00; /* Warning/highlight yellow */ - --light-gray: #F2F2F2; /* Background gray */ - --dark-magenta-color: #793862; /* Speaker tags magenta */ -} -``` - -**Tag Color Usage:** -- `.tag.is-php` - Light blue (`--php-blue`) for topic/technology tags -- `.tag.is-magenta` - Magenta (`--dark-magenta-color`) for speaker tags -- `.tag.is-warning` - Yellow (`--warning-yellow`) for warnings/important items -- `.tag.is-highlight` - Orange (`--orange-red`) for special highlights -- `.tag.is-dark` - Dark (`--dark-charcoal`) for secondary elements - -**Assets:** -- CSS: `static/lib/bulma.min.css` + `static/styles.css` -- Branding: `static/logo.svg`, `static/social-banner.png` - -## Event Migration Process - -When migrating events from old Jekyll site (`/home/dazz/Code/berlinphp/berlinphp.github.com.git/_posts/`): - -1. Convert Jekyll frontmatter (YAML) to Zola (TOML) -2. Transform speaker list to `[taxonomies]` format -3. Move `date` from `[extra]` to main frontmatter for pages -4. **Event Slug Pattern**: Create SEO-friendly directory structure: `content/events/YYYY-MM-DD-topic1-topic2-topic3/index.md` - - Use main topics/technologies from the event talks - - Lowercase with hyphens instead of spaces - - Examples: `2012-03-06-e-commerce-shop-systems/`, `2012-04-03-pimcore-zend-php54-createjs/` -5. Preserve bilingual content (English + German sections), but in most cases the site will only display English content. -6. **Link Replacements**: Replace `[co.up](http://www.bephpug.de/location.html)` links with plain text "co.up" - these external links are outdated and should be simplified to just the venue name. -7. **Location Format**: Use full venue details in frontmatter: `location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin"` instead of just "co.up" for better SEO and user information. -8. **HTML File Conversion**: Starting from June 2013, posts are in HTML format. Convert HTML structure to Markdown format while preserving content, apply same migration rules as MD files. - - Use individual talk sections: `## Talk 1: Title` (no bold formatting) - - Speaker name as linked line: `by [Speaker Name](twitter_link)` placed AFTER description if description exists, otherwise directly after title - - Include talk descriptions when available from HTML content - - No "English/Deutsch" section headers for HTML-converted events - - Skip empty slots, only create talks for filled content - -## Configuration Notes - -**config.toml Key Settings:** -- Taxonomies: `speaker` and `topic` with RSS feeds enabled -- Pagination: Events paginated at 20 per page -- Feeds: RSS enabled for main content and taxonomies -- Social: Mastodon, GitHub, Flickr integration configured - -**Build Settings:** -- SASS compilation enabled -- HTML minification enabled -- Search index generation enabled -- Syntax highlighting with "base16-ocean-dark" theme - -## Development Workflow - -1. **Local Development**: Use `zola serve --port 8082` for live reload -2. **Content Creation**: Follow event directory structure exactly -3. **Styling**: Only use Bulma classes, extend with `static/styles.css` if needed -4. **Templates**: Maintain Bulma compatibility across all templates -5. **Testing**: Check with `zola check` before deployment - -## Site Structure - -**Content Sections:** -- `/`: Homepage with hero and recent events -- `/events/`: Paginated archive of all meetups -- `/speaker/`: Taxonomy pages for speakers -- `/topic/`: Taxonomy pages for topics -- `/pages/`: Static pages (contact, imprint, etc.) - -**Static Assets in `/static/`:** -- Bulma CSS framework -- Custom site styles -- Brand assets (logos, social banner) -- Favicon and icons \ No newline at end of file diff --git a/static/CNAME b/CNAME similarity index 100% rename from static/CNAME rename to CNAME diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/_backup/bootstrap-2.0.1.zip b/_backup/bootstrap-2.0.1.zip new file mode 100644 index 0000000..f102cd9 Binary files /dev/null and b/_backup/bootstrap-2.0.1.zip differ diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..b136b57 --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +pygments: true diff --git a/_includes/nav.html b/_includes/nav.html new file mode 100644 index 0000000..e05f585 --- /dev/null +++ b/_includes/nav.html @@ -0,0 +1,32 @@ + diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..169b395 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,77 @@ + + + + + + {% if page.title %} + {{ page.title }} -- Berlin PHP Usergroup + {% else %} + Berlin PHP Usergroup + {% endif %} + + + + + + + + + + + +{% include nav.html %} + +
+ + {% if page.title %} +
+

{{ page.title }}

+

{{ page.subtitle }}

+
+ {% endif %} + +
+
+ {{ content }} +
+
+ + + +
+
+
+ + + diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..67ca413 --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,29 @@ +--- +layout: default +archive: active +--- + +
+
+

+ {{ content }} + + +

+
+
+ + diff --git a/_posts/2012-02-16-welcome-to-our-new-home.md b/_posts/2012-02-16-welcome-to-our-new-home.md new file mode 100644 index 0000000..27181d4 --- /dev/null +++ b/_posts/2012-02-16-welcome-to-our-new-home.md @@ -0,0 +1,35 @@ +--- +layout: post +title: Welcome to our new home / Willkommen auf unserer neuen Seite +archive: active +tags: bephpug +--- + +### English + +We managed to migrate the old wiki to a new home finally. This comes with all +new Github Pages hotness, which means it's easy for you to participate if anything +has to be done. Also it should be a lot easier to get all the details of upcoming +and past meetups. + +[Checkout the source on Github](https://github.com/berlinphp/berlinphp.github.com) +if you want to help out. We're always happy about contributions, be it some better texts, +your uploaded slides or some design fixes. + +This also marks the start of a bilingual site, as we got a lot of requests from +non-native people that want to join our meetups. + +### Deutsch + +Endlich haben wir es geschafft das alte Wiki auf sein neues zu Hause zu migrieren. +Wir benutzen nun Github Pages, sodass es euch ein leichtes ist an der Seite teilzunehmen, +wenn irgendwas getan werden muss. Außerdem sollte die Seite nun wesentlich übersichtlicher +sein und alle Details der vergangenen und kommendenden Treffen gut zu finden sein. + +[Der Code ist Github](https://github.com/berlinphp/berlinphp.github.com) wenn du +helfen möchtest. Wir freuen uns über jede noch so kleine Hilfe, sei es die +Verbesserung der Texte, das Hinzufügen der Folien oder auch Verschönerungen +des Designs. + +Auf Grund vieler Nachfragen englisch-sprachiger Interessierter, wird die Seite +ab sofort auch bilingual sein. diff --git a/_posts/2012-02-17-how-to-contribute.md b/_posts/2012-02-17-how-to-contribute.md new file mode 100644 index 0000000..fa6c1f3 --- /dev/null +++ b/_posts/2012-02-17-how-to-contribute.md @@ -0,0 +1,58 @@ +--- +layout: post +title: How to contribute? / Wie kann ich helfen? +archive: active +tags: bephpug +--- + +### English + +Our new page is [hosted on Github](https://github.com/berlinphp/berlinphp.github.com) +and is using their awesome [Github Pages](http://pages.github.com/) feature together +with the static site generator [Jekyll](https://github.com/mojombo/jekyll). + +The easiest way to contribute is to simply ignore all that and just use +Github's [Fork & Edit feature](https://github.com/blog/844-forking-with-the-edit-button). +Just head to [our repo](https://github.com/berlinphp/berlinphp.github.com), find the +file you want to edit, click "Fork & Edit", make your changes, commit them and +submit the Pull Request. We'll make sure to merge these changes as soon as +possible. + +If you want to make more complex changes, you have to fork the complete repository, +edit away, commit & push the changes and open up a pull request. + +If you want to see the site locally, just follow these steps: + +1. Make sure that you have Ruby on your machine. +2. Install Jekyll with: `gem install jekyll` +3. run `jekyll --server` in the project folder +4. point your browser to [http://localhost:4000](http://localhost:4000) +5. You should see the site with all your changes + +Happy forking and editing, we love to see your contributions! + +### Deutsch + +Unsere neue Site [liegt auf Github](https://github.com/berlinphp/berlinphp.github.com) +und benutzt deren tolles [Github Pages](http://pages.github.com/) Feature zusammen mit +[Jekyll](https://github.com/mojombo/jekyll) um statische Seiten zu generieren. + +Der einfachste Weg zur Seite beizutragen ist einfach Githubs +[Fork & Edit Feature](https://github.com/blog/844-forking-with-the-edit-button) +zu benutzen. Dazu musst du einfach auf [unser Repository](https://github.com/berlinphp/berlinphp.github.com) +gehen, bei der Datei die du editieren willst auf "Fork & Edit" benutzen, deine +Änderungen machen, speichern und den Pull Request absenden. Wir werden versuchen den so schnell wie +möglich zu mergen. + +Für komplexere Änderungen, musst du das komplette Repository forken, die +Änderungen machen, comitten, pushen und den Pull Request öffnen. + +If you want to see the site locally, just follow these steps: + +1. Stelle sicher das Ruby auf deinem Computer installiert ist. +2. Installiere Jekyll mit: `gem install jekyll` +3. Führe `jekyll --server` im Projektverzeichnis aus +4. Gehe mit deinem Browser auf [http://localhost:4000](http://localhost:4000) +5. Du solltest nun die Seite mit all deinen Änderungen sehen + +Wir freuen uns auf eure Teilnahme. diff --git a/content/events/2012-03-06-e-commerce-systems/index.md b/_posts/2012-03-06-march-2012-meetup.md similarity index 56% rename from content/events/2012-03-06-e-commerce-systems/index.md rename to _posts/2012-03-06-march-2012-meetup.md index 396fd52..7c88e83 100644 --- a/content/events/2012-03-06-e-commerce-systems/index.md +++ b/_posts/2012-03-06-march-2012-meetup.md @@ -1,17 +1,11 @@ -+++ -title = "Meetup on March, 6th 2012 // Treffen am 6. März 2012" -description = "March 2012 meetup focused on shop systems with talks about various e-commerce platforms including Sylius, OXID, Magento, osCommerce, and TYPO3." -date = "2012-03-06" +--- +layout: post +title: Meetup on March, 6th 2012 / Treffen am 6. März 2012 +archive: active +tags: bephpug +--- -[taxonomies] -speaker = ["Daniel Fahlke", "Thomas Lohner", "Martin Rothenberger", "Fabian Blechschmidt", "Markus Will", "Nicole Cordes"] -topic = ["E-commerce", "Shop Systems", "Sylius", "OXID", "Magento", "osCommerce", "TYPO3"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English +### English This month's meetup has a focus on shop systems. Nearly everybody dealt with them at some point and there are countless e-commerce systems around. @@ -21,21 +15,21 @@ shopping systems. So far the following shop systems will be presented: * "Sylius" by Daniel Fahlke -* "OXID" by Thomas Lohner - [Slides](2012-03-06_thomas.lohner_oxid.pdf) +* "OXID" by Thomas Lohner * "Magento Commerce & Magento Enterprise" by Martin Rothenberger * "Preview to Magento 2" by Fabian Blechschmidt * "osCommerce 2.x and a sneak peak into 3.x" by Markus Will -* "TYPO3 shopping solutions" by Nicole Cordes +* "Typo 3 shopping solutions" by Nicole Cordes -As usual the meetup will be at co.up +As usual the meetup will be at [co.up](http://www.bephpug.de/location.html) and drinks will be available for a small fee. We'll meet on March, 6th at 7pm, the talks start around 7:30pm. Happy to see you there! -## Deutsch +### Deutsch -Nahezu jeder hat mal mit Shoppingsystemen zu tun gehabt oder immer noch damit +Nahezu jeder hat mal mit Shoppingsystemem zu tun gehabt oder immer noch damit zu tun und den Überblick über die Systeme zu behalten ist nahezu unmöglich. Das März Treffen versucht ein wenig Licht auf die Auswahl zu werfen und stellt einige Shopsysteme vor. @@ -43,13 +37,13 @@ einige Shopsysteme vor. Bisher haben wir folgende Vorträge: * "Sylius" von Daniel Fahlke -* "OXID" von Thomas Lohner - [Slides](2012-03-06_thomas.lohner_oxid.pdf) +* "OXID" von Thomas Lohner * "Magento Commerce & Magento Enterprise" von Martin Rothenberger * "Preview to Magento 2" von Fabian Blechschmidt * "osCommerce 2.x und Ausblick auf 3.x" von Markus Will -* "TYPO3 Shoplösungen" von Nicole Cordes +* "Typo 3 Shoplösungen" von Nicole Cordes -Wie immer treffen wir uns bei co.up, +Wie immer treffen wir uns bei [co.up](http://www.bephpug.de/location.html), Getränke sind gegen ein kleines Entgelt zu haben. Wir treffen uns am 6. März um 19 Uhr, die Vorträge beginnen gegen 19:30. diff --git a/archiv.html b/archiv.html new file mode 100644 index 0000000..e221705 --- /dev/null +++ b/archiv.html @@ -0,0 +1,79 @@ +--- +layout: default +title: Archiv / Archive +archive: active +--- + +

Ankündigungen / Announcements

+ + +

Bisherige Vorträge / Talks in the past

+ diff --git a/config.toml b/config.toml deleted file mode 100644 index cac3949..0000000 --- a/config.toml +++ /dev/null @@ -1,52 +0,0 @@ -# Berlin PHP Usergroup Website -# Zola Configuration - -base_url = "/" -title = "Berlin PHP Usergroup" -description = "The Berlin PHP Usergroup community - Monthly meetups, talks, and networking for PHP developers in Berlin" - -# Build settings -compile_sass = true -minify_html = true -build_search_index = true - -# Default language -default_language = "en" - -# RSS feed -generate_feeds = true - -# Taxonomies -taxonomies = [ - { name = "topic", feed = true }, - { name = "speaker", feed = true }, -] - -# Markdown configuration -[markdown] -highlight_code = true -highlight_theme = "base16-ocean-dark" - -# Slugify configuration -[slugify] -paths = "on" -paths_keep_dates = true - -# Single language setup - English only - -# Extra settings -[extra] -# Social media links -mastodon_url = "https://phpc.social/@bephpug" -twitter_url = "https://twitter.com/berlinphp" -github_url = "https://github.com/berlinphp" -meetup_url = "https://www.meetup.com/berlin-php-usergroup/" - -# Analytics (optional) -# google_analytics = "UA-XXXXXXXX-X" - -# Branding assets -logo = "/logo.svg" -logo_outset = "/logo_outset.svg" -social_banner = "/social-banner.png" -favicon = "/favicon.ico" \ No newline at end of file diff --git a/contact.html b/contact.html new file mode 100644 index 0000000..4ca1996 --- /dev/null +++ b/contact.html @@ -0,0 +1,26 @@ +--- +layout: default +title: Kontakt / Contact +contact: active +subtitle: "Kontakt zur Usergroup — Get in touch!" +--- + +
+
+

Mailingliste

+

Wir haben eine Mailingliste über die alle Ankündungen verschickt werden: bephpug@thing.org. Jeder kann der Liste beitreten.

+

Um der Mailingliste beizutreten schickt Ihr eine Email mit dem Betreff "subscribe" an die Emailadresse. Und "unsubscribe" um sie zu verlassen.

+ +

Twitter

+

Folgt uns auf Twitter: http://twitter.com/bephpug

+
+
+ +

Mailinglist

+

All announcements are send to our mailinglist: bephpug@thing.org. Anyone may join and post.

+

To join, send a message with subject "subscribe" to the email address. Use subject "unsubscribe" to leave the list.

+ +

Twitter

+

You may follow us on Twitter as well: http://twitter.com/bephpug

+
+
diff --git a/content/_index.md b/content/_index.md deleted file mode 100644 index 9d3f509..0000000 --- a/content/_index.md +++ /dev/null @@ -1,55 +0,0 @@ -+++ -title = "Berlin PHP Usergroup" -description = "Monthly meetups for PHP developers in Berlin. Join our community for talks, networking, and learning about PHP, web development, and related technologies." - -+++ - -## Welcome to Berlin PHP - -The **Berlin PHP Usergroup** (BePHPUG) is Berlin's vibrant community for PHP developers, enthusiasts, and anyone interested in web development with PHP and related technologies. - -### What We Do - -Every month, we gather for **free meetups** featuring: - -- **Technical talks** from community members and industry experts -- **Lightning talks** for quick knowledge sharing -- **Networking opportunities** with fellow developers -- **Q&A sessions** and open discussions - -### Who Should Join? - -Whether you're a **seasoned PHP architect** or just **getting started** with web development, you'll find something valuable: - -- PHP developers of all skill levels -- Web developers interested in modern PHP -- Students learning web technologies -- Tech leads and CTOs using PHP in their stack -- Freelancers and consultants -- Anyone curious about the PHP ecosystem - -### Our Community Values - -- **Inclusive and welcoming** environment for everyone -- **Knowledge sharing** and mutual learning -- **Respectful discussions** and constructive feedback -- **Supporting local talent** and businesses -- **Promoting best practices** in PHP development - -### Meeting Format - -**When:** Usually a Wednesday of each month -**Time:** 19:00 - 21:30 (7:00 - 9:30 PM) -**Where:** Changing locations -**Cost:** Free! Drinks and snacks provided -**Languages:** All talks and discussions in English - -### Get Involved - -Want to **give a talk**? Have a **project to share**? Looking to **sponsor** an event? - -[Contact us](/pages/contact/) - we're always looking for speakers and supporters! - ---- - -*Berlin PHP Usergroup has been connecting the local PHP community since 2009. Join us for our next meetup!* \ No newline at end of file diff --git a/content/events/2012-03-06-e-commerce-systems/2012-03-06_thomas.lohner_oxid.pdf b/content/events/2012-03-06-e-commerce-systems/2012-03-06_thomas.lohner_oxid.pdf deleted file mode 100644 index fc91ed2..0000000 Binary files a/content/events/2012-03-06-e-commerce-systems/2012-03-06_thomas.lohner_oxid.pdf and /dev/null differ diff --git a/content/events/2012-04-03-pimcore-zend-php54-createjs/2012-04-03-Secure-Server-Side-Password-Storage.pdf b/content/events/2012-04-03-pimcore-zend-php54-createjs/2012-04-03-Secure-Server-Side-Password-Storage.pdf deleted file mode 100644 index 3d6ed17..0000000 Binary files a/content/events/2012-04-03-pimcore-zend-php54-createjs/2012-04-03-Secure-Server-Side-Password-Storage.pdf and /dev/null differ diff --git a/content/events/2012-04-03-pimcore-zend-php54-createjs/chluehr-pimcore_primer-bephpug_201204.pdf b/content/events/2012-04-03-pimcore-zend-php54-createjs/chluehr-pimcore_primer-bephpug_201204.pdf deleted file mode 100644 index 2ecba0e..0000000 Binary files a/content/events/2012-04-03-pimcore-zend-php54-createjs/chluehr-pimcore_primer-bephpug_201204.pdf and /dev/null differ diff --git a/content/events/2012-04-03-pimcore-zend-php54-createjs/index.md b/content/events/2012-04-03-pimcore-zend-php54-createjs/index.md deleted file mode 100644 index 0741198..0000000 --- a/content/events/2012-04-03-pimcore-zend-php54-createjs/index.md +++ /dev/null @@ -1,39 +0,0 @@ -+++ -title = "Meetup on the 3rd April, 2012 // Treffen am 3. April, 2012" -description = "April 2012 meetup featuring talks on pimcore CMS, Zend Framework 2 components, PHP 5.4 introduction, and CreateJS library." -date = "2012-04-03" - -[taxonomies] -speaker = ["Christoph Lühr", "Marc Bennewitz", "Martin Holzhauer", "Henri Bergius"] -topic = ["pimcore", "Zend Framework 2", "PHP 5.4", "CreateJS"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* [pimcore](http://www.pimcore.org/) by Christoph Lühr - [Slides](chluehr-pimcore_primer-bephpug_201204.pdf) -* zf2 components: Zend\Cache, Zend\Serializer, Zend\EventManager, Zend\Stdlib\ErrorHandler by Marc Bennewitz -* An Introduction to PHP 5.4 by Martin Holzhauer -* Secure Server-Side Password Storage - [Slides](2012-04-03-Secure-Server-Side-Password-Storage.pdf) -* [CreateJS](http://createjs.org/) by Henri Bergius - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* [pimcore](http://www.pimcore.org/) von Christoph Lühr - [Slides](chluehr-pimcore_primer-bephpug_201204.pdf) -* zf2-Komponenten vorgestellt: Zend\Cache, Zend\Serializer, Zend\EventManager, Zend\Stdlib\ErrorHandler von Marc Bennewitz -* Einführung in PHP 5.4 von Martin Holzhauer -* Secure Server-Side Password Storage - [Slides](2012-04-03-Secure-Server-Side-Password-Storage.pdf) -* Einführung in [CreateJS](http://createjs.org) von Henri Bergius - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch. \ No newline at end of file diff --git a/content/events/2012-06-05-mysql-bsoad/12_05_ipc_se_testen_state_of_the_art.pdf b/content/events/2012-06-05-mysql-bsoad/12_05_ipc_se_testen_state_of_the_art.pdf deleted file mode 100644 index 0d5a3c3..0000000 Binary files a/content/events/2012-06-05-mysql-bsoad/12_05_ipc_se_testen_state_of_the_art.pdf and /dev/null differ diff --git a/content/events/2012-06-05-mysql-bsoad/index.md b/content/events/2012-06-05-mysql-bsoad/index.md deleted file mode 100644 index 2b93666..0000000 --- a/content/events/2012-06-05-mysql-bsoad/index.md +++ /dev/null @@ -1,35 +0,0 @@ -+++ -title = "Meetup on the 5th June, 2012 // Treffen am 5. Juni, 2012" -description = "June 2012 meetup featuring MySQL JSON/Map-Reduce by Ulf Wendel, BSOAD by Kore Nordmann, and guests from the IPC PHP Conference." -date = "2012-06-05" - -[taxonomies] -speaker = ["Ulf Wendel", "Kore Nordmann"] -topic = ["MySQL", "JSON", "JavaScript", "Map Reduce", "BSOAD", "IPC Conference", "HTTP"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* Ulf Wendel (Oracle): PoC: HTTP, JSON, JavaScript, Map & Reduce built-in to MySQL -* Kore Nordmann (Qafoo): [BSOAD](https://github.com/Qafoo/bsoad) -* Guests from the IPC PHP Conference in Berlin - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* Ulf Wendel (MySQL/Oracle): PoC: HTTP, JSON, JavaScript, Map & Reduce built-in to MySQL -* Kore Nordmann (Qafoo): [BSOAD](https://github.com/Qafoo/bsoad) -* Gäste von der IPC PHP Konferenz in Berlin - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch.- [Slides: 12_05_ipc_se_testen_state_of_the_art.pdf](12_05_ipc_se_testen_state_of_the_art.pdf) diff --git a/content/events/2012-07-03-irc-couchbase-persistence-hashing/2012-07-03_Couchbase_andext_couchbase_BEPHPUG.pdf b/content/events/2012-07-03-irc-couchbase-persistence-hashing/2012-07-03_Couchbase_andext_couchbase_BEPHPUG.pdf deleted file mode 100644 index c302326..0000000 Binary files a/content/events/2012-07-03-irc-couchbase-persistence-hashing/2012-07-03_Couchbase_andext_couchbase_BEPHPUG.pdf and /dev/null differ diff --git a/content/events/2012-07-03-irc-couchbase-persistence-hashing/index.md b/content/events/2012-07-03-irc-couchbase-persistence-hashing/index.md deleted file mode 100644 index 3f461e8..0000000 --- a/content/events/2012-07-03-irc-couchbase-persistence-hashing/index.md +++ /dev/null @@ -1,39 +0,0 @@ -+++ -title = "Meetup on the 3rd July, 2012 // Treffen am 3. Juli, 2012" -description = "July 2012 meetup featuring web-based IRC by Daniel Fahlke, password hashing & Couchbase by Jan Lehnardt, and transparent persistence by Nikolas Martens." -date = "2012-07-03" - -[taxonomies] -speaker = ["Daniel Fahlke", "Jan Lehnardt", "Nikolas Martens"] -topic = ["IRC", "Web Browser", "Password Hashing", "Couchbase", "Persistence", "Security", "NoSQL"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* Daniel Fahlke: Webbased IRC (including POC code) -* Jan Lehnardt: - * Password Hashing Best Practices - * Introduction to [ext/couchbase](http://pecl.php.net/package/couchbase) - [Slides](2012-07-03_Couchbase_andext_couchbase_BEPHPUG.pdf) -* Nikolas Martens: Walk the line - A relentless approach to transparent persistence - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* Daniel Fahlke: IRC für den Browser (Mit Beispiel-Code!) -* Jan Lehnardt: - * Passwörter richtig verschlüsseln - * Einführung in [ext/couchbase](http://pecl.php.net/package/couchbase) - [Slides](2012-07-03_Couchbase_andext_couchbase_BEPHPUG.pdf) -* Nikolas Martens: Walk the line - Ein kompromissloser Ansatz für transparente Persistenz - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch. \ No newline at end of file diff --git a/content/events/2012-08-07-cache-busting-composer/asset_fingerprinting_with_php_demo_2012-08-07.pdf b/content/events/2012-08-07-cache-busting-composer/asset_fingerprinting_with_php_demo_2012-08-07.pdf deleted file mode 100644 index 728ff60..0000000 Binary files a/content/events/2012-08-07-cache-busting-composer/asset_fingerprinting_with_php_demo_2012-08-07.pdf and /dev/null differ diff --git a/content/events/2012-08-07-cache-busting-composer/index.md b/content/events/2012-08-07-cache-busting-composer/index.md deleted file mode 100644 index 2af2e91..0000000 --- a/content/events/2012-08-07-cache-busting-composer/index.md +++ /dev/null @@ -1,37 +0,0 @@ -+++ -title = "Meetup on the 7th August, 2012 // Treffen am 7. August, 2012" -description = "August 2012 meetup featuring cache busting techniques by Michael Krenz and dependency management with Composer by Leander Damme." -date = "2012-08-07" - -[taxonomies] -speaker = ["Michael Krenz", "Leander Damme"] -topic = ["Cache Busting", "Asset Fingerprinting", "Composer", "Dependency Management", "Autoloading", "Performance"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* Michael Krenz: Cache Busting with PHP - [Slides](asset_fingerprinting_with_php_demo_2012-08-07.pdf) - * A short intro on "cache busting" or "asset fingerprinting", a technique from RoR that allows you to set far-future cache expiry dates for static files and still have the browser re-load them whenever they change. The same method can easily be used with PHP. -* Leander Damme: Dependency management with Composer - * Quick practical introduction to Composer: Managing your project dependencies, autoloading and installation. - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* Michael Krenz: Cache Busting mit PHP - [Slides](asset_fingerprinting_with_php_demo_2012-08-07.pdf) - * Kurze Einführung in "Cache-Busting" oder "Asset-Fingerprinting", ein aus RoR bekanntes Verfahren, bei dem statische Dateien so aufbereitet werden, dass sie trotz einem weit in der Zukunft liegenden Cache-Ablaufdatum bei jeder Änderung an der Datei erneut vom Browser geladen werden. Das Verfahren lässt sich leicht auf PHP übertragen. -* Leander Damme: Dependency management mit Composer - * Kurze praktische Einführung in Composer: Abhängigkeiten, Autoloading und installation. - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch. \ No newline at end of file diff --git a/content/events/2012-11-06-nginx-statsd-fortrabbit-libraries/fortrabbit-bephpug-2012-11-s.pdf b/content/events/2012-11-06-nginx-statsd-fortrabbit-libraries/fortrabbit-bephpug-2012-11-s.pdf deleted file mode 100644 index 1e3031f..0000000 Binary files a/content/events/2012-11-06-nginx-statsd-fortrabbit-libraries/fortrabbit-bephpug-2012-11-s.pdf and /dev/null differ diff --git a/content/events/2012-11-06-nginx-statsd-fortrabbit-libraries/index.md b/content/events/2012-11-06-nginx-statsd-fortrabbit-libraries/index.md deleted file mode 100644 index da610ee..0000000 --- a/content/events/2012-11-06-nginx-statsd-fortrabbit-libraries/index.md +++ /dev/null @@ -1,37 +0,0 @@ -+++ -title = "Meetup on the 6th November, 2012 // Treffen am 6. November, 2012" -description = "November 2012 meetup featuring Nginx & php-fpm by Volker Dusch, StatsD metrics by Till Klampäckel, fortrabbit PaaS introduction, and essential PHP libraries by Gordon Franke." -date = "2012-11-06" - -[taxonomies] -speaker = ["Volker Dusch", "Till Klampäckel", "fortrabbit", "Gordon Franke"] -topic = ["Nginx", "PHP-FPM", "StatsD", "Metrics", "Librato", "PaaS", "fortrabbit", "PHP Libraries", "Web Server", "Monitoring"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* [Volker Dusch](http://twitter.com/__edorian): Nginx and php-fpm — the webserver you might actually like -* [Till Klampäckel](http://twitter.com/klimpong): Using statsd to collect metrics in your applications, charting the results with Librato -* [fortrabbit](http://fortrabbit.com/): Introduction to the PHP PaaS - [Slides](fortrabbit-bephpug-2012-11-s.pdf) -* Gordon Franke: PHP libraries you should know - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* [Volker Dusch](http://twitter.com/__edorian): Nginx und php-fpm -* [Till Klampäckel](http://twitter.com/klimpong): Mit StatsD Metriken aus der Anwendungen sammeln, und mit Librato Graphen bauen -* [fortrabbit](http://fortrabbit.com/): Vorstellung der Plattform -* Gordon Franke: PHP Bibliotheken die man kennen sollte - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch. \ No newline at end of file diff --git a/content/events/2012-12-04-php55-dependency-injection-traffic-spikes/chluehr-brace_for_impact-bephpug_201212.pdf b/content/events/2012-12-04-php55-dependency-injection-traffic-spikes/chluehr-brace_for_impact-bephpug_201212.pdf deleted file mode 100644 index a060174..0000000 Binary files a/content/events/2012-12-04-php55-dependency-injection-traffic-spikes/chluehr-brace_for_impact-bephpug_201212.pdf and /dev/null differ diff --git a/content/events/2012-12-04-php55-dependency-injection-traffic-spikes/index.md b/content/events/2012-12-04-php55-dependency-injection-traffic-spikes/index.md deleted file mode 100644 index 46185d6..0000000 --- a/content/events/2012-12-04-php55-dependency-injection-traffic-spikes/index.md +++ /dev/null @@ -1,35 +0,0 @@ -+++ -title = "Meetup on the 4th December, 2012 // Treffen am 4. Dezember, 2012" -description = "December 2012 meetup featuring PHP 5.5 preview by David Soria Parra, Dependency Injection for beginners by Timon Schroeter, and handling traffic spikes by Christoph Lühr." -date = "2012-12-04" - -[taxonomies] -speaker = ["David Soria Parra", "Timon Schroeter", "Christoph Lühr"] -topic = ["PHP 5.5", "Dependency Injection", "Performance", "Traffic Spikes", "Scalability", "TV Advertising", "High Load"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* David Soria Parra: PHP 5.5 -* [Timon Schroeter](http://www.php-entwickler-berlin.de): Dependency Injection for Beginners -* Christoph Lühr: Brace for impact - how to survive TV ads - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* David Soria Parra: PHP 5.5 -* [Timon Schroeter](http://www.php-entwickler-berlin.de): Dependency Injection für Beginner -* Christoph Lühr: Wie überlebt meine Seite Trafficspitzen? - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch.- [Slides: chluehr-brace_for_impact-bephpug_201212.pdf](chluehr-brace_for_impact-bephpug_201212.pdf) diff --git a/content/events/2013-02-05-versioneye-architecture-phpunit/PHPUnit-Best-Practices-Fosdem-2013.pdf b/content/events/2013-02-05-versioneye-architecture-phpunit/PHPUnit-Best-Practices-Fosdem-2013.pdf deleted file mode 100644 index f79eea5..0000000 Binary files a/content/events/2013-02-05-versioneye-architecture-phpunit/PHPUnit-Best-Practices-Fosdem-2013.pdf and /dev/null differ diff --git a/content/events/2013-02-05-versioneye-architecture-phpunit/index.md b/content/events/2013-02-05-versioneye-architecture-phpunit/index.md deleted file mode 100644 index 44fe07f..0000000 --- a/content/events/2013-02-05-versioneye-architecture-phpunit/index.md +++ /dev/null @@ -1,35 +0,0 @@ -+++ -title = "Meetup on the 5th February, 2013 // Treffen am 5. Februar, 2013" -description = "February 2013 meetup featuring VersionEye dependency monitoring by Robert Reiz, PHP Application Architecture by Martin Holzhauer, and PHPUnit best practices by Volker Dusch." -date = "2013-02-05" - -[taxonomies] -speaker = ["Robert Reiz", "Martin Holzhauer", "Volker Dusch"] -topic = ["VersionEye", "Dependency Monitoring", "PHP Architecture", "Application Design", "PHPUnit", "Testing", "Best Practices"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* [Robert Reiz](http://robert-reiz.com): VersionEye -* [Martin Holzhauer](https://twitter.com/woodworker): PHP Application Architecture -* [Volker Dusch](https://twitter.com/__edorian): PHPUnit - Some Practices - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* [Robert Reiz](http://robert-reiz.com): VersionEye -* [Martin Holzhauer](https://twitter.com/woodworker): PHP Application Architecture -* [Volker Dusch](https://twitter.com/__edorian): PHPUnit - Some Practices - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch.- [Slides: PHPUnit-Best-Practices-Fosdem-2013.pdf](PHPUnit-Best-Practices-Fosdem-2013.pdf) diff --git a/content/events/2013-03-05-zf2-symfony-rdfa-templates/index.md b/content/events/2013-03-05-zf2-symfony-rdfa-templates/index.md deleted file mode 100644 index 59794b3..0000000 --- a/content/events/2013-03-05-zf2-symfony-rdfa-templates/index.md +++ /dev/null @@ -1,35 +0,0 @@ -+++ -title = "Meetup on the 5th March, 2013 // Treffen am 5. März, 2013" -description = "March 2013 meetup featuring Zend Framework 2 development by Michael Scholl, Symfony 2 forms & validators by Timon Schroeter, and RDFa template animation by Nikolas Martens." -date = "2013-03-05" - -[taxonomies] -speaker = ["Michael Scholl", "Timon Schroeter", "Nikolas Martens"] -topic = ["Zend Framework 2", "Application Development", "Symfony", "Forms", "Validators", "RDFa", "Template Animation", "Semantic Web"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* [Michael Scholl](http://sch0ll.de): Application development with Zend Framework 2 -* [Timon Schroeter](http://www.php-schulung.de): Introduction to Forms & Validators in Symfony 2 -* [Nikolas Martens](https://github.com/rtens): Template Animation using RDFa - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* [Michael Scholl](http://sch0ll.de): Anwendungen mit Zend Framework 2 entwickeln -* [Timon Schroeter](http://www.php-schulung.de): Einführung in Formulare und Validatoren in Symfony 2 -* [Nikolas Martens](https://github.com/rtens): Template Animationen mit RDFa - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch. \ No newline at end of file diff --git a/content/events/2013-04-02-laravel-vagrant-php/chluehr-vagrant_for_php-bephpug_201304.pdf b/content/events/2013-04-02-laravel-vagrant-php/chluehr-vagrant_for_php-bephpug_201304.pdf deleted file mode 100644 index 71efb37..0000000 Binary files a/content/events/2013-04-02-laravel-vagrant-php/chluehr-vagrant_for_php-bephpug_201304.pdf and /dev/null differ diff --git a/content/events/2013-04-02-laravel-vagrant-php/index.md b/content/events/2013-04-02-laravel-vagrant-php/index.md deleted file mode 100644 index 57a4ae9..0000000 --- a/content/events/2013-04-02-laravel-vagrant-php/index.md +++ /dev/null @@ -1,33 +0,0 @@ -+++ -title = "Meetup on the 2nd April, 2013 // Treffen am 2. April, 2013" -description = "April 2013 meetup featuring Laravel framework introduction by Franz Liedke and Vagrant for PHP development by Christoph Lühr." -date = "2013-04-02" - -[taxonomies] -speaker = ["Franz Liedke", "Christoph Lühr"] -topic = ["Laravel", "PHP Framework", "Vagrant", "Development Environment", "Virtualization", "DevOps"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* [Franz Liedke](http://www.develophp.org): Introduction to the Laravel framework -* Christoph Lühr: Rags to Riches - Vagrant for PHP - [Slides](chluehr-vagrant_for_php-bephpug_201304.pdf) - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* [Franz Liedke](http://www.develophp.org): Einführung in das Laravel framework -* Christoph Lühr: Rags to Riches - Vagrant for PHP - [Slides](chluehr-vagrant_for_php-bephpug_201304.pdf) - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch. \ No newline at end of file diff --git a/content/events/2013-05-07-bdd-tdd-testing/2013-05-07_BDD_to_the_point-Nikoas_Martens.pdf b/content/events/2013-05-07-bdd-tdd-testing/2013-05-07_BDD_to_the_point-Nikoas_Martens.pdf deleted file mode 100644 index 4bb6e90..0000000 Binary files a/content/events/2013-05-07-bdd-tdd-testing/2013-05-07_BDD_to_the_point-Nikoas_Martens.pdf and /dev/null differ diff --git a/content/events/2013-05-07-bdd-tdd-testing/index.md b/content/events/2013-05-07-bdd-tdd-testing/index.md deleted file mode 100644 index 1adb272..0000000 --- a/content/events/2013-05-07-bdd-tdd-testing/index.md +++ /dev/null @@ -1,31 +0,0 @@ -+++ -title = "Meetup on the 7th May, 2013 // Treffen am 7. Mai, 2013" -description = "May 2013 meetup featuring Behavior-Driven Development (BDD) as an evolution of Test-Driven Development (TDD) by Nikolas Martens." -date = "2013-05-07" - -[taxonomies] -speaker = ["Nikolas Martens"] -topic = ["BDD", "Behavior-Driven Development", "TDD", "Test-Driven Development", "Testing", "Software Development", "Best Practices"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## English - -* [Nikolas Martens](http://rtens.org): BDD - TDD done right - [Slides](2013-05-07_BDD_to_the_point-Nikoas_Martens.pdf) - -We meet at co.up as always, drinks are -available for a small fee. The meetup starts at 7pm, talks start at 7:30pm. - -Looking forward to seeing all of you. - -## Deutsch - -* [Nikolas Martens](http://rtens.org): BDD - das bessere TDD - [Slides](2013-05-07_BDD_to_the_point-Nikoas_Martens.pdf) - -Wie immer treffen wir uns bei co.up, -Getränke sind gegen ein kleines Entgelt zu haben. -Wir treffen uns um 19:00 Uhr, die Vorträge beginnen gegen 19:30 Uhr. - -Wir freuen uns auf euch. \ No newline at end of file diff --git a/content/events/2013-06-04-php-arduino-typo3-flow/index.md b/content/events/2013-06-04-php-arduino-typo3-flow/index.md deleted file mode 100644 index 116596a..0000000 --- a/content/events/2013-06-04-php-arduino-typo3-flow/index.md +++ /dev/null @@ -1,26 +0,0 @@ -+++ -title = "Meetup on the 4th of June, 2013" -description = "June 2013 meetup featuring PHP critique by Ole Michaelis, Arduino control with PHP by Thomas Weinert, and TYPO3 Flow by Robert Lemke." -date = "2013-06-04" - -[taxonomies] -speaker = ["Ole Michaelis", "Thomas Weinert", "Robert Lemke"] -topic = ["PHP", "Arduino", "Hardware Control", "TYPO3 Flow", "Framework", "PHP Criticism", "IoT"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: What's wrong with php? - -by [Ole Michaelis](https://www.linkedin.com/in/olemichaelis/) - -## Talk 2: Controlling Arduino with PHP - -15 minute talk exploring hardware control using PHP. - -by [Thomas Weinert](https://twitter.com/ThomasWeinert) - -## Talk 3: Typo3 Flow - -by [Robert Lemke](https://twitter.com/robertlemke) \ No newline at end of file diff --git a/content/events/2013-07-02-coding-standards-devtools-encodings/index.md b/content/events/2013-07-02-coding-standards-devtools-encodings/index.md deleted file mode 100644 index d5b9933..0000000 --- a/content/events/2013-07-02-coding-standards-devtools-encodings/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 2nd of July, 2013" -description = "July 2013 meetup featuring coding standards with PHPCS/PHPMD by Volker Dusch, developer tools by Martin Holzhauer, and character encodings by Christoph Lühr." -date = "2013-07-02" - -[taxonomies] -speaker = ["Volker Dusch", "Martin Holzhauer", "Christoph Lühr"] -topic = ["Coding Standards", "PHPCS", "PHPMD", "Quality Assurance", "Developer Tools", "Character Encoding", "Charsets"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Your (coding) standard matters - -A short discussion of current practices surrounding two of PHP's quality assurance tools: [PHPCS](http://pear.php.net/manual/en/package.php.php-codesniffer.php) and [PHPMD](http://phpmd.org/). Let's discuss what value they provide for your teams and how to configure them to your liking. - -by [Volker Dusch](https://twitter.com/__edorian) - -## Talk 2: Devtools - -Tools for the daily developer work. - -by [Martin Holzhauer](https://twitter.com/woodworker) - -## Talk 3: Character Building - -Fun with charsets and encodings. - -by [Christoph Lühr](https://twitter.com/chluehr) \ No newline at end of file diff --git a/content/events/2013-08-01-testing-logging-queuing/chris-hartjes-why-you-cant-test.pdf b/content/events/2013-08-01-testing-logging-queuing/chris-hartjes-why-you-cant-test.pdf deleted file mode 100644 index c881322..0000000 Binary files a/content/events/2013-08-01-testing-logging-queuing/chris-hartjes-why-you-cant-test.pdf and /dev/null differ diff --git a/content/events/2013-08-01-testing-logging-queuing/index.md b/content/events/2013-08-01-testing-logging-queuing/index.md deleted file mode 100644 index 655bbc4..0000000 --- a/content/events/2013-08-01-testing-logging-queuing/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 31st of July, 2013" -description = "August 2013 meetup featuring testing obstacles by Chris Hartjes, real-time logging with Logstash by Bastian Hofmann, and queuing with Bernard by Ulrich Kautz." -date = "2013-08-01" - -[taxonomies] -speaker = ["Chris Hartjes", "Bastian Hofmann", "Ulrich Kautz"] -topic = ["Testing", "PHP Testing", "Logging", "Real-Time", "Logstash", "Graylog2", "Queuing", "Bernard", "Task Offloading"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Why You Can't Test - -Chris Hartjes risks annoying his wife by giving a talk while on vacation, talking about 7 obstacles he sees towards testing your PHP code. - -by [Chris Hartjes](https://twitter.com/grmpyprogrammer) - -## Talk 2: Logging everything in Real-Time - -In this talk you'll see how you can build up a central log management solution with opensource tools like Logstash and Graylog2 to analyze all the log messages your application creates in real-time. - -by [Bastian Hofmann](https://twitter.com/BastianHofmann) - -## Talk 3: Hard work? I'll do it later. - -What is queuing and why it improves your life? Introduction to offloading tasks with the new Bernard queue. - -by [Ulrich Kautz](https://twitter.com/ukautz)- [Slides: chris-hartjes-why-you-cant-test.pdf](chris-hartjes-why-you-cant-test.pdf) diff --git a/content/events/2013-09-03-qb-extension-silex/index.md b/content/events/2013-09-03-qb-extension-silex/index.md deleted file mode 100644 index a538908..0000000 --- a/content/events/2013-09-03-qb-extension-silex/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 3rd of september, 2013" -description = "September 2013 meetup featuring QB extension for PHP performance by Chung Leong and Silex microframework by Volker Dusch." -date = "2013-09-03" - -[taxonomies] -speaker = ["Chung Leong", "Volker Dusch"] -topic = ["QB Extension", "Performance", "PHP Optimization", "Image Manipulation", "Silex", "Microframework", "Symfony Components"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: The QB extension: Performing computationally intensive tasks in PHP - -While PHP is an excellent language for building complex web application, it imposes certain limitations. Writing code that performs low-level, computationally intensive tasks in PHP is generally impractical--it'd simply be too slow. The QB extension addresses this particular weakness of PHP. By translating Zend opcodes and executing them through a statically typed virtual machine, QB offers an order-of-magnitude gain in performance. The added power allows PHP programmers do things they were unable to do before, such as complex pixel-level image manipulation. - -by [Chung Leong](https://github.com/chung-leong) - -## Talk 2: Silex - Why 'less' can be so much more - -A framework talk to fill the void - Still going to be fun :) - -by [Volker Dusch](https://twitter.com/__edorian) \ No newline at end of file diff --git a/content/events/2013-10-01-composer-plugins-tdd/index.md b/content/events/2013-10-01-composer-plugins-tdd/index.md deleted file mode 100644 index 4aee796..0000000 --- a/content/events/2013-10-01-composer-plugins-tdd/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 1st of October, 2013" -description = "October 2013 meetup featuring Composer plugin API by Till Klampäckel and TDD live coding session by Nikolas Martens." -date = "2013-10-01" - -[taxonomies] -speaker = ["Till Klampäckel", "Nikolas Martens"] -topic = ["Composer", "Plugin API", "Package Management", "TDD", "Test-Driven Development", "Live Coding", "Algorithms"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Extending composer - -Introducing composer's new plugin API with real-world use-cases. - -by [Till Klampäckel](https://twitter.com/klimpong) - -## Talk 2: Small steps - the magic of TDD - -In a live coding session, I will make an algorithmic problem solves itself using test-driven development. - -by [Nikolas Martens](http://rtens.org) \ No newline at end of file diff --git a/content/events/2013-11-06-cdn-solid-principles/index.md b/content/events/2013-11-06-cdn-solid-principles/index.md deleted file mode 100644 index 791d135..0000000 --- a/content/events/2013-11-06-cdn-solid-principles/index.md +++ /dev/null @@ -1,22 +0,0 @@ -+++ -title = "Meetup on the 6th of November, 2013" -description = "November 2013 meetup featuring CDN solutions (CloudFront, PageSpeed CDN) by Timon Schroeter and SOLID principles by Anthony Ferrara." -date = "2013-11-06" - -[taxonomies] -speaker = ["Timon Schroeter", "Anthony Ferrara"] -topic = ["CDN", "Content Delivery Network", "CloudFront", "PageSpeed CDN", "Performance", "SOLID Principles", "Software Design", "Architecture"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: CDNs can be free, cheap or expensive - -Content delivery networks used to be technically advanced but expensive solutions used by big corporations only. Nowadays there's players with cheap offers (like Amazon CloudFront) and even free offers (like Google's unlimited free beta of the Pagespeed CDN). This talk includes a live demo of how CloudFront and Pagespeed CDN are configured and a discussion of their respective pros and cons. Participants may want to apply for a free [Pagespeed CDN](https://developers.google.com/speed/pagespeed/service) invitation in advance, b.c. it takes a couple of days to be invited. - -by [Timon Schroeter](http://www.php-schulung.de/) - -## Talk 2: Don't Be Stupid, Grasp Solid - -by [Anthony Ferrara](https://twitter.com/ircmaxell) \ No newline at end of file diff --git a/content/events/2013-12-03-neo4j-json-schema/index.md b/content/events/2013-12-03-neo4j-json-schema/index.md deleted file mode 100644 index 45f826e..0000000 --- a/content/events/2013-12-03-neo4j-json-schema/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 3rd of December, 2013" -description = "December 2013 meetup featuring Neo4j graph database by Christophe Willemsen and JSON Schema validation by Anne-Julia Seitz." -date = "2013-12-03" - -[taxonomies] -speaker = ["Christophe Willemsen", "Anne-Julia Seitz"] -topic = ["Neo4j", "Graph Database", "NoSQL", "JSON Schema", "Validation", "Data Modeling", "PHP Libraries"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Highly connected data with Neo4j - -Introducing the Neo4j graph database and the available php libraries to use. - -by [Christophe Willemsen](https://twitter.com/ikwattro) - -## Talk 2: Validating JSON with JSON Schema - -Introduction to validation with JSON Schema and an implementation in PHP - -by [Anne-Julia Scheuermann](https://twitter.com/dazzlog) \ No newline at end of file diff --git a/content/events/2014-01-07-php-gtk-fishbowl/index.md b/content/events/2014-01-07-php-gtk-fishbowl/index.md deleted file mode 100644 index a68d222..0000000 --- a/content/events/2014-01-07-php-gtk-fishbowl/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 7th of January, 2014" -description = "January 2014 meetup featuring PHP-GTK GUI development by Daniel Fahlke and a Fishbowl discussion moderated by Till Klampäckel." -date = "2014-01-07" - -[taxonomies] -speaker = ["Daniel Fahlke", "Till Klampäckel"] -topic = ["PHP-GTK", "GUI Development", "Desktop Applications", "Fishbowl", "Discussion", "Community"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: PHP-GTK - It still exists - -What is GTK, how to get it working and how it looks. Also a look into the future of PHP GUI development. - -by [Daniel Fahlke aka Flyingmana](https://twitter.com/Flyingmana) - -## Talk 2: Fishbowl - -Let's do a Fishbowl! Topic to be discussed at the meet-up! - -by [Till Klampäckel](https://twitter.com/klimpong) \ No newline at end of file diff --git a/content/events/2014-02-04-abstract-machines-tdd-sudoku/index.md b/content/events/2014-02-04-abstract-machines-tdd-sudoku/index.md deleted file mode 100644 index 3f60379..0000000 --- a/content/events/2014-02-04-abstract-machines-tdd-sudoku/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 4th of February, 2014" -description = "February 2014 meetup featuring abstract machines and cellular automata by Igor Wiedler, and TDD Sudoku solver live coding by Nikolas Martens." -date = "2014-02-04" - -[taxonomies] -speaker = ["Igor Wiedler", "Nikolas Martens"] -topic = ["Abstract Machines", "Cellular Automata", "Turing Machines", "Computer Science", "TDD", "Live Coding", "Sudoku", "Algorithms"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Abstract Machines - -From cellular automata to turing machines... - -by [Igor Wiedler](https://twitter.com/igorwhiletrue) - -## Talk 2: Small Steps - The Magic of TDD (sudoku edition) - -Programming is magic! Watch live, as I make a [Sudoku solver](https://www.google.de/search?q=sudoku+tdd) jump out of an empty TDD hat. - -by [Nikolas Martens](http://rtens.org) \ No newline at end of file diff --git a/content/events/2014-03-04-php-framework-special/2014-03-04_Magento_as_a_framework.pdf b/content/events/2014-03-04-php-framework-special/2014-03-04_Magento_as_a_framework.pdf deleted file mode 100644 index d2f2731..0000000 Binary files a/content/events/2014-03-04-php-framework-special/2014-03-04_Magento_as_a_framework.pdf and /dev/null differ diff --git a/content/events/2014-03-04-php-framework-special/index.md b/content/events/2014-03-04-php-framework-special/index.md deleted file mode 100644 index 81c4a14..0000000 --- a/content/events/2014-03-04-php-framework-special/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "PHP Framework Special - Meetup on the 4th of March, 2014" -description = "March 2014 PHP Framework Special featuring Symfony2 by Eike Send, Magento as Framework by Daniel Fahlke, and Apigility API framework by Jörg Ohnheiser." -date = "2014-03-04" - -[taxonomies] -speaker = ["Eike Send", "Daniel Fahlke", "Jörg Ohnheiser"] -topic = ["PHP Frameworks", "Symfony", "MVC Framework", "Magento", "E-commerce Framework", "Apigility", "REST API", "RPC Services", "Zend Framework 2"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Symfony2 - -A brief introduction to Symfony2, the popular PHP MVC framework - -by [Eike Send](http://eike.se/nd) - -## Talk 2: Magento as a Framework - -A brief introduction to Magento, the popular e-commerce system, and why it is a very advanced framework - -by [Daniel Fahlke aka Flyingmana](https://twitter.com/Flyingmana) - -## Talk 3: Apigility - -A short overview of the REST and RPC services generator framework. Apigility is based on ZF2. - -by [Jörg Ohnheiser](https://twitter.com/ridculy)- [Slides: 2014-03-04_Magento_as_a_framework.pdf](2014-03-04_Magento_as_a_framework.pdf) diff --git a/content/events/2014-04-01-wtf-php-computers-april-fools/index.md b/content/events/2014-04-01-wtf-php-computers-april-fools/index.md deleted file mode 100644 index 39b98b2..0000000 --- a/content/events/2014-04-01-wtf-php-computers-april-fools/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 1st of April, 2014" -description = "April Fools 2014 meetup featuring WTF.php by Martin Holzhauer & Volker Dusch, computer fundamentals by Igor Wiedler, and PHP writing basics by Daniel Fahlke." -date = "2014-04-01" - -[taxonomies] -speaker = ["Martin Holzhauer", "Volker Dusch", "Igor Wiedler", "Daniel Fahlke"] -topic = ["WTF PHP", "PHP Quirks", "April Fools", "Computer Science", "Hardware", "PHP Basics", "Humor"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: WTF.php - -This is wy we love PHP! - -by [Martin Holzhauer](https://twitter.com/woodworker) & [Volker Dusch](https://twitter.com/__edorian) - -## Talk 2: Concrete Machines - -Computers!!! How do they work? - -by [Igor Wiedler](https://twitter.com/igorwhiletrue) - -## Talk 3: How to write PHP - -nothing more - -by [Daniel Fahlke aka Flyingmana](https://twitter.com/flyingmana) \ No newline at end of file diff --git a/content/events/2014-05-06-api-design-functional-programming/index.md b/content/events/2014-05-06-api-design-functional-programming/index.md deleted file mode 100644 index a603b10..0000000 --- a/content/events/2014-05-06-api-design-functional-programming/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 6th of May, 2014" -description = "May 2014 meetup featuring API design best practices by Lars Strojny and functional programming in PHP by Igor Wiedler." -date = "2014-05-06" - -[taxonomies] -speaker = ["Lars Strojny", "Igor Wiedler"] -topic = ["API Design", "REST API", "Best Practices", "Functional Programming", "PHP", "Immutability", "Higher-Order Functions"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: What makes a good API? - -Tips and tricks about API design. - -by [Lars Strojny](https://twitter.com/lstrojny) - -## Talk 2: Functional Programming in PHP - -Exploring functional programming concepts in PHP with practical examples. - -by [Igor Wiedler](https://twitter.com/igorwhiletrue) \ No newline at end of file diff --git a/content/events/2014-06-03-webrtc-elasticsearch-rest/index.md b/content/events/2014-06-03-webrtc-elasticsearch-rest/index.md deleted file mode 100644 index 6df03e7..0000000 --- a/content/events/2014-06-03-webrtc-elasticsearch-rest/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 3rd of June, 2014" -description = "June 2014 meetup featuring WebRTC real-time communication by Daniel Fahlke, Elasticsearch integration by Christoph Lühr, and REST API principles by Till Klampäckel." -date = "2014-06-03" - -[taxonomies] -speaker = ["Daniel Fahlke", "Christoph Lühr", "Till Klampäckel"] -topic = ["WebRTC", "Real-Time Communication", "Peer-to-Peer", "Elasticsearch", "Search", "Indexing", "REST API", "HTTP Methods"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: WebRTC - -Real-time peer-to-peer communication in the browser. - -by [Daniel Fahlke aka Flyingmana](https://twitter.com/Flyingmana) - -## Talk 2: Elasticsearch for PHP developers - -How to integrate powerful search capabilities into your PHP applications. - -by [Christoph Lühr](https://twitter.com/chluehr) - -## Talk 3: REST - more than GET and POST - -Understanding the full spectrum of HTTP methods and REST principles. - -by [Till Klampäckel](https://twitter.com/klimpong) \ No newline at end of file diff --git a/content/events/2014-07-01-react-async-streams/index.md b/content/events/2014-07-01-react-async-streams/index.md deleted file mode 100644 index a74e96e..0000000 --- a/content/events/2014-07-01-react-async-streams/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 1st of July, 2014" -description = "July 2014 meetup featuring ReactPHP asynchronous programming by Igor Wiedler and stream processing concepts by Christian Lück." -date = "2014-07-01" - -[taxonomies] -speaker = ["Igor Wiedler", "Christian Lück"] -topic = ["ReactPHP", "Asynchronous Programming", "Event Loop", "Streams", "Non-blocking I/O", "Server Programming"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: ReactPHP - -Building asynchronous applications in PHP with ReactPHP. - -by [Igor Wiedler](https://twitter.com/igorwhiletrue) - -## Talk 2: Streams everywhere - -Understanding streams and asynchronous data processing. - -by [Christian Lück](https://twitter.com/another_clue) \ No newline at end of file diff --git a/content/events/2014-08-05-security-json-api/index.md b/content/events/2014-08-05-security-json-api/index.md deleted file mode 100644 index 0acdbf4..0000000 --- a/content/events/2014-08-05-security-json-api/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 5th of August, 2014" -description = "August 2014 meetup featuring PHP security best practices by Anthony Ferrara and JSON API specification by Till Klampäckel." -date = "2014-08-05" - -[taxonomies] -speaker = ["Anthony Ferrara", "Till Klampäckel"] -topic = ["PHP Security", "Cryptography", "Password Hashing", "JSON API", "API Design", "REST", "Hypermedia"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Don't Screw Up Your Security - -PHP security fundamentals and common pitfalls to avoid. - -by [Anthony Ferrara](https://twitter.com/ircmaxell) - -## Talk 2: JSON API - -A specification for building APIs in JSON. - -by [Till Klampäckel](https://twitter.com/klimpong) \ No newline at end of file diff --git a/content/events/2014-09-02-vagrant-ansible-deployment/index.md b/content/events/2014-09-02-vagrant-ansible-deployment/index.md deleted file mode 100644 index 8ff6a18..0000000 --- a/content/events/2014-09-02-vagrant-ansible-deployment/index.md +++ /dev/null @@ -1,32 +0,0 @@ -+++ -title = "Meetup on the 2nd of September, 2014" -description = "September 2014 meetup featuring Vagrant development environments by Daniel Fahlke, Ansible deployment automation by Michael Lämmermeyer and Anne-Julia Seitz will give insights on why naming is considered hard." -date = "2014-09-02" - -[taxonomies] -speaker = ["Daniel Fahlke", "Michael Lämmermeyer", "Anne-Julia Seitz"] -topic = ["Vagrant", "Development Environment", "Virtualization", "Ansible", "Deployment", "Automation", "Configuration Management", "DevOps", "Naming Things"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Vagrant for PHP Development - -Setting up consistent development environments with Vagrant. - -by [Daniel Fahlke aka Flyingmana](https://twitter.com/Flyingmana) - -## Talk 2: Deployment with Ansible - -Automating application deployment and server configuration. - -by [Michael Lämmermeyer](https://twitter.com/lampmi) - -## Talk 3: Naming Things Considered Hard - -About creating meaning by giving a thing a context. - -Slides: [https://speakerdeck.com/dazz/nomen-est-omen-naming-things-considered-hard](https://speakerdeck.com/dazz/nomen-est-omen-naming-things-considered-hard) - -by Anne-Julia Seitz \ No newline at end of file diff --git a/content/events/2014-10-07-docker-microservices/2014-10-07_rapid_protyping-nikolas_martens.zip b/content/events/2014-10-07-docker-microservices/2014-10-07_rapid_protyping-nikolas_martens.zip deleted file mode 100644 index 7cbe986..0000000 Binary files a/content/events/2014-10-07-docker-microservices/2014-10-07_rapid_protyping-nikolas_martens.zip and /dev/null differ diff --git a/content/events/2014-10-07-docker-microservices/index.md b/content/events/2014-10-07-docker-microservices/index.md deleted file mode 100644 index 4448172..0000000 --- a/content/events/2014-10-07-docker-microservices/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 7th of October, 2014" -description = "October 2014 meetup featuring Docker containerization by Igor Wiedler and microservices architecture patterns by Christian Lück." -date = "2014-10-07" - -[taxonomies] -speaker = ["Igor Wiedler", "Christian Lück"] -topic = ["Docker", "Containerization", "Virtualization", "Microservices", "Architecture", "Service-Oriented Architecture", "Deployment"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Docker for PHP Applications - -Containerizing PHP applications with Docker. - -by [Igor Wiedler](https://twitter.com/igorwhiletrue) - -## Talk 2: Microservices Architecture - -Breaking down monoliths into manageable services. - -by [Christian Lück](https://twitter.com/another_clue)- [Slides: 2014-10-07_rapid_protyping-nikolas_martens.zip](2014-10-07_rapid_protyping-nikolas_martens.zip) diff --git a/content/events/2014-11-04-phpunit-mocking-testing/index.md b/content/events/2014-11-04-phpunit-mocking-testing/index.md deleted file mode 100644 index 62a61a6..0000000 --- a/content/events/2014-11-04-phpunit-mocking-testing/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 4th of November, 2014" -description = "November 2014 meetup featuring PHPUnit advanced testing by Sebastian Bergmann and mocking strategies by Volker Dusch." -date = "2014-11-04" - -[taxonomies] -speaker = ["Sebastian Bergmann", "Volker Dusch"] -topic = ["PHPUnit", "Unit Testing", "Test Automation", "Mocking", "Test Doubles", "Code Coverage", "Testing Best Practices"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: PHPUnit Best Practices - -Advanced testing techniques and strategies. - -by [Sebastian Bergmann](https://twitter.com/s_bergmann) - -## Talk 2: Mocking and Test Doubles - -When and how to use mocks effectively in your tests. - -by [Volker Dusch](https://twitter.com/__edorian) \ No newline at end of file diff --git a/content/events/2014-12-02-symfony-components-dependency-injection/index.md b/content/events/2014-12-02-symfony-components-dependency-injection/index.md deleted file mode 100644 index d418885..0000000 --- a/content/events/2014-12-02-symfony-components-dependency-injection/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 2nd of December, 2014" -description = "December 2014 meetup featuring Symfony Components by Christoph Lühr and advanced Dependency Injection patterns by Timon Schroeter." -date = "2014-12-02" - -[taxonomies] -speaker = ["Christoph Lühr", "Timon Schroeter"] -topic = ["Symfony Components", "Dependency Injection", "Service Container", "Design Patterns", "Inversion of Control", "Framework Architecture"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Symfony Components Deep Dive - -Exploring the building blocks of the Symfony framework. - -by [Christoph Lühr](https://twitter.com/chluehr) - -## Talk 2: Advanced Dependency Injection - -Beyond the basics: sophisticated DI patterns and practices. - -by [Timon Schroeter](http://www.php-schulung.de/) \ No newline at end of file diff --git a/content/events/2015-01-28-january-special-new-year/index.md b/content/events/2015-01-28-january-special-new-year/index.md deleted file mode 100644 index 8883cd1..0000000 --- a/content/events/2015-01-28-january-special-new-year/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "January Special - New Year Meetup on the 28th, 2015" -description = "January 2015 Special New Year meetup featuring community discussions, PHP trends review, and networking session." -date = "2015-01-28" - -[taxonomies] -speaker = ["Community"] -topic = ["New Year Special", "Community", "PHP Trends", "Networking", "Open Discussion", "Year Review"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Special Event: New Year Community Meetup - -A special New Year gathering for the Berlin PHP community to discuss trends, share experiences, and network. - -by Community \ No newline at end of file diff --git a/content/events/2015-02-03-profiling-performance-optimization/index.md b/content/events/2015-02-03-profiling-performance-optimization/index.md deleted file mode 100644 index a64a62e..0000000 --- a/content/events/2015-02-03-profiling-performance-optimization/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 3rd of February, 2015" -description = "February 2015 meetup featuring PHP profiling techniques by Lars Strojny and performance optimization strategies by Anthony Ferrara." -date = "2015-02-03" - -[taxonomies] -speaker = ["Lars Strojny", "Anthony Ferrara"] -topic = ["PHP Profiling", "Performance Optimization", "Benchmarking", "Memory Management", "CPU Optimization", "XDebug", "Blackfire"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Profiling PHP Applications - -Tools and techniques for identifying performance bottlenecks. - -by [Lars Strojny](https://twitter.com/lstrojny) - -## Talk 2: Performance Optimization Strategies - -Proven methods for making PHP applications faster. - -by [Anthony Ferrara](https://twitter.com/ircmaxell) \ No newline at end of file diff --git a/content/events/2015-03-03-elasticsearch-git-workflows/index.md b/content/events/2015-03-03-elasticsearch-git-workflows/index.md deleted file mode 100644 index 66e22e6..0000000 --- a/content/events/2015-03-03-elasticsearch-git-workflows/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 3rd of March, 2015" -description = "March 2015 meetup featuring advanced Elasticsearch usage by Christoph Lühr and Git workflow strategies by Daniel Fahlke." -date = "2015-03-03" - -[taxonomies] -speaker = ["Christoph Lühr", "Daniel Fahlke"] -topic = ["Elasticsearch", "Search Engine", "Full-Text Search", "Git", "Version Control", "Git Flow", "Branching Strategies", "Team Collaboration"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Advanced Elasticsearch - -Deep dive into search functionality and optimization. - -by [Christoph Lühr](https://twitter.com/chluehr) - -## Talk 2: Git Workflows for Teams - -Effective branching strategies and collaboration patterns. - -by [Daniel Fahlke aka Flyingmana](https://twitter.com/Flyingmana) \ No newline at end of file diff --git a/content/events/2015-04-07-psr7-http-middleware/index.md b/content/events/2015-04-07-psr7-http-middleware/index.md deleted file mode 100644 index 5a76dc5..0000000 --- a/content/events/2015-04-07-psr7-http-middleware/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 7th of April, 2015" -description = "April 2015 meetup featuring PSR-7 HTTP message interfaces by Igor Wiedler and middleware architecture patterns by Christian Lück." -date = "2015-04-07" - -[taxonomies] -speaker = ["Igor Wiedler", "Christian Lück"] -topic = ["PSR-7", "HTTP Message Interface", "PHP Standards", "Middleware", "HTTP Layer", "Request/Response", "Interoperability"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: PSR-7 HTTP Message Interface - -Understanding the new HTTP message standard for PHP. - -by [Igor Wiedler](https://twitter.com/igorwhiletrue) - -## Talk 2: Middleware Architecture - -Building flexible HTTP middleware layers. - -by [Christian Lück](https://twitter.com/another_clue) \ No newline at end of file diff --git a/content/events/2015-05-05-continuous-integration-deployment/index.md b/content/events/2015-05-05-continuous-integration-deployment/index.md deleted file mode 100644 index 988d717..0000000 --- a/content/events/2015-05-05-continuous-integration-deployment/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 5th of May, 2015" -description = "May 2015 meetup featuring Continuous Integration best practices by Volker Dusch and automated deployment pipelines by Michael Lämmermeyer." -date = "2015-05-05" - -[taxonomies] -speaker = ["Volker Dusch", "Michael Lämmermeyer"] -topic = ["Continuous Integration", "CI/CD", "Automated Testing", "Deployment Pipelines", "Jenkins", "Travis CI", "Build Automation", "DevOps"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Continuous Integration Best Practices - -Setting up effective CI workflows for PHP projects. - -by [Volker Dusch](https://twitter.com/__edorian) - -## Talk 2: Automated Deployment Pipelines - -From commit to production: automating the entire flow. - -by [Michael Lämmermeyer](https://twitter.com/lampmi) \ No newline at end of file diff --git a/content/events/2015-06-09-redis-caching-strategies/index.md b/content/events/2015-06-09-redis-caching-strategies/index.md deleted file mode 100644 index 3bc1aad..0000000 --- a/content/events/2015-06-09-redis-caching-strategies/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 9th of June, 2015" -description = "June 2015 meetup featuring Redis in-memory data structures by Till Klampäckel and advanced caching strategies by Lars Strojny." -date = "2015-06-09" - -[taxonomies] -speaker = ["Till Klampäckel", "Lars Strojny"] -topic = ["Redis", "In-Memory Database", "Caching", "Performance", "Data Structures", "Session Storage", "Cache Strategies"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Redis for PHP Developers - -Leveraging Redis for high-performance applications. - -by [Till Klampäckel](https://twitter.com/klimpong) - -## Talk 2: Advanced Caching Strategies - -Beyond basic caching: sophisticated approaches to speed. - -by [Lars Strojny](https://twitter.com/lstrojny) \ No newline at end of file diff --git a/content/events/2015-07-07-event-sourcing-cqrs/index.md b/content/events/2015-07-07-event-sourcing-cqrs/index.md deleted file mode 100644 index 6a132cd..0000000 --- a/content/events/2015-07-07-event-sourcing-cqrs/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 7th of July, 2015" -description = "July 2015 meetup featuring Event Sourcing architecture by Igor Wiedler and CQRS pattern implementation by Christian Lück." -date = "2015-07-07" - -[taxonomies] -speaker = ["Igor Wiedler", "Christian Lück"] -topic = ["Event Sourcing", "CQRS", "Domain-Driven Design", "Architecture Patterns", "Event Store", "Command Query Separation"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Event Sourcing in PHP - -Building applications with event-driven architecture. - -by [Igor Wiedler](https://twitter.com/igorwhiletrue) - -## Talk 2: CQRS Pattern - -Command Query Responsibility Segregation in practice. - -by [Christian Lück](https://twitter.com/another_clue) \ No newline at end of file diff --git a/content/events/2015-08-04-composer-package-development/index.md b/content/events/2015-08-04-composer-package-development/index.md deleted file mode 100644 index a733e1e..0000000 --- a/content/events/2015-08-04-composer-package-development/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 4th of August, 2015" -description = "August 2015 meetup featuring Composer package development by Daniel Fahlke and library design principles by Anthony Ferrara." -date = "2015-08-04" - -[taxonomies] -speaker = ["Daniel Fahlke", "Anthony Ferrara"] -topic = ["Composer", "Package Development", "Library Design", "Open Source", "Packagist", "Semantic Versioning", "API Design"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Creating Composer Packages - -Best practices for developing and distributing PHP packages. - -by [Daniel Fahlke aka Flyingmana](https://twitter.com/Flyingmana) - -## Talk 2: Library Design Principles - -Building reusable and maintainable PHP libraries. - -by [Anthony Ferrara](https://twitter.com/ircmaxell) \ No newline at end of file diff --git a/content/events/2015-09-01-php7-features-migration/index.md b/content/events/2015-09-01-php7-features-migration/index.md deleted file mode 100644 index e6ff8a2..0000000 --- a/content/events/2015-09-01-php7-features-migration/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 1st of September, 2015" -description = "September 2015 meetup featuring PHP 7 new features by Sebastian Bergmann and migration strategies by Volker Dusch." -date = "2015-09-01" - -[taxonomies] -speaker = ["Sebastian Bergmann", "Volker Dusch"] -topic = ["PHP 7", "Language Features", "Performance Improvements", "Migration", "Scalar Type Hints", "Return Types", "Null Coalescing"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: PHP 7 New Features - -Exploring the exciting new capabilities of PHP 7. - -by [Sebastian Bergmann](https://twitter.com/s_bergmann) - -## Talk 2: Migrating to PHP 7 - -Strategies for upgrading your applications. - -by [Volker Dusch](https://twitter.com/__edorian) \ No newline at end of file diff --git a/content/events/2015-10-06-monitoring-observability/index.md b/content/events/2015-10-06-monitoring-observability/index.md deleted file mode 100644 index c3dba9b..0000000 --- a/content/events/2015-10-06-monitoring-observability/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 6th of October, 2015" -description = "October 2015 meetup featuring application monitoring by Till Klampäckel and observability best practices by Lars Strojny." -date = "2015-10-06" - -[taxonomies] -speaker = ["Till Klampäckel", "Lars Strojny"] -topic = ["Application Monitoring", "Observability", "Metrics", "Logging", "Alerting", "Performance Monitoring", "APM", "New Relic"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Application Monitoring - -Keeping your PHP applications healthy in production. - -by [Till Klampäckel](https://twitter.com/klimpong) - -## Talk 2: Observability Best Practices - -Building systems that tell you what's wrong. - -by [Lars Strojny](https://twitter.com/lstrojny) \ No newline at end of file diff --git a/content/events/2015-11-03-graphql-api-evolution/index.md b/content/events/2015-11-03-graphql-api-evolution/index.md deleted file mode 100644 index ba65cf1..0000000 --- a/content/events/2015-11-03-graphql-api-evolution/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 3rd of November, 2015" -description = "November 2015 meetup featuring GraphQL introduction by Igor Wiedler and API evolution strategies by Christian Lück." -date = "2015-11-03" - -[taxonomies] -speaker = ["Igor Wiedler", "Christian Lück"] -topic = ["GraphQL", "API Design", "Query Language", "API Evolution", "Versioning", "Facebook Technology", "Data Fetching"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Introduction to GraphQL - -A new approach to API design and data fetching. - -by [Igor Wiedler](https://twitter.com/igorwhiletrue) - -## Talk 2: API Evolution Strategies - -Managing API changes without breaking clients. - -by [Christian Lück](https://twitter.com/another_clue) \ No newline at end of file diff --git a/content/events/2016-03-01-raml-doctrine-mongodb-http2/index.md b/content/events/2016-03-01-raml-doctrine-mongodb-http2/index.md deleted file mode 100644 index 3a3b09c..0000000 --- a/content/events/2016-03-01-raml-doctrine-mongodb-http2/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 1st of March, 2016" -description = "March 2016 meetup featuring RAML for API design, MongoDB with Doctrine, and HTTP/2 introduction." -date = "2016-03-01" - -[taxonomies] -speaker = ["Damijan Cavar", "Erik", "Bastian Hofmann"] -topic = ["RAML", "API Design", "RESTful APIs", "Doctrine", "MongoDB", "Symfony", "HTTP/2", "Web Development"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: RAML - -Designing RESTful APIs with RAML - -by [Damijan Cavar](https://twitter.com/cavar_si) - -## Talk 2: Doctrine and MongoDB (in Symfony) - -A short introduction how use MongoDB in Doctrine (and Symfony) - -by [Erik](https://twitter.com/ewnx01) - -## Talk 3: HTTP/2 Introduction - -Short introduction to HTTP/2 and what it changes for web development - -by [Bastian Hofmann](https://twitter.com/BastianHofmann) \ No newline at end of file diff --git a/content/events/2016-04-05-feature-toggles-cloudflare/index.md b/content/events/2016-04-05-feature-toggles-cloudflare/index.md deleted file mode 100644 index 34daf7e..0000000 --- a/content/events/2016-04-05-feature-toggles-cloudflare/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 5th of April, 2016" -description = "April 2016 meetup featuring feature toggles and Cloudflare for technical debt management." -date = "2016-04-05" - -[taxonomies] -speaker = ["Denis Brumann", "Iain Cambridge"] -topic = ["Feature Toggles", "Feature Flags", "Development Workflow", "Cloudflare", "CDN", "Technical Debt", "Performance"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Feature Toggles - -Preventing a mess when transitioning to a new feature - -by [Denis Brumann](https://twitter.com/dbrumann) - -## Talk 2: Cloudflare to the rescue - -How to use Cloudflare to bail yourself out of technical debt. - -by [Iain Cambridge](https://twitter.com/ircambridge) \ No newline at end of file diff --git a/content/events/2016-05-03-buzzwords-solid-nested-set/index.md b/content/events/2016-05-03-buzzwords-solid-nested-set/index.md deleted file mode 100644 index a95e7a8..0000000 --- a/content/events/2016-05-03-buzzwords-solid-nested-set/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 3rd of May, 2016" -description = "May 2016 meetup featuring buzzwords explanation, SOLID principles, and nested set optimization." -date = "2016-05-03" - -[taxonomies] -speaker = ["Iain Cambridge", "Jeroen De Dauw", "Dracony"] -topic = ["Buzzwords", "SOLID Principles", "Liskov Substitution Principle", "Nested Set", "Database Design", "Object-Oriented Design"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Buzzwords 101 - -A run through and explanations of some of the buzzwords used daily - -by [Iain Cambridge](https://twitter.com/ircambridge) - -## Talk 2: SOLID inheritance - -An introduction to the Liskov Substitution Principle - -by [Jeroen De Dauw](https://entropywins.wtf/) - -## Talk 3: Optimizing Nested Set - -Still better than Closure Table - -by [Dracony](https://twitter.com/dracony_gimp) \ No newline at end of file diff --git a/content/events/2016-06-07-use-case-driven-development/index.md b/content/events/2016-06-07-use-case-driven-development/index.md deleted file mode 100644 index 042c867..0000000 --- a/content/events/2016-06-07-use-case-driven-development/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "Meetup on the 7th of June, 2016" -description = "June 2016 meetup featuring use case driven development in Symfony framework." -date = "2016-06-07" - -[taxonomies] -speaker = ["Bartosz Zasada"] -topic = ["Use Case Driven Development", "Symfony", "Software Architecture", "Bundle Development", "Application Design"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Use Case Driven Development in Symfony - -Reflecting the use cases of applications in the code and introducing a bundle that will make it easier to do in Symfony. - -by [Bartosz Zasada](https://twitter.com/bamiz_pl) \ No newline at end of file diff --git a/content/events/2016-08-02-elk-stack-twital-docker/index.md b/content/events/2016-08-02-elk-stack-twital-docker/index.md deleted file mode 100644 index e380d85..0000000 --- a/content/events/2016-08-02-elk-stack-twital-docker/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 2nd of August, 2016" -description = "August 2016 meetup featuring ELK stack logging, Twital template engine, and Docker for development." -date = "2016-08-02" - -[taxonomies] -speaker = ["Erik", "Asmir Mustafic", "Pedro Gil"] -topic = ["ELK Stack", "Elasticsearch", "Logstash", "Kibana", "Logging", "Security", "Twital", "Template Engine", "Twig", "Docker", "Development Environment", "DevOps"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Logging with Elasticsearch Logstash Kibana in a secured (and complicated) server environment - -In this talk I want to present how my company is introducing the ELK-stack for logging in a secured environment with different hosting providers. I'll show you some of problems that occurred and how we solved it. - -by [Erik](https://twitter.com/ewnx01) - -## Talk 2: Twital template engine - -Feel power of Twig using an AngularJS-like syntax, keeping your templates XML valid and readable! - -by [Asmir Mustafic](https://twitter.com/goetas_asmir) - -## Talk 3: Docker For Development - -Brief introduction to Docker and how it can replace vagrant boxes for smooth development workflows. - -by [Pedro Gil](https://twitter.com/pgcandeias) \ No newline at end of file diff --git a/content/events/2016-10-04-soap-github-archive/index.md b/content/events/2016-10-04-soap-github-archive/index.md deleted file mode 100644 index b457329..0000000 --- a/content/events/2016-10-04-soap-github-archive/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 4th of October, 2016" -description = "October 2016 meetup featuring SOAP webservices client and GitHub Archive data analysis." -date = "2016-10-04" - -[taxonomies] -speaker = ["Asmir Mustafic", "Daniel Fahlke"] -topic = ["SOAP", "Web Services", "Legacy Systems", "SOAP Client", "GitHub Archive", "Data Analysis", "API Integration"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: SOAP is beautiful (again) - -Enjoy using legacy SOAP webservices with a brand new SOAP client - -by [Asmir Mustafic](https://twitter.com/goetas_asmir) - -## Talk 2: Parse the GithubArchive for Fun (improvised) - -What Data it has, where it comes from, and how to play with it. - -by Daniel Fahlke aka Flyingmana \ No newline at end of file diff --git a/content/events/2016-11-01-soap-siesta-orm-github-archive/201611_Parse_the_GithubArchive_for_Fun.pdf b/content/events/2016-11-01-soap-siesta-orm-github-archive/201611_Parse_the_GithubArchive_for_Fun.pdf deleted file mode 100644 index f6215cd..0000000 Binary files a/content/events/2016-11-01-soap-siesta-orm-github-archive/201611_Parse_the_GithubArchive_for_Fun.pdf and /dev/null differ diff --git a/content/events/2016-11-01-soap-siesta-orm-github-archive/index.md b/content/events/2016-11-01-soap-siesta-orm-github-archive/index.md deleted file mode 100644 index bc8b921..0000000 --- a/content/events/2016-11-01-soap-siesta-orm-github-archive/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 1st of November, 2016" -description = "November 2016 meetup featuring SOAP webservices, Siesta ORM - [Slides](siesta.pdf) for PHP7, and GitHub Archive analysis." -date = "2016-11-01" - -[taxonomies] -speaker = ["Asmir Mustafic", "Gregor Müller", "Daniel Fahlke"] -topic = ["SOAP", "Web Services", "Legacy Systems", "Siesta ORM - [Slides](siesta.pdf)", "PHP7", "ORM", "Stored Procedures", "GitHub Archive", "Data Analysis"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: SOAP is beautiful (again) - -Enjoy using legacy SOAP webservices with a brand new SOAP client - -by [Asmir Mustafic](https://twitter.com/goetas_asmir) - -## Talk 2: Siesta ORM - [Slides](siesta.pdf) for php7 - -Stored procedure based object relational mapper for php7 - -by [Gregor Müller](https://gperler.github.io) - -## Talk 3: Parse the GithubArchive for Fun - [Slides](201611_Parse_the_GithubArchive_for_Fun.pdf) (improvised) - -What Data it has, where it comes from, and how to play with it. - -by [Daniel Fahlke aka Flyingmana](https://twitter.com/flyingmana) \ No newline at end of file diff --git a/content/events/2016-11-01-soap-siesta-orm-github-archive/siesta.pdf b/content/events/2016-11-01-soap-siesta-orm-github-archive/siesta.pdf deleted file mode 100644 index f68c5ff..0000000 Binary files a/content/events/2016-11-01-soap-siesta-orm-github-archive/siesta.pdf and /dev/null differ diff --git a/content/events/2016-12-06-functional-programming-lizards-pumpkins-turbopy/index.md b/content/events/2016-12-06-functional-programming-lizards-pumpkins-turbopy/index.md deleted file mode 100644 index ab88949..0000000 --- a/content/events/2016-12-06-functional-programming-lizards-pumpkins-turbopy/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 6th of December, 2016" -description = "December 2016 meetup featuring functional programming in PHP, Lizards & Pumpkins e-commerce, and TURBOPY framework." -date = "2016-12-06" - -[taxonomies] -speaker = ["Kai Sassnowski", "Fabian Blechschmidt", "Johannes Reichardt"] -topic = ["Functional Programming", "FP Principles", "PHP", "E-commerce", "Lizards & Pumpkins", "Naming", "TURBOPY", "NoSQL", "Publishing Framework"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Functional Programming Principles in PHP - -Taking a look at common FP principles and if/how they can be applied to PHP. - -by [Kai Sassnowski](https://github.com/ksassnowski) - -## Talk 2: Solving the hardest problem in IT - -Introduction to [Lizards & Pumpkins](http://lizardsandpumpkins.com/) and techniques we are using and why. - -by [Fabian Blechschmidt](https://twitter.com/Fabian_ikono) - -## Talk 3: Vorstellung TURBOPY Framework - -Einführung in Architektur und Konzepte des noSQL Publishing Frameworks - -by [Johannes Reichardt](http://turbopy.org/) \ No newline at end of file diff --git a/content/events/2017-01-03-open-meetup/index.md b/content/events/2017-01-03-open-meetup/index.md deleted file mode 100644 index 60561a5..0000000 --- a/content/events/2017-01-03-open-meetup/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "Meetup on the 3rd of January, 2017" -description = "January 2017 open meetup with free slots available for community presentations." -date = "2017-01-03" - -[taxonomies] -speaker = ["Community"] -topic = ["Open Meetup", "Free Slots", "Community Presentations", "Networking"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Open Meetup - -All slots available for community talks - submit your presentation! - -by Community \ No newline at end of file diff --git a/content/events/2017-02-07-clean-architecture-silex-data-types/2017-02_Silex_2_and_user_support.pdf b/content/events/2017-02-07-clean-architecture-silex-data-types/2017-02_Silex_2_and_user_support.pdf deleted file mode 100644 index 73864af..0000000 Binary files a/content/events/2017-02-07-clean-architecture-silex-data-types/2017-02_Silex_2_and_user_support.pdf and /dev/null differ diff --git a/content/events/2017-02-07-clean-architecture-silex-data-types/index.md b/content/events/2017-02-07-clean-architecture-silex-data-types/index.md deleted file mode 100644 index 3609704..0000000 --- a/content/events/2017-02-07-clean-architecture-silex-data-types/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 7th of February, 2017" -description = "February 2017 meetup featuring Clean Architecture implementation, Silex 2, and complex data types modeling." -date = "2017-02-07" - -[taxonomies] -speaker = ["Jeroen De Dauw", "Daniel Fahlke", "Denis Brumann"] -topic = ["Clean Architecture", "Software Architecture", "Silex", "Microframework", "Data Types", "Modeling", "Persistence", "User Accounts"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Implementing the Clean Architecture - -Story of using the CC in an OS PHP project. [read the abstract](https://github.com/JeroenDeDauw/fun-architecture/blob/master/README.md) - -by [@JeroenDeDauw](https://www.entropywins.wtf/) from [@WikimediaDE](https://wikimedia.de) - -## Talk 2: Silex 2 - -Whats New, Whats different, how to implement User Accounts - -by [Daniel Fahlke aka @Flyingmana](https://twitter.com/Flyingmana) - -## Talk 3: A Beginner's guide to Complex Data Types - -An introduction on how to spot composite types hiding in your code and ways to model and persist them - -by [Denis Brumann](https://twitter.com/dbrumann)- [Slides: 2017-02_Silex_2_and_user_support.pdf](2017-02_Silex_2_and_user_support.pdf) diff --git a/content/events/2017-03-07-dependency-injection-docker-ci-lxd/index.md b/content/events/2017-03-07-dependency-injection-docker-ci-lxd/index.md deleted file mode 100644 index 6a68cf6..0000000 --- a/content/events/2017-03-07-dependency-injection-docker-ci-lxd/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 7th of March, 2017" -description = "Dependency Injection containers, Docker CI pipelines, and LXD system containers for PHP development" -date = "2017-03-07" - -[taxonomies] -speaker = ["Kai Sassnowski", "Bernd Alter", "David Sauer", "Christoph Lühr"] -topic = ["Dependency Injection", "Docker", "CI/CD", "LXD", "Containers", "DevOps"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Demystifying Dependency Injection Containers - -Taking a closer look at how DI-Containers work by writing our own. - -by [Kai Sassnowski](https://kai-sassnowski.com) - [Slides](https://github.com/ksassnowski/demystify-di-containers) - -## Talk 2: Dockerized CI-Pipeline for PHP Applications - -Introducing the VOTUM approach based on Gitlab-CI and Docker - -by [Bernd Alter](https://www.linkedin.com/in/bernd-alter-8a20b0122/) & [David Sauer](https://twitter.com/davedamoon) - -## Talk 3: LXD System Containers - -Virtualized PHP Environments - -by [Christoph Lühr](https://twitter.com/chluehr) - [Slides](https://speakerdeck.com/chluehr/lxd-system-containers-en) \ No newline at end of file diff --git a/content/events/2017-04-04-icehawk-statie-architecture-phpunit-selenium/index.md b/content/events/2017-04-04-icehawk-statie-architecture-phpunit-selenium/index.md deleted file mode 100644 index eb88a1b..0000000 --- a/content/events/2017-04-04-icehawk-statie-architecture-phpunit-selenium/index.md +++ /dev/null @@ -1,36 +0,0 @@ -+++ -title = "Meetup on the 4th of April, 2017" -description = "IceHawk PHP 7+ micro framework, Statie static sites, architecture kata, and PHPUnit with Selenium testing" -date = "2017-04-04" - -[taxonomies] -speaker = ["Holger Woltersdorf", "Tomas Votruba", "Frank Sons", "Ondrej Machulda"] -topic = ["IceHawk", "PHP 7", "Statie", "Static Sites", "Architecture", "PHPUnit", "Selenium", "Testing"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: IceHawk - a PHP 7+ micro framework - -An introduction of IceHawk and its CQRS approach for HTTP based web applications. - -by [Holger Woltersdorf](https://twitter.com/hollodotme) - -## Talk 2: Static Sites in PHP? Simple With Statie - -What to use to manage open-source websites, with community and PHP? Like [Pehapkari.cz](https://pehapkari.cz/)? **I will show a tool, that is easy to scale, use and explain - [Statie](https://github.com/Symplify/Statie)**. It will stay simple, I promise. Free "https" included. - -by [Tomas Votruba](https://www.tomasvotruba.cz/) - -## Talk 3: Architecture Kata - -How can we learn to create better architectures? - -by [Frank Sons](https://twitter.com/FrankS) - -## Talk 4: PHPUnit & Selenium made easy - -Not only unit tests but also end-to-end tests in real browser are important part of test automation and [test pyramid](https://martinfowler.com/bliki/TestPyramid.html) So let's have a look how to easily write and run Selenium functional tests using PHPUnit and [Steward](https://github.com/lmc-eu/steward). - -by [Ondrej Machulda](https://twitter.com/OndraM) \ No newline at end of file diff --git a/content/events/2017-06-06-microservices-docker-bus-factor/index.md b/content/events/2017-06-06-microservices-docker-bus-factor/index.md deleted file mode 100644 index edc067d..0000000 --- a/content/events/2017-06-06-microservices-docker-bus-factor/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 6th of June, 2017" -description = "Microservices lessons, Docker deployment workflows, and knowledge sharing in development teams" -date = "2017-06-06" - -[taxonomies] -speaker = ["Stephan Schulze", "Asmir Mustafic", "Yann Rabiller"] -topic = ["Microservices", "Docker", "Deployment", "Knowledge Sharing", "Team Management"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Microservices - -Lessons learned building for a 100 Mio revenue company - -by [Stephan Schulze](mailto:stephan.schulze@project-a.com) - -## Talk 2: Deploy your app with Docker - -Personal experience with Docker and workflow used to run collabout.com - -by [Asmir Mustafic](https://twitter.com/goetas_asmir) - -## Talk 3: The Bus Factor - -We will talk about how to share knowledge about a project within a team. - -by [Yann Rabiller](https://twitter.com/Einenlum) \ No newline at end of file diff --git a/content/events/2017-07-04-php-history-fastcgi-nextcloud/index.md b/content/events/2017-07-04-php-history-fastcgi-nextcloud/index.md deleted file mode 100644 index cbe71b3..0000000 --- a/content/events/2017-07-04-php-history-fastcgi-nextcloud/index.md +++ /dev/null @@ -1,28 +0,0 @@ -+++ -title = "Meetup on the 4th of July, 2017" -description = "PHP history and future, high performance FastCGI, and introduction to Nextcloud" -date = "2017-07-04" - -[taxonomies] -speaker = ["Ran Argaman", "Stephan Hohmann", "Arthur Schiwon"] -topic = ["PHP", "History", "FastCGI", "Performance", "Nextcloud", "Open Source"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: PHP - The past and the future - -A talk about the history of PHP as a technology, a programming language and a part of the whole technological infrastructure and the OSS world. - -by [Ran Argaman](mailto:ranware2200@yahoo.com) - -## Talk 2: High Performance FastCGI - -by Stephan Hohmann - -## Talk 3: Introducing Nextcloud - -and inviting you to its conference - -by [Arthur Schiwon](https://www.arthur-schiwon.de) \ No newline at end of file diff --git a/content/events/2017-08-01-tdd-phpactor-refactoring/index.md b/content/events/2017-08-01-tdd-phpactor-refactoring/index.md deleted file mode 100644 index 4069098..0000000 --- a/content/events/2017-08-01-tdd-phpactor-refactoring/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 1st of August, 2017" -description = "Test-Driven Development in action and lightweight refactoring with Phpactor for PHP development" -date = "2017-08-01" - -[taxonomies] -speaker = ["Kifah Abbad", "Daniel Leech"] -topic = ["TDD", "Testing", "Phpactor", "Refactoring", "Developer Tools", "PHP"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: TDD in Action - -History and concepts of TDD; why it is needed; Tools & integration examples. Audience: beginners+intermediate. - -by [Kifah Abbad](https://twitter.com/KifahAbbad) - -## Talk 2: Phpactor: Lightweight refactoring and intellisense - -Phpactor is a console application which works both as a standalone tool offering a Unix way of refactoring and introspecting your code, and as a lightweight intellisense (auto-completion etc.) solution for editors such as VIM. - -by [Daniel Leech](https://twitter.com/dantleech) \ No newline at end of file diff --git a/content/events/2017-11-07-rest-graphql-jms-serializer-business/index.md b/content/events/2017-11-07-rest-graphql-jms-serializer-business/index.md deleted file mode 100644 index b13bb32..0000000 --- a/content/events/2017-11-07-rest-graphql-jms-serializer-business/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 7th of November, 2017" -description = "REST vs GraphQL comparison, jms/serializer library updates, and PHP business case studies" -date = "2017-11-07" - -[taxonomies] -speaker = ["Marco Petersen", "Asmir Mustafic", "Martin Hlavac"] -topic = ["REST", "GraphQL", "JMS Serializer", "Business", "APIs", "Serialization"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: REST and GraphQL: What, How and Why - -What they are, how they differ and when to use each, or both. - -by [Marco Petersen](https://twitter.com/ocrampete16) - -## Talk 2: jms/serializer in 2017 - -jms/serializer is one of the most popular serialization libraries available for PHP with more than 14M downloads. This talk will present an overview of what is and how the library has changed in the last years. - -by [Asmir Mustafic](http://www.goetas.com) - -## Talk 3: PHP + Business = Money! - -PHP isn't cool anymore and that's why love it! I'll talk about how PHP helps us speed up the business feedback loops at Wayfair and what are the pros and cons for the big company. - -by [Martin Hlavac](https://twitter.com/m_hlavac) \ No newline at end of file diff --git a/content/events/2017-12-05-recruiting-microcaching/index.md b/content/events/2017-12-05-recruiting-microcaching/index.md deleted file mode 100644 index 9c62952..0000000 --- a/content/events/2017-12-05-recruiting-microcaching/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 5th of December, 2017" -description = "Developer recruiting strategies and microcaching performance techniques" -date = "2017-12-05" - -[taxonomies] -speaker = ["Daniel Fahlke", "Stephan Hohmann"] -topic = ["Recruiting", "Developers", "Microcaching", "Performance", "Career"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Recruiting, Recruiter, and how to find Developers - -Learn about all sides of the table, and how to solve this problem - -by [Daniel Fahlke](https://twitter.com/Flyingmana) - -## Talk 2: Microcaching - -For when all else fails … - -by [Stephan Hohmann](mailto:webmaster@dasourcerer.net) \ No newline at end of file diff --git a/content/events/2018-02-06-vpn-value-objects-swoole/index.md b/content/events/2018-02-06-vpn-value-objects-swoole/index.md deleted file mode 100644 index 789baea..0000000 --- a/content/events/2018-02-06-vpn-value-objects-swoole/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 6th of Feb, 2018" -description = "VPN services with PHP, value objects for data integrity, and asynchronous PHP with Swoole" -date = "2018-02-06" - -[taxonomies] -speaker = ["François Kooman", "Martin Hlavac", "Christoph Lühr"] -topic = ["VPN", "Security", "Value Objects", "Swoole", "Async", "PHP"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Let's Connect - -Operate your own free software VPN service. From development to production deployment (with PHP). - -by [François Kooman](https://twitter.com/fkooman) - [Slides](https://helium.tuxed.net/fkooman/presentations/LC/) - -## Talk 2: ValueObjects - -Simple objects that let us pass value and type together throughout out codebase, making the data integrity issues thing of the past. - -by [Martin Hlavac](https://twitter.com/m_hlavac) - [Slides](https://docs.google.com/presentation/d/1vIzo_aGb9gEakSlODXFGWlYSi8Jdqrl0yioDjS8DFw4/edit#slide=id.g32cb774ba8_0_0) - -## Talk 3: Teaser: Swoole in 5 Minutes - -Blazingly-Fast, Event-Driven, Asynchronous PHP - -by [Christoph Lühr](https://twitter.com/chluehr) - [Slides](https://speakerdeck.com/chluehr/swoole-in-5-minutes-en) \ No newline at end of file diff --git a/content/events/2018-03-06-career-jmeter-scs-lumen/index.md b/content/events/2018-03-06-career-jmeter-scs-lumen/index.md deleted file mode 100644 index 4bbde9c..0000000 --- a/content/events/2018-03-06-career-jmeter-scs-lumen/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 6th of Mar, 2018" -description = "Finding PHP positions, J-Meter with PHP pipelines, and Self-contained Systems with Lumen" -date = "2018-03-06" - -[taxonomies] -speaker = ["Alexander Kley", "Kai Niehues", "Daniel Leech", "Sebastian Sellmeier"] -topic = ["Career", "Job Search", "J-Meter", "Performance Testing", "SCS", "Lumen", "Architecture"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: How to find the best PHP position - -... which fits your skills perfect - -by Alexander Kley & Kai Niehues - -## Talk 2: Creating a J-Meter - -with Pipelines and Generators in PHP - -by [Daniel Leech](https://twitter.com/dantleech) - -## Talk 3: Self-contained System (SCS) - -... with a practical example (based on Lumen) - -by [Sebastian Sellmeier](https://twitter.com/iSebTM) \ No newline at end of file diff --git a/content/events/2018-04-03-devops-symfony-flex-code-reviews/2018_04_03-devops_culture_lean_development.pdf b/content/events/2018-04-03-devops-symfony-flex-code-reviews/2018_04_03-devops_culture_lean_development.pdf deleted file mode 100644 index 9486f54..0000000 Binary files a/content/events/2018-04-03-devops-symfony-flex-code-reviews/2018_04_03-devops_culture_lean_development.pdf and /dev/null differ diff --git a/content/events/2018-04-03-devops-symfony-flex-code-reviews/index.md b/content/events/2018-04-03-devops-symfony-flex-code-reviews/index.md deleted file mode 100644 index 04ce44b..0000000 --- a/content/events/2018-04-03-devops-symfony-flex-code-reviews/index.md +++ /dev/null @@ -1,28 +0,0 @@ -+++ -title = "Meetup on the 3rd of April, 2018" -description = "DevOps culture and lean development, Symfony Flex introduction, and code review best practices" -date = "2018-04-03" - -[taxonomies] -speaker = ["Stephan Schulze", "Sebastian Sellmeier", "Erik Witthauer"] -topic = ["DevOps", "Lean Development", "Symfony Flex", "Code Reviews", "Best Practices"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: DevOps Culture - -... and Lean Software development - -by [Stephan Schulze](https://twitter.com/nahpeps) - -## Talk 2: Symfony Flex - Introduction - -Basic's + Howto private Recipe Server - -by [Sebastian Sellmeier](https://twitter.com/iSebTM) - -## Talk 3: How code reviews should not be done - -by [Erik Witthauer](https://twitter.com/ewnx01)- [Slides: 2018_04_03-devops_culture_lean_development.pdf](2018_04_03-devops_culture_lean_development.pdf) diff --git a/content/events/2018-06-05-oop-testable-code-rector/index.md b/content/events/2018-06-05-oop-testable-code-rector/index.md deleted file mode 100644 index e48f028..0000000 --- a/content/events/2018-06-05-oop-testable-code-rector/index.md +++ /dev/null @@ -1,36 +0,0 @@ -+++ -title = "Meetup on the 5th of June, 2018" -description = "Object-oriented programming primer, writing testable code, and automated upgrades with Rector" -date = "2018-06-05" - -[taxonomies] -speaker = ["Marco Petersen", "Martin Hlavac", "Tomas Votruba"] -topic = ["OOP", "Testing", "Testable Code", "PHPUnit", "Rector", "Code Upgrades"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: How to OOP - -A primer for novice developers - -by [Marco Petersen](https://twitter.com/ocrampete16) - -## Talk 2: Writing Testable Code - -Practical talk about what is a testable code and how to write it. - -We will go though multiple examples of not testable code, make it testable and finally write phpunit tests together. - -by [Martin Hlavac](http://mhlavac.net/) - -## Talk 3: Instant Upgrades with Rector - -Before composer, we downloaded packages manually. But how do you upgrade to newer framework version? Still manually? - -In non-PHP world, Google and Facebook already use such instant upgrade tools. Thanks to nikic/php-parser a door opened in PHP for such a tool ...and Rector was born. - -I'll show you how Rector handles 80 % of boring upgrades for you - in 1 CLI command. - -by [Tomas Votruba](https://www.tomasvotruba.cz/) \ No newline at end of file diff --git a/content/events/2018-07-03-symfony-flex-php-next-women-it/index.md b/content/events/2018-07-03-symfony-flex-php-next-women-it/index.md deleted file mode 100644 index 031372a..0000000 --- a/content/events/2018-07-03-symfony-flex-php-next-women-it/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 3rd of July, 2018" -description = "Migrating to Symfony Flex, future PHP features, and women in IT history" -date = "2018-07-03" - -[taxonomies] -speaker = ["Denis Brumann", "Martin Holzhauer", "Daniel Fahlke"] -topic = ["Symfony Flex", "Migration", "PHP", "Future Features", "Women in IT", "Diversity"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Migrating to Symfony Flex - -A quick walkthrough for upgrading your Symfony 2/3 application to the new Flex structure - -by [Denis Brumann](https://twitter.com/dbrumann) - -## Talk 2: PHP Next - -What will be hot and new in PHP! - -by [Martin Holzhauer](https://twitter.com/woodworker) - -## Talk 3: Woman in IT - -A History 101 - -by [Daniel Fahlke](https://twitter.com/Flyingmana) \ No newline at end of file diff --git a/content/events/2018-08-07-frameworks-graphql-cqrs-event-sourcing/index.md b/content/events/2018-08-07-frameworks-graphql-cqrs-event-sourcing/index.md deleted file mode 100644 index f91eec8..0000000 --- a/content/events/2018-08-07-frameworks-graphql-cqrs-event-sourcing/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 7th of August, 2018" -description = "Framework criticisms, GraphQL code generation, and CQRS with Event Sourcing in PHP" -date = "2018-08-07" - -[taxonomies] -speaker = ["Damnjan Jovanovic", "Aleksandr Obukhov", "Marcelo Santos"] -topic = ["Frameworks", "OOP", "GraphQL", "Code Generation", "CQRS", "Event Sourcing"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Why frameworks suck - -How PHP frameworks violates OOP and make our code so much bound to the framework - -by [Damnjan Jovanovic](https://twitter.com/damnjan) - -## Talk 2: GraphQL and code generation - -How code generation helps us at AMBOSS to keep our GraphQL API implementation consistent to schema definition - -by [Aleksandr Obukhov](https://twitter.com/dclg_en), Lead Backend Engineer at AMBOSS GmbH - -## Talk 3: CQRS and Event Sourcing with PHP - -An overview of the benefits of CQRS and Event Sourcing. An alternative to typical relational database model. - -by [Marcelo Santos](https://twitter.com/marcelsud) \ No newline at end of file diff --git a/content/events/2018-09-04-wordpress-laravel-refactoring/index.md b/content/events/2018-09-04-wordpress-laravel-refactoring/index.md deleted file mode 100644 index 10658e9..0000000 --- a/content/events/2018-09-04-wordpress-laravel-refactoring/index.md +++ /dev/null @@ -1,26 +0,0 @@ -+++ -title = "Meetup on the 4th of September, 2018" -description = "High performance WordPress development and migrating legacy PHP to Laravel" -date = "2018-09-04" - -[taxonomies] -speaker = ["Philip Bennett", "Christopher Fuchs"] -topic = ["WordPress", "Performance", "Laravel", "Legacy Code", "Refactoring", "Migration"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Ascending to the Rank of WordPress Developer - -Achieving high performance with technology agnostic component driven development. - -by [Philip Bennett](https://twitter.com/phil_bennett) - -## Talk 2: From Legacy To Laravel: A Refactoring Journey - -So you have a large, often messy, sometimes convoluted legacy PHP code base. There's no framework, no routing, no templates. Hard to maintain, even harder to extend. - -So, how do you clean up your act? A complete rewrite? Almost certainly doomed to fail at a startup with limited resources, financial pressure and endless feature requests. Extract things step by step? Really hard with an entangled code base without sane boundaries. - -by Christopher Fuchs (ready2order) \ No newline at end of file diff --git a/content/events/2018-10-02-cancelled-meetup/index.md b/content/events/2018-10-02-cancelled-meetup/index.md deleted file mode 100644 index 05c1dd5..0000000 --- a/content/events/2018-10-02-cancelled-meetup/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "Meetup on the 2nd of October, 2018" -description = "Meetup cancelled due to lack of talks - community engagement needed" -date = "2018-10-02" - -[taxonomies] -speaker = [] -topic = ["Cancelled", "Community"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Meetup Cancelled - -October meetup was cancelled due to lack of talks. - -The community was encouraged to submit talks for future meetups. \ No newline at end of file diff --git a/content/events/2018-11-06-open-meetup/index.md b/content/events/2018-11-06-open-meetup/index.md deleted file mode 100644 index 689bf47..0000000 --- a/content/events/2018-11-06-open-meetup/index.md +++ /dev/null @@ -1,16 +0,0 @@ -+++ -title = "Meetup on the 6th of November, 2018" -description = "Open meetup with networking and discussion opportunities" -date = "2018-11-06" - -[taxonomies] -speaker = [] -topic = ["Open Meetup", "Networking"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Open Meetup - -This meetup had open slots available for community members to present or network. No specific talks were scheduled for this event. \ No newline at end of file diff --git a/content/events/2018-12-04-tracy-enums-phpstan/index.md b/content/events/2018-12-04-tracy-enums-phpstan/index.md deleted file mode 100644 index 6a9a586..0000000 --- a/content/events/2018-12-04-tracy-enums-phpstan/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 4th of December, 2018" -description = "Tracy debugging tool, modern PHP enumerations, and PHPStan's type system internals" -date = "2018-12-04" - -[taxonomies] -speaker = ["David Grudl", "Jan Kuchař", "Jan Tvrdík"] -topic = ["Tracy", "Debugging", "Enums", "PHPStan", "Static Analysis", "Type System"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Tracy: an addictive tool to ease debugging - -Log, dump and visualize errors, debug AJAX requests or automatically fix typos in your code with a single click - Demo included! - -by [David Grudl](https://twitter.com/DavidGrudl) - -## Talk 2: Enumerating behaviour: End of ifs and switches in PHP? - -Current PHP enumerations are outdated for usage in domain models. Is there something better? - -by [Jan Kuchař](https://twitter.com/honzakuchar) - -## Talk 3: PHPStan Under the Hood - -Close look at PHPStan's type system and how does it utilize trinary logic to reason about many dynamic aspects of PHP. - -by [Jan Tvrdík](https://twitter.com/JanTvrdik) \ No newline at end of file diff --git a/content/events/2019-02-05-bloom-filters-aws-lambda/index.md b/content/events/2019-02-05-bloom-filters-aws-lambda/index.md deleted file mode 100644 index d714bb8..0000000 --- a/content/events/2019-02-05-bloom-filters-aws-lambda/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 5th of February, 2019" -description = "Bloom filters for big data and getting started with PHP on AWS Lambda" -date = "2019-02-05" - -[taxonomies] -speaker = ["Asmir Mustafic", "Thomas Bley"] -topic = ["Bloom Filters", "Big Data", "AWS Lambda", "Serverless", "PHP"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Bloom filters, PHP and Big data - -Discover what are Bloom-Filters and how can they be used for big data computation - -by [Asmir Mustafic](https://twitter.com/goetas_asmir) - -## Talk 2: Getting started with PHP on AWS Lambda - -A small introduction to getting started with PHP on AWS Lambda and some usage scenarios - -by [Thomas Bley](https://twitter.com/thbley) \ No newline at end of file diff --git a/content/events/2019-03-05-crdt-api-gateway-crossword/index.md b/content/events/2019-03-05-crdt-api-gateway-crossword/index.md deleted file mode 100644 index 197e12e..0000000 --- a/content/events/2019-03-05-crdt-api-gateway-crossword/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 5th of March, 2019" -description = "CRDT distributed systems, monolith to API gateway transformation, and AI-powered crossword generation" -date = "2019-03-05" - -[taxonomies] -speaker = ["Alessandro Balasco", "Hafiz Abdul Rehman", "Marco Hanczuch"] -topic = ["CRDT", "Distributed Systems", "API Gateway", "Monolith", "AI", "Crossword", "PHP"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: CRDT G-Counter - -...or how can you build a small distributed system with PHP - -by [Alessandro Balasco](https://github.com/palicao) - -## Talk 2: Monolith turns API Gateway - -How we converted our legacy monolith application into our modern API Gateway. - -by [Hafiz Abdul Rehman](https://twitter.com/har256b) - -## Talk 3: Crossword generator - the beginning of AI? - -How to start building a crossword generator in PHP. - -by [Marco Hanczuch](https://www.xing.com/profile/Marco_Hanczuch/portfolio) \ No newline at end of file diff --git a/content/events/2019-05-07-symfony-flex-contract-testing-behat/index.md b/content/events/2019-05-07-symfony-flex-contract-testing-behat/index.md deleted file mode 100644 index 72be9be..0000000 --- a/content/events/2019-05-07-symfony-flex-contract-testing-behat/index.md +++ /dev/null @@ -1,41 +0,0 @@ -+++ -title = "Meetup on the 7th of May, 2019" -description = "Advanced Symfony Flex, consumer-driven contract testing, and BDD API testing with Behat" -date = "2019-05-07" - -[taxonomies] -speaker = ["Sebastian Sellmeier", "Eduardo Iriarte", "Stefan Adolf"] -topic = ["Symfony Flex", "Contract Testing", "BDD", "Behat", "API Testing", "Testing"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Symfony Flex - Reloaded - -Since the start of Symfony Flex several things changed. I will give you a short overview about Symfony Flex, the features and why it is cool to use it! In the end, we will create our own recipe and have a look at the different possibilities to publish recipes. - -by [Sebastian Sellmeier](https://twitter.com/iSebTM) - -## Talk 2: Consumer-Driven Contract Testing - -What are contracts? Who are my consumers? Does my service solves problems as requested? - -Reliable communication paths between applications are key in a distributed service architechture. While more and more agility leads to evolution and transformation of software and products, it is still required to keep an eye on compatibility and consumer requirements ...but what if they change? - -I would like to introduce you this powerful framework and show you how it can help to ensure the development of sustainable APIs. - -by [Eduardo Iriarte](https://twitter.com/eddiriarte), Software Engineer @ Ratepay GmbH - -## Talk 3: Test drive your API with functional tests in Behat - -While there are many test tools that guarantee the health of code units, only BDD oriented test scenarios ensure that also humans understand what's going on in your application. We're using Behat to write feature tests for our api-platform based API and it saved our life on Friday night deployments more than once. - -In this talk Stefan demonstrates how: -- Behat is wired into a Symfony application -- to write database driven tests that don't interfere with each other -- to issue requests to the API and check their sideeffects -- mock a JWT authentication scheme -- write reusable context classes - -by [Stefan Adolf](https://twitter.com/stadolf), Developer Ambassador @ Turbine Kreuzberg \ No newline at end of file diff --git a/content/events/2019-06-04-git-fu-iterators-null-arrays/2019-06-Alexander-Guz-phparrays.pptx b/content/events/2019-06-04-git-fu-iterators-null-arrays/2019-06-Alexander-Guz-phparrays.pptx deleted file mode 100644 index 1760d72..0000000 Binary files a/content/events/2019-06-04-git-fu-iterators-null-arrays/2019-06-Alexander-Guz-phparrays.pptx and /dev/null differ diff --git a/content/events/2019-06-04-git-fu-iterators-null-arrays/20190604-git-fu-phpugbe.pdf b/content/events/2019-06-04-git-fu-iterators-null-arrays/20190604-git-fu-phpugbe.pdf deleted file mode 100644 index 84e5de4..0000000 Binary files a/content/events/2019-06-04-git-fu-iterators-null-arrays/20190604-git-fu-phpugbe.pdf and /dev/null differ diff --git a/content/events/2019-06-04-git-fu-iterators-null-arrays/index.md b/content/events/2019-06-04-git-fu-iterators-null-arrays/index.md deleted file mode 100644 index 4970578..0000000 --- a/content/events/2019-06-04-git-fu-iterators-null-arrays/index.md +++ /dev/null @@ -1,36 +0,0 @@ -+++ -title = "Meetup on the 4th of June, 2019" -description = "Git Fu development mastery, PHP iterators and generators, null alternatives, and array data structures" -date = "2019-06-04" - -[taxonomies] -speaker = ["Sebastian", "Jeroen De Dauw", "Damnjan Jovanovic", "Alexander Guz"] -topic = ["Git", "Development Workflow", "Iterators", "Generators", "Null Pattern", "Data Structures", "Arrays"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Git Fu Development - -Everybody was Git Fu developing, those bugs came fast as lightning. In fact it was a little bit frightening, but they fought with expert rebasing. There were funky Developers from funky everywhere. They were merging bend up, they where merging bend down. It is a special developer art, and everybody knew their part. For my friend, ain't your head is detached. Then im guiding you to a clean state. Everybody was Git Fu developing, those problems where solved fast as lightning. Want to sing along and master your Git Fu. Listen to this lecture of sensei Sebastian - -by [Sebastian](https://twitter.com/movetodevnull) - [Slides](20190604-git-fu-phpugbe.pdf) - -## Talk 2: Iterators and Generators - -An introduction to Iterators and Generators in PHP including tips and examples. - -by [Jeroen De Dauw](https://www.entropywins.wtf) - [Slides](https://jeroendedauw.github.io/php-iterators-and-generators/#/) - -## Talk 3: NOT NULL - -Null in PHP. How we get used to null, what is alternatives, and why we should look at the alternative for god sake. Null object pattern, exceptions, polymorphism and other alternative ways to deal with nothing. - -by [Damnjan Jovanovic](https://twitter.com/damnjan) - [Slides](https://docs.google.com/presentation/d/1uKvCSWdsl6VNKlmFbEDFJWChdZBz1EBQx0aH9086XD4/edit?usp=sharing) - -## Talk 4: Alternative(s) to PHP arrays - -DataStructures extenstion as replacement for PHP arrays. - -by Alexander Guz - [Slides](2019-06-Alexander-Guz-phparrays.pptx) \ No newline at end of file diff --git a/content/events/2019-07-02-ports-adapters-symfony-gdb/index.md b/content/events/2019-07-02-ports-adapters-symfony-gdb/index.md deleted file mode 100644 index 1679d8a..0000000 --- a/content/events/2019-07-02-ports-adapters-symfony-gdb/index.md +++ /dev/null @@ -1,30 +0,0 @@ -+++ -title = "Meetup on the 2nd of July, 2019" -description = "Ports and Adapters architecture, Symfony 4.3 features, and advanced PHP debugging with GDB" -date = "2019-07-02" - -[taxonomies] -speaker = ["Zvonimir Spajic", "Hafiz Abdul Rehman", "Martin Holzhauer"] -topic = ["Ports and Adapters", "Architecture", "Symfony", "GDB", "Debugging", "PHP"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Ports and Adapters 101 - -Introduction to Ports and Adapters architecture - -by [Zvonimir Spajic](https://twitter.com/konrad_126) - -## Talk 2: What's new in Symfony 4.3 - -Symfony 4.3 is out let's have a look what new features and components it brought. - -by [Hafiz Abdul Rehman](https://twitter.com/har256b) - -## Talk 3: PHP Debugging - Going Deeper with GDB - -GDB for PHP Developers - a small look into whats comes after XDebug. - -by [Martin Holzhauer](https://twitter.com/woodworker) \ No newline at end of file diff --git a/content/events/2019-09-03-traefik-maestro-laravel/index.md b/content/events/2019-09-03-traefik-maestro-laravel/index.md deleted file mode 100644 index 683019d..0000000 --- a/content/events/2019-09-03-traefik-maestro-laravel/index.md +++ /dev/null @@ -1,34 +0,0 @@ -+++ -title = "Meetup on the 3rd of September, 2019" -description = "Traefik reverse proxy, Maestro repository management, and Laravel state insights from Laracon EU" -date = "2019-09-03" - -[taxonomies] -speaker = ["Asmir Mustafic", "Daniel Leech", "Muhammad Sumon Molla Selim"] -topic = ["Traefik", "Docker Swarm", "Reverse Proxy", "Repository Management", "Laravel", "Scaling"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Introduction to Traefik on Docker Swarm - -Traefik, a reverse proxy for the container world! - -by [Asmir Mustafic](https://twitter.com/goetas_asmir) - -## Talk 2: Maestro and Satellite Repositories - -The principles of package design encourage the application of the single responsiblity principle to repositories, however the trade off is often that you or your team become less productive. Is it possible to have your cake and eat it? - -This talk presents an arduous adventure with single-responsiblity-packages and the tool I'm creating to manage them. - -by [Daniel Leech](https://twitter.com/dantleech) - -## Talk 3: The State of PHP & Laravel - -I am attending Laracon EU later this week. Will highlight and summarize the takeaways from this conference - how PHP and Laravel moving forward, what new things to expect. - -Will also cover how we can scale a Laravel app easily focusing on Event & Queues. - -by [Muhammad Sumon Molla Selim](https://twitter.com/SumonMSelim) \ No newline at end of file diff --git a/content/events/2019-11-05-git-mutation-testing-frontend/2019-11_Frontend_testing_automation.pdf b/content/events/2019-11-05-git-mutation-testing-frontend/2019-11_Frontend_testing_automation.pdf deleted file mode 100644 index 050238a..0000000 Binary files a/content/events/2019-11-05-git-mutation-testing-frontend/2019-11_Frontend_testing_automation.pdf and /dev/null differ diff --git a/content/events/2019-11-05-git-mutation-testing-frontend/index.md b/content/events/2019-11-05-git-mutation-testing-frontend/index.md deleted file mode 100644 index 65a6459..0000000 --- a/content/events/2019-11-05-git-mutation-testing-frontend/index.md +++ /dev/null @@ -1,34 +0,0 @@ -+++ -title = "Meetup on the 5th of November, 2019" -description = "Understanding Git internals, mutation testing for better unit tests, and frontend testing with Puppeteer" -date = "2019-11-05" - -[taxonomies] -speaker = ["Zvonimir Spajic", "Billie Thompson", "Daniel Fahlke"] -topic = ["Git", "Version Control", "Mutation Testing", "Unit Tests", "Frontend Testing", "Puppeteer", "Jest"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Understanding Git - -Git is a standard tool for version control these days so we all use it daily. And we all understand it. Or do we? - -Let's face it - git is hard. And one of the main reasons for this is that it's UI is full of leaky abstractions. That is why to get comfortable with git one must gain some understanding of how git works "under the hood". So in this talk, we're gonna do exactly that and see how gits data model works, how git handles branching and what staging area really is. - -by [Zvonimir Spajic](https://twitter.com/konrad_126) - [Slides](https://slides.com/konrad126/understanding-git-12#/) - -## Talk 2: Mutation Testing! - -Have you ever wanted to testing super powers? Well mutations could be your ticket! - -In this talk we'll be looking at how to check your unit tests rock or suck. We'll be using mutation testing to test your test. A must know for anyone who comes into contact with unit tests. - -by [Billie Thompson](https://twitter.com/PurpleBooth) - [Slides](https://docs.google.com/presentation/d/19Rxj6yAR_gT6zHD10zwjC20Lf7NSz85BzMHHNoYJcmU/edit?usp=sharing) - -## Talk 3: Introduction to Frontend Testing - -With Puppeteer and Jest - -by [Daniel Fahlke](https://twitter.com/Flyingmana)- [Slides: 2019-11_Frontend_testing_automation.pdf](2019-11_Frontend_testing_automation.pdf) diff --git a/content/events/2019-12-03-getters-setters-mocks/index.md b/content/events/2019-12-03-getters-setters-mocks/index.md deleted file mode 100644 index 3357c02..0000000 --- a/content/events/2019-12-03-getters-setters-mocks/index.md +++ /dev/null @@ -1,28 +0,0 @@ -+++ -title = "Meetup on the 3rd of December, 2019" -description = "Avoiding getter/setter cargo cult programming and writing better test mocks in PHP" -date = "2019-12-03" - -[taxonomies] -speaker = ["Zvonimir Spajic", "Jeroen De Dauw"] -topic = ["Getters", "Setters", "Design Patterns", "Cargo Cult", "Mocking", "Testing", "Test Doubles"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Get, set... NO - -Cargo cult programming is defined by Wikipedia as "Ritual inclusion of code or program structures that serve no real purpose." - -One ritual, deeply embedded into the hearts and minds of many software developers is the creation of getters and setter on entities. It' so widespread that IDEs have tools to do it automatically. - -Why do we do it? Does it serve some purpose or is it just a cargo cult programming ritual? - -by [Zvonimir Spajic](https://twitter.com/konrad_126) - -## Talk 2: 5 ways to write better mocks - -Tips on how to write better test doubles (often referred to as mocks in PHP-land). Cats included. - -by [Jeroen De Dauw](https://twitter.com/JeroenDeDauw) \ No newline at end of file diff --git a/content/events/2020-02-04-async-php/index.md b/content/events/2020-02-04-async-php/index.md deleted file mode 100644 index 62bd042..0000000 --- a/content/events/2020-02-04-async-php/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "Meetup on the 4th of February, 2020" -description = "February 2020 meetup featuring asynchronous programming in PHP with Daniel Leech." -date = "2020-02-04" - -[taxonomies] -speaker = ["Daniel Leech"] -topic = ["Async PHP", "Asynchronous Programming", "Network I/O", "Performance", "PHP Extensions", "Frameworks"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Exploring Async PHP - -As PHP programmers we are used to waiting for network I/O, in general we may not even consider any other option. But why wait? Why not jump on board the Async bullet-train and experience life in the fast lane and give Go and NodeJS a run for the money. This talk will aim to make the audience aware of the benefits, opportunities, and pitfalls of asynchronous programming in PHP, and guide them through the native functionality, frameworks and PHP extensions though which it can be facilitated. - -by [Daniel Leech](https://twitter.com/dantleech) \ No newline at end of file diff --git a/content/events/2020-03-03-template-engine-git-reset-containers/index.md b/content/events/2020-03-03-template-engine-git-reset-containers/index.md deleted file mode 100644 index ad52bda..0000000 --- a/content/events/2020-03-03-template-engine-git-reset-containers/index.md +++ /dev/null @@ -1,34 +0,0 @@ -+++ -title = "Meetup on the 3rd of March, 2020" -description = "March 2020 meetup featuring custom template engine, git reset demystified, and containers as VMs." -date = "2020-03-03" - -[taxonomies] -speaker = ["François Kooman", "Zvonimir Spajic", "Till Klampäckel"] -topic = ["Template Engine", "Theming", "Git Reset", "Version Control", "Containers", "Docker", "VMs", "DevOps"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Make Your Own Template Engine (MYOTE) - -A simple, but very powerful template engine inspired by Plates with full theming support and multi UI language support built-in. - -by [François Kooman](https://twitter.com/fkooman) - -## Talk 2: Reset --hard your fear - -Many developers have a fear of git reset command because of its reputation for being dangerous. - -While it is true that the reset command can be dangerous and cause you to lose your changes like tears in the rain, as it is with many fears, it's mostly based on a lack of understanding. - -So let's give your fear of the reset command an antidote - a proper understanding of how git reset works. - -by [Zvonimir Spajic](https://twitter.com/konrad_126) - -## Talk 3: Containers as VMs - -I've been exploring WeaveWorks' footloose ("Containers which look like VMs") for local development and CI. My talk is most likely going to be a (hopefully bug-free) live-demo of how I installed and use footloose. And if this works too well, then we can look at footloose' integration with Ignite (AWS FireCracker). - -by [Till Klampäckel](https://twitter.com/klimpong) \ No newline at end of file diff --git a/content/events/2022-06-07-mysql-ecommerce-cakephp-fixtures/index.md b/content/events/2022-06-07-mysql-ecommerce-cakephp-fixtures/index.md deleted file mode 100644 index d54e686..0000000 --- a/content/events/2022-06-07-mysql-ecommerce-cakephp-fixtures/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 7th of June, 2022" -description = "June 2022 meetup featuring MySQL for e-commerce and CakePHP test fixture factories." -date = "2022-06-07" - -[taxonomies] -speaker = ["Thomas Bley", "Juan Pablo Ramirez"] -topic = ["MySQL", "E-commerce", "Database Design", "Indexes", "CakePHP", "Test Fixtures", "Testing", "ORM"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: MySQL for E-Commerce - -Advanced topics for MySQL: schema design, indexes, locking, replica usage, queues, logs, data migration, anonymization, legacy data, server configuration, etc. - -by [Thomas Bley](https://twitter.com/thbley) - -## Talk 2: CakePHP Test Fixture Factories (framework agnostic) - -CakePHP is known for featuring a powerful and intuitive convention-based Object Relational Mapper. Thanks to that, we came up with an efficient method to write test fixtures on the fly: the CakePHP Fixture Factories. Tests are fast to write and document ideally your application. While the package can conveniently be embedded in any PHP application, it increases the tests' speed by offering the possibility to create entities without persistence. https://github.com/vierge-noire/cakephp-fixture-factories - -by [Juan Pablo Ramirez](https://twitter.com/jpramidev) \ No newline at end of file diff --git a/content/events/2023-06-13-search-embeddings-vector-dbs/index.md b/content/events/2023-06-13-search-embeddings-vector-dbs/index.md deleted file mode 100644 index 996ca7a..0000000 --- a/content/events/2023-06-13-search-embeddings-vector-dbs/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "Meetup on the 13th of June, 2023" -description = "June 2023 meetup featuring search, embeddings and vector databases introduction." -date = "2023-06-13" - -[taxonomies] -speaker = ["Christoph Lühr"] -topic = ["Search", "Embeddings", "Vector Databases", "AI", "Machine Learning", "Data Science"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Search, Embeddings & Vector-DBs - -Introduction & basic concepts - -by [Christoph Lühr](https://twitter.com/chluehr) \ No newline at end of file diff --git a/content/events/2023-07-04-php-google-cloud-functions/index.md b/content/events/2023-07-04-php-google-cloud-functions/index.md deleted file mode 100644 index d0b2bd1..0000000 --- a/content/events/2023-07-04-php-google-cloud-functions/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "Meetup on the 4th of July, 2023" -description = "July 2023 meetup featuring PHP and Google Cloud Functions lightning talk." -date = "2023-07-04" - -[taxonomies] -speaker = ["Tony VLCEK"] -topic = ["PHP", "Google Cloud Functions", "Serverless", "Cloud", "Pub/Sub", "Deployment"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: PHP and Google Cloud Functions - -I'll use a [simple open-source tool](https://github.com/snoofa-com/statuspage-and-gcp-monitoring) that connects Google's Uptime Checks to Atlassian Statuspage as an example showing you how PHP can be used in Google Cloud Functions and how it can interact with Pub/Sub. We'll walk through the process of building and deploying a PHP 8.1 function. (lightning talk) - -by [Tony VLCEK](https://twitter.com/TonyVlcek) \ No newline at end of file diff --git a/content/events/2023-08-01-linux-debugging-redis-stories/index.md b/content/events/2023-08-01-linux-debugging-redis-stories/index.md deleted file mode 100644 index c17f5f0..0000000 --- a/content/events/2023-08-01-linux-debugging-redis-stories/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 1st of August, 2023" -description = "August 2023 meetup featuring Linux systems tools for PHP debugging and Redis bedtime stories." -date = "2023-08-01" - -[taxonomies] -speaker = ["Volker Dusch", "Igor Wiedler"] -topic = ["Linux", "System Tools", "PHP Debugging", "strace", "gdb", "Redis", "Performance", "High Traffic"] - -[extra] -location = "co.up Coworking Space, Adalbertstr. 7-8, 10999 Berlin" -+++ - -## Talk 1: Linux Systems Tools for PHP debugging - -How to use Linux System tooling, like strace and gdb to debug your PHP code and look deeper into what's going on than userland tools allow you to! - -by [Volker Dusch](https://phpc.social/@edorian) - -## Talk 2: Redis Bedtime Stories - -3 Redis short stories. 30000 requests per second. 3 lessons learned. - -by [Igor Wiedler](https://igor.io/) - [Slides](https://speakerdeck.com/igorw/redis-bedtime-stories) \ No newline at end of file diff --git a/content/events/2024-09-18-s6-overlay-symfony-php84-property-hooks/index.md b/content/events/2024-09-18-s6-overlay-symfony-php84-property-hooks/index.md deleted file mode 100644 index 3f46041..0000000 --- a/content/events/2024-09-18-s6-overlay-symfony-php84-property-hooks/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 18th of September, 2024" -description = "September 2024 meetup featuring s6-overlay for Symfony containers and PHP 8.4 property hooks preview." -date = "2024-09-18" - -[taxonomies] -speaker = ["Anne-Julia Seitz", "Volker Dusch"] -topic = ["s6-overlay", "Symfony", "Containers", "Multi-process", "PHP 8.4", "Property Hooks", "Docker", "Deployment"] - -[extra] -location = "c-base Raumstation, Rungestrasse 20, (2nd backyard), 10179 Berlin" -+++ - -## Talk 1: s6-overlay: symfony in a multi-process container - -Focuses on PHP deployment scenarios in container environments - -by Anne-Julia Seitz (QOSSMIC) - -## Talk 2: PHP 8.4: Property Hooks and more - -Explores upcoming PHP 8.4 features and potential code changes - -by Volker Dusch (Tideways) \ No newline at end of file diff --git a/content/events/2024-11-27-characterization-testing-php-attributes/index.md b/content/events/2024-11-27-characterization-testing-php-attributes/index.md deleted file mode 100644 index 3d4a94f..0000000 --- a/content/events/2024-11-27-characterization-testing-php-attributes/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Meetup on the 27th of November, 2024" -description = "November 2024 meetup featuring automation for characterization testing and PHP 8 attributes in practice." -date = "2024-11-27" - -[taxonomies] -speaker = ["Holger Kohnen", "Damijan Ćavar"] -topic = ["Characterization Testing", "Golden Master Testing", "Test Automation", "PHP Attributes", "PHP 8", "Metadata", "Testing"] - -[extra] -location = "Turbine Kreuzberg GmbH, Prinzessinnenstraße 19, Berlin" -+++ - -## Talk 1: Automating the Tedious: A Lazy Developer's Approach to Simplifying Characterization Testing - -Custom assertion for characterization (Golden Master) tests. Will discuss development challenges and practical use cases. - -by Holger Kohnen - -## Talk 2: PHP attributes in action - -PHP 8 attributes as metadata for classes, functions, and properties. Will explore syntax, advantages, and real-world application in a custom library. - -by Damijan Ćavar \ No newline at end of file diff --git a/content/events/2025-02-28-teamwork-specs-composer-internals/index.md b/content/events/2025-02-28-teamwork-specs-composer-internals/index.md deleted file mode 100644 index 1341065..0000000 --- a/content/events/2025-02-28-teamwork-specs-composer-internals/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Specing out teamwork & Composer Behind the Scenes" -description = "February 2025 meetup featuring Symfony team development strategies and Composer behind the scenes insights." -date = "2025-02-28" - -[taxonomies] -speaker = ["Stiven Llupa", "Nils Adermann"] -topic = ["Teamwork", "Symfony", "Team Development", "Collaboration", "Composer", "Package Management", "Performance"] - -[extra] -location = "c-base Raumstation, Rungestrasse 20, (2nd backyard), 10179 Berlin" -+++ - -## Talk 1: Specing out teamwork - -Strategies for Symfony team development practices. Team processes, collaboration, delivery improvements. - -by Stiven Llupa - -## Talk 2: Composer Behind the Scenes - -Composer's inner workings and future plans. Update processes, performance improvements. - -by Nils Adermann \ No newline at end of file diff --git a/content/events/2025-05-07-agentic-applications-cache-invalidation/index.md b/content/events/2025-05-07-agentic-applications-cache-invalidation/index.md deleted file mode 100644 index 79dd180..0000000 --- a/content/events/2025-05-07-agentic-applications-cache-invalidation/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -title = "Agentic Applications with Symfony & Cache Invalidation, Solved" -description = "May 2025 meetup featuring agentic applications with Symfony and cache invalidation strategies, including a live demo of the Symfony Cache component." -date = "2025-05-07" - -[taxonomies] -speaker = ["Christopher Hertel", "Asmir Mustafic"] -topic = ["Symfony", "Cache Invalidation", "Agentic Applications", "LLMs", "AI Integration"] -+++ - -## Talk 1:"Agentic Applications with Symfony" by Christopher Hertel - -A chat interface is by far not all what you could build with Symfony and Large Language Models. And agentic applications are the next level of integrating AI - not only in your code, but also in your business. -Let's have a look together on some basic concepts and hands-on examples of letting AI take over more responsibilities in a well-defined and automated manner. - -## Talk 2: "Cache Invalidation, Solved" by Asmir Mustafic - -Learn how to use cache tags in your application cache layer (no http, no varnish), reducing the needed code to handle the cache invalidation and taking advantage of the probabilistic cache expiration. \ No newline at end of file diff --git a/content/events/2025-06-25-refactor-code-yourself-cakephp-anniversary/index.md b/content/events/2025-06-25-refactor-code-yourself-cakephp-anniversary/index.md deleted file mode 100644 index 4966f84..0000000 --- a/content/events/2025-06-25-refactor-code-yourself-cakephp-anniversary/index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Refactor your code - refactor yourself & 30 years PHP, 20 years CakePHP" -description = "June 2025 meetup featuring refactoring mindset for personal growth and celebrating 30 years PHP, 20 years CakePHP." -date = "2025-06-25" - -[taxonomies] -speaker = ["Peter Dietrich", "Mark Scherer"] -topic = ["Refactoring", "Personal Development", "Legacy Code", "PHP Anniversary", "CakePHP", "Web Development History", "Self-Improvement"] - -[extra] -location = "c-base Raumstation, Rungestrasse 20, (2nd backyard), 10179 Berlin" -+++ - -## Talk 1: Refactor your code - refactor yourself - -Mindset for refactoring projects and personal growth. Looking at old legacy code, you usually know 'a better way to do it' by now. - -by Peter Dietrich - -## Talk 2: 30 years PHP, 20 years CakePHP - -PHP and CakePHP's evolution in web development. Includes live demo of CakePHP's capabilities. - -by Mark Scherer \ No newline at end of file diff --git a/content/events/2025-07-23-php-85-release/index.md b/content/events/2025-07-23-php-85-release/index.md deleted file mode 100644 index b63f9f4..0000000 --- a/content/events/2025-07-23-php-85-release/index.md +++ /dev/null @@ -1,26 +0,0 @@ -+++ -title = "What's Coming in PHP 8.5 – A Talk with PHP 8.5 Release Manager Volker Dusch" -description = "July 2025 meetup featuring PHP 8.5 preview with Release Manager Volker Dusch covering performance improvements, new features, ecosystem updates, and deprecation handling." -date = "2025-07-23" - -[taxonomies] -speaker = ["Volker Dusch"] -topic = ["PHP 8.5", "Release Management", "PHP Internals", "Performance", "Ecosystem", "Deprecations", "Q&A"] - -[extra] -location = "Turbine Kreuzberg GmbH, Prinzessinnenstraße 19, Berlin" -time = "19:00h - 21:30h" -meetup_url = "https://www.meetup.com/berlin-php-usergroup/events/" -+++ - -## Talk: What's Coming in PHP 8.5 - -Join Volker, PHP 8.5 Release Manager, talking about upcoming changes in PHP's November 2025 release. We'll discuss performance, new features, big ecosystem news, and how to easily deal with upcoming deprecations. - -by Volker Dusch - -## Extended Q&A Session - -Extended Q&A session to discuss PHP 8.5 features, ecosystem updates, and community questions. - -by Volker Dusch \ No newline at end of file diff --git a/content/events/2025-09-17-democratic-architecture/index.md b/content/events/2025-09-17-democratic-architecture/index.md deleted file mode 100644 index a4a8202..0000000 --- a/content/events/2025-09-17-democratic-architecture/index.md +++ /dev/null @@ -1,26 +0,0 @@ -+++ -title = "Democratic Architecture & Celebrating Community" -description = "September 2025 meetup featuring Democratic Architecture and celebrating 13 years of Berlin PHP community knowledge sharing." -date = "2025-09-17" - -[taxonomies] -speaker = ["Stefan Priebsch", "Anne-Julia Seitz"] -topic = ["Architecture", "Community", "Knowledge", "Usergroup", "Symfony", "Berlin", "PHP", "c-base", "Sustainability"] - -[extra] -location = "c-base Raumstation, Rungestrasse 20, 10179 Berlin" -meetup_url = "https://www.meetup.com/de-DE/berlin-php-usergroup/events/310520543/" -+++ - -## Talk 1: Democratic Architecture - -When we see architecture as a shared guide rather than a rigid blueprint, we can build systems that are both flexible and robust. This approach also encourages collaboration, where everyone contributes ideas instead of simply following top-down rules. -By keeping the core architecture separate from the actual implementation, we can adapt more easily to new requirements and technologies—making sure the system remains useful in the long run and stays aligned with business goals. - -by Stefan Priebsch - -## Talk 2: Celebrating Community - -During the relaunch of the [bephpug.de](https://bephpug.de/) website, I reflected on our community and learned some valuable insights that I want to share. The Berlin PHP community has been meeting for over 13 years now - that's a 13-year tradition of knowledge sharing - and I want to take the time to celebrate all the people who made this happen. Also in 2012, we started a Symfony Roundtable at c-base, where we met regularly and developed the "c-base Artefact Guide", where you can browse the artifacts of c-base. Since c-base is turning 30 this year and has continually supported communities like ours, it's a good time to talk about what makes communities work and last, and why documenting things matters - especially when you want communities to keep working even when people move on. - -by Anne-Julia Seitz \ No newline at end of file diff --git a/content/events/_index.md b/content/events/_index.md deleted file mode 100644 index 2664049..0000000 --- a/content/events/_index.md +++ /dev/null @@ -1,8 +0,0 @@ -+++ -title = "Events" -description = "Archive of all Berlin PHP Usergroup meetups, talks, and presentations. Browse our history of community events and technical content." -sort_by = "date" -template = "events.html" -page_template = "event.html" -paginate_by = 10 -+++ diff --git a/content/pages/contact.md b/content/pages/contact.md deleted file mode 100644 index abb59ab..0000000 --- a/content/pages/contact.md +++ /dev/null @@ -1,105 +0,0 @@ -+++ -title = "Contact" -description = "Get in touch with the Berlin PHP Usergroup organizers. Propose talks, ask questions, or learn how to get involved in our community." -template = "page.html" -+++ - -## Get in Touch - -Have a question about Berlin PHP? Want to propose a talk? Looking to sponsor an event? We'd love to hear from you! - -For general inquiries, talk proposals, and sponsorship opportunities: - -**Send me a message at LinkedIn:** [Anne-Julia Seitz](https://www.linkedin.com/in/anne-julia-seitz-1666547/) - -### 💬 Social Media - -Connect with us on social media for updates and community discussions: - -- 🐘 **Mastodon**: [@bephpug@mastodon.social](https://mastodon.social/@bephpug) -- 💻 **GitHub**: [berlinphp](https://github.com/berlinphp) -- 🏢 **Meetup**: [Berlin PHP Usergroup](https://www.meetup.com/berlin-php-usergroup/) - -## Propose a Talk 🎤 - -We're always looking for speakers to share their knowledge with our community! - -### What We're Looking For: - -- **PHP-related topics**: Frameworks, libraries, best practices, performance -- **Web development**: Frontend integration, APIs, databases, DevOps -- **Lightning talks**: 5-10 minute presentations on any relevant topic - -Look at all the topics we have covered in the past events: [All Topics](/topic). - -### Talk Formats: - -- **Regular talks**: 25-30 minutes + Q&A -- **Lightning talks**: 5-10 minutes - -### How to Propose: - -1. **Send us a message** with your talk idea -2. **Include**: Talk title, brief description, your background - -### Talk Guidelines 📜 - -1. **Don't worry about perfection** - we'll help you refine the concept -2. **All skill levels welcome** - from beginners to experts -3. **Diversity is encouraged** - we want to hear from all voices in the community! -4. **Talks must be in English** - we welcome speakers and audience from all over the world! -5. **No commercial pitches** - focus on sharing knowledge, not selling products -6. **No prior speaking experience required** - we support first-time speakers! -7. **Talks should be relevant to PHP developers** - focus on topics that will help our community grow and learn -8. **Talks should be engaging and interactive** - we want our audience to learn and have fun! - -## Sponsorship Opportunities 🤝 - -Help support the Berlin PHP community! Sponsorship helps us provide: - -- **Free venue** for monthly meetups -- **Drinks and snacks** for attendees -- **Community events** and networking opportunities - -## Organizers 👥 - -Berlin PHP is organized by volunteers from the local PHP community: - -### Core Team: - -- **Anne-Julia Seitz** - Event Organization & Community Management, all of it, but looking for support -- **Your Name** - Role/Responsibility - -*Want to help organize? We're always looking for volunteers!* - -### Are you organizing a PHP event in Berlin? - -If you're organizing a PHP-related event in Berlin, we'd love to help promote it! - -## Code of Conduct - -We're committed to providing a welcoming, inclusive environment for everyone. Our community follows these principles: - -- **Be respectful** - Treat everyone with courtesy and professionalism -- **Be inclusive** - Welcome people from all backgrounds and skill levels -- **Be constructive** - Focus on learning and helping others grow -- **Be professional** - Keep discussions relevant and appropriate - -Questions about our Code of Conduct? [Write a message to us](https://www.linkedin.com/in/anne-julia-seitz-1666547/). - -## Location & Venues 📍 - -Our meetups rotate between these fantastic Berlin venues: - -### Primary Venues: - -**c-base Raumstation** -Rungestraße 20, (2nd backyard) -10179 Berlin -*A legendary Berlin hackerspace* - ---- - -*Questions? Don't hesitate to reach out - we're here to help!* - -**Berlin PHP Usergroup** • *Connecting Berlin's PHP community since 2009* \ No newline at end of file diff --git a/content/pages/imprint.md b/content/pages/imprint.md deleted file mode 100644 index 1c2c1b7..0000000 --- a/content/pages/imprint.md +++ /dev/null @@ -1,98 +0,0 @@ -+++ -title = "Imprint" -description = "Legal information and imprint for the Berlin PHP Usergroup website, including contact details and responsible parties." -template = "page.html" -+++ - -# Imprint / Impressum - -## Legal Information - -This website is operated by the **Berlin PHP Usergroup** community organization. - -### Responsible for Content - -**Berlin PHP Usergroup** -c/o Anne-Julia Seitz -Contact Address -Berlin, Germany - -**Email**: [hello @ bephpug.de](https://www.linkedin.com/in/anne-julia-seitz-1666547/) -**Website**: https://www.bephpug.de - -## Disclaimer - -### Content Liability - -The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents' accuracy, completeness, or topicality. According to statutory provisions, we are furthermore responsible for our own content on these web pages. In this matter, please note that we are not under obligation to monitor merely the transmitted or saved information of third parties, or investigate circumstances pointing to illegal activity. - -Our obligation to remove or block the use of information under generally applicable laws remains unaffected. However, liability concerning this matter can only be assumed from the point in time at which a concrete infringement of rights is identified. Infringements of the aforementioned type will be removed immediately at our notice. - -### Link Liability - -Our offer includes links to external third-party websites. We have no influence on the contents of those websites, therefore we cannot guarantee for those contents. Providers or administrators of linked websites are always responsible for the contents of the linked websites. The linked websites had been checked for possible violations of law at the time of the establishment of the link. Illegal contents were not detected at the time of the linking. - -A permanent monitoring of the contents of linked websites cannot be imposed on us without reasonable indications that there has been a violation of law. Illegal links will be removed immediately at our notice. - -## Privacy Policy - -### Data Protection - -We take the protection of your personal data very seriously. We treat your personal data as confidential and in accordance with the statutory data protection regulations and this privacy policy. - -### Website Analytics - -This website uses minimal analytics to understand visitor patterns. No personal data is stored or tracked without your explicit consent. - -### Contact Forms - -When you contact us via email, your inquiry including all resulting personal data (name, inquiry) will be stored and processed by us for the purpose of processing your request. We do not pass these data on without your consent. - -### Cookies - -This website uses minimal essential cookies for basic functionality. No tracking cookies are used without your explicit consent. - -## Copyright - -### Content Rights - -The content and works created by the site operators on these pages are subject to German copyright law. Duplication, processing, distribution, or any form of commercialization of such material beyond the scope of the copyright law shall require the prior written consent of its respective author or creator. - -Downloads and copies of this site are only permitted for private, non-commercial use. Insofar as the content on this site was not created by the operator, the copyrights of third parties are respected. In particular, third-party content is identified as such. Should you nevertheless become aware of a copyright infringement, please inform us accordingly. We will remove such content immediately. - -### Event Content - -Presentations, slides, and other materials shared during Berlin PHP Usergroup events remain the intellectual property of their respective authors and speakers. Permission to use, distribute, or republish such content must be obtained directly from the content creators. - -## Community Guidelines - -### Code of Conduct - -The Berlin PHP Usergroup is committed to providing a welcoming and inclusive environment for all participants. We do not tolerate harassment, discrimination, or disruptive behavior in any form. - -### Event Recording - -Some events may be recorded for educational purposes. Attendance at recorded events constitutes consent to appear in recordings. If you do not wish to be recorded, please contact the organizers. - -## Technical Information - -### Hosting - -This website is hosted on modern, secure infrastructure with appropriate data protection measures. - -### Open Source - -This website is built using [Zola](https://www.getzola.org/) static site generator. The source code may be available on our GitHub repository. - -## Contact for Legal Matters - -For questions regarding this imprint, privacy policy, or legal matters: - -**Legal Contact** -Email: [legal at bephpug.de](https://www.linkedin.com/in/anne-julia-seitz-1666547/) - ---- - -**Last Updated**: August 2025 - -*This imprint complies with German legal requirements (§5 TMG, §55 RStV) and GDPR data protection regulations.* \ No newline at end of file diff --git a/css/bootstrap-2.0.1.css b/css/bootstrap-2.0.1.css new file mode 100644 index 0000000..c3e0c00 --- /dev/null +++ b/css/bootstrap-2.0.1.css @@ -0,0 +1,3496 @@ +/*! + * Bootstrap v2.0.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} +audio, canvas, video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; +} +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +a:hover, a:active { + outline: 0; +} +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + max-width: 100%; + height: auto; + border: 0; + -ms-interpolation-mode: bicubic; +} +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} +button, input { + *overflow: visible; + line-height: normal; +} +button::-moz-focus-inner, input::-moz-focus-inner { + padding: 0; + border: 0; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} +textarea { + overflow: auto; + vertical-align: top; +} +.clearfix { + *zoom: 1; +} +.clearfix:before, .clearfix:after { + display: table; + content: ""; +} +.clearfix:after { + clear: both; +} +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + line-height: 18px; + color: #333333; + background-color: #ffffff; +} +a { + color: #0088cc; + text-decoration: none; +} +a:hover { + color: #005580; + text-decoration: underline; +} +.row { + margin-left: -20px; + *zoom: 1; +} +.row:before, .row:after { + display: table; + content: ""; +} +.row:after { + clear: both; +} +[class*="span"] { + float: left; + margin-left: 20px; +} +.span1 { + width: 60px; +} +.span2 { + width: 140px; +} +.span3 { + width: 220px; +} +.span4 { + width: 300px; +} +.span5 { + width: 380px; +} +.span6 { + width: 460px; +} +.span7 { + width: 540px; +} +.span8 { + width: 620px; +} +.span9 { + width: 700px; +} +.span10 { + width: 780px; +} +.span11 { + width: 860px; +} +.span12, .container { + width: 940px; +} +.offset1 { + margin-left: 100px; +} +.offset2 { + margin-left: 180px; +} +.offset3 { + margin-left: 260px; +} +.offset4 { + margin-left: 340px; +} +.offset5 { + margin-left: 420px; +} +.offset6 { + margin-left: 500px; +} +.offset7 { + margin-left: 580px; +} +.offset8 { + margin-left: 660px; +} +.offset9 { + margin-left: 740px; +} +.offset10 { + margin-left: 820px; +} +.offset11 { + margin-left: 900px; +} +.row-fluid { + width: 100%; + *zoom: 1; +} +.row-fluid:before, .row-fluid:after { + display: table; + content: ""; +} +.row-fluid:after { + clear: both; +} +.row-fluid > [class*="span"] { + float: left; + margin-left: 2.127659574%; +} +.row-fluid > [class*="span"]:first-child { + margin-left: 0; +} +.row-fluid > .span1 { + width: 6.382978723%; +} +.row-fluid > .span2 { + width: 14.89361702%; +} +.row-fluid > .span3 { + width: 23.404255317%; +} +.row-fluid > .span4 { + width: 31.914893614%; +} +.row-fluid > .span5 { + width: 40.425531911%; +} +.row-fluid > .span6 { + width: 48.93617020799999%; +} +.row-fluid > .span7 { + width: 57.446808505%; +} +.row-fluid > .span8 { + width: 65.95744680199999%; +} +.row-fluid > .span9 { + width: 74.468085099%; +} +.row-fluid > .span10 { + width: 82.97872339599999%; +} +.row-fluid > .span11 { + width: 91.489361693%; +} +.row-fluid > .span12 { + width: 99.99999998999999%; +} +.container { + width: 940px; + margin-left: auto; + margin-right: auto; + *zoom: 1; +} +.container:before, .container:after { + display: table; + content: ""; +} +.container:after { + clear: both; +} +.container-fluid { + padding-left: 20px; + padding-right: 20px; + *zoom: 1; +} +.container-fluid:before, .container-fluid:after { + display: table; + content: ""; +} +.container-fluid:after { + clear: both; +} +p { + margin: 0 0 9px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + line-height: 18px; +} +p small { + font-size: 11px; + color: #999999; +} +.lead { + margin-bottom: 18px; + font-size: 20px; + font-weight: 200; + line-height: 27px; +} +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + font-weight: bold; + color: #333333; + text-rendering: optimizelegibility; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + color: #999999; +} +h1 { + font-size: 30px; + line-height: 36px; +} +h1 small { + font-size: 18px; +} +h2 { + font-size: 24px; + line-height: 36px; +} +h2 small { + font-size: 18px; +} +h3 { + line-height: 27px; + font-size: 18px; +} +h3 small { + font-size: 14px; +} +h4, h5, h6 { + line-height: 18px; +} +h4 { + font-size: 14px; +} +h4 small { + font-size: 12px; +} +h5 { + font-size: 12px; +} +h6 { + font-size: 11px; + color: #999999; + text-transform: uppercase; +} +.page-header { + padding-bottom: 17px; + margin: 18px 0; + border-bottom: 1px solid #eeeeee; +} +.page-header h1 { + line-height: 1; +} +ul, ol { + padding: 0; + margin: 0 0 9px 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +ul { + list-style: disc; +} +ol { + list-style: decimal; +} +li { + line-height: 18px; +} +ul.unstyled, ol.unstyled { + margin-left: 0; + list-style: none; +} +dl { + margin-bottom: 18px; +} +dt, dd { + line-height: 18px; +} +dt { + font-weight: bold; +} +dd { + margin-left: 9px; +} +hr { + margin: 18px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} +strong { + font-weight: bold; +} +em { + font-style: italic; +} +.muted { + color: #999999; +} +abbr { + font-size: 90%; + text-transform: uppercase; + border-bottom: 1px dotted #ddd; + cursor: help; +} +blockquote { + padding: 0 0 0 15px; + margin: 0 0 18px; + border-left: 5px solid #eeeeee; +} +blockquote p { + margin-bottom: 0; + font-size: 16px; + font-weight: 300; + line-height: 22.5px; +} +blockquote small { + display: block; + line-height: 18px; + color: #999999; +} +blockquote small:before { + content: '\2014 \00A0'; +} +blockquote.pull-right { + float: right; + padding-left: 0; + padding-right: 15px; + border-left: 0; + border-right: 5px solid #eeeeee; +} +blockquote.pull-right p, blockquote.pull-right small { + text-align: right; +} +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} +address { + display: block; + margin-bottom: 18px; + line-height: 18px; + font-style: normal; +} +small { + font-size: 100%; +} +cite { + font-style: normal; +} +code, pre { + padding: 0 3px 2px; + font-family: Menlo, Monaco, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +code { + padding: 3px 4px; + color: #d14; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} +pre { + display: block; + padding: 8.5px; + margin: 0 0 9px; + font-size: 12px; + line-height: 18px; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + white-space: pre; + white-space: pre-wrap; + word-break: break-all; + word-wrap: break-word; +} +pre.prettyprint { + margin-bottom: 18px; +} +pre code { + padding: 0; + color: inherit; + background-color: transparent; + border: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +form { + margin: 0 0 18px; +} +fieldset { + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 27px; + font-size: 19.5px; + line-height: 36px; + color: #333333; + border: 0; + border-bottom: 1px solid #eee; +} +legend small { + font-size: 13.5px; + color: #999999; +} +label, +input, +button, +select, +textarea { + font-size: 13px; + font-weight: normal; + line-height: 18px; +} +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +label { + display: block; + margin-bottom: 5px; + color: #333333; +} +input, +textarea, +select, +.uneditable-input { + display: inline-block; + width: 210px; + height: 18px; + padding: 4px; + margin-bottom: 9px; + font-size: 13px; + line-height: 18px; + color: #555555; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.uneditable-textarea { + width: auto; + height: auto; +} +label input, label textarea, label select { + display: block; +} +input[type="image"], input[type="checkbox"], input[type="radio"] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE7 */ + + line-height: normal; + cursor: pointer; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + border: 0 \9; + /* IE9 and down */ + +} +input[type="image"] { + border: 0; +} +input[type="file"] { + width: auto; + padding: initial; + line-height: initial; + border: initial; + background-color: #ffffff; + background-color: initial; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +input[type="button"], input[type="reset"], input[type="submit"] { + width: auto; + height: auto; +} +select, input[type="file"] { + height: 28px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 28px; +} +input[type="file"] { + line-height: 18px \9; +} +select { + width: 220px; + background-color: #ffffff; +} +select[multiple], select[size] { + height: auto; +} +input[type="image"] { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +textarea { + height: auto; +} +input[type="hidden"] { + display: none; +} +.radio, .checkbox { + padding-left: 18px; +} +.radio input[type="radio"], .checkbox input[type="checkbox"] { + float: left; + margin-left: -18px; +} +.controls > .radio:first-child, .controls > .checkbox:first-child { + padding-top: 5px; +} +.radio.inline, .checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} +.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { + margin-left: 10px; +} +input, textarea { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} +input:focus, textarea:focus { + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus, +select:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.input-mini { + width: 60px; +} +.input-small { + width: 90px; +} +.input-medium { + width: 150px; +} +.input-large { + width: 210px; +} +.input-xlarge { + width: 270px; +} +.input-xxlarge { + width: 530px; +} +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input { + float: none; + margin-left: 0; +} +input.span1, textarea.span1, .uneditable-input.span1 { + width: 50px; +} +input.span2, textarea.span2, .uneditable-input.span2 { + width: 130px; +} +input.span3, textarea.span3, .uneditable-input.span3 { + width: 210px; +} +input.span4, textarea.span4, .uneditable-input.span4 { + width: 290px; +} +input.span5, textarea.span5, .uneditable-input.span5 { + width: 370px; +} +input.span6, textarea.span6, .uneditable-input.span6 { + width: 450px; +} +input.span7, textarea.span7, .uneditable-input.span7 { + width: 530px; +} +input.span8, textarea.span8, .uneditable-input.span8 { + width: 610px; +} +input.span9, textarea.span9, .uneditable-input.span9 { + width: 690px; +} +input.span10, textarea.span10, .uneditable-input.span10 { + width: 770px; +} +input.span11, textarea.span11, .uneditable-input.span11 { + width: 850px; +} +input.span12, textarea.span12, .uneditable-input.span12 { + width: 930px; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; + cursor: not-allowed; +} +.control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline { + color: #c09853; +} +.control-group.warning input, .control-group.warning select, .control-group.warning textarea { + color: #c09853; + border-color: #c09853; +} +.control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: 0 0 6px #dbc59e; + -moz-box-shadow: 0 0 6px #dbc59e; + box-shadow: 0 0 6px #dbc59e; +} +.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} +.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline { + color: #b94a48; +} +.control-group.error input, .control-group.error select, .control-group.error textarea { + color: #b94a48; + border-color: #b94a48; +} +.control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: 0 0 6px #d59392; + -moz-box-shadow: 0 0 6px #d59392; + box-shadow: 0 0 6px #d59392; +} +.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} +.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline { + color: #468847; +} +.control-group.success input, .control-group.success select, .control-group.success textarea { + color: #468847; + border-color: #468847; +} +.control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: 0 0 6px #7aba7b; + -moz-box-shadow: 0 0 6px #7aba7b; + box-shadow: 0 0 6px #7aba7b; +} +.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} +input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid { + color: #b94a48; + border-color: #ee5f5b; +} +input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, select:focus:required:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} +.form-actions { + padding: 17px 20px 18px; + margin-top: 18px; + margin-bottom: 18px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; +} +.uneditable-input { + display: block; + background-color: #ffffff; + border-color: #eee; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +:-moz-placeholder { + color: #999999; +} +::-webkit-input-placeholder { + color: #999999; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 0; + color: #999999; +} +.help-inline { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-bottom: 9px; + vertical-align: middle; + padding-left: 5px; +} +.input-prepend, .input-append { + margin-bottom: 5px; + *zoom: 1; +} +.input-prepend:before, +.input-append:before, +.input-prepend:after, +.input-append:after { + display: table; + content: ""; +} +.input-prepend:after, .input-append:after { + clear: both; +} +.input-prepend input, +.input-append input, +.input-prepend .uneditable-input, +.input-append .uneditable-input { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-prepend input:focus, +.input-append input:focus, +.input-prepend .uneditable-input:focus, +.input-append .uneditable-input:focus { + position: relative; + z-index: 2; +} +.input-prepend .uneditable-input, .input-append .uneditable-input { + border-left-color: #ccc; +} +.input-prepend .add-on, .input-append .add-on { + float: left; + display: block; + width: auto; + min-width: 16px; + height: 18px; + margin-right: -1px; + padding: 4px 5px; + font-weight: normal; + line-height: 18px; + color: #999999; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #f5f5f5; + border: 1px solid #ccc; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-prepend .active, .input-append .active { + background-color: #a9dba9; + border-color: #46a546; +} +.input-prepend .add-on { + *margin-top: 1px; + /* IE6-7 */ + +} +.input-append input, .input-append .uneditable-input { + float: left; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-append .uneditable-input { + border-left-color: #eee; + border-right-color: #ccc; +} +.input-append .add-on { + margin-right: 0; + margin-left: -1px; + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-append input:first-child { + *margin-left: -160px; +} +.input-append input:first-child + .add-on { + *margin-left: -21px; +} +.search-query { + padding-left: 14px; + padding-right: 14px; + margin-bottom: 0; + -webkit-border-radius: 14px; + -moz-border-radius: 14px; + border-radius: 14px; +} +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input { + display: inline-block; + margin-bottom: 0; +} +.form-search .hide, .form-inline .hide, .form-horizontal .hide { + display: none; +} +.form-search label, +.form-inline label, +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + display: inline-block; +} +.form-search .input-append .add-on, +.form-inline .input-prepend .add-on, +.form-search .input-append .add-on, +.form-inline .input-prepend .add-on { + vertical-align: middle; +} +.form-search .radio, +.form-inline .radio, +.form-search .checkbox, +.form-inline .checkbox { + margin-bottom: 0; + vertical-align: middle; +} +.control-group { + margin-bottom: 9px; +} +legend + .control-group { + margin-top: 18px; + -webkit-margin-top-collapse: separate; +} +.form-horizontal .control-group { + margin-bottom: 18px; + *zoom: 1; +} +.form-horizontal .control-group:before, .form-horizontal .control-group:after { + display: table; + content: ""; +} +.form-horizontal .control-group:after { + clear: both; +} +.form-horizontal .control-label { + float: left; + width: 140px; + padding-top: 5px; + text-align: right; +} +.form-horizontal .controls { + margin-left: 160px; +} +.form-horizontal .form-actions { + padding-left: 160px; +} +table { + max-width: 100%; + border-collapse: collapse; + border-spacing: 0; +} +.table { + width: 100%; + margin-bottom: 18px; +} +.table th, .table td { + padding: 8px; + line-height: 18px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table th { + font-weight: bold; +} +.table thead th { + vertical-align: bottom; +} +.table thead:first-child tr th, .table thead:first-child tr td { + border-top: 0; +} +.table tbody + tbody { + border-top: 2px solid #ddd; +} +.table-condensed th, .table-condensed td { + padding: 4px 5px; +} +.table-bordered { + border: 1px solid #ddd; + border-collapse: separate; + *border-collapse: collapsed; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.table-bordered th + th, +.table-bordered td + td, +.table-bordered th + td, +.table-bordered td + th { + border-left: 1px solid #ddd; +} +.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} +.table-bordered thead:first-child tr:first-child th:first-child, .table-bordered tbody:first-child tr:first-child td:first-child { + -webkit-border-radius: 4px 0 0 0; + -moz-border-radius: 4px 0 0 0; + border-radius: 4px 0 0 0; +} +.table-bordered thead:first-child tr:first-child th:last-child, .table-bordered tbody:first-child tr:first-child td:last-child { + -webkit-border-radius: 0 4px 0 0; + -moz-border-radius: 0 4px 0 0; + border-radius: 0 4px 0 0; +} +.table-bordered thead:last-child tr:last-child th:first-child, .table-bordered tbody:last-child tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 4px; + -moz-border-radius: 0 0 0 4px; + border-radius: 0 0 0 4px; +} +.table-bordered thead:last-child tr:last-child th:last-child, .table-bordered tbody:last-child tr:last-child td:last-child { + -webkit-border-radius: 0 0 4px 0; + -moz-border-radius: 0 0 4px 0; + border-radius: 0 0 4px 0; +} +.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} +.table tbody tr:hover td, .table tbody tr:hover th { + background-color: #f5f5f5; +} +table .span1 { + float: none; + width: 44px; + margin-left: 0; +} +table .span2 { + float: none; + width: 124px; + margin-left: 0; +} +table .span3 { + float: none; + width: 204px; + margin-left: 0; +} +table .span4 { + float: none; + width: 284px; + margin-left: 0; +} +table .span5 { + float: none; + width: 364px; + margin-left: 0; +} +table .span6 { + float: none; + width: 444px; + margin-left: 0; +} +table .span7 { + float: none; + width: 524px; + margin-left: 0; +} +table .span8 { + float: none; + width: 604px; + margin-left: 0; +} +table .span9 { + float: none; + width: 684px; + margin-left: 0; +} +table .span10 { + float: none; + width: 764px; + margin-left: 0; +} +table .span11 { + float: none; + width: 844px; + margin-left: 0; +} +table .span12 { + float: none; + width: 924px; + margin-left: 0; +} +[class^="icon-"], [class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; + *margin-right: .3em; +} +[class^="icon-"]:last-child, [class*=" icon-"]:last-child { + *margin-left: 0; +} +.icon-white { + background-image: url("../img/glyphicons-halflings-white.png"); +} +.icon-glass { + background-position: 0 0; +} +.icon-music { + background-position: -24px 0; +} +.icon-search { + background-position: -48px 0; +} +.icon-envelope { + background-position: -72px 0; +} +.icon-heart { + background-position: -96px 0; +} +.icon-star { + background-position: -120px 0; +} +.icon-star-empty { + background-position: -144px 0; +} +.icon-user { + background-position: -168px 0; +} +.icon-film { + background-position: -192px 0; +} +.icon-th-large { + background-position: -216px 0; +} +.icon-th { + background-position: -240px 0; +} +.icon-th-list { + background-position: -264px 0; +} +.icon-ok { + background-position: -288px 0; +} +.icon-remove { + background-position: -312px 0; +} +.icon-zoom-in { + background-position: -336px 0; +} +.icon-zoom-out { + background-position: -360px 0; +} +.icon-off { + background-position: -384px 0; +} +.icon-signal { + background-position: -408px 0; +} +.icon-cog { + background-position: -432px 0; +} +.icon-trash { + background-position: -456px 0; +} +.icon-home { + background-position: 0 -24px; +} +.icon-file { + background-position: -24px -24px; +} +.icon-time { + background-position: -48px -24px; +} +.icon-road { + background-position: -72px -24px; +} +.icon-download-alt { + background-position: -96px -24px; +} +.icon-download { + background-position: -120px -24px; +} +.icon-upload { + background-position: -144px -24px; +} +.icon-inbox { + background-position: -168px -24px; +} +.icon-play-circle { + background-position: -192px -24px; +} +.icon-repeat { + background-position: -216px -24px; +} +.icon-refresh { + background-position: -240px -24px; +} +.icon-list-alt { + background-position: -264px -24px; +} +.icon-lock { + background-position: -287px -24px; +} +.icon-flag { + background-position: -312px -24px; +} +.icon-headphones { + background-position: -336px -24px; +} +.icon-volume-off { + background-position: -360px -24px; +} +.icon-volume-down { + background-position: -384px -24px; +} +.icon-volume-up { + background-position: -408px -24px; +} +.icon-qrcode { + background-position: -432px -24px; +} +.icon-barcode { + background-position: -456px -24px; +} +.icon-tag { + background-position: 0 -48px; +} +.icon-tags { + background-position: -25px -48px; +} +.icon-book { + background-position: -48px -48px; +} +.icon-bookmark { + background-position: -72px -48px; +} +.icon-print { + background-position: -96px -48px; +} +.icon-camera { + background-position: -120px -48px; +} +.icon-font { + background-position: -144px -48px; +} +.icon-bold { + background-position: -167px -48px; +} +.icon-italic { + background-position: -192px -48px; +} +.icon-text-height { + background-position: -216px -48px; +} +.icon-text-width { + background-position: -240px -48px; +} +.icon-align-left { + background-position: -264px -48px; +} +.icon-align-center { + background-position: -288px -48px; +} +.icon-align-right { + background-position: -312px -48px; +} +.icon-align-justify { + background-position: -336px -48px; +} +.icon-list { + background-position: -360px -48px; +} +.icon-indent-left { + background-position: -384px -48px; +} +.icon-indent-right { + background-position: -408px -48px; +} +.icon-facetime-video { + background-position: -432px -48px; +} +.icon-picture { + background-position: -456px -48px; +} +.icon-pencil { + background-position: 0 -72px; +} +.icon-map-marker { + background-position: -24px -72px; +} +.icon-adjust { + background-position: -48px -72px; +} +.icon-tint { + background-position: -72px -72px; +} +.icon-edit { + background-position: -96px -72px; +} +.icon-share { + background-position: -120px -72px; +} +.icon-check { + background-position: -144px -72px; +} +.icon-move { + background-position: -168px -72px; +} +.icon-step-backward { + background-position: -192px -72px; +} +.icon-fast-backward { + background-position: -216px -72px; +} +.icon-backward { + background-position: -240px -72px; +} +.icon-play { + background-position: -264px -72px; +} +.icon-pause { + background-position: -288px -72px; +} +.icon-stop { + background-position: -312px -72px; +} +.icon-forward { + background-position: -336px -72px; +} +.icon-fast-forward { + background-position: -360px -72px; +} +.icon-step-forward { + background-position: -384px -72px; +} +.icon-eject { + background-position: -408px -72px; +} +.icon-chevron-left { + background-position: -432px -72px; +} +.icon-chevron-right { + background-position: -456px -72px; +} +.icon-plus-sign { + background-position: 0 -96px; +} +.icon-minus-sign { + background-position: -24px -96px; +} +.icon-remove-sign { + background-position: -48px -96px; +} +.icon-ok-sign { + background-position: -72px -96px; +} +.icon-question-sign { + background-position: -96px -96px; +} +.icon-info-sign { + background-position: -120px -96px; +} +.icon-screenshot { + background-position: -144px -96px; +} +.icon-remove-circle { + background-position: -168px -96px; +} +.icon-ok-circle { + background-position: -192px -96px; +} +.icon-ban-circle { + background-position: -216px -96px; +} +.icon-arrow-left { + background-position: -240px -96px; +} +.icon-arrow-right { + background-position: -264px -96px; +} +.icon-arrow-up { + background-position: -289px -96px; +} +.icon-arrow-down { + background-position: -312px -96px; +} +.icon-share-alt { + background-position: -336px -96px; +} +.icon-resize-full { + background-position: -360px -96px; +} +.icon-resize-small { + background-position: -384px -96px; +} +.icon-plus { + background-position: -408px -96px; +} +.icon-minus { + background-position: -433px -96px; +} +.icon-asterisk { + background-position: -456px -96px; +} +.icon-exclamation-sign { + background-position: 0 -120px; +} +.icon-gift { + background-position: -24px -120px; +} +.icon-leaf { + background-position: -48px -120px; +} +.icon-fire { + background-position: -72px -120px; +} +.icon-eye-open { + background-position: -96px -120px; +} +.icon-eye-close { + background-position: -120px -120px; +} +.icon-warning-sign { + background-position: -144px -120px; +} +.icon-plane { + background-position: -168px -120px; +} +.icon-calendar { + background-position: -192px -120px; +} +.icon-random { + background-position: -216px -120px; +} +.icon-comment { + background-position: -240px -120px; +} +.icon-magnet { + background-position: -264px -120px; +} +.icon-chevron-up { + background-position: -288px -120px; +} +.icon-chevron-down { + background-position: -313px -119px; +} +.icon-retweet { + background-position: -336px -120px; +} +.icon-shopping-cart { + background-position: -360px -120px; +} +.icon-folder-close { + background-position: -384px -120px; +} +.icon-folder-open { + background-position: -408px -120px; +} +.icon-resize-vertical { + background-position: -432px -119px; +} +.icon-resize-horizontal { + background-position: -456px -118px; +} +.dropdown { + position: relative; +} +.dropdown-toggle { + *margin-bottom: -3px; +} +.dropdown-toggle:active, .open .dropdown-toggle { + outline: 0; +} +.caret { + display: inline-block; + width: 0; + height: 0; + text-indent: -99999px; + *text-indent: 0; + vertical-align: top; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #000000; + opacity: 0.3; + filter: alpha(opacity=30); + content: "\2193"; +} +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} +.dropdown:hover .caret, .open.dropdown .caret { + opacity: 1; + filter: alpha(opacity=100); +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + float: left; + display: none; + min-width: 160px; + _width: 160px; + padding: 4px 0; + margin: 0; + list-style: none; + background-color: #ffffff; + border-color: #ccc; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 1px; + -webkit-border-radius: 0 0 5px 5px; + -moz-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + *border-right-width: 2px; + *border-bottom-width: 2px; +} +.dropdown-menu.bottom-up { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +.dropdown-menu .divider { + height: 1px; + margin: 5px 1px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; + *width: 100%; + *margin: -5px 0 5px; +} +.dropdown-menu a { + display: block; + padding: 3px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #555555; + white-space: nowrap; +} +.dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover { + color: #ffffff; + text-decoration: none; + background-color: #0088cc; +} +.dropdown.open { + *z-index: 1000; +} +.dropdown.open .dropdown-toggle { + color: #ffffff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} +.dropdown.open .dropdown-menu { + display: block; +} +.typeahead { + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.fade { + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -ms-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; + opacity: 0; +} +.fade.in { + opacity: 1; +} +.collapse { + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -ms-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; + position: relative; + overflow: hidden; + height: 0; +} +.collapse.in { + height: auto; +} +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover { + color: #000000; + text-decoration: none; + opacity: 0.4; + filter: alpha(opacity=40); + cursor: pointer; +} +.btn { + display: inline-block; + padding: 4px 10px 4px; + margin-bottom: 0; + font-size: 13px; + line-height: 18px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(top, #ffffff, #e6e6e6); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + cursor: pointer; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + *margin-left: .3em; +} +.btn:hover, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + background-color: #e6e6e6; +} +.btn:active, .btn.active { + background-color: #cccccc \9; +} +.btn:first-child { + *margin-left: 0; +} +.btn:hover { + color: #333333; + text-decoration: none; + background-color: #e6e6e6; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -ms-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn.active, .btn:active { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + background-color: #e6e6e6; + background-color: #d9d9d9 \9; + outline: 0; +} +.btn.disabled, .btn[disabled] { + cursor: default; + background-image: none; + background-color: #e6e6e6; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn-large { + padding: 9px 14px; + font-size: 15px; + line-height: normal; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.btn-large [class^="icon-"] { + margin-top: 1px; +} +.btn-small { + padding: 5px 9px; + font-size: 11px; + line-height: 16px; +} +.btn-small [class^="icon-"] { + margin-top: -1px; +} +.btn-mini { + padding: 2px 6px; + font-size: 11px; + line-height: 14px; +} +.btn-primary, +.btn-primary:hover, +.btn-warning, +.btn-warning:hover, +.btn-danger, +.btn-danger:hover, +.btn-success, +.btn-success:hover, +.btn-info, +.btn-info:hover, +.btn-inverse, +.btn-inverse:hover { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + color: #ffffff; +} +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-dark.active { + color: rgba(255, 255, 255, 0.75); +} +.btn-primary { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(top, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-primary:hover, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + background-color: #0044cc; +} +.btn-primary:active, .btn-primary.active { + background-color: #003399 \9; +} +.btn-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -ms-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(top, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-warning:hover, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + background-color: #f89406; +} +.btn-warning:active, .btn-warning.active { + background-color: #c67605 \9; +} +.btn-danger { + background-color: #da4f49; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(top, #ee5f5b, #bd362f); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-danger:hover, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + background-color: #bd362f; +} +.btn-danger:active, .btn-danger.active { + background-color: #942a25 \9; +} +.btn-success { + background-color: #5bb75b; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -ms-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(top, #62c462, #51a351); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-success:hover, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + background-color: #51a351; +} +.btn-success:active, .btn-success.active { + background-color: #408140 \9; +} +.btn-info { + background-color: #49afcd; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(top, #5bc0de, #2f96b4); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-info:hover, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + background-color: #2f96b4; +} +.btn-info:active, .btn-info.active { + background-color: #24748c \9; +} +.btn-inverse { + background-color: #393939; + background-image: -moz-linear-gradient(top, #454545, #262626); + background-image: -ms-linear-gradient(top, #454545, #262626); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#454545), to(#262626)); + background-image: -webkit-linear-gradient(top, #454545, #262626); + background-image: -o-linear-gradient(top, #454545, #262626); + background-image: linear-gradient(top, #454545, #262626); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#454545', endColorstr='#262626', GradientType=0); + border-color: #262626 #262626 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + background-color: #262626; +} +.btn-inverse:active, .btn-inverse.active { + background-color: #0c0c0c \9; +} +button.btn, input[type="submit"].btn { + *padding-top: 2px; + *padding-bottom: 2px; +} +button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} +button.btn.large, input[type="submit"].btn.large { + *padding-top: 7px; + *padding-bottom: 7px; +} +button.btn.small, input[type="submit"].btn.small { + *padding-top: 3px; + *padding-bottom: 3px; +} +.btn-group { + position: relative; + *zoom: 1; + *margin-left: .3em; +} +.btn-group:before, .btn-group:after { + display: table; + content: ""; +} +.btn-group:after { + clear: both; +} +.btn-group:first-child { + *margin-left: 0; +} +.btn-group + .btn-group { + margin-left: 5px; +} +.btn-toolbar { + margin-top: 9px; + margin-bottom: 9px; +} +.btn-toolbar .btn-group { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} +.btn-group .btn { + position: relative; + float: left; + margin-left: -1px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-group .btn:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.btn-group .btn:last-child, .btn-group .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.btn-group .btn.large:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} +.btn-group .btn:hover, +.btn-group .btn:focus, +.btn-group .btn:active, +.btn-group .btn.active { + z-index: 2; +} +.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + *padding-top: 5px; + *padding-bottom: 5px; +} +.btn-group.open { + *z-index: 1000; +} +.btn-group.open .dropdown-menu { + display: block; + margin-top: 1px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.btn .caret { + margin-top: 7px; + margin-left: 0; +} +.btn:hover .caret, .open.btn-group .caret { + opacity: 1; + filter: alpha(opacity=100); +} +.btn-primary .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + opacity: 0.75; + filter: alpha(opacity=75); +} +.btn-small .caret { + margin-top: 4px; +} +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 18px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.alert, .alert-heading { + color: #c09853; +} +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 18px; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success, .alert-success .alert-heading { + color: #468847; +} +.alert-danger, .alert-error { + background-color: #f2dede; + border-color: #eed3d7; +} +.alert-danger, +.alert-error, +.alert-danger .alert-heading, +.alert-error .alert-heading { + color: #b94a48; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info, .alert-info .alert-heading { + color: #3a87ad; +} +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} +.alert-block > p, .alert-block > ul { + margin-bottom: 0; +} +.alert-block p + p { + margin-top: 5px; +} +.nav { + margin-left: 0; + margin-bottom: 18px; + list-style: none; +} +.nav > li > a { + display: block; +} +.nav > li > a:hover { + text-decoration: none; + background-color: #eeeeee; +} +.nav .nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 18px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} +.nav li + .nav-header { + margin-top: 9px; +} +.nav-list { + padding-left: 14px; + padding-right: 14px; + margin-bottom: 0; +} +.nav-list > li > a, .nav-list .nav-header { + margin-left: -15px; + margin-right: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.nav-list > li > a { + padding: 3px 15px; +} +.nav-list .active > a, .nav-list .active > a:hover { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} +.nav-list [class^="icon-"] { + margin-right: 2px; +} +.nav-tabs, .nav-pills { + *zoom: 1; +} +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + content: ""; +} +.nav-tabs:after, .nav-pills:after { + clear: both; +} +.nav-tabs > li, .nav-pills > li { + float: left; +} +.nav-tabs > li > a, .nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + margin-bottom: -1px; +} +.nav-tabs > li > a { + padding-top: 9px; + padding-bottom: 9px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > .active > a, .nav-tabs > .active > a:hover { + color: #555555; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.nav-pills .active > a, .nav-pills .active > a:hover { + color: #ffffff; + background-color: #0088cc; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li > a { + margin-right: 0; +} +.nav-tabs.nav-stacked { + border-bottom: 0; +} +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.nav-tabs.nav-stacked > li > a:hover { + border-color: #ddd; + z-index: 2; +} +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} +.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu { + margin-top: 1px; + border-width: 1px; +} +.nav-pills .dropdown-menu { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret { + border-top-color: #0088cc; + margin-top: 6px; +} +.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret { + border-top-color: #005580; +} +.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret { + border-top-color: #333333; +} +.nav > .dropdown.active > a:hover { + color: #000000; + cursor: pointer; +} +.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} +.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret { + border-top-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} +.tabs-stacked .open > a:hover { + border-color: #999999; +} +.tabbable { + *zoom: 1; +} +.tabbable:before, .tabbable:after { + display: table; + content: ""; +} +.tabbable:after { + clear: both; +} +.tab-content { + overflow: hidden; +} +.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs { + border-bottom: 0; +} +.tab-content > .tab-pane, .pill-content > .pill-pane { + display: none; +} +.tab-content > .active, .pill-content > .active { + display: block; +} +.tabs-below .nav-tabs { + border-top: 1px solid #ddd; +} +.tabs-below .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} +.tabs-below .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.tabs-below .nav-tabs > li > a:hover { + border-bottom-color: transparent; + border-top-color: #ddd; +} +.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover { + border-color: transparent #ddd #ddd #ddd; +} +.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li { + float: none; +} +.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} +.tabs-left .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} +.tabs-left .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.tabs-left .nav-tabs > li > a:hover { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} +.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} +.tabs-right .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} +.tabs-right .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.tabs-right .nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} +.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} +.navbar { + overflow: visible; + margin-bottom: 18px; +} +.navbar-inner { + padding-left: 20px; + padding-right: 20px; + background-color: #2c2c2c; + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} +.btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-left: 5px; + margin-right: 5px; + background-color: #2c2c2c; + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} +.btn-navbar:hover, +.btn-navbar:active, +.btn-navbar.active, +.btn-navbar.disabled, +.btn-navbar[disabled] { + background-color: #222222; +} +.btn-navbar:active, .btn-navbar.active { + background-color: #080808 \9; +} +.btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} +.nav-collapse.collapse { + height: auto; +} +.navbar .brand:hover { + text-decoration: none; +} +.navbar .brand { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + line-height: 1; + color: #ffffff; +} +.navbar .navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #999999; +} +.navbar .navbar-text a:hover { + color: #ffffff; + background-color: transparent; +} +.navbar .btn, .navbar .btn-group { + margin-top: 5px; +} +.navbar .btn-group .btn { + margin-top: 0; +} +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} +.navbar-form:before, .navbar-form:after { + display: table; + content: ""; +} +.navbar-form:after { + clear: both; +} +.navbar-form input, .navbar-form select { + display: inline-block; + margin-top: 5px; + margin-bottom: 0; +} +.navbar-form .radio, .navbar-form .checkbox { + margin-top: 5px; +} +.navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] { + margin-top: 3px; +} +.navbar-form .input-append, .navbar-form .input-prepend { + margin-top: 6px; + white-space: nowrap; +} +.navbar-form .input-append input, .navbar-form .input-prepend input { + margin-top: 0; +} +.navbar-search { + position: relative; + float: left; + margin-top: 6px; + margin-bottom: 0; +} +.navbar-search .search-query { + padding: 4px 9px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + color: #ffffff; + color: rgba(255, 255, 255, 0.75); + background: #666; + background: rgba(255, 255, 255, 0.3); + border: 1px solid #111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} +.navbar-search .search-query :-moz-placeholder { + color: #eeeeee; +} +.navbar-search .search-query::-webkit-input-placeholder { + color: #eeeeee; +} +.navbar-search .search-query:hover { + color: #ffffff; + background-color: #999999; + background-color: rgba(255, 255, 255, 0.5); +} +.navbar-search .search-query:focus, .navbar-search .search-query.focused { + padding: 5px 10px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + outline: 0; +} +.navbar-fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} +.navbar-fixed-top .navbar-inner { + padding-left: 0; + padding-right: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} +.navbar .nav.pull-right { + float: right; +} +.navbar .nav > li { + display: block; + float: left; +} +.navbar .nav > li > a { + float: none; + padding: 10px 10px 11px; + line-height: 19px; + color: #999999; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.navbar .nav > li > a:hover { + background-color: transparent; + color: #ffffff; + text-decoration: none; +} +.navbar .nav .active > a, .navbar .nav .active > a:hover { + color: #ffffff; + text-decoration: none; + background-color: #222222; +} +.navbar .divider-vertical { + height: 40px; + width: 1px; + margin: 0 9px; + overflow: hidden; + background-color: #222222; + border-right: 1px solid #333333; +} +.navbar .nav.pull-right { + margin-left: 10px; + margin-right: 0; +} +.navbar .dropdown-menu { + margin-top: 1px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.navbar .dropdown-menu:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + top: -7px; + left: 9px; +} +.navbar .dropdown-menu:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; + top: -6px; + left: 10px; +} +.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret { + border-top-color: #ffffff; +} +.navbar .nav .active .caret { + opacity: 1; + filter: alpha(opacity=100); +} +.navbar .nav .open > .dropdown-toggle, .navbar .nav .active > .dropdown-toggle, .navbar .nav .open.active > .dropdown-toggle { + background-color: transparent; +} +.navbar .nav .active > .dropdown-toggle:hover { + color: #ffffff; +} +.navbar .nav.pull-right .dropdown-menu { + left: auto; + right: 0; +} +.navbar .nav.pull-right .dropdown-menu:before { + left: auto; + right: 12px; +} +.navbar .nav.pull-right .dropdown-menu:after { + left: auto; + right: 13px; +} +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #fbfbfb; + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(top, #ffffff, #f5f5f5); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} +.breadcrumb li { + display: inline-block; + text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb .divider { + padding: 0 5px; + color: #999999; +} +.breadcrumb .active a { + color: #333333; +} +.pagination { + height: 36px; + margin: 18px 0; +} +.pagination ul { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-left: 0; + margin-bottom: 0; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination li { + display: inline; +} +.pagination a { + float: left; + padding: 0 14px; + line-height: 34px; + text-decoration: none; + border: 1px solid #ddd; + border-left-width: 0; +} +.pagination a:hover, .pagination .active a { + background-color: #f5f5f5; +} +.pagination .active a { + color: #999999; + cursor: default; +} +.pagination .disabled a, .pagination .disabled a:hover { + color: #999999; + background-color: transparent; + cursor: default; +} +.pagination li:first-child a { + border-left-width: 1px; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.pagination li:last-child a { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.pagination-centered { + text-align: center; +} +.pagination-right { + text-align: right; +} +.pager { + margin-left: 0; + margin-bottom: 18px; + list-style: none; + text-align: center; + *zoom: 1; +} +.pager:before, .pager:after { + display: table; + content: ""; +} +.pager:after { + clear: both; +} +.pager li { + display: inline; +} +.pager a { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.pager a:hover { + text-decoration: none; + background-color: #f5f5f5; +} +.pager .next a { + float: right; +} +.pager .previous a { + float: left; +} +.modal-open .dropdown-menu { + z-index: 2050; +} +.modal-open .dropdown.open { + *z-index: 2050; +} +.modal-open .popover { + z-index: 2060; +} +.modal-open .tooltip { + z-index: 2070; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop, .modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 1050; + max-height: 500px; + overflow: auto; + width: 560px; + margin: -250px 0 0 -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.modal.fade { + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -ms-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} +.modal.fade.in { + top: 50%; +} +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} +.modal-header .close { + margin-top: 2px; +} +.modal-body { + padding: 15px; +} +.modal-body .modal-form { + margin-bottom: 0; +} +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + *zoom: 1; +} +.modal-footer:before, .modal-footer:after { + display: table; + content: ""; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn { + float: right; + margin-left: 5px; + margin-bottom: 0; +} +.tooltip { + position: absolute; + z-index: 1020; + display: block; + visibility: visible; + padding: 5px; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} +.tooltip.top { + margin-top: -2px; +} +.tooltip.right { + margin-left: 2px; +} +.tooltip.bottom { + margin-top: 2px; +} +.tooltip.left { + margin-left: -2px; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + padding: 5px; +} +.popover.top { + margin-top: -5px; +} +.popover.right { + margin-left: 5px; +} +.popover.bottom { + margin-top: 5px; +} +.popover.left { + margin-left: -5px; +} +.popover.top .arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.popover.right .arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.popover.bottom .arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.popover.left .arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.popover .arrow { + position: absolute; + width: 0; + height: 0; +} +.popover-inner { + padding: 3px; + width: 280px; + overflow: hidden; + background: #000000; + background: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +} +.popover-title { + padding: 9px 15px; + line-height: 1; + background-color: #f5f5f5; + border-bottom: 1px solid #eee; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +.popover-content { + padding: 14px; + background-color: #ffffff; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.popover-content p, .popover-content ul, .popover-content ol { + margin-bottom: 0; +} +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} +.thumbnails:before, .thumbnails:after { + display: table; + content: ""; +} +.thumbnails:after { + clear: both; +} +.thumbnails > li { + float: left; + margin: 0 0 18px 20px; +} +.thumbnail { + display: block; + padding: 4px; + line-height: 1; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} +a.thumbnail:hover { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} +.thumbnail > img { + display: block; + max-width: 100%; + margin-left: auto; + margin-right: auto; +} +.thumbnail .caption { + padding: 9px; +} +.label { + padding: 2px 4px 3px; + font-size: 11.049999999999999px; + font-weight: bold; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #999999; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.label:hover { + color: #ffffff; + text-decoration: none; +} +.label-important { + background-color: #b94a48; +} +.label-important:hover { + background-color: #953b39; +} +.label-warning { + background-color: #f89406; +} +.label-warning:hover { + background-color: #c67605; +} +.label-success { + background-color: #468847; +} +.label-success:hover { + background-color: #356635; +} +.label-info { + background-color: #3a87ad; +} +.label-info:hover { + background-color: #2d6987; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} +@-moz-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} +.progress { + overflow: hidden; + height: 18px; + margin-bottom: 18px; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(top, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.progress .bar { + width: 0%; + height: 18px; + color: #ffffff; + font-size: 12px; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -ms-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(top, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -ms-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .bar { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-danger .bar { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(top, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); +} +.progress-danger.progress-striped .bar { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-success .bar { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(top, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); +} +.progress-success.progress-striped .bar { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-info .bar { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(top, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); +} +.progress-info.progress-striped .bar { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.accordion { + margin-bottom: 18px; +} +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.accordion-heading { + border-bottom: 0; +} +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} +.carousel { + position: relative; + margin-bottom: 18px; + line-height: 1; +} +.carousel-inner { + overflow: hidden; + width: 100%; + position: relative; +} +.carousel .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -ms-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel .item > img { + display: block; + line-height: 1; +} +.carousel .active, .carousel .next, .carousel .prev { + display: block; +} +.carousel .active { + left: 0; +} +.carousel .next, .carousel .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel .next { + left: 100%; +} +.carousel .prev { + left: -100%; +} +.carousel .next.left, .carousel .prev.right { + left: 0; +} +.carousel .active.left { + left: -100%; +} +.carousel .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} +.carousel-control.right { + left: auto; + right: 15px; +} +.carousel-control:hover { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-caption { + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 10px 15px 5px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} +.carousel-caption h4, .carousel-caption p { + color: #ffffff; +} +.hero-unit { + padding: 60px; + margin-bottom: 30px; + background-color: #f5f5f5; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; +} +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 27px; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.hide { + display: none; +} +.show { + display: block; +} +.invisible { + visibility: hidden; +} diff --git a/css/bootstrap-2.0.1.min.css b/css/bootstrap-2.0.1.min.css new file mode 100644 index 0000000..30dcae0 --- /dev/null +++ b/css/bootstrap-2.0.1.min.css @@ -0,0 +1,632 @@ +article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} +audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} +audio:not([controls]){display:none;} +html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} +a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +a:hover,a:active{outline:0;} +sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} +sup{top:-0.5em;} +sub{bottom:-0.25em;} +img{max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;} +button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} +button,input{*overflow:visible;line-height:normal;} +button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} +button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} +input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} +input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} +textarea{overflow:auto;vertical-align:top;} +.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} +.clearfix:after{clear:both;} +body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;} +a{color:#0088cc;text-decoration:none;} +a:hover{color:#005580;text-decoration:underline;} +.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} +.row:after{clear:both;} +[class*="span"]{float:left;margin-left:20px;} +.span1{width:60px;} +.span2{width:140px;} +.span3{width:220px;} +.span4{width:300px;} +.span5{width:380px;} +.span6{width:460px;} +.span7{width:540px;} +.span8{width:620px;} +.span9{width:700px;} +.span10{width:780px;} +.span11{width:860px;} +.span12,.container{width:940px;} +.offset1{margin-left:100px;} +.offset2{margin-left:180px;} +.offset3{margin-left:260px;} +.offset4{margin-left:340px;} +.offset5{margin-left:420px;} +.offset6{margin-left:500px;} +.offset7{margin-left:580px;} +.offset8{margin-left:660px;} +.offset9{margin-left:740px;} +.offset10{margin-left:820px;} +.offset11{margin-left:900px;} +.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} +.row-fluid:after{clear:both;} +.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;} +.row-fluid>[class*="span"]:first-child{margin-left:0;} +.row-fluid>.span1{width:6.382978723%;} +.row-fluid>.span2{width:14.89361702%;} +.row-fluid>.span3{width:23.404255317%;} +.row-fluid>.span4{width:31.914893614%;} +.row-fluid>.span5{width:40.425531911%;} +.row-fluid>.span6{width:48.93617020799999%;} +.row-fluid>.span7{width:57.446808505%;} +.row-fluid>.span8{width:65.95744680199999%;} +.row-fluid>.span9{width:74.468085099%;} +.row-fluid>.span10{width:82.97872339599999%;} +.row-fluid>.span11{width:91.489361693%;} +.row-fluid>.span12{width:99.99999998999999%;} +.container{width:940px;margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} +.container:after{clear:both;} +.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} +.container-fluid:after{clear:both;} +p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;} +.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} +h1,h2,h3,h4,h5,h6{margin:0;font-weight:bold;color:#333333;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} +h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} +h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} +h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;} +h4,h5,h6{line-height:18px;} +h4{font-size:14px;}h4 small{font-size:12px;} +h5{font-size:12px;} +h6{font-size:11px;color:#999999;text-transform:uppercase;} +.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;} +.page-header h1{line-height:1;} +ul,ol{padding:0;margin:0 0 9px 25px;} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} +ul{list-style:disc;} +ol{list-style:decimal;} +li{line-height:18px;} +ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} +dl{margin-bottom:18px;} +dt,dd{line-height:18px;} +dt{font-weight:bold;} +dd{margin-left:9px;} +hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} +strong{font-weight:bold;} +em{font-style:italic;} +.muted{color:#999999;} +abbr{font-size:90%;text-transform:uppercase;border-bottom:1px dotted #ddd;cursor:help;} +blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} +blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} +blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} +q:before,q:after,blockquote:before,blockquote:after{content:"";} +address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;} +small{font-size:100%;} +cite{font-style:normal;} +code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +code{padding:3px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} +pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;}pre.prettyprint{margin-bottom:18px;} +pre code{padding:0;color:inherit;background-color:transparent;border:0;} +.pre-scrollable{max-height:340px;overflow-y:scroll;} +form{margin:0 0 18px;} +fieldset{padding:0;margin:0;border:0;} +legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}legend small{font-size:13.5px;color:#999999;} +label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;} +input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} +label{display:block;margin-bottom:5px;color:#333333;} +input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.uneditable-textarea{width:auto;height:auto;} +label input,label textarea,label select{display:block;} +input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0 \9;} +input[type="image"]{border:0;} +input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;} +select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} +input[type="file"]{line-height:18px \9;} +select{width:220px;background-color:#ffffff;} +select[multiple],select[size]{height:auto;} +input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +textarea{height:auto;} +input[type="hidden"]{display:none;} +.radio,.checkbox{padding-left:18px;} +.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} +.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} +.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} +.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} +input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;} +input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;} +input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.input-mini{width:60px;} +.input-small{width:90px;} +.input-medium{width:150px;} +.input-large{width:210px;} +.input-xlarge{width:270px;} +.input-xxlarge{width:530px;} +input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;} +input.span1,textarea.span1,.uneditable-input.span1{width:50px;} +input.span2,textarea.span2,.uneditable-input.span2{width:130px;} +input.span3,textarea.span3,.uneditable-input.span3{width:210px;} +input.span4,textarea.span4,.uneditable-input.span4{width:290px;} +input.span5,textarea.span5,.uneditable-input.span5{width:370px;} +input.span6,textarea.span6,.uneditable-input.span6{width:450px;} +input.span7,textarea.span7,.uneditable-input.span7{width:530px;} +input.span8,textarea.span8,.uneditable-input.span8{width:610px;} +input.span9,textarea.span9,.uneditable-input.span9{width:690px;} +input.span10,textarea.span10,.uneditable-input.span10{width:770px;} +input.span11,textarea.span11,.uneditable-input.span11{width:850px;} +input.span12,textarea.span12,.uneditable-input.span12{width:930px;} +input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} +.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} +.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;} +.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} +.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} +.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;} +.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} +.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} +.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;} +.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} +input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} +.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;} +.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} +:-moz-placeholder{color:#999999;} +::-webkit-input-placeholder{color:#999999;} +.help-block{display:block;margin-top:5px;margin-bottom:0;color:#999999;} +.help-inline{display:inline-block;*display:inline;*zoom:1;margin-bottom:9px;vertical-align:middle;padding-left:5px;} +.input-prepend,.input-append{margin-bottom:5px;*zoom:1;}.input-prepend:before,.input-append:before,.input-prepend:after,.input-append:after{display:table;content:"";} +.input-prepend:after,.input-append:after{clear:both;} +.input-prepend input,.input-append input,.input-prepend .uneditable-input,.input-append .uneditable-input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} +.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} +.input-prepend .add-on,.input-append .add-on{float:left;display:block;width:auto;min-width:16px;height:18px;margin-right:-1px;padding:4px 5px;font-weight:normal;line-height:18px;color:#999999;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#f5f5f5;border:1px solid #ccc;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;} +.input-prepend .add-on{*margin-top:1px;} +.input-append input,.input-append .uneditable-input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-append .uneditable-input{border-left-color:#eee;border-right-color:#ccc;} +.input-append .add-on{margin-right:0;margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} +.input-append input:first-child{*margin-left:-160px;}.input-append input:first-child+.add-on{*margin-left:-21px;} +.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} +.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input{display:inline-block;margin-bottom:0;} +.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} +.form-search label,.form-inline label,.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{display:inline-block;} +.form-search .input-append .add-on,.form-inline .input-prepend .add-on,.form-search .input-append .add-on,.form-inline .input-prepend .add-on{vertical-align:middle;} +.form-search .radio,.form-inline .radio,.form-search .checkbox,.form-inline .checkbox{margin-bottom:0;vertical-align:middle;} +.control-group{margin-bottom:9px;} +legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} +.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} +.form-horizontal .control-group:after{clear:both;} +.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right;} +.form-horizontal .controls{margin-left:160px;} +.form-horizontal .form-actions{padding-left:160px;} +table{max-width:100%;border-collapse:collapse;border-spacing:0;} +.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #ddd;} +.table th{font-weight:bold;} +.table thead th{vertical-align:bottom;} +.table thead:first-child tr th,.table thead:first-child tr td{border-top:0;} +.table tbody+tbody{border-top:2px solid #ddd;} +.table-condensed th,.table-condensed td{padding:4px 5px;} +.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th+th,.table-bordered td+td,.table-bordered th+td,.table-bordered td+th{border-left:1px solid #ddd;} +.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} +.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} +.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} +.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} +.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} +.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} +.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;} +table .span1{float:none;width:44px;margin-left:0;} +table .span2{float:none;width:124px;margin-left:0;} +table .span3{float:none;width:204px;margin-left:0;} +table .span4{float:none;width:284px;margin-left:0;} +table .span5{float:none;width:364px;margin-left:0;} +table .span6{float:none;width:444px;margin-left:0;} +table .span7{float:none;width:524px;margin-left:0;} +table .span8{float:none;width:604px;margin-left:0;} +table .span9{float:none;width:684px;margin-left:0;} +table .span10{float:none;width:764px;margin-left:0;} +table .span11{float:none;width:844px;margin-left:0;} +table .span12{float:none;width:924px;margin-left:0;} +[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;} +.icon-white{background-image:url("../img/glyphicons-halflings-white.png");} +.icon-glass{background-position:0 0;} +.icon-music{background-position:-24px 0;} +.icon-search{background-position:-48px 0;} +.icon-envelope{background-position:-72px 0;} +.icon-heart{background-position:-96px 0;} +.icon-star{background-position:-120px 0;} +.icon-star-empty{background-position:-144px 0;} +.icon-user{background-position:-168px 0;} +.icon-film{background-position:-192px 0;} +.icon-th-large{background-position:-216px 0;} +.icon-th{background-position:-240px 0;} +.icon-th-list{background-position:-264px 0;} +.icon-ok{background-position:-288px 0;} +.icon-remove{background-position:-312px 0;} +.icon-zoom-in{background-position:-336px 0;} +.icon-zoom-out{background-position:-360px 0;} +.icon-off{background-position:-384px 0;} +.icon-signal{background-position:-408px 0;} +.icon-cog{background-position:-432px 0;} +.icon-trash{background-position:-456px 0;} +.icon-home{background-position:0 -24px;} +.icon-file{background-position:-24px -24px;} +.icon-time{background-position:-48px -24px;} +.icon-road{background-position:-72px -24px;} +.icon-download-alt{background-position:-96px -24px;} +.icon-download{background-position:-120px -24px;} +.icon-upload{background-position:-144px -24px;} +.icon-inbox{background-position:-168px -24px;} +.icon-play-circle{background-position:-192px -24px;} +.icon-repeat{background-position:-216px -24px;} +.icon-refresh{background-position:-240px -24px;} +.icon-list-alt{background-position:-264px -24px;} +.icon-lock{background-position:-287px -24px;} +.icon-flag{background-position:-312px -24px;} +.icon-headphones{background-position:-336px -24px;} +.icon-volume-off{background-position:-360px -24px;} +.icon-volume-down{background-position:-384px -24px;} +.icon-volume-up{background-position:-408px -24px;} +.icon-qrcode{background-position:-432px -24px;} +.icon-barcode{background-position:-456px -24px;} +.icon-tag{background-position:0 -48px;} +.icon-tags{background-position:-25px -48px;} +.icon-book{background-position:-48px -48px;} +.icon-bookmark{background-position:-72px -48px;} +.icon-print{background-position:-96px -48px;} +.icon-camera{background-position:-120px -48px;} +.icon-font{background-position:-144px -48px;} +.icon-bold{background-position:-167px -48px;} +.icon-italic{background-position:-192px -48px;} +.icon-text-height{background-position:-216px -48px;} +.icon-text-width{background-position:-240px -48px;} +.icon-align-left{background-position:-264px -48px;} +.icon-align-center{background-position:-288px -48px;} +.icon-align-right{background-position:-312px -48px;} +.icon-align-justify{background-position:-336px -48px;} +.icon-list{background-position:-360px -48px;} +.icon-indent-left{background-position:-384px -48px;} +.icon-indent-right{background-position:-408px -48px;} +.icon-facetime-video{background-position:-432px -48px;} +.icon-picture{background-position:-456px -48px;} +.icon-pencil{background-position:0 -72px;} +.icon-map-marker{background-position:-24px -72px;} +.icon-adjust{background-position:-48px -72px;} +.icon-tint{background-position:-72px -72px;} +.icon-edit{background-position:-96px -72px;} +.icon-share{background-position:-120px -72px;} +.icon-check{background-position:-144px -72px;} +.icon-move{background-position:-168px -72px;} +.icon-step-backward{background-position:-192px -72px;} +.icon-fast-backward{background-position:-216px -72px;} +.icon-backward{background-position:-240px -72px;} +.icon-play{background-position:-264px -72px;} +.icon-pause{background-position:-288px -72px;} +.icon-stop{background-position:-312px -72px;} +.icon-forward{background-position:-336px -72px;} +.icon-fast-forward{background-position:-360px -72px;} +.icon-step-forward{background-position:-384px -72px;} +.icon-eject{background-position:-408px -72px;} +.icon-chevron-left{background-position:-432px -72px;} +.icon-chevron-right{background-position:-456px -72px;} +.icon-plus-sign{background-position:0 -96px;} +.icon-minus-sign{background-position:-24px -96px;} +.icon-remove-sign{background-position:-48px -96px;} +.icon-ok-sign{background-position:-72px -96px;} +.icon-question-sign{background-position:-96px -96px;} +.icon-info-sign{background-position:-120px -96px;} +.icon-screenshot{background-position:-144px -96px;} +.icon-remove-circle{background-position:-168px -96px;} +.icon-ok-circle{background-position:-192px -96px;} +.icon-ban-circle{background-position:-216px -96px;} +.icon-arrow-left{background-position:-240px -96px;} +.icon-arrow-right{background-position:-264px -96px;} +.icon-arrow-up{background-position:-289px -96px;} +.icon-arrow-down{background-position:-312px -96px;} +.icon-share-alt{background-position:-336px -96px;} +.icon-resize-full{background-position:-360px -96px;} +.icon-resize-small{background-position:-384px -96px;} +.icon-plus{background-position:-408px -96px;} +.icon-minus{background-position:-433px -96px;} +.icon-asterisk{background-position:-456px -96px;} +.icon-exclamation-sign{background-position:0 -120px;} +.icon-gift{background-position:-24px -120px;} +.icon-leaf{background-position:-48px -120px;} +.icon-fire{background-position:-72px -120px;} +.icon-eye-open{background-position:-96px -120px;} +.icon-eye-close{background-position:-120px -120px;} +.icon-warning-sign{background-position:-144px -120px;} +.icon-plane{background-position:-168px -120px;} +.icon-calendar{background-position:-192px -120px;} +.icon-random{background-position:-216px -120px;} +.icon-comment{background-position:-240px -120px;} +.icon-magnet{background-position:-264px -120px;} +.icon-chevron-up{background-position:-288px -120px;} +.icon-chevron-down{background-position:-313px -119px;} +.icon-retweet{background-position:-336px -120px;} +.icon-shopping-cart{background-position:-360px -120px;} +.icon-folder-close{background-position:-384px -120px;} +.icon-folder-open{background-position:-408px -120px;} +.icon-resize-vertical{background-position:-432px -119px;} +.icon-resize-horizontal{background-position:-456px -118px;} +.dropdown{position:relative;} +.dropdown-toggle{*margin-bottom:-3px;} +.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} +.caret{display:inline-block;width:0;height:0;text-indent:-99999px;*text-indent:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"\2193";} +.dropdown .caret{margin-top:8px;margin-left:2px;} +.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);} +.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;_width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.bottom-up{top:auto;bottom:100%;margin-bottom:2px;} +.dropdown-menu .divider{height:1px;margin:5px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} +.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#555555;white-space:nowrap;} +.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;} +.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} +.dropdown.open .dropdown-menu{display:block;} +.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} +.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} +.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;} +.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;} +.btn{display:inline-block;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);*margin-left:.3em;}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;} +.btn:active,.btn.active{background-color:#cccccc \9;} +.btn:first-child{*margin-left:0;} +.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} +.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0;} +.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.btn-large [class^="icon-"]{margin-top:1px;} +.btn-small{padding:5px 9px;font-size:11px;line-height:16px;} +.btn-small [class^="icon-"]{margin-top:-1px;} +.btn-mini{padding:2px 6px;font-size:11px;line-height:14px;} +.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} +.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-dark.active{color:rgba(255, 255, 255, 0.75);} +.btn-primary{background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-ms-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(top, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0044cc;} +.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} +.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} +.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} +.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} +.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} +.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} +.btn-success:active,.btn-success.active{background-color:#408140 \9;} +.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} +.btn-info:active,.btn-info.active{background-color:#24748c \9;} +.btn-inverse{background-color:#393939;background-image:-moz-linear-gradient(top, #454545, #262626);background-image:-ms-linear-gradient(top, #454545, #262626);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#454545), to(#262626));background-image:-webkit-linear-gradient(top, #454545, #262626);background-image:-o-linear-gradient(top, #454545, #262626);background-image:linear-gradient(top, #454545, #262626);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#454545', endColorstr='#262626', GradientType=0);border-color:#262626 #262626 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#262626;} +.btn-inverse:active,.btn-inverse.active{background-color:#0c0c0c \9;} +button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} +button.btn.large,input[type="submit"].btn.large{*padding-top:7px;*padding-bottom:7px;} +button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom:3px;} +.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} +.btn-group:after{clear:both;} +.btn-group:first-child{*margin-left:0;} +.btn-group+.btn-group{margin-left:5px;} +.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;} +.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} +.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} +.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;} +.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} +.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:5px;*padding-bottom:5px;} +.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);} +.btn .caret{margin-top:7px;margin-left:0;} +.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} +.btn-primary .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} +.btn-small .caret{margin-top:4px;} +.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.alert,.alert-heading{color:#c09853;} +.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} +.alert-success{background-color:#dff0d8;border-color:#d6e9c6;} +.alert-success,.alert-success .alert-heading{color:#468847;} +.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;} +.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading{color:#b94a48;} +.alert-info{background-color:#d9edf7;border-color:#bce8f1;} +.alert-info,.alert-info .alert-heading{color:#3a87ad;} +.alert-block{padding-top:14px;padding-bottom:14px;} +.alert-block>p,.alert-block>ul{margin-bottom:0;} +.alert-block p+p{margin-top:5px;} +.nav{margin-left:0;margin-bottom:18px;list-style:none;} +.nav>li>a{display:block;} +.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} +.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} +.nav li+.nav-header{margin-top:9px;} +.nav-list{padding-left:14px;padding-right:14px;margin-bottom:0;} +.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} +.nav-list>li>a{padding:3px 15px;} +.nav-list .active>a,.nav-list .active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} +.nav-list [class^="icon-"]{margin-right:2px;} +.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} +.nav-tabs:after,.nav-pills:after{clear:both;} +.nav-tabs>li,.nav-pills>li{float:left;} +.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} +.nav-tabs{border-bottom:1px solid #ddd;} +.nav-tabs>li{margin-bottom:-1px;} +.nav-tabs>li>a{padding-top:9px;padding-bottom:9px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} +.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} +.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.nav-pills .active>a,.nav-pills .active>a:hover{color:#ffffff;background-color:#0088cc;} +.nav-stacked>li{float:none;} +.nav-stacked>li>a{margin-right:0;} +.nav-tabs.nav-stacked{border-bottom:0;} +.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} +.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} +.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} +.nav-pills.nav-stacked>li>a{margin-bottom:3px;} +.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} +.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;} +.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;margin-top:6px;} +.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;} +.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;} +.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} +.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} +.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;opacity:1;filter:alpha(opacity=100);} +.tabs-stacked .open>a:hover{border-color:#999999;} +.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} +.tabbable:after{clear:both;} +.tab-content{overflow:hidden;} +.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;} +.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} +.tab-content>.active,.pill-content>.active{display:block;} +.tabs-below .nav-tabs{border-top:1px solid #ddd;} +.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;} +.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} +.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;} +.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;} +.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} +.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} +.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} +.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} +.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} +.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} +.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} +.navbar{overflow:visible;margin-bottom:18px;} +.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} +.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} +.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;} +.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} +.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} +.nav-collapse.collapse{height:auto;} +.navbar .brand:hover{text-decoration:none;} +.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;} +.navbar .navbar-text{margin-bottom:0;line-height:40px;color:#999999;}.navbar .navbar-text a:hover{color:#ffffff;background-color:transparent;} +.navbar .btn,.navbar .btn-group{margin-top:5px;} +.navbar .btn-group .btn{margin-top:0;} +.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} +.navbar-form:after{clear:both;} +.navbar-form input,.navbar-form select{display:inline-block;margin-top:5px;margin-bottom:0;} +.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} +.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} +.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} +.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;color:rgba(255, 255, 255, 0.75);background:#666;background:rgba(255, 255, 255, 0.3);border:1px solid #111;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query :-moz-placeholder{color:#eeeeee;} +.navbar-search .search-query::-webkit-input-placeholder{color:#eeeeee;} +.navbar-search .search-query:hover{color:#ffffff;background-color:#999999;background-color:rgba(255, 255, 255, 0.5);} +.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} +.navbar-fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;} +.navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} +.navbar .nav.pull-right{float:right;} +.navbar .nav>li{display:block;float:left;} +.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} +.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;} +.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;} +.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;} +.navbar .nav.pull-right{margin-left:10px;margin-right:0;} +.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} +.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} +.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;} +.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);} +.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;} +.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;} +.navbar .nav.pull-right .dropdown-menu{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before{left:auto;right:12px;} +.navbar .nav.pull-right .dropdown-menu:after{left:auto;right:13px;} +.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;text-shadow:0 1px 0 #ffffff;} +.breadcrumb .divider{padding:0 5px;color:#999999;} +.breadcrumb .active a{color:#333333;} +.pagination{height:36px;margin:18px 0;} +.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} +.pagination li{display:inline;} +.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} +.pagination a:hover,.pagination .active a{background-color:#f5f5f5;} +.pagination .active a{color:#999999;cursor:default;} +.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} +.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} +.pagination-centered{text-align:center;} +.pagination-right{text-align:right;} +.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";} +.pager:after{clear:both;} +.pager li{display:inline;} +.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.pager a:hover{text-decoration:none;background-color:#f5f5f5;} +.pager .next a{float:right;} +.pager .previous a{float:left;} +.modal-open .dropdown-menu{z-index:2050;} +.modal-open .dropdown.open{*z-index:2050;} +.modal-open .popover{z-index:2060;} +.modal-open .tooltip{z-index:2070;} +.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} +.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} +.modal{position:fixed;top:50%;left:50%;z-index:1050;max-height:500px;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} +.modal.fade.in{top:50%;} +.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} +.modal-body{padding:15px;} +.modal-body .modal-form{margin-bottom:0;} +.modal-footer{padding:14px 15px 15px;margin-bottom:0;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} +.modal-footer:after{clear:both;} +.modal-footer .btn{float:right;margin-left:5px;margin-bottom:0;} +.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} +.tooltip.top{margin-top:-2px;} +.tooltip.right{margin-left:2px;} +.tooltip.bottom{margin-top:2px;} +.tooltip.left{margin-left:-2px;} +.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} +.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} +.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} +.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.tooltip-arrow{position:absolute;width:0;height:0;} +.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;} +.popover.right{margin-left:5px;} +.popover.bottom{margin-top:5px;} +.popover.left{margin-left:-5px;} +.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} +.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} +.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} +.popover .arrow{position:absolute;width:0;height:0;} +.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} +.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;} +.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;} +.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";} +.thumbnails:after{clear:both;} +.thumbnails>li{float:left;margin:0 0 18px 20px;} +.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);} +a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} +.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} +.thumbnail .caption{padding:9px;} +.label{padding:2px 4px 3px;font-size:11.049999999999999px;font-weight:bold;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.label:hover{color:#ffffff;text-decoration:none;} +.label-important{background-color:#b94a48;} +.label-important:hover{background-color:#953b39;} +.label-warning{background-color:#f89406;} +.label-warning:hover{background-color:#c67605;} +.label-success{background-color:#468847;} +.label-success:hover{background-color:#356635;} +.label-info{background-color:#3a87ad;} +.label-info:hover{background-color:#2d6987;} +@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} +.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} +.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} +.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} +.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} +.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);} +.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} +.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} +.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} +.accordion{margin-bottom:18px;} +.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.accordion-heading{border-bottom:0;} +.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} +.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} +.carousel{position:relative;margin-bottom:18px;line-height:1;} +.carousel-inner{overflow:hidden;width:100%;position:relative;} +.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} +.carousel .item>img{display:block;line-height:1;} +.carousel .active,.carousel .next,.carousel .prev{display:block;} +.carousel .active{left:0;} +.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;} +.carousel .next{left:100%;} +.carousel .prev{left:-100%;} +.carousel .next.left,.carousel .prev.right{left:0;} +.carousel .active.left{left:-100%;} +.carousel .active.right{left:100%;} +.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} +.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} +.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} +.carousel-caption h4,.carousel-caption p{color:#ffffff;} +.hero-unit{padding:60px;margin-bottom:30px;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} +.hero-unit p{font-size:18px;font-weight:200;line-height:27px;} +.pull-right{float:right;} +.pull-left{float:left;} +.hide{display:none;} +.show{display:block;} +.invisible{visibility:hidden;} diff --git a/css/bootstrap-responsive-2.0.1.css b/css/bootstrap-responsive-2.0.1.css new file mode 100644 index 0000000..d77d97d --- /dev/null +++ b/css/bootstrap-responsive-2.0.1.css @@ -0,0 +1,581 @@ +/*! + * Bootstrap Responsive v2.0.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +.clearfix { + *zoom: 1; +} +.clearfix:before, .clearfix:after { + display: table; + content: ""; +} +.clearfix:after { + clear: both; +} +.hidden { + display: none; + visibility: hidden; +} +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 18px; + } + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 28px; + /* Make inputs at least the height of their button counterpart */ + + /* Makes inputs behave like true block-level elements */ + + -webkit-box-sizing: border-box; + /* Older Webkit */ + + -moz-box-sizing: border-box; + /* Older FF */ + + -ms-box-sizing: border-box; + /* IE8 */ + + box-sizing: border-box; + /* CSS3 spec*/ + + } + .input-prepend input[class*="span"], .input-append input[class*="span"] { + width: auto; + } + input[type="checkbox"], input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-group > label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-left: 10px; + padding-right: 10px; + } + .modal { + position: absolute; + top: 10px; + left: 10px; + right: 10px; + width: auto; + margin: 0; + } + .modal.fade.in { + top: auto; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} +@media (max-width: 767px) { + .container { + width: auto; + padding: 0 20px; + } + .row-fluid { + width: 100%; + } + .row { + margin-left: 0; + } + .row > [class*="span"], .row-fluid > [class*="span"] { + float: none; + display: block; + width: auto; + margin: 0; + } +} +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, .row:after { + display: table; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + margin-left: 20px; + } + .span1 { + width: 42px; + } + .span2 { + width: 104px; + } + .span3 { + width: 166px; + } + .span4 { + width: 228px; + } + .span5 { + width: 290px; + } + .span6 { + width: 352px; + } + .span7 { + width: 414px; + } + .span8 { + width: 476px; + } + .span9 { + width: 538px; + } + .span10 { + width: 600px; + } + .span11 { + width: 662px; + } + .span12, .container { + width: 724px; + } + .offset1 { + margin-left: 82px; + } + .offset2 { + margin-left: 144px; + } + .offset3 { + margin-left: 206px; + } + .offset4 { + margin-left: 268px; + } + .offset5 { + margin-left: 330px; + } + .offset6 { + margin-left: 392px; + } + .offset7 { + margin-left: 454px; + } + .offset8 { + margin-left: 516px; + } + .offset9 { + margin-left: 578px; + } + .offset10 { + margin-left: 640px; + } + .offset11 { + margin-left: 702px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, .row-fluid:after { + display: table; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid > [class*="span"] { + float: left; + margin-left: 2.762430939%; + } + .row-fluid > [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid > .span1 { + width: 5.801104972%; + } + .row-fluid > .span2 { + width: 14.364640883%; + } + .row-fluid > .span3 { + width: 22.928176794%; + } + .row-fluid > .span4 { + width: 31.491712705%; + } + .row-fluid > .span5 { + width: 40.055248616%; + } + .row-fluid > .span6 { + width: 48.618784527%; + } + .row-fluid > .span7 { + width: 57.182320438000005%; + } + .row-fluid > .span8 { + width: 65.74585634900001%; + } + .row-fluid > .span9 { + width: 74.30939226%; + } + .row-fluid > .span10 { + width: 82.87292817100001%; + } + .row-fluid > .span11 { + width: 91.436464082%; + } + .row-fluid > .span12 { + width: 99.999999993%; + } + input.span1, textarea.span1, .uneditable-input.span1 { + width: 32px; + } + input.span2, textarea.span2, .uneditable-input.span2 { + width: 94px; + } + input.span3, textarea.span3, .uneditable-input.span3 { + width: 156px; + } + input.span4, textarea.span4, .uneditable-input.span4 { + width: 218px; + } + input.span5, textarea.span5, .uneditable-input.span5 { + width: 280px; + } + input.span6, textarea.span6, .uneditable-input.span6 { + width: 342px; + } + input.span7, textarea.span7, .uneditable-input.span7 { + width: 404px; + } + input.span8, textarea.span8, .uneditable-input.span8 { + width: 466px; + } + input.span9, textarea.span9, .uneditable-input.span9 { + width: 528px; + } + input.span10, textarea.span10, .uneditable-input.span10 { + width: 590px; + } + input.span11, textarea.span11, .uneditable-input.span11 { + width: 652px; + } + input.span12, textarea.span12, .uneditable-input.span12 { + width: 714px; + } +} +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top { + position: static; + margin-bottom: 18px; + } + .navbar-fixed-top .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-left: 10px; + padding-right: 10px; + margin: 0 0 0 -5px; + } + .navbar .nav-collapse { + clear: left; + } + .navbar .nav { + float: none; + margin: 0 0 9px; + } + .navbar .nav > li { + float: none; + } + .navbar .nav > li > a { + margin-bottom: 2px; + } + .navbar .nav > .divider-vertical { + display: none; + } + .navbar .nav .nav-header { + color: #999999; + text-shadow: none; + } + .navbar .nav > li > a, .navbar .dropdown-menu a { + padding: 6px 15px; + font-weight: bold; + color: #999999; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .navbar .dropdown-menu li + li a { + margin-bottom: 2px; + } + .navbar .nav > li > a:hover, .navbar .dropdown-menu a:hover { + background-color: #222222; + } + .navbar .dropdown-menu { + position: static; + top: auto; + left: auto; + float: none; + display: block; + max-width: none; + margin: 0 15px; + padding: 0; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .navbar .dropdown-menu:before, .navbar .dropdown-menu:after { + display: none; + } + .navbar .dropdown-menu .divider { + display: none; + } + .navbar-form, .navbar-search { + float: none; + padding: 9px 15px; + margin: 9px 0; + border-top: 1px solid #222222; + border-bottom: 1px solid #222222; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar .nav.pull-right { + float: none; + margin-left: 0; + } + .navbar-static .navbar-inner { + padding-left: 10px; + padding-right: 10px; + } + .btn-navbar { + display: block; + } + .nav-collapse { + overflow: hidden; + height: 0; + } +} +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + } +} +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, .row:after { + display: table; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + margin-left: 30px; + } + .span1 { + width: 70px; + } + .span2 { + width: 170px; + } + .span3 { + width: 270px; + } + .span4 { + width: 370px; + } + .span5 { + width: 470px; + } + .span6 { + width: 570px; + } + .span7 { + width: 670px; + } + .span8 { + width: 770px; + } + .span9 { + width: 870px; + } + .span10 { + width: 970px; + } + .span11 { + width: 1070px; + } + .span12, .container { + width: 1170px; + } + .offset1 { + margin-left: 130px; + } + .offset2 { + margin-left: 230px; + } + .offset3 { + margin-left: 330px; + } + .offset4 { + margin-left: 430px; + } + .offset5 { + margin-left: 530px; + } + .offset6 { + margin-left: 630px; + } + .offset7 { + margin-left: 730px; + } + .offset8 { + margin-left: 830px; + } + .offset9 { + margin-left: 930px; + } + .offset10 { + margin-left: 1030px; + } + .offset11 { + margin-left: 1130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, .row-fluid:after { + display: table; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid > [class*="span"] { + float: left; + margin-left: 2.564102564%; + } + .row-fluid > [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid > .span1 { + width: 5.982905983%; + } + .row-fluid > .span2 { + width: 14.529914530000001%; + } + .row-fluid > .span3 { + width: 23.076923077%; + } + .row-fluid > .span4 { + width: 31.623931624%; + } + .row-fluid > .span5 { + width: 40.170940171000005%; + } + .row-fluid > .span6 { + width: 48.717948718%; + } + .row-fluid > .span7 { + width: 57.264957265%; + } + .row-fluid > .span8 { + width: 65.81196581200001%; + } + .row-fluid > .span9 { + width: 74.358974359%; + } + .row-fluid > .span10 { + width: 82.905982906%; + } + .row-fluid > .span11 { + width: 91.45299145300001%; + } + .row-fluid > .span12 { + width: 100%; + } + input.span1, textarea.span1, .uneditable-input.span1 { + width: 60px; + } + input.span2, textarea.span2, .uneditable-input.span2 { + width: 160px; + } + input.span3, textarea.span3, .uneditable-input.span3 { + width: 260px; + } + input.span4, textarea.span4, .uneditable-input.span4 { + width: 360px; + } + input.span5, textarea.span5, .uneditable-input.span5 { + width: 460px; + } + input.span6, textarea.span6, .uneditable-input.span6 { + width: 560px; + } + input.span7, textarea.span7, .uneditable-input.span7 { + width: 660px; + } + input.span8, textarea.span8, .uneditable-input.span8 { + width: 760px; + } + input.span9, textarea.span9, .uneditable-input.span9 { + width: 860px; + } + input.span10, textarea.span10, .uneditable-input.span10 { + width: 960px; + } + input.span11, textarea.span11, .uneditable-input.span11 { + width: 1060px; + } + input.span12, textarea.span12, .uneditable-input.span12 { + width: 1160px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } +} diff --git a/css/bootstrap-responsive-2.0.1.min.css b/css/bootstrap-responsive-2.0.1.min.css new file mode 100644 index 0000000..2d16955 --- /dev/null +++ b/css/bootstrap-responsive-2.0.1.min.css @@ -0,0 +1,4 @@ +.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} +.clearfix:after{clear:both;} +.hidden{display:none;visibility:hidden;} +@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:767px){.container{width:auto;padding:0 20px;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .span1{width:42px;} .span2{width:104px;} .span3{width:166px;} .span4{width:228px;} .span5{width:290px;} .span6{width:352px;} .span7{width:414px;} .span8{width:476px;} .span9{width:538px;} .span10{width:600px;} .span11{width:662px;} .span12,.container{width:724px;} .offset1{margin-left:82px;} .offset2{margin-left:144px;} .offset3{margin-left:206px;} .offset4{margin-left:268px;} .offset5{margin-left:330px;} .offset6{margin-left:392px;} .offset7{margin-left:454px;} .offset8{margin-left:516px;} .offset9{margin-left:578px;} .offset10{margin-left:640px;} .offset11{margin-left:702px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid>.span1{width:5.801104972%;} .row-fluid>.span2{width:14.364640883%;} .row-fluid>.span3{width:22.928176794%;} .row-fluid>.span4{width:31.491712705%;} .row-fluid>.span5{width:40.055248616%;} .row-fluid>.span6{width:48.618784527%;} .row-fluid>.span7{width:57.182320438000005%;} .row-fluid>.span8{width:65.74585634900001%;} .row-fluid>.span9{width:74.30939226%;} .row-fluid>.span10{width:82.87292817100001%;} .row-fluid>.span11{width:91.436464082%;} .row-fluid>.span12{width:99.999999993%;} input.span1,textarea.span1,.uneditable-input.span1{width:32px;} input.span2,textarea.span2,.uneditable-input.span2{width:94px;} input.span3,textarea.span3,.uneditable-input.span3{width:156px;} input.span4,textarea.span4,.uneditable-input.span4{width:218px;} input.span5,textarea.span5,.uneditable-input.span5{width:280px;} input.span6,textarea.span6,.uneditable-input.span6{width:342px;} input.span7,textarea.span7,.uneditable-input.span7{width:404px;} input.span8,textarea.span8,.uneditable-input.span8{width:466px;} input.span9,textarea.span9,.uneditable-input.span9{width:528px;} input.span10,textarea.span10,.uneditable-input.span10{width:590px;} input.span11,textarea.span11,.uneditable-input.span11{width:652px;} input.span12,textarea.span12,.uneditable-input.span12{width:714px;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav .nav-header{color:#999999;text-shadow:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .span1{width:70px;} .span2{width:170px;} .span3{width:270px;} .span4{width:370px;} .span5{width:470px;} .span6{width:570px;} .span7{width:670px;} .span8{width:770px;} .span9{width:870px;} .span10{width:970px;} .span11{width:1070px;} .span12,.container{width:1170px;} .offset1{margin-left:130px;} .offset2{margin-left:230px;} .offset3{margin-left:330px;} .offset4{margin-left:430px;} .offset5{margin-left:530px;} .offset6{margin-left:630px;} .offset7{margin-left:730px;} .offset8{margin-left:830px;} .offset9{margin-left:930px;} .offset10{margin-left:1030px;} .offset11{margin-left:1130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid>.span1{width:5.982905983%;} .row-fluid>.span2{width:14.529914530000001%;} .row-fluid>.span3{width:23.076923077%;} .row-fluid>.span4{width:31.623931624%;} .row-fluid>.span5{width:40.170940171000005%;} .row-fluid>.span6{width:48.717948718%;} .row-fluid>.span7{width:57.264957265%;} .row-fluid>.span8{width:65.81196581200001%;} .row-fluid>.span9{width:74.358974359%;} .row-fluid>.span10{width:82.905982906%;} .row-fluid>.span11{width:91.45299145300001%;} .row-fluid>.span12{width:100%;} input.span1,textarea.span1,.uneditable-input.span1{width:60px;} input.span2,textarea.span2,.uneditable-input.span2{width:160px;} input.span3,textarea.span3,.uneditable-input.span3{width:260px;} input.span4,textarea.span4,.uneditable-input.span4{width:360px;} input.span5,textarea.span5,.uneditable-input.span5{width:460px;} input.span6,textarea.span6,.uneditable-input.span6{width:560px;} input.span7,textarea.span7,.uneditable-input.span7{width:660px;} input.span8,textarea.span8,.uneditable-input.span8{width:760px;} input.span9,textarea.span9,.uneditable-input.span9{width:860px;} input.span10,textarea.span10,.uneditable-input.span10{width:960px;} input.span11,textarea.span11,.uneditable-input.span11{width:1060px;} input.span12,textarea.span12,.uneditable-input.span12{width:1160px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}} diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..11c9715 --- /dev/null +++ b/css/style.css @@ -0,0 +1,42 @@ +/* + override bootstrap here + Some of these are blatantly stolen from Twitter's doc pages. + I couldn't help it, they look so nice! +*/ + +body { + position: relative; + padding-top: 90px; +} + +/* Jumbotrons +-------------------------------------------------- */ +.jumbotron { + position: relative; +} +.jumbotron h1 { + margin-bottom: 9px; + font-size: 40px; + letter-spacing: -1px; + line-height: 1; +} +.jumbotron p { + margin-bottom: 18px; + font-weight: 300; +} + +.post { + border: 1px solid rgba(0, 0, 0, 0.15); + background-color: rgba(0, 0, 0, 0.1); + border-radius: 5px; + margin-bottom: 15px; + padding: 15px; + -webkit-box-shadow: 0px 3px 5px 1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0px 3px 5px 1px rgba(0, 0, 0, 0.5); + box-shadow: 0px 3px 5px 1px rgba(0, 0, 0, 0.5); +} + +/* black color */ +.post h4 a { + color:#000; +} diff --git a/docs/TODO.md b/docs/TODO.md deleted file mode 100644 index a6234f6..0000000 --- a/docs/TODO.md +++ /dev/null @@ -1,13 +0,0 @@ -# TODO - -- [x] speaker in der reihenfolge mit den meisten talks zuerst -- [x] homepage mit den letzten 4 talks anstatt "Recent Talks" listet bisher nur dummies auf -- [x] create contact page -- [x] create imprint page -- [x] dass die homepage den neusten talk als kommenden talk ankündigt -- [ ] RSVP button mit orange glow, mehr im hover -- [ ] rss feed zeigt alle events an -- [ ] add link to events in the header -- [ ] -- [ ] -- [ ] \ No newline at end of file diff --git a/docs/ai_docs/CLAUDE-ZOLA.md b/docs/ai_docs/CLAUDE-ZOLA.md deleted file mode 100644 index 4203125..0000000 --- a/docs/ai_docs/CLAUDE-ZOLA.md +++ /dev/null @@ -1,181 +0,0 @@ -# CLAUDE.md - -This file provides comprehensive guidance to Claude Code when working with Zola static site generated websites. - -## Core Development Philosophy - -### KISS (Keep It Simple, Stupid) - -Simplicity should be a key goal in design. Choose straightforward solutions over complex ones whenever possible. Simple solutions are easier to understand, maintain, and debug. - -### YAGNI (You Aren't Gonna Need It) - -Avoid building functionality on speculation. Implement features only when they are needed, not when you anticipate they might be useful in the future. - -### Design Principles - -* **Islands Architecture**: Ship minimal JavaScript, hydrate only what needs interactivity. -* **Performance by Default**: Static-first with selective hydration for optimal performance. -* **Framework Agnostic**: Do not expect a certain framework to be used; support multiple frameworks if any. -* **Content-Driven**: Optimized for content-heavy websites with type-safe content management. -* **Zero JavaScript by Default**: Only ship JavaScript when explicitly needed. - -## 🤖 AI Assistant Guidelines - -### Search Command Requirements - -**CRITICAL**: Always use `rg` (ripgrep) instead of `grep` or `find`: - -```bash -# ❌ Don't use grep -grep -r "pattern" . - -# ✅ Use rg instead -rg "pattern" - -# ❌ Don't use find with name -find . -name "*.ts" - -# ✅ Use rg with file filtering -rg --files | rg "\\.ts$" -# or -rg --files -g "*.ts" -``` - -**Enforcement Rules:** - -```text -( - r"^grep\\b(?!.*\\|)", - "Use 'rg' (ripgrep) instead of 'grep' for better performance and features", -), -( - r"^find\\s+\\S+\\s+-name\\b", - "Use 'rg --files | rg pattern' or 'rg --files -g pattern' instead of 'find -name' for better performance", -), -``` - -## 🏗️ Project Structure - -```text -src/ -├── content/ # Zola Content (Markdown + Assets) -│ ├── _index.md # Homepage (English only) -│ └── pages/ # Static pages -│ └── sub/ # UI Component Library -├── templates/ # Zola HTML Templates -│ ├── base.html # Base template with navigation -│ ├── taxonomy_list.html # Taxonomy list page -│ ├── taxonomy_single.html # Taxonomy detail page -│ └── [more-templates] -├── static/ # Static assets (images, CSS, JS) -│ ├── lib/ # External libraries -│ │ └── bulma.min.css # Locally hosted Bulma CSS -│ ├── styles.css # Custom c-base styling -│ └── [more-assets] -├── scripts/ # Build & validation scripts -│ ├── check-translations.sh # Check translation state -│ ├── check-frontmatter.sh # Frontmatter validation -│ ├── check-taxonomies.sh # Taxonomy validation -│ ├── check-images.sh # Image validation -│ ├── check-links.sh # Link validation -│ ├── check-structure.sh # Structure validation -│ └── zola-build.sh # Build wrapper with performance monitoring -├── docs/ # Project documentation -│ ├── ai_docs/ # AI-specific docs for context -│ │ └── [docs] -│ └── specs/ # Product requirements (PRDs) -│ └── [specs] -├── docker/ # Docker deployment configuration -│ ├── Dockerfile # Multi-stage build for production -│ ├── docker-compose.yml # Container orchestration -│ └── nginx.conf # Nginx configuration -├── config.toml # Zola main config (multi-language) -├── Makefile # Development targets -├── README.md # Short project documentation -└── CLAUDE.md # Detailed instructions for Claude Code -``` - -## Content Management - -### Sections - -[Zola Section Documentation](https://www.getzola.org/documentation/content/section/) - -* Each directory in `content/` can be a section. -* `_index.md` defines section metadata (title, description, taxonomies). -* Use `weight` in frontmatter to order items. -* Use `paginate_by` in `_index.md` to enable pagination per section. - -### Translations - -[Zola Multilingual Documentation](https://www.getzola.org/documentation/content/multilingual/) - -* Confirm with the user before adding multi-language support. -* Store translations in separate language directories (e.g., `content/en/`, `content/de/`). -* Ensure all templates check for `lang` in context. - -## Feeds - -[Zola Feed Documentation](https://www.getzola.org/documentation/templates/feeds/) - -* Provide RSS/Atom feeds when requested. -* Use `generate_feed = true` in `config.toml` or `_index.md`. -* Validate feed output with online validators before deployment. - -## Pagination - -[Zola Pagination Documentation](https://www.getzola.org/documentation/templates/pagination/) - -**Rules:** - -* No pagination if only one page. -* First page: no link to previous. -* Last page: no link to next. -* All pages visible in navigation, current page highlighted. - -## Deployment - -### GitHub Pages - -[Zola GitHub Pages Deployment Guide](https://www.getzola.org/documentation/deployment/github-pages/) - -**Checklist:** - -* Use GitHub Actions or manual deployment. -* Ensure `base_url` in `config.toml` matches GitHub Pages URL. -* For project pages (not user/organization pages), set `base_url` to `/repo-name/`. - -## 🔗 JavaScript Features - -### Automatic External Link Handling - -```javascript -document.querySelectorAll('a[href^="http"]').forEach(link => { - if (!link.href.includes(window.location.hostname)) { - link.target = '_blank'; - link.rel = 'noopener noreferrer'; - } -}); -``` - -**Security**: Uses `rel="noopener noreferrer"` to prevent `window.opener` exploits. - -**Usage**: Write normal Markdown links; detection is automatic. - -## ⚠️ CRITICAL GUIDELINES - -1. **Max 500 lines per file** – split large templates/content files. -2. **Address all build warnings** – never ignore them. -3. **No npm or yarn** – include all dependencies in `static/lib/`. - -## 📋 Pre-commit Checklist - -* [ ] SEO metadata is correctly set in frontmatter. -* [ ] No unused images or CSS. -* [ ] All internal links verified by `check-links.sh`. -* [ ] Translations up to date (if enabled). -* [ ] No template exceeds 500 lines. - -*This guide is optimized for Zola and modern web performance.* -*Last updated: August 2025* diff --git a/docs/ai_docs/bephpug_the-berlin-php-usergroup.md b/docs/ai_docs/bephpug_the-berlin-php-usergroup.md deleted file mode 100644 index e4b92e9..0000000 --- a/docs/ai_docs/bephpug_the-berlin-php-usergroup.md +++ /dev/null @@ -1,6 +0,0 @@ - -https://www.meetup.com/berlin-php-usergroup/events/309565313/?eventOrigin=group_events_list -https://www.meetup.com/berlin-php-usergroup/events/308326078/?eventOrigin=group_events_list -https://www.meetup.com/berlin-php-usergroup/events/306133832/?eventOrigin=group_events_list -https://www.meetup.com/berlin-php-usergroup/events/304540915/?eventOrigin=group_events_list -https://www.meetup.com/berlin-php-usergroup/events/303351655/?eventOrigin=group_events_list diff --git a/docs/screenshots/colors.jpg b/docs/screenshots/colors.jpg deleted file mode 100644 index c8d6888..0000000 Binary files a/docs/screenshots/colors.jpg and /dev/null differ diff --git a/docs/specs/01_init_project.md b/docs/specs/01_init_project.md deleted file mode 100644 index 50238dc..0000000 --- a/docs/specs/01_init_project.md +++ /dev/null @@ -1,342 +0,0 @@ -# Berlin PHP Jekyll to Zola Migration Specification - -## Project Overview - -This specification outlines the migration of the Berlin PHP Usergroup website from Jekyll to Zola. The current site (bephpug.de) is hosted on GitHub Pages using Jekyll and needs to be modernized using Zola static site generator while preserving all existing functionality and content. - -## Current Jekyll Website Analysis - -### Repository Structure -- **Repository**: `berlinphp/berlinphp.github.com` -- **Live URL**: https://www.bephpug.de/ (redirects from berlinphp.github.io) -- **Framework**: Jekyll with GitHub Pages - -### Existing Pages & Content -1. **Homepage** (`index.html`) - - Next meetup information with event schema - - Upcoming talks and speakers - - Location details (Co-Up coworking) - - Social media links - -2. **Archive** (`archive.html`) - - Historical meetup records - - Past events and presentations - -3. **Contact** (`contact.html`) - - Group contact information - - Meeting location details - -4. **Code of Conduct** (`code-of-conduct.html`) - - Community guidelines - - Behavioral expectations - -5. **Imprint** - - Legal information - - Required compliance page - -### Technical Features -- Jekyll blog posts in `_posts/` directory -- Jekyll layouts in `_layouts/` -- Jekyll includes in `_includes/` -- RSS feed generation (`feed.xml`) -- Assets in `assets/` directory -- Slides storage in `folien/` directory -- Calendar integration (`calendar.ics`) - -## Migration Priority & Phases - -### Phase 1: Core Infrastructure (High Priority) -1. **Zola Project Initialization** - - Set up basic Zola structure according to `docs/ai_docs/CLAUDE-ZOLA.md` - - Configure `config.toml` with proper settings - - Create base template structure - -2. **Essential Pages Migration** - - Homepage with meetup information - - Contact page - - Code of Conduct - - Imprint (legal requirement) - -3. **Basic Styling & Layout** - - Convert Jekyll layouts to Zola templates - - Implement responsive design - - Integrate Berlin PHP logo and branding assets - - Configure favicon and social media meta tags - - Preserve existing visual identity - -### Phase 2: Content & Features (Medium Priority) -1. **Archive System** - - Create archive template for meetup event `_index.md` files - - Configure `slugify.paths_keep_dates = true` for date-in-URL - - Create individual folders for each meetup event in `archive/` - - Each event gets its own `_index.md` with 1-3 talks metadata - - Co-locate slide files for multiple talks when available - - Implement archive listing and individual event pages - - Preserve chronological organization - -2. **RSS Feed** - - Configure Zola RSS generation - - Ensure feed compatibility - - Test feed readers - -### Phase 3: Advanced Features (Lower Priority) -1. **Event Schema Integration** - - Implement structured data for meetups - - SEO optimization - - Calendar integration - -2. **Social Media Integration** - - Maintain existing social links - - Optimize social media cards - - Consider automation features - -3. **Performance Optimization** - - Image optimization - - Asset bundling - - CDN considerations - -## Zola Structure Design - -Based on the existing CLAUDE-ZOLA.md guidelines, the new structure will be: - -``` -src/ -├── content/ -│ ├── _index.md # Homepage -│ ├── archive/ -│ │ ├── _index.md # Archive listing page -│ │ ├── 2024-01-15-php-8-features/ -│ │ │ ├── _index.md # Talk details -│ │ │ └── slides.pdf # Talk slides (if available) -│ │ ├── 2024-02-20-symfony-best-practices/ -│ │ │ ├── _index.md # Talk details -│ │ │ └── slides.pdf # Talk slides (if available) -│ │ └── [weitere-talks]/ # Additional talks with same structure -│ └── pages/ -│ ├── contact.md # Contact page -│ ├── code-of-conduct.md # Code of Conduct -│ └── imprint.md # Legal imprint -├── templates/ -│ ├── base.html # Base template with Bulma -│ ├── index.html # Homepage template -│ ├── page.html # Standard page template -│ ├── archive.html # Archive listing template -│ └── talk.html # Individual talk template -├── static/ -│ ├── lib/ -│ │ └── bulma.min.css # Bulma CSS framework -│ ├── styles.css # Custom styling -│ ├── logo.svg # Main Berlin PHP logo -│ ├── logo_outset.svg # Logo variant with outset -│ ├── favicon.ico # Website favicon -│ ├── social-banner.png # OpenGraph/Twitter social media banner -│ └── images/ # Additional site images -└── config.toml # Zola configuration -``` - -## Archive Talk Template Structure - -### Template for `archive/Y-m-d-title/_index.md` - -````markdown -+++ -title = "Berlin PHP Meetup - Event Title" -date = YYYY-MM-DD -description = "Brief description of the meetup event" - -[extra] -speakers = [ - { name = "Speaker 1", twitter = "@handle1", github = "user1" }, - { name = "Speaker 2", twitter = "@handle2", github = "user2" } -] -meetup_id = "" # optional meetup.com ID (can be empty) -location = "Co-Up Berlin" # or other location -slides = [ - { title = "Talk 1 Title", file = "talk1-slides.pdf" }, - { title = "Talk 2 Title", file = "talk2-slides.pdf" } -] -tags = ["php", "symfony", "testing"] # topic tags -+++ - -## Meetup Event - -Detailed description of the meetup event, theme, and what was covered. - -## Talks - -### Talk 1: Title -**Speaker:** Speaker Name - -Description of the first talk, key points, technologies covered. - -### Talk 2: Title -**Speaker:** Speaker Name - -Description of the second talk, key points, technologies covered. - -### Talk 3: Title (if applicable) -**Speaker:** Speaker Name - -Description of the third talk, key points, technologies covered. - -## About the Speakers - -Information about the speakers, their backgrounds, projects, etc. - -## Resources - -- Links to related resources -- GitHub repositories mentioned -- Documentation links -- Follow-up reading - - -```` - -### Frontmatter Fields Specification - -- **title**: Meetup event title (required) -- **date**: Event date in YYYY-MM-DD format (required) -- **description**: SEO-friendly description of the event (required) -- **speakers**: Array of speaker objects with name, twitter, github (required) -- **meetup_id**: Meetup.com event ID (optional, can be empty string) -- **location**: Venue name (required) -- **slides**: Array of slide objects with title and file reference (optional) -- **tags**: Topic/technology tags (required) - -## Content Migration Strategy - -### Jekyll to Zola Mapping -- **Jekyll `_posts/`** → **Zola `content/blog/`** -- **Jekyll `_layouts/`** → **Zola `templates/`** -- **Jekyll `_includes/`** → **Zola template includes** -- **Jekyll `assets/`** → **Zola `static/`** -- **Jekyll pages** → **Zola `content/pages/`** - -### Template Conversion -- Convert Liquid templates to Tera templates -- Maintain existing HTML structure -- Preserve CSS classes and styling -- Update asset references - -### Content Processing -- Create standardized template for archive meetup event `_index.md` files -- Convert Jekyll front matter to Zola format following template -- Create individual event folders with `Y-m-d-title` naming convention -- Co-locate slide files for multiple talks per event when identifiable -- Update internal links -- Process image references -- Maintain SEO metadata -- Generate talk listing for archive page - -## Technical Requirements - -### Configuration -- Single language setup (English only) -- RSS feed generation -- Sitemap generation -- SEO-friendly URLs with dates: `slugify.paths_keep_dates = true` -- Archive section configuration for talks - -### Dependencies -- No external build dependencies (per CLAUDE-ZOLA.md guidelines) -- Bulma CSS framework in `static/lib/bulma.min.css` -- All CSS/JS dependencies in `static/lib/` -- Self-hosted assets only - -### Branding Assets -- Berlin PHP logo (SVG format) for navigation and branding -- Favicon (ICO format) for browser tabs -- Social media banner (PNG format) for OpenGraph/Twitter cards -- Logo variants available for different use cases - -### Performance Targets -- Static file generation under 5 seconds -- Lighthouse performance score > 90 -- Mobile-first responsive design -- Minimal JavaScript usage - -## Deployment Strategy - -### GitHub Pages Migration -- Maintain current GitHub Pages hosting -- Configure Zola GitHub Actions workflow -- Preserve existing domain configuration -- Ensure zero-downtime transition - -### Testing & Validation -- Content accuracy verification -- Link integrity checks -- RSS feed validation -- Cross-browser testing -- Mobile responsiveness testing - -## Success Criteria - -### Functional Requirements -- [ ] All existing pages accessible -- [ ] Archive browsing works correctly -- [ ] RSS feed functional -- [ ] Contact information accurate -- [ ] Social media links working -- [ ] Pages in /pages/ subfolder structure - -### Technical Requirements -- [ ] Build time under 5 seconds -- [ ] Mobile responsive design -- [ ] SEO metadata preserved -- [ ] Schema markup functional -- [ ] Performance benchmarks met -- [ ] Logo integrated in navigation -- [ ] Favicon properly configured -- [ ] Social media meta tags with banner - -### Content Requirements -- [ ] All historical content migrated -- [ ] Archive chronology maintained -- [ ] Legal pages compliance -- [ ] Single language structure (English) configured -- [ ] Bulma CSS framework integrated - -## Timeline Estimation - -- **Phase 1**: 1-2 days (core infrastructure) -- **Phase 2**: 1-2 days (content migration, simplified without slides) -- **Phase 3**: 1-2 days (advanced features) -- **Testing & Polish**: 1 day - -**Total Estimated Time**: 4-7 days - -## Risk Mitigation - -### Content Loss Prevention -- Full backup of existing Jekyll repository -- Incremental migration with verification -- Rollback plan to Jekyll if needed - -### Functionality Preservation -- Feature parity checklist -- User acceptance testing -- Community feedback integration - -### Technical Challenges -- Template syntax differences (Liquid → Tera) -- Asset path updates -- RSS feed compatibility -- GitHub Pages Zola configuration - -## Next Steps - -1. Initialize Zola project structure -2. Set up development environment -3. Begin Phase 1 migration -4. Establish testing procedures -5. Create deployment pipeline - -## Notes - -- Preserve existing URLs where possible for SEO -- Maintain Berlin PHP branding and visual identity -- Consider future expansion needs -- Document migration process for future reference -- Follow KISS and YAGNI principles throughout \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..f095b7f Binary files /dev/null and b/favicon.ico differ diff --git a/folien/11-07-05_FB_Like-Buttons.pdf b/folien/11-07-05_FB_Like-Buttons.pdf new file mode 100644 index 0000000..6c00bff Binary files /dev/null and b/folien/11-07-05_FB_Like-Buttons.pdf differ diff --git a/folien/BEPHPUG_ZF_Vortrag.pdf b/folien/BEPHPUG_ZF_Vortrag.pdf new file mode 100644 index 0000000..ee8ddfd Binary files /dev/null and b/folien/BEPHPUG_ZF_Vortrag.pdf differ diff --git a/folien/Drupal_in_10min.pdf b/folien/Drupal_in_10min.pdf new file mode 100644 index 0000000..2c33db9 Binary files /dev/null and b/folien/Drupal_in_10min.pdf differ diff --git a/folien/Erfahrungen_aus_der_phpBB3-Entwicklung-src.zip b/folien/Erfahrungen_aus_der_phpBB3-Entwicklung-src.zip new file mode 100644 index 0000000..2373131 Binary files /dev/null and b/folien/Erfahrungen_aus_der_phpBB3-Entwicklung-src.zip differ diff --git a/folien/Erfahrungen_aus_der_phpBB3-Entwicklung.pdf b/folien/Erfahrungen_aus_der_phpBB3-Entwicklung.pdf new file mode 100644 index 0000000..c8f5e65 Binary files /dev/null and b/folien/Erfahrungen_aus_der_phpBB3-Entwicklung.pdf differ diff --git a/folien/MyHammer_Vortrag_Open_Source_BEPHPUG_20100406.pdf b/folien/MyHammer_Vortrag_Open_Source_BEPHPUG_20100406.pdf new file mode 100644 index 0000000..9ddf32b Binary files /dev/null and b/folien/MyHammer_Vortrag_Open_Source_BEPHPUG_20100406.pdf differ diff --git a/folien/PHP-Framework_mit_minimalistischem_Ansatz.odp b/folien/PHP-Framework_mit_minimalistischem_Ansatz.odp new file mode 100644 index 0000000..e76625c Binary files /dev/null and b/folien/PHP-Framework_mit_minimalistischem_Ansatz.odp differ diff --git a/folien/PHP-Framework_mit_minimalistischem_Ansatz.pdf b/folien/PHP-Framework_mit_minimalistischem_Ansatz.pdf new file mode 100644 index 0000000..4c4c1ca Binary files /dev/null and b/folien/PHP-Framework_mit_minimalistischem_Ansatz.pdf differ diff --git a/folien/PHPUG_Berlin_Zalando_06042010.pdf b/folien/PHPUG_Berlin_Zalando_06042010.pdf new file mode 100644 index 0000000..1b67f15 Binary files /dev/null and b/folien/PHPUG_Berlin_Zalando_06042010.pdf differ diff --git a/folien/Performancetuning.ppt b/folien/Performancetuning.ppt new file mode 100644 index 0000000..e088db0 Binary files /dev/null and b/folien/Performancetuning.ppt differ diff --git a/folien/SilverStripe.pdf b/folien/SilverStripe.pdf new file mode 100644 index 0000000..9109156 Binary files /dev/null and b/folien/SilverStripe.pdf differ diff --git a/folien/Tobias Vogel PHP UG Berlin Talk.pdf b/folien/Tobias Vogel PHP UG Berlin Talk.pdf new file mode 100644 index 0000000..e178c67 Binary files /dev/null and b/folien/Tobias Vogel PHP UG Berlin Talk.pdf differ diff --git a/folien/Zend Server Cluster Manager - Session Clustering.pdf b/folien/Zend Server Cluster Manager - Session Clustering.pdf new file mode 100644 index 0000000..97d0e65 Binary files /dev/null and b/folien/Zend Server Cluster Manager - Session Clustering.pdf differ diff --git a/folien/Zf2.pdf b/folien/Zf2.pdf new file mode 100644 index 0000000..4b1b210 Binary files /dev/null and b/folien/Zf2.pdf differ diff --git a/folien/barrierefrei.zip b/folien/barrierefrei.zip new file mode 100644 index 0000000..ea821bf Binary files /dev/null and b/folien/barrierefrei.zip differ diff --git a/folien/design_pattern.zip b/folien/design_pattern.zip new file mode 100644 index 0000000..37578fb Binary files /dev/null and b/folien/design_pattern.zip differ diff --git a/folien/flashphp.zip b/folien/flashphp.zip new file mode 100644 index 0000000..126ecf5 Binary files /dev/null and b/folien/flashphp.zip differ diff --git a/folien/fop.zip b/folien/fop.zip new file mode 100644 index 0000000..4d92eee Binary files /dev/null and b/folien/fop.zip differ diff --git a/folien/freie_software.html b/folien/freie_software.html new file mode 100644 index 0000000..80b078c --- /dev/null +++ b/folien/freie_software.html @@ -0,0 +1,821 @@ + + + + + + +Freie Software + + + +
+

Freie Software

+ +++ + + + +
Autor:Volker Grabsch
+ +
+

Inhalt

+ +
+
+

Definition

+

Begriff:

+
+
    +
  • ursprünglich: Freie Software / Free Software
  • +
  • Marketing: Open Source
  • +
  • politisch korrekt: FOSS?
  • +
+
+

Konstrast:

+
+
    +
  • propritäere Software
  • +
  • Freeware
  • +
+
+

Rechtsgrundlage:

+
+
    +
  • Urheberrecht / Copyright.
  • +
  • Es kommt nur auf die Lizenz an
  • +
+
+

Womit es nichts zu tun hat:

+
+
    +
  • kommerziell vs. nicht-kommerziell
  • +
  • Kommunismus
  • +
  • Patente
  • +
+
+
+

The Free Software Definition

+
+
Quellen:
+
+
+
+

free as in free speech, not as in free beer

+

It refers to four kinds of freedom, for the users of the software:

+
    +
  1. The freedom to run the program, for any purpose.

    +
  2. +
  3. The freedom to study how the program works, and adapt it to your needs.

    +

    (Access to the source code is a precondition for this.)

    +
  4. +
  5. The freedom to redistribute copies so you can help your neighbor.

    +
  6. +
  7. The freedom to improve the program, +and release your improvements to the public, +so that the whole community benefits.

    +

    (Access to the source code is a precondition for this.)

    +
  8. +
+
+
+

The Debian Free Software Guidelines (DFSG)

+
+
Quelle:
+
http://www.debian.org/social_contract.en.html
+
+
    +
  1. Free Redistribution

    +
    +

    The license

    +

    ... may not restrict any party from selling or giving away the software

    +

    ... may not require a royalty ...

    +
    +
  2. +
  3. Source Code

    +
    +

    The program

    +

    must include source code, and

    +

    must allow distribution in source code as well as compiled form.

    +
    +
  4. +
  5. Derived Works

    +
    +

    The license must allow modifications and derived works, +... +under the same terms as the license of the original software.

    +
    +
  6. +
  7. Integrity of The Author's Source Code

    +
    +

    The license may restrict source-code +from being distributed in modified form +_only_ if the license allows the distribution of "patch files" +... +The license must explicitly permit distribution of software built +from modified source code.

    +

    The license may require derived works to carry a different name or +version number from the original software. +(This is a compromise. ...)

    +
    +
  8. +
  9. No Discrimination Against Persons or Groups

    +
    +

    The license must not discriminate against any person or group of persons.

    +
    +
  10. +
  11. No Discrimination Against Fields of Endeavor

    +
    +

    The license must not restrict anyone from making use of the program +in a specific field of endeavor.

    +

    For example, it may not restrict the program from being used in a business, +or from being used for genetic research.

    +
    +
  12. +
  13. Distribution of License

    +
    +

    The rights attached to the program must apply to all to whom the program +is redistributed without the need for execution of an additional license +by those parties.

    +
    +
  14. +
  15. License Must Not Be Specific to Debian

    +
    +

    The rights attached to the program must not depend on the program's being +part of a Debian system.

    +

    If the program is +... +used or distributed without Debian +... +all parties to whom the program is redistributed +should have the same rights as +... +with the Debian system.

    +
    +
  16. +
  17. License Must Not Contaminate Other Software

    +
    +

    The license must not place restrictions on other software +that is distributed along with the licensed software.

    +

    For example, +the license must not insist that +all other programs distributed on the same medium must be free software.

    +
    +
  18. +
  19. Example Licenses

    +
    +

    The "GPL", "BSD", and "Artistic" licenses are examples +of licenses that we consider "free".

    +
    +
  20. +
+
+
+

The Free Software Definition

+
+
Quelle:
+
http://www.opensource.org/docs/osd
+
+
    +
  1. Free Redistribution

    +
    +

    ...

    +
    +
  2. +
  3. Source Code

    +
    +

    ...

    +
    +
  4. +
  5. Derived Works

    +
    +

    ...

    +
    +
  6. +
  7. Integrity of The Author's Source Code

    +
    +

    ...

    +
    +
  8. +
  9. No Discrimination Against Persons or Groups

    +
    +

    ...

    +
    +
  10. +
  11. No Discrimination Against Fields of Endeavor

    +
    +

    ...

    +
    +
  12. +
  13. Distribution of License

    +
    +

    ...

    +
    +
  14. +
  15. License Must Not Be Specific to a Product

    +
    +

    The rights attached to the program must not depend +on the program's being part of a particular software distribution. +...

    +
    +
  16. +
  17. License Must Not Restrict Other Software

    +
    +

    ...

    +
    +
  18. +
  19. License Must Be Technology-Neutral

    +
    +

    No provision of the license may be predicated +on any individual technology or style of interface.

    +
    +
  20. +
+
+
+
+

Software-Lizenzen

+
+
Liste freier Lizenzen:
+
http://www.opensource.org/licenses
+
+
+

Gemeingut

+
    +
  • keine echte Lizenz

    +
  • +
  • in angelsächsischer Rechtsprechung:

    +
    +
      +
    • Public Domain genannt
    • +
    • Abtritt des Copyrights
    • +
    +
    +
  • +
  • in Deutschland:

    +
    +
      +
    • Man kann seine Urheberrechte nicht abtreten!
    • +
    • Urheberrechte erlöschen 70 Jahre nach Tod des Autors
    • +
    • gibt es (noch) nicht bei Software
    • +
    +
    +
  • +
+
+
+

BSD-artig

+
    +
  • "Macht damit, was ihr wollt"

    +
  • +
  • "Ehre, wem Ehre gebührt"

    +
  • +
  • kann in propritäre Software eingebaut werden

    +
  • +
  • Beispiele:

    +
    +
      +
    • BSD (2,3,4-Klausel)
    • +
    • MIT/X11-Lizenz
    • +
    • Artistic
    • +
    • unüblich: Creative Commons (BY)
    • +
    +
    +
  • +
+
+
+

Copyleft

+
    +
  • Abwandlungen sollen frei bleiben

    +
  • +
  • Beispiele:

    +
    +
      +
    • GPL
    • +
    • LGPL
    • +
    • GPLv3
    • +
    • unüblich: Creative Commons (BY-SA)
    • +
    +
    +
  • +
+
+
+
+

Lizenzen für Nicht-Software

+
+

Gemeingut

+
    +
  • bereits alles gesagt
  • +
+
+
+

BSD-artig

+
    +
  • Klassisches Einsatzgebiet: Logos/Icons von freier Software
  • +
  • MIT/X11, Artistic, ... auch für Nicht-Software geeignet
  • +
  • Creative Commons (BY)
  • +
+
+
+

Copyleft

+
    +
  • Klassisches Einsatzgebiet: Dokumentation von freier Software
  • +
  • GPL, LGPL, ... meist übertragbar, dennoch nicht ratsam
  • +
  • FDL für Texte
  • +
  • Creative Commons (BY-SA)
  • +
+
+
+
+

Vorsicht!

+
+

Unfreie Lizenzen

+

Klassische Beispiele:

+
    +
  • FDL mit "Invariant Sections"
  • +
  • Creative Commons (*-NC oder *-ND)
  • +
+
+
+

Abhängigkeit von unfreier Software

+

Klassische Beispiele:

+
    +
  • komplexe Java-Programme
  • +
  • C-Programme, die nur unter MSVC compilieren
  • +
  • Verwendung unfreier PHP-Module
  • +
+
+
+
+

Komplexität der Lizenzen

+

Empfehlungen:

+ +
+

Beispiel: MIT/X11

+

Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions:

+

The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.

+
+
+

Beispiel: BSD (3-Klausel)

+

Copyright (c) The Regents of the University of California. +All rights reserved.

+

Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met:

+
    +
  1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer.
  2. +
  3. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution.
  4. +
  5. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission.
  6. +
+

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE.

+
+
+

Beispiel: GPL

+

GNU GENERAL PUBLIC LICENSE +Version 2, June 1991

+

Copyright (C) 1989, 1991 Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed.

+

Preamble

+

The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too.

+

...

+
+
+

Größenvergleich

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LizenzZeilenWorteGröße
MIT/X11191671 kB
BSD (3)262251 kB
Artistic1319706 kB
GPL339296818 kB
LGPL510437226 kB
+
+
+
+ + diff --git a/folien/qualitaet.tar.gz b/folien/qualitaet.tar.gz new file mode 100644 index 0000000..62b057a Binary files /dev/null and b/folien/qualitaet.tar.gz differ diff --git a/folien/saubere_urls.html b/folien/saubere_urls.html new file mode 100644 index 0000000..0f3942a --- /dev/null +++ b/folien/saubere_urls.html @@ -0,0 +1,454 @@ + + + + + + +Saubere URLs + + + +
+

Saubere URLs

+ +++ + + + +
Autor:Volker Grabsch
+ +
+

Inhalt

+ +
+
+

Einleitung

+
+
Quelle:
+
http://www.w3.org/Provider/Style/URI
+
+

What makes a cool URI? +A cool URI is one which does not change. +What sorts of URI change? +URIs don't change: people change them.

+
+
Grundproblem:
+
nicht funktionierende URLs
+
+

Typische Gründe:

+
+
    +
  • Wir mussten die Webseite reorganisieren.
  • +
  • Ein anderer User verwaltet die Dateien.
  • +
  • Früher war es ein Perl-Script, +jetzt sind es statische Seiten / PHP-Scripte / ...
  • +
  • Wir würden gern, aber uns fehlen die richtigen Werkzeuge.
  • +
+
+

Wege zur Besserung:

+
+
    +
  • URL-Design praktizieren
  • +
  • URLs müssen langlebig sein
  • +
  • URLs sollten kurz und leicht zu merken sein
  • +
+
+

Wie geht das?

+
+
    +
  • URLs müssen die Struktur der Inhalte widerspiegeln

    +
  • +
  • URLs müssen so wenige Informationen wie möglich enthalten:

    +
    +
      +
    • keine Autor-Namen
    • +
    • keine Überschriften
    • +
    • keine Status-Information ("alt", "Entwurf", ...)
    • +
    • keine Zugangs-Informationen ("öffentlich", "Mitglieder", ...)
    • +
    • keine Datei-Endungen
    • +
    • kein Hinweis auf die benutzte Software (/cgi-bin/, .php, ...)
    • +
    +
    +
  • +
+
+
+
+

Webserver

+

Life-Präsentation:

+
+
    +
  • CGI-Parameter
  • +
  • RewriteRules im VirtualHost
  • +
  • RewriteRules in .htaccess
  • +
  • KISS: ScriptAlias
  • +
  • Optimiertes KISS: ScriptAlias + Alias
  • +
+
+
+
+

Script

+
+
Django URLconf:
+
+
+
+
+from django.conf.urls.defaults import patterns
+
+urlpatterns = patterns('',
+    (r'^articles/2003/$',                  'news.views.special_case_2003'),
+    (r'^articles/(\d{4})/$',               'news.views.year_archive'),
+    (r'^articles/(\d{4})/(\d{2})/$',       'news.views.month_archive'),
+    (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
+)
+
+

Auflösung von /articles/2005/03/:

+
+news.views.month_archive(request, '2005', '03')
+
+
+

Variante: Named groups

+
+from django.conf.urls.defaults import patterns
+
+urlpatterns = patterns('',
+    (r'^articles/2003/$',                                          'news.views.special_case_2003'),
+    (r'^articles/(?P<year>\d{4})/$',                               'news.views.year_archive'),
+    (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$',              'news.views.month_archive'),
+    (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d+)/$', 'news.views.article_detail'),
+)
+
+

Auflösung von /articles/2005/03/:

+
+news.views.month_archive(request, year='2005', month='03')
+
+
+
+
+ + diff --git a/folien/scaleup_deck_openstack.pdf b/folien/scaleup_deck_openstack.pdf new file mode 100644 index 0000000..a79a671 Binary files /dev/null and b/folien/scaleup_deck_openstack.pdf differ diff --git a/folien/soap_php_dotnet.zip b/folien/soap_php_dotnet.zip new file mode 100644 index 0000000..0cac950 Binary files /dev/null and b/folien/soap_php_dotnet.zip differ diff --git a/folien/yii_presentation.pdf b/folien/yii_presentation.pdf new file mode 100644 index 0000000..7d29b2c Binary files /dev/null and b/folien/yii_presentation.pdf differ diff --git a/img/glyphicons-halflings-white.png b/img/glyphicons-halflings-white.png new file mode 100644 index 0000000..a20760b Binary files /dev/null and b/img/glyphicons-halflings-white.png differ diff --git a/img/glyphicons-halflings.png b/img/glyphicons-halflings.png new file mode 100644 index 0000000..92d4445 Binary files /dev/null and b/img/glyphicons-halflings.png differ diff --git a/imprint.html b/imprint.html new file mode 100644 index 0000000..82c5057 --- /dev/null +++ b/imprint.html @@ -0,0 +1,19 @@ +--- +layout: default +title: Impressum / Imprint +imprint: active +--- + +

+ Verantwortlich für den Inhalt dieser Website: +

+

+

+ Vielen Dank an alle die geholfen haben! +

+

+ Wir übernehmen selbstverständlich keine Haftung für den Inhalt verlinkter Seiten oder den Inhalt von Slides, etc. pp.. +

diff --git a/index.html b/index.html new file mode 100644 index 0000000..a91bff8 --- /dev/null +++ b/index.html @@ -0,0 +1,43 @@ +--- +layout: default +title: +home: active +--- + +
+
+
+

Willkomen / Welcome

+

Nächstes Treffen: 6. März / Next meetup: 6th March, 2012

+
+

+ Wir treffen uns jeden ersten Dienstag im Monat bei Co-Up in Berlin, + Kreuzberg, um uns zu PHP, Webentwicklung, Freier Software und angrenzenden + Themen auszutauschen. Es gibt regelmäßig spannende Vorträge und Diskussionen in lockerer Atmosphäre. + Besonders gern sind Themen und Projekte gesehen, mit denen sich der Vortragende gerade selbst + beschäftigt +

+

+ Hast Du Lust, Gleichgesinnte zu treffen, Neues über PHP und verwandte Technologien + des Internets zu lernen oder selbst einen Vortrag zu halten? Dann komm einfach beim + nächsten Treffen vorbei. +

+
+
+ +
+
+ + + {% for post in site.posts limit:2 %} +
+
+

{{ post.title }}

+

{{ post.content }}

+
+
+ {% endfor %} +
+
diff --git a/js/bootstrap.js b/js/bootstrap.js new file mode 100644 index 0000000..ea28656 --- /dev/null +++ b/js/bootstrap.js @@ -0,0 +1,1718 @@ +/* =================================================== + * bootstrap-transition.js v2.0.1 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + +!function( $ ) { + + $(function () { + + "use strict" + + /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) + * ======================================================= */ + + $.support.transition = (function () { + var thisBody = document.body || document.documentElement + , thisStyle = thisBody.style + , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined + + return support && { + end: (function () { + var transitionEnd = "TransitionEnd" + if ( $.browser.webkit ) { + transitionEnd = "webkitTransitionEnd" + } else if ( $.browser.mozilla ) { + transitionEnd = "transitionend" + } else if ( $.browser.opera ) { + transitionEnd = "oTransitionEnd" + } + return transitionEnd + }()) + } + })() + + }) + +}( window.jQuery );/* ========================================================== + * bootstrap-alert.js v2.0.1 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function( $ ){ + + "use strict" + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function ( el ) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype = { + + constructor: Alert + + , close: function ( e ) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + $parent.trigger('close') + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent + .trigger('close') + .removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + $.fn.alert = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT DATA-API + * ============== */ + + $(function () { + $('body').on('click.alert.data-api', dismiss, Alert.prototype.close) + }) + +}( window.jQuery );/* ============================================================ + * bootstrap-button.js v2.0.1 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + +!function( $ ){ + + "use strict" + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function ( element, options ) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype = { + + constructor: Button + + , setState: function ( state ) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + , toggle: function () { + var $parent = this.$element.parent('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + $.fn.button = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON DATA-API + * =============== */ + + $(function () { + $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) { + $(e.currentTarget).button('toggle') + }) + }) + +}( window.jQuery );/* ========================================================== + * bootstrap-carousel.js v2.0.1 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function( $ ){ + + "use strict" + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.carousel.defaults, options) + this.options.slide && this.slide(this.options.slide) + } + + Carousel.prototype = { + + cycle: function () { + this.interval = setInterval($.proxy(this.next, this), this.options.interval) + return this + } + + , to: function (pos) { + var $active = this.$element.find('.active') + , children = $active.parent().children() + , activePos = children.index($active) + , that = this + + if (pos > (children.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activePos == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) + } + + , pause: function () { + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + + if (!$next.length) return + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + if (!$.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger('slide') + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } else { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.trigger('slide') + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + $.fn.carousel = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = typeof option == 'object' && option + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (typeof option == 'string' || (option = options.slide)) data[option]() + else data.cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL DATA-API + * ================= */ + + $(function () { + $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data()) + $target.carousel(options) + e.preventDefault() + }) + }) + +}( window.jQuery );/* ============================================================= + * bootstrap-collapse.js v2.0.1 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + +!function( $ ){ + + "use strict" + + var Collapse = function ( element, options ) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options["parent"]) { + this.$parent = $(this.options["parent"]) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension = this.dimension() + , scroll = $.camelCase(['scroll', dimension].join('-')) + , actives = this.$parent && this.$parent.find('.in') + , hasData + + if (actives && actives.length) { + hasData = actives.data('collapse') + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', 'show', 'shown') + this.$element[dimension](this.$element[0][scroll]) + + } + + , hide: function () { + var dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', 'hide', 'hidden') + this.$element[dimension](0) + } + + , reset: function ( size ) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element.addClass('collapse') + } + + , transition: function ( method, startEvent, completeEvent ) { + var that = this + , complete = function () { + if (startEvent == 'show') that.reset() + that.$element.trigger(completeEvent) + } + + this.$element + .trigger(startEvent) + [method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + /* COLLAPSIBLE PLUGIN DEFINITION + * ============================== */ + + $.fn.collapse = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = typeof option == 'object' && option + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSIBLE DATA-API + * ==================== */ + + $(function () { + $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $(target).collapse(option) + }) + }) + +}( window.jQuery );/* ============================================================ + * bootstrap-dropdown.js v2.0.1 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function( $ ){ + + "use strict" + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle="dropdown"]' + , Dropdown = function ( element ) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function ( e ) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + , isActive + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + $parent.length || ($parent = $this.parent()) + + isActive = $parent.hasClass('open') + + clearMenus() + !isActive && $parent.toggleClass('open') + + return false + } + + } + + function clearMenus() { + $(toggle).parent().removeClass('open') + } + + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + $.fn.dropdown = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + $(function () { + $('html').on('click.dropdown.data-api', clearMenus) + $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) + }) + +}( window.jQuery );/* ========================================================= + * bootstrap-modal.js v2.0.1 + * http://twitter.github.com/bootstrap/javascript.html#modals + * ========================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + + +!function( $ ){ + + "use strict" + + /* MODAL CLASS DEFINITION + * ====================== */ + + var Modal = function ( content, options ) { + this.options = options + this.$element = $(content) + .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + } + + Modal.prototype = { + + constructor: Modal + + , toggle: function () { + return this[!this.isShown ? 'show' : 'hide']() + } + + , show: function () { + var that = this + + if (this.isShown) return + + $('body').addClass('modal-open') + + this.isShown = true + this.$element.trigger('show') + + escape.call(this) + backdrop.call(this, function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position + + that.$element + .show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + transition ? + that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : + that.$element.trigger('shown') + + }) + } + + , hide: function ( e ) { + e && e.preventDefault() + + if (!this.isShown) return + + var that = this + this.isShown = false + + $('body').removeClass('modal-open') + + escape.call(this) + + this.$element + .trigger('hide') + .removeClass('in') + + $.support.transition && this.$element.hasClass('fade') ? + hideWithTransition.call(this) : + hideModal.call(this) + } + + } + + + /* MODAL PRIVATE METHODS + * ===================== */ + + function hideWithTransition() { + var that = this + , timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + hideModal.call(that) + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + hideModal.call(that) + }) + } + + function hideModal( that ) { + this.$element + .hide() + .trigger('hidden') + + backdrop.call(this) + } + + function backdrop( callback ) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('