62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/css/main.css:
--------------------------------------------------------------------------------
1 | /* Required for Twitter Bootstrap's menu */
2 | #main {
3 | padding-top: 60px;
4 | }
5 |
6 | @media (max-width: 980px) and (min-width: 768px) {
7 | body {
8 | padding-top: 0px;
9 | }
10 | }
11 |
12 | @media (max-width: 979px) {
13 | body {
14 | padding-top: 0px;
15 | }
16 | }
17 | /* ==========================================================================
18 | Author's custom styles
19 | ========================================================================== */
20 |
21 | footer {
22 | border-top: 1px solid #eee;
23 | padding: 20px;
24 | margin-top: 40px;
25 |
26 | }
27 |
28 | h1, h2, h3, h4 {
29 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
30 | }
31 | h2, h3 {
32 | padding-top: 50px; /* fix anchor problem - not the right way but copied from https://github.com/fsharp/fsfoundation/commit/fa6cc08cd79788757a15272d00cd35c9398900bc#diff-23b024677d4732ee53b6d7bdc52e0fe2 */
33 | margin-top: -50px; /* fix anchor problem - not the right way but copied from https://github.com/fsharp/fsfoundation/commit/fa6cc08cd79788757a15272d00cd35c9398900bc#diff-23b024677d4732ee53b6d7bdc52e0fe2 */
34 | }
35 | h2, h3, h4 {
36 | font-weight: normal;
37 | }
38 |
39 | h2 {
40 | font-size:180%;
41 | line-height:1.2em;
42 | margin-top:20px;
43 | font-weight:bold;
44 | }
45 |
46 | h3 {
47 | font-size:140%;
48 | line-height:1.2em;
49 | margin-top:15px;
50 | }
51 |
52 | h4 {
53 | font-size:125%;
54 | line-height:1.2em;
55 | }
56 |
57 | #rightPanel ul {
58 | margin:0px;
59 | padding:0px;
60 | }
61 |
62 | #rightPanel li {
63 | margin:0px 0px 4px 20px;
64 | padding:0px;
65 | }
66 |
67 | #rightPanel h4 {
68 | margin:0px 0px 0px 0px;
69 | font-size:95%;
70 | font-weight:bold;
71 | }
72 |
73 | table {
74 | border: 1px solid #e3e3e3;
75 | background-color: #f2f2f2;
76 | width: 100%;
77 | border-radius: 6px;
78 | -webkit-border-radius: 6px;
79 | -moz-border-radius: 6px;
80 | }
81 | table td, table th {
82 | padding: 5px;
83 | color: #333;
84 | }
85 | table thead {
86 | font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
87 | padding: .2em 0 .2em .5em;
88 | text-align: left;
89 | color: #4B4B4B;
90 | background-color: #C8C8C8;
91 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2f2f2), to(#e3e3e3), color-stop(.6,#B3B3B3));
92 | background-image: -moz-linear-gradient(top, #D6D6D6, #B0B0B0, #B3B3B3 90%);
93 | border-bottom: solid 1px #999;
94 | }
95 | table th {
96 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
97 | font-size: 17px;
98 | line-height: 20px;
99 | font-style: normal;
100 | font-weight: normal;
101 | text-align: left;
102 | text-shadow: white 1px 1px 1px;
103 | }
104 | table td {
105 | line-height: 20px;
106 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
107 | font-size: 14px;
108 | border-bottom: 1px solid #fff;
109 | border-top: 1px solid #fff;
110 | }
111 | table td:hover {
112 | background-color: #fff;
113 | }
114 |
115 |
--------------------------------------------------------------------------------
/_posts/2014-09-18-meeting-notes.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Online meeting notes, 18 September 2014
4 | subtitle: Meeting notes
5 | ---
6 |
7 | ## Online meeting notes, 18 September 2014
8 |
9 |
10 | Attending: About 14 people, including Michael Newton (host), Don Syme, Steve Taylor, Anh-Dung Phan, Jack Fox and others from Tachyus, Mathias Brandewinder.
11 |
12 | We used a Google Hangout on Air for the meeting. It took about 30min to get going due to technical glitches.
13 |
14 | Don gave a summary of some of the great things that have been happening over the last year. We talked about the mission statement for the group which everyone seemed happy with. Don later updated the mission statement to include a mention of “best-practice engineering” based on discussion in the group about F# community projects, packages and quality.
15 |
16 | We then walked through the sections of the existing remit doc and chatted about the state of play in each area.
17 |
18 |
19 | ### Compiler, Core Library, Compiler Service
20 |
21 | Current pain points:
22 |
23 | - [#r is not consistent on Mono/Linux/OSX](https://github.com/fsharp/fsharp/issues/251)
24 |
25 | - [fslang.uservoice.com](http://fslang.uservoice.com) is not a great site for making language/library suggestions
26 |
27 | - There are a [too many places to make suggestions and report issues](http://fsharp.org/guides/engineering/issues)
28 |
29 | ### Package Management
30 |
31 | Current pain points:
32 |
33 | - nuget is not distributed and available on Linux
34 |
35 | - nuget has a painful command line experience for NuGet
36 |
37 | - nuget is too tied to visual studio (the IDE tooling modified project files etc.)
38 |
39 | - the F# REPL doesn’t have “get package” experience
40 |
41 | ### Continuous Integration
42 |
43 | Current positives:
44 |
45 | - Travis being widely used, is taking the community in the right direction
46 |
47 | Current pain points:
48 |
49 | - Tricky to set up parallel builds in Travis
50 |
51 | - Need a blog post on “how to do it”
52 |
53 | ### Libraries and Frameworks
54 |
55 | Current pain points:
56 |
57 | - need precompiled/blessed packages that become a standard across a platform (cuts both ways - “blessed” packages get out-of-date)
58 |
59 | - Immutable.Collections.FSharp is needed?
60 |
61 | - Quality of some FSharp.* packages on nuget is poor and/or experimental
62 |
63 | - There are too many packages using the FSharp.* name, especially two-word package names like FSharp.XYZ
64 |
65 | ### Documentation
66 |
67 | Pain points:
68 |
69 | - FSharp.Formatting needs more robust error handling (throw in the compiler services doesn’t give good error reporting)
70 |
71 | ### Interoperability
72 |
73 | We agreed that “language interop” type providers like a Python type provider are out of scope for the group. The R Provider, for example, is covered mostly by the data science working group.
74 |
75 |
76 | ### Containers and VM Images
77 |
78 | A new section was added on the “Containers and VM Images”, based on the suggestion that we could make available pre-baked Docker and Vagrant containers and/or VM images.
79 |
80 | ### Distributed Compute Frameworks
81 |
82 | A new small section was added mentioning Distributed Compute Frameworks after the suggestion that the group should keep an eye on this space. Don gave a brief recap of Akka.NET, Orleans, MBrace and Dryad/Naiad.
83 |
84 |
--------------------------------------------------------------------------------
/_posts/2016-10-31-dotnetcore_sdk_group.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Starting an F# + .NET Core Development Group
4 | subtitle: Group focused to improve the F# story on .NET Core and integration in the .NET Core SDK
5 | ---
6 |
7 | # Starting an F# + .NET Core Development Group
8 | {:.no_toc}
9 |
10 | We propose to have a group focused to improve the F# story on .NET Core and integration
11 | in the .NET Core SDK.
12 |
13 | [Add yourself in](https://goo.gl/7esjsF) or join #dotnetcore channel in FSF slack for info.
14 |
15 |
16 | ## Summary
17 | {:.no_toc}
18 |
19 | The goal is to improve the experience for:
20 |
21 | - New users
22 | - Existing projects in ecosystem who want to add .NET Core support
23 |
24 | Because the goal is about the whole experience, lots of different areas/projects are interested.
25 |
26 | It's not about using .NET Core, but about contributing to so F# will be awesome to use on the .NET Core and .NET Core SDK.
27 |
28 | ## Want to help?
29 | {:.no_toc}
30 |
31 | Everyone can start contribute by him/herself already, everything is open source.
32 |
33 | But the topic is new and there were also various changes in the previous months (netstandard/project.json),
34 | so it's a bit difficult to get the current status, where start, where is going.
35 |
36 | To help new contributors, we'll do some quick session focused on contribuing about:
37 |
38 | - Foundamentals:
39 | - Topics like .net core/coreclr/netstandard/msbuild/sdk/ide
40 | - How the sdk and f# integration works, from zero to final executable/package
41 |
42 | - Overview of areas who require help
43 | - Like compiler/ide/tooling/docs/testing/libraries/etc
44 | - Everyone has their own agenda and definition of fun
45 |
46 | - Quickstart how to hack dotnet sdk about f# integration
47 | - from clone repo -> hack -> check if works.
48 | - Same for core project too
49 |
50 | - Weekly chat about progress
51 |
52 | ## Features and roadmap
53 | {:.no_toc}
54 |
55 | This continue the works done in the past.
56 |
57 | For example .NET Core Sdk preview2 already support F# ootb for most
58 | use cases, and some projects in ecosystem already added .NET Core (or .NET Standard ) support.
59 |
60 | But working <> awesome to use.
61 |
62 | The lists are just to give an idea of the todo.
63 | Some features are already implemented, some not, some are partial.
64 |
65 | - `Basics` list of features needed for basic usage.
66 | - `Additionals` are nice to have, some already works in preview2 (like docker)
67 |
68 | ### Basics
69 | {:.no_toc}
70 |
71 | - Support for .NET Core SDK preview3 (next version)
72 | - MSBUILD based, fsproj
73 | - Sdk+compiler from nuget package
74 | - Supported OS: same as .NET Core Sdk
75 | - Must be possibile to use normal workflow from sdk
76 | - restore/build/run/pack/publish/test
77 | - Support for multi framework targeting (crossgen)
78 | - Should be possibile to use it in parallel to old project system
79 | - Works and helps the ecosystem
80 | - Paket
81 | - FAKE
82 | - Fable
83 | - Ionide
84 | - IDE Support: VS Code/FSAC/VS
85 | - Intellisense
86 | - Debugging
87 | - Manually edit of project file works
88 | - Documentation, for example
89 | - Migration from old-fsproj (maybe with a tool too)
90 | - From zero to standalone console app in ide
91 | - From zero to library as nuget package (multiple frameworks)
92 | - CI, travis/appveyor
93 | - Should support other frameworks/profiles: Mono, .NET, PCL
94 | - Help community projects already supporting preview2, like
95 | - Suave
96 | - Argu
97 | - F# Interactive (fsi)
98 | - Templates
99 | - normal use case
100 | - integrated in expected templates generators
101 | - dotnet new
102 | - Forge
103 | - ProjectScaffolding
104 | - Single FSharp.Core package with multiple target frameworks.
105 |
106 | ### Additionals
107 | {:.no_toc}
108 |
109 | - As normal as possibile, to easier interoperate with C# on same solution
110 | - Reference C# project
111 | - Be referenced by C# project
112 | - CI testing of different os
113 | - Use the new features of the sdk where useful
114 | - like sdk tools to remove the need of bootstrapping (`dotnet reveal`)
115 | - Docker examples (both linux and windows)
116 | - Mono, Xamarin, IOS, etc
117 | - List f# project who support or doesnt support netstandard1.6
118 | - Type Providers: require `netstandard2.0`
119 |
120 | Enrico Sada, Dave Thomas
121 |
--------------------------------------------------------------------------------
/_posts/2013-07-09-meeting-notes.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Online meeting notes, 02 July 2013
4 | subtitle: Meeting notes
5 | ---
6 |
7 | ## Online meeting notes, 02 July 2013
8 |
9 |
10 | After a few glitches, ~10 of us joined the online session today to discuss the goals, remit and activities doc for the CoreEng WG.
11 |
12 | However at least 3 people couldn’t participate because of some kind of problems with Google+. Still the chat session was lively and we probably got more done than other techniques. Some people had added comments to the doc before the session.
13 |
14 | Notes from the chat session (we didn’t take a full copy of the chat log):
15 |
16 | 1. People generally like the group remit doc and it sets the right scope for the group
17 |
18 | 2.Probably the thorniest issue is libraries.
19 |
20 | a. Don said he felt the F# community needed to get to the point that it could roll out libraries as good and trusted as FSharp.Core.
21 |
22 | b. There was discussion about process. Would FSSF design libraries? Would it “bless” libraries? Rick emphasized that putting out FSSF-blessed libraries is a “recipe for disaster” unless our process, quality and design is good enough.
23 |
24 | c. People suggested we draw on experiences from Python, Dojo and .NET library processes.
25 |
26 | d. There are a lot of ideas floating around about how the WG and FSSF can facilitate high-quality libraries. See the on-going comment threads in the document for discussion about this.
27 |
28 | 3. We used RProvider and MatlabProvider as two examples of components which are "getting there" but where we need improvement:
29 |
30 | a. better docs
31 | b. better getting-started material
32 | c. better feedback (Rick said he’s had no feedback on the Matlab provider).
33 |
34 | 4. Dave pointed out how fsharpbinding really needs more contributors - there's a lot to do
35 |
36 | 5. Don asked for contributors to dev guides on fsharp.org. A draft guide for Mac/Linux/Cross-Platform is up but more work is needed.
37 |
38 | 6. Dave pointed out opportunities re LightTable and wants to integrate F# into that.
39 |
40 | 7. Don sang the praises of Vagrant for using Linux VMs from a Windows machine, and will send around material [see below]
41 |
42 | 8. People said positive things about ExtCore, and perhaps that could be brought more into the center of the picture in the library space
43 |
44 | 9. Don talked about how 60% of F# newcomers come through http://fsharp.org, and that is the primary place we can inform people about F# and its associated tools.
45 |
46 | 10. We talked through the RProvider as an example: a GitHub repo page doesn't cut it as a "landing page" for newcomers, e.g. for the RProvider. One solution is to make a GitHub pages page for your project. Also, the RProvider has a nuget package, which wasn’t well known and is not discoverable.
47 |
48 | 11. There was a lot of interest in having FSharp.Charting be cross-platform
49 |
50 | a. The plan is to have FSharp.Charting.OxyPlot.* etc. for cross-platform versions of the same design pattern.
51 |
52 | b. Robin is interested in contributing to this.
53 |
54 | c. Sergey asked whether FSharp.Charting could have an RProvider backend.
55 |
56 | 12. We discussed documentation tools for projects.
57 |
58 | a. Sample generation. Don says “ I think FSharp.Formatting is fine - and much, much better than nothing - I think it's what I'd encourage people to use right now. But yes, it would be great to go even further, and draw inspiration from other communities too.“
59 |
60 | b. Documentation generation. Don says “we have a hole w.r.t. API doc generation". Dave says http://fogus.github.io/marginalia/ does a good job for Clojure. He says FSharp.Formatting almost does this now, see this issue FSharp.Formatting request
61 |
62 | Action items
63 |
64 | - @Don says I'll send around a summary to the group.
65 |
66 | - @Antonio says “I can help on Windows Dev Guide for fsharp.org”
67 |
68 | - @Antonio says Andrea Canciani is willing to contribute (maybe to F# binding?)
69 |
70 | - @Don says he’ll send around resources on Vagrant including the standard VagrantFile for a VM that has F# 3.0 and Mono 3.0 installed.
71 |
72 | - @Rick says it's possible to make the Matlab provider cross-platform, but he needs wrappers for Matlab dynamic libraries that will be supported in mono. And he has no clue how to go about it.
73 |
74 | - @Robin says I will take “FSharp.Charting Cross Platform” to start.
75 |
76 | - @Don will send around a sample of using OxyPlot for cross-platform charting with PDFs
77 |
78 | - @Everyone agreed to send Rick feedback on the Matlab type provider (install a trial edition of Matlab)
79 |
80 | Participating founders (as of July 2013)
81 |
82 | - Dave Thomas
83 | - Fabio Galuppo
84 | - Usher, John (RTIO)
85 | - Don Syme
86 | - Carsten König
87 | - Dmitry Slutsky
88 | - Michael Newton
89 | - Andrew Cherry
90 | - Sergey Tihon
91 | - Jack Fox
92 | - Antonio Cisternino
93 | - Richard Minerich
94 | - Robin Neatherway
95 | - Steffen Forkmann
96 | - Anh-Dung Phan
97 | - Intellifactory
98 | - Adil Akhter
99 | - Tao Liu
100 | - Jonathan Leonard
101 |
--------------------------------------------------------------------------------
/_posts/2014-05-29-may-highlights.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Some Recent F# Core Engineering Highlights
4 | subtitle: An Update on the F# Compiler Services, Visual F# Power Tools and more
5 | ---
6 |
7 | Some Recent F# Core Engineering Highlights
8 | ==========================================
9 |
10 | In this blog post, we'll have a quick
11 | look at the recent work done by the community that falls within the remit of the Core
12 | Engineering group – there is a lot going on!
13 |
14 | F# Compiler Service
15 | -------------------
16 |
17 | F# Compiler Service (`FSharp.Compiler.Service.dll`) is a recent community project which
18 | can be used for hosting the F# compiler. This is a fundamental project that enables building
19 | other open components on top of the F# compiler and has already enabled much of the
20 | features in [F# Power Tools](http://fsprojects.github.io/VisualFSharpPowerTools/),
21 | [F# Formatting](http://tpetricek.github.io/FSharp.Formatting/) and other libraries.
22 |
23 | The F# Compiler Service currently exposes a number of core compiler APIs including:
24 |
25 | * **F# language tools for editors** including the F# tokenizer, ability to process
26 | parsed AST of F# code, editor services for auto-completion and tools for resolving
27 | symbols and other information about F# code.
28 |
29 | * **Hosting of F# interactive and compiler** allows calling F# interactive and the
30 | F# compiler as .NET libraries. This way, you can compile and evaluate F# code on
31 | the fly.
32 |
33 | There is a lot more that you can do. For more information:
34 |
35 | * See [the F# Compiler Service documentation](http://fsharp.github.io/FSharp.Compiler.Service/)
36 | * Get the [library via NuGet](https://www.nuget.org/packages/FSharp.Compiler.Service) and play with it!
37 | * Contribute [to the project on GitHub](https://github.com/fsharp/FSharp.Compiler.Service)
38 |
39 | Cross-platform and Open Tools
40 | -----------------------------
41 |
42 | The core [F# open-source repository](https://github.com/fsharp/fsharp) has been
43 | getting ready for the upcoming development of F# 4.0. The "master" branch is now
44 | fully integrated with the open-source release of F# 3.1 and everything is now
45 | building automatically:
46 |
47 | * Head (branch `master`), Mono 3.x, OSX + some unit tests (Travis)
48 | * F# 3.1 (branch `fsharp_31`), Mono 3.x, OSX + some unit tests (Travis)
49 | * F# 3.0 (branch `fsharp_30`), Mono 3.x, OSX + some unit tests (Travis)
50 |
51 | Much of the F# compiler test suite can now be run on OSX and Linux. This flushed out
52 | about 5 bugs in Mono, nearly all of which have already been fixed. The test are also
53 | run automatically as part of the Travis build, so if you're contributing, you do not
54 | have to worry about breaking things!
55 |
56 | The [F# bindings for Xamarin Studio and Emacs](https://github.com/fsharp/fsharpbinding)
57 | have had some nice work by Robin and Dave where the identifier parsing code (used for
58 | auto-complete and tool tips) is now shared between both the Emacs addin and Xamarin Studio
59 | addin. This has resulted in a number of fixes to intellisense.
60 |
61 | Although it is still in its early days, there has also been some work on
62 | [integrating F# with Vim](https://github.com/timrobinson/fsharp-vim) and
63 | [Sublime text](https://github.com/fsharp/fsharpbinding/tree/master/sublimetext). If you're
64 | missing your favorite editor here, be sure to contribute!
65 |
66 |
67 | Visual Studio F# Power Tools
68 | ----------------------------
69 |
70 | In the recent few months, amazing work has been done on Visual F# Power Tools.
71 | This is an open source project that aims to bring useful F# Visual Studio extensions
72 | into a single home. The project has been rapidly developing and currently supports the
73 | following features:
74 |
75 | * Automatically generating XML documentation comments
76 | * Formatting document and selection (integrating the [Fantomas](https://github.com/dungpa/fantomas) project)
77 | * Navigation features including navigation bar, navigate to command and more
78 | * Improved syntax highlighting and depth colorization
79 | * Rename refactoring, automatic implementation of interfaces and more
80 |
81 | To get involved with the project:
82 |
83 | * To contribute [see the project on GitHub](https://github.com/fsprojects/VisualFSharpPowerTools)
84 | * To install [go to Visual Studio gallery](http://visualstudiogallery.msdn.microsoft.com/136b942e-9f2c-4c0b-8bac-86d774189cff)
85 | * For more information, [see the project documentation](http://fsprojects.github.io/VisualFSharpPowerTools/)
86 | * To discuss potential features and fix bugs [go to the GitHub issues](https://github.com/fsprojects/VisualFSharpPowerTools/issues?page=1&state=open)
87 |
88 |
89 |
90 |
91 | _Published: 27 May 2014_
92 |
93 | _Tomas Petricek_
94 | _(on behalf of the F# Core Engineering group)_
95 |
--------------------------------------------------------------------------------
/_posts/2018-11-19-open-core-engineering-group-meeting.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Core Engineering online meeting notes, 19 November 2018
4 | subtitle: Meeting notes
5 | ---
6 |
7 | ## Core Engineering online meeting notes, 19 November 2018
8 |
9 | This online session 18 people joined to discuss the term "Core Engineering".
10 |
11 | Questions could be posted during the meeting with prefix "QUESTION:" and as it was an open session also comments could be added with the "COMMENT:" prefix.
12 |
13 | The discussion started with a reference to the [google-document](https://docs.google.com/document/d/1wAAR0v1dglXXQThqaMN_iNHi5xSH1boAlP3q-_4kSWI/edit?usp=sharing) written by Victor P. R. Müller to explain the reason why the discussion is happening. Afterwards Don Syme stated the goals for the meeting being to come up with a list of actionable improvements that the community can make to ease development in the core F# repositories and document those in the github repository Microsoft/visualfsharp or elsewhere.
14 |
15 | The particular proposed solutions / taks named Proposed Core Engineering Task (PCET) can be found at the end of the document.
16 |
17 | The list of questions and ideas of the google document where worked through in the whole meeting starting with:
18 | - Discussions about features take months up to years without decision.
19 | - Some features with many votes are open since years and no decision has been taken on them too
20 | - Some RFC’s for accepted features are such incomplete that it’s not possible to start implementing them
21 | - Expected timeframe for an accepted feature with started implementation isn’t available
22 |
23 | Don Syme states he's fine with the current approach of handling language suggestions speaking of not closing suggestions rather instead labeling suggestions with "probably-not". However he agrees that the RFC list needs some love and should be cleaned of such which may be better closed and or rebooted. To address this issue the PCET 1 was created where importantly a RFC may be rebooted if it doesn't get a comment or change within a couple of months. Regular meetings to clean up RFC's have been disagreed to aswell voting about whether a RFC should be closed, the process itself prefered be asnychronous only.
24 |
25 | Besides he announced that the office hours will now be regulary hold every monday 5 pm GMT either by himself or other volunteers.
26 |
27 | To the state of language suggestions which have been open a long time with many votes Don Syme tells that for particular suggestions (in the discussion Type Classes) a decision won't be taken in near future but people may still provide implementations.
28 |
29 | Afterwards the current situation that Don Syme is only deciding whether a language suggestion is accepted took place with the result that in future there won't be a different process to the current including the refreshed statement that Don Syme is the official F# Language Design Lead supported by the FSSF and Microsoft. Carefully also was added that the FSSF in principle is allowed to change this situation through voting however this scenario appears very unlikely. But Don Syme would like to have in future a more active oversight of the design process considering to report every 6 months to the FSSF board.
30 |
31 | Furthermore a discussion takes place about whether the design governance or process increase the difficulty of working in the compiler (with different opinions).
32 |
33 | For language design certain statements are now fully official:
34 | - The decision on Type Classes is clear: we won't put a fully-fledged version of Type Classes into F# while there is any chance that the corresponding feature will be put into C# (quote Don Syme)
35 | - we will seek to evolve the SRTP mechanism to accurately support some Type Class like scenarios but in a fairly conservative way (quote Don Syme)
36 |
37 | Further question points which have been adressed afterwards are:
38 | - separation of compiler and tools into different repositories
39 | - democratic voted group of “core compiler engineers” to the so called “Compiler Group”
40 | - regularly timed open chat / discussion with the “Compiler Group” about feature implementation details + compiler architecture design
41 | - List of people with their knowledge in the compiler
42 | - Ask people that have a deep knowledge of f# compiler what needs to be done. Looking at github a first list of people to ask could be: Kevin Ransom, Don Syme, Steffen Forkmann, Vasily Kirichenko
43 | - Provide a beta channel promoted by Microsoft which allows to easily download a custom F# compiler version with a specific feature in beta version
44 |
45 | Don Syme agrees on that the various F# compiler repositories should be merged in the future to less confuse people. Phillip Carter added that they are still working on improving the infrastructure of the visualfsharp repository to improve CI times.
46 |
47 | Additionaly Don Syme expressed again, that he's much in favour of regular timed compiler related discussions either held by him or a group of volunteers.
48 |
49 | Regarding Beta Channels Don Syme gave over to Phillip Carter who tells that the Infrastructure for the .NET SDK isn't ready for such yet. No further particular decision or statement was given for this proposal.
50 |
51 | After 1 1/2 hours the time for the meeting was up and the discussion ended.
52 |
53 | ### Participating members:
54 |
55 | - Don Syme
56 | - Jindřich Ivánek
57 | - Krzysztof Cieslak
58 | - Roman Sachse
59 | - Toby Shaw
60 | - Isaac Abraham
61 | - Phillip Carter
62 | - Chet Husk
63 | - Mark Lambert
64 | - Bjørn Bæverfjord
65 | - robert kuzelj
66 | - Dave Thomas
67 | - Oskar Gewalli
68 | - Thomas Boby
69 | - Bryant Huang
70 | - Gerard
71 | - Elliott V. Brown
72 | - Diego Esmerio
73 | - Victor Peter Rouven Müller
74 |
75 | ### Proposed core engineering tasks:
76 | - Scrub the active RFC list and propose to archive those that haven't seen action for 6-12 months
77 | - Label all suggestions with current status: (“Probably not”, “accepted in principle”, etc.)
78 | - make sure the current status around type classes is accurately documented on the corresponding language suggestions
79 | - The FSSF board require a report from the F# design lead (Don Syme) every 6 months on progress with the F# Language Design Process, and at the same time collect feedback from the community.
80 | - combine all build and automated testing in fsharp/fsharp into Microsoft/visualfsharp including the automatic build of the FSHarp.Compiler.TOols package
81 | - automate the integration of Microsoft/visualfsharp --> fsharp/fsharp so the latter is just a mirror of the former
82 | - move all build, automated testing and issues from fsharp/FSharp.Compiler.Service into Microsoft/visualfsharp and either deprecate the former or set up an automatic mirror
83 | - ncave moves his PR for the fable version of F# compiler from fsharp/FSharp.COmpiler.Service to Microsoft/visualfsharp repo
84 | - regular Monday 5pm BST F# Compiler Office Hours, initially led by Don but hopefully one or two additional people when he's not available
85 |
--------------------------------------------------------------------------------
/.nuget/NuGet.targets:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $(MSBuildProjectDirectory)\..\
5 |
6 |
7 | false
8 |
9 |
10 | false
11 |
12 |
13 | true
14 |
15 |
16 | false
17 |
18 |
19 |
20 |
21 |
22 |
26 |
27 |
28 |
29 |
30 | $([System.IO.Path]::Combine($(SolutionDir), ".nuget"))
31 | $([System.IO.Path]::Combine($(ProjectDir), "packages.config"))
32 |
33 |
34 |
35 |
36 | $(SolutionDir).nuget
37 | packages.config
38 |
39 |
40 |
41 |
42 | $(NuGetToolsPath)\NuGet.exe
43 | @(PackageSource)
44 |
45 | "$(NuGetExePath)"
46 | mono --runtime=v4.0.30319 $(NuGetExePath)
47 |
48 | $(TargetDir.Trim('\\'))
49 |
50 | -RequireConsent
51 | -NonInteractive
52 |
53 | "$(SolutionDir) "
54 | "$(SolutionDir)"
55 |
56 |
57 | $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)
58 | $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols
59 |
60 |
61 |
62 | RestorePackages;
63 | $(BuildDependsOn);
64 |
65 |
66 |
67 |
68 | $(BuildDependsOn);
69 | BuildPackage;
70 |
71 |
72 |
73 |
74 |
75 |
76 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
91 |
92 |
95 |
96 |
97 |
98 |
100 |
101 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
133 |
134 |
135 |
136 |
--------------------------------------------------------------------------------
/_posts/2013-07-09-group-remit.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: The F# Core Engineering Group Goals, Remit and Activities
4 | ---
5 |
6 | # The F# Core Engineering Group: Goals and Remit
7 | {:.no_toc}
8 |
9 | This document describes the goals, remit and activities of the F# Core Engineering Group.
10 |
11 | ## Contents
12 | {:.no_toc}
13 |
14 | {:toc}
15 |
16 | ## Goals
17 |
18 | To organise, promote and contribute to work on F#'s core tooling to make development pain free and fully featured, enable it on new platforms, host F# code in new ways and ensure best-practice engineering in the F# community.
19 |
20 | ## Group Remit
21 |
22 | The group's remit covers the following areas:
23 |
24 | ### Language Design Process
25 |
26 | We run the [F# Language and Core Library Design Process](http://fsharp.github.io/2016/09/26/fsharp-rfc-process.html). This
27 | includes [F# Language Design GitHub](https://github.com/fsharp/fslang-suggestions).
28 |
29 | ### Compiler, Core Library and Compiler Service
30 |
31 | The group commits to ensuring the easy availability of the F# Compiler, Core library and Compiler Service on all major platforms at high quality. Particular points of activity are:
32 |
33 | - We work cooperatively with the Visual F# compiler team at Microsoft to allow open source contributions and integrate Microsoft updates to the F# open source release into the F# repositories on GitHub.
34 | (See [this blog entry](http://fsharp.github.io/2014/06/18/fsharp-contributions.html) and [the Visual F# Team priorities](https://visualfsharp.codeplex.com/wikipage?title=Current%20Priorities%20))
35 |
36 | - We work cooperatively with Xamarin to integrate the F# Compiler into Mono releases on the Mac and Linux
37 |
38 | - We enable testing for the open edition of the F# compiler, particularly through CI systems (Travis and AppVeyor)
39 |
40 | - We work cooperatively with Debian packaging and other distributions to ensure Linux packages are available for F# on Debian and RPM, Gentoo/Arch builds
41 |
42 | - We work cooperatively with the Visual F# compiler team to align code bases with Visual F# team repos
43 |
44 | - We aim to keep the [the homebrew formula](https://github.com/Homebrew/homebrew-core/blob/7a4dabfc1a2acd9f01a1670fde4f0094c4fb6ffa/Formula/mono.rb) for F# up-to-date
45 |
46 | - We help maintain and improve the PCL (Portable Class Library) and .NET Standard support for F# across multiple platforms and devices
47 |
48 | - We aim to improve the documentation quality of the core compiler and library components.
49 |
50 | - We aim to help facilitate cross-platform development on the compiler, core library and compiler service.
51 |
52 |
53 | ### Editing/IDE Tools
54 |
55 | The group aims to help the F# community deliver high quality, consistent, easy-to-install, reliable editing experiences for F# code on all major platforms and as many editors as feasible. We also aim to encourage and facilitate Notebook/Workbook experiences (e.g. iPython notebook)
56 |
57 |
58 | ### Package Management
59 |
60 | The group aim to contribute to improving package management and tools that support cross-platform F# development.
61 |
62 |
63 | ### Virtual Machine Images/Containers
64 |
65 | The group encourages and facilitates the creation of pre-bundled VM images and containers which include F#, e.g.
66 |
67 | - Docker (e.g. [The Official Docker F# Image](https://github.com/fsprojects/docker-fsharp)
68 |
69 | - Vagrant (e.g. [this image](https://github.com/intellifactory/vagrant-fsharp/blob/master/ubuntu-trusty/Vagrantfile)
70 |
71 | ### Continuous Integration
72 |
73 | The group aim to
74 |
75 | - Improve CI support for F# in common CI systems such as Travis, AppVeyor
76 |
77 | - Share knowledge and best practice for CI systems, encourage use of CI
78 |
79 | - Use CI for core F# community projects
80 |
81 |
82 | ## Libraries and Frameworks
83 |
84 | The group aims to
85 |
86 | - Facilitate an active, high-quality ecosystem of F# libraries.
87 |
88 | - Maintain and improve [the F# Component Design Guidelines](http://fsharp.org/specs/component-design-guidelines/)
89 |
90 | We especially focus on libraries using the FSharp.* namespace. This includes
91 |
92 | - Contributing to libraries and frameworks
93 |
94 | - Assessing the quality of libraries and frameworks
95 |
96 | - Reviewing library and framework designs
97 |
98 | - Working with projects like FSharpx and ExtCore to create a cohesive set of libraries and packages
99 |
100 | - Starting new library projects
101 |
102 | - Proactively deprecating existing libraries
103 |
104 | We focus on tooling to support the generation of libraries by the F# community
105 |
106 | - Documentation tooling
107 |
108 | - NuGet cross-platform
109 |
110 | - PCL (portable class libraries) on all platforms
111 |
112 | We will consider having the FSSF “blessed” libraries and tools through one or more of:
113 |
114 | - Publishing them under a FSSF NuGet accounts
115 |
116 | - Documenting them under fsharp.org
117 |
118 | - Blessing them as “supported”, where they are considered a very official and stable part of the F# library base
119 |
120 | The criteria for a library or framework to get this blessing will be rigorous - for example it must be uniquely significant F# functionality, not be experimental and must be stable and tested. It should also be cross-platform, where possible.
121 |
122 | We will look for inspiration from other package-based software communities for how to manage this process.
123 |
124 | We will loko to improve existing Type Providers and ensure they work cross platform.
125 |
126 |
127 | ### Hosting
128 |
129 | The group aims to facilitate the development of new F# development experiences through “hosting” F# (whether client-side as an API, server-side or other variations).
130 |
131 |
132 | ### Documentation
133 |
134 | The group commits to
135 |
136 | - maintaining and regularly validating the “getting started” guides already available on fsharp.org
137 |
138 | - creating and maintaining development guides for all major platforms on fsharp.org
139 |
140 | - Make tools that generate top-quality documentation (e.g. FSharp.Formatting) and help disseminate these to the F# community.
141 |
142 | - Better documentation for all of the impressive work that has already been done
143 |
144 | - Help the community create roadmaps for core libraries to improve functionality, engineering, and documentation
145 |
146 |
147 | ### Interoperability
148 |
149 | The group aims to facilitate and encourage core interoperability tooling such as
150 |
151 | - Type providers to other programming languages (Java etc.)
152 |
153 | - Knowledge of tooling that can be used to interoperate with other systems
154 |
155 | ### Distributed Computing Frameworks
156 |
157 | While not part of the core remit of the group, we keep an eye on and encourage/facilitate the emerging distributed compute frameworks which work well with F# code, for example, Akka.NET, M-Brace/Cloud-F# and Orleans.
158 |
159 |
160 | ## What We Don’t Do
161 |
162 | We don’t maintain every library and tool that the F# community creates. Only the following components are “maintained” by this group.
163 |
164 | - [The open edition of the F# compiler and core library](http://github.com/fsharp/fsharp)
165 |
166 | - [The F# Compiler Service](http://github.com/fsharp/FSharp.Compiler.Service)
167 |
168 | - [The F# RFC Process](http://github.com/fsharp/fsharp.github.io) and [FSharpLangDesign Notes](http://github.com/fsharp/FSharpLangDesign)
169 |
170 | All other projects are done on a cooperative basis with the project owners and F# community.
171 |
172 | We don’t duplicate functionality available in the F# exosystem (.NET, C#, NuGet etc.)
173 |
174 | We don’t focus on tools/libraries clearly in the remit of another working group, e.g. math libraries. We will, however, work with these groups to help make sure their libraries and tools fit into a cohesive and simple overall picture for F#.
175 |
176 | We don’t allow junk libraries and tools to “hang around” if they are dead projects or low quality.
177 |
178 | We don’t focus on tooling that relies on other minority 3rd party proprietary editors. (Xamarin is OK because it also works in MonoDevelop, Resharper is not, partly because the API is complex. Visual Studio tooling is OK because it is so massive in the F# ecosystem)
179 |
180 | Larger projects such as improved mobile support will probably need to end up as separate discussions with teams of volunteers. Most of these are mentioned in ‘Initial Remit’ above.
181 |
182 |
183 |
184 | _Published: 02 July 2013_
185 | _Updated: 19 September 2014_
186 | _Updated: 27 September 2016_
187 |
188 | _(on behalf of the F# Core Engineering group)_
189 |
--------------------------------------------------------------------------------
/css/bootstrap-responsive.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.1.1
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade.in{top:auto}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-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-right:10px;padding-left:10px}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-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-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
10 |
--------------------------------------------------------------------------------
/_posts/2014-09-19-fsharp-libraries.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Recommended Guidelines for F# Projects, Packages and Namespaces
4 | subtitle: Naming, Engineering and General Advice
5 | ---
6 |
7 | # Recommended Guidelines for F# Projects, Packages and Namespaces
8 | {:.no_toc}
9 |
10 | > Naming, Engineering and General Advice
11 |
12 | ## Author
13 |
14 | Don Syme, with advice from various contributors to F# Core Engineering discussions.
15 |
16 | Originally drafted September 2014, with subsequent minor updates.
17 |
18 | ## Contents
19 | {:.no_toc}
20 |
21 | {:toc}
22 |
23 | ## Introduction
24 |
25 | One of the historic goals of the "F# Core Engineering" group is to help ensure best engineering practices in public-facing F# components and packages.
26 |
27 | In this document we capture some recommended guidelines for naming and engineering for F# projects, packages and namespaces. This is based on how things stood in 2014, and we have continued to update these with minor modifications. We particularly focus on open projects such as those in the [F# Community Projects](http://fsharp.org/community/projects/) list or
28 | [packages in NuGet for an "FSharp" search](http://www.nuget.org/packages?q=fsharp).
29 |
30 | These are recommendations - they are not hard-and-fast rules, and are offered for discussion amongst
31 | F# developers. If you would like to discuss these guidelines or suggest modifications,
32 | please [edit this file on GitHub and submit a pull request](https://github.com/fsharp/fsharp.github.io/edit/master/_posts/2014-09-19-fsharp-libraries.md).
33 |
34 | In discussions, there has been agreement on the following:
35 |
36 | 1. FSharp.* projects should be high-quality or trending **rapidly** in that direction.
37 | Ideally any packages and code under the FSharp.* namespace should be of sufficient quality to be considered
38 | ready for production use by people in the wider F# community.
39 |
40 | 2. We need to avoid pollution of the FSharp.* namespace, particularly by unfinished projects.
41 |
42 | 3. We need to encourage some degree of incubation and experimentation using FSharp.* project, package and namespace names.
43 | Important F# components such as [FSharp.Data](http://fsharp.github.io/FSharp.Data/) have developed in this way.
44 |
45 | 4. Packages and projects using FSharp.* naming should generally be cross-platform,
46 | unless explicitly qualified by some platform-specific moniker (e.g. "Windows", "Android", "Azure", "Gtk" or "Linux").
47 | Code in the FSharp.* namespace should build, run and pass tests across multiple platforms.
48 |
49 | 5. We want to encourage and scale the positive and productive spirit with which the F# community operates by sharing
50 | information about how to make successful, long-lasting and broad-reach components in a collaborative way.
51 |
52 | In light of these, we cover some specific recommendations with regard to naming, quality and general advice below.
53 | They are written to augment the existing [F# Component Design Guidelines](http://fsharp.org/specs/component-design-guidelines/).
54 | Some of these recommendations may eventually be added to those guidelines.
55 |
56 |
57 |
58 | ## Naming Guidelines
59 |
60 |
61 |
62 | ### Guideline: Do make the purpose of your project or package clear in its name
63 |
64 | When starting a project, it can be all-to-easy to choose a name that is too general, for
65 | example "FSharp.Helpers". As you clarify what your project is about, make sure you adjust the name of your project
66 | accordingly.
67 |
68 |
69 | For example, a project such as "FSharp.Cloud" is unclear in purpose. Is this for uploading music to Apple's iCloud? Or for
70 | Amazon AWS? Or Microsoft Azure? Instead, use a name such as "FSharp.Azure.Scripting" or "FSharp.Amazon.Scripting" if your
71 | package is in fact a scripting library for a particularly cloud infrastructure provide.
72 |
73 | Alternatively, you may end up dropping the use of an "FSharp" name for your project or package. see below, and choosing
74 | a more product-like name.
75 |
76 |
77 |
78 | ### Guideline: Consider an `FSharp.*` name for things intended primarily for F# developers
79 |
80 | Many libraries, package or tools are designed explicitly for the use of F# programmers.
81 | These may be valid candidates for an "FSharp.*" name, if other criteria are met.
82 |
83 | For example, "FSharp.Data" or "FSharp.Data.SqlCommandProvider" are in this category.
84 |
85 |
86 |
87 | ### Guideline: Avoid an `FSharp.*` name for things not intended exclusively for F# developers
88 |
89 | Some projects, packages and tools use F# as an implementation or scripting language but are intended for broader use.
90 | If your audience is larger than the worldwide community of F# developers, then strongly consider using a
91 | name which doesn't mention F#.
92 |
93 | For example,
94 |
95 | - [FAKE](http://fsharp.github.io/FAKE/) is a general build tool which happens to use F# as a scripting language. It has achieved
96 | widespread adoption, partly because the name is well chosen to appeal to a broad audience.
97 |
98 | - [Deedle](http://bluemountaincapital.github.io/Deedle/) package
99 | is branded as "An exploratory data library for .NET" and includes a C#-facing API (implemented in F#).
100 | It was successfully renamed from "FSharp.Data.DataFrame" to broaden its reach, and at the time of writing [a Google
101 | search for "C# DataFrame"](http://www.google.co.uk/#q=c%23+dataframe) brings Deedle as the first hit.
102 |
103 | Likewise, some projects are product-like or are actual products, often with reach beyond the worldwide community of F# developers
104 | or enabling new development experiences. These should normally use a name that doesn't begin with "FSharp", though may mention F#
105 | if useful. Examples are [MathDotNet](http://www.mathdotnet.com/),
106 | [Akka.NET](http://akkadotnet.github.io/) and
107 | [WebSharper](http://websharper.com/). Some of these are F#-specific, some are general .NET tools with an F# angle, some are products, some
108 | are open source, but all benefit from their own branding.
109 |
110 |
111 |
112 |
113 | ### Guideline: Avoid using two word "FSharp.XYZ" names for projects and packages
114 |
115 | We recommend that new public-facing projects do not use a two-word qualified FSharp.* name except in extremely rare circumstances.
116 |
117 | For example, projects with names such as
118 | FSharp.Numerics, FSharp.Distribution, FSharp.BigData or FSharp.Web are named too broadly. We are uncomfortable with seeing
119 | anyone use unqualified two-word FSharp.* names for projects except in rare circumstances such as FSharp.Data.
120 |
121 | If your project already uses such a name, then strongly consider renaming it. One exception is [FSharp.Data](http://fsharp.github.io/FSharp.Data/)
122 | which is sufficiently broad and canonical to use a two-word name.
123 |
124 |
125 |
126 | ### Guideline: Do use existing second-level namespaces where appropriate
127 |
128 | .NET and F# components are placed in second-level namespaces such as "FSharp.Control", "FSharp.Data", "FSharp.Net", and so on.
129 | Use the following prefixes where possible, rather than inventing new ones:
130 |
131 | - `FSharp.Control`: Functionality related to control flow, such as asynchronous programming, message passing,
132 | event-based programming, reactive programming, and similar
133 |
134 | - `FSharp.Data`: Types related to data access, data schema, and similar
135 |
136 | - `FSharp.Text`: Text processing, formating, printing, or similar functionality
137 |
138 | - `FSharp.Azure`: Types related to cloud computing on the Azure plattform.
139 |
140 | - `FSharp.AWS`: Types related to cloud computing on the AWS plattform.
141 |
142 | - `FSharp.Compiler`: Functionality relating to compilation of F#
143 |
144 | - `FSharp.Core`: Use sparingly. Typically required for helper types required by incubation of compiler features
145 |
146 | For example, a library like "FSharp.Actor" might be better renamed to "FSharp.Control.Actor". Similarly, "FSharp.Reactive"
147 | is better renamed to "FSharp.Control.Reactive". Likewise, a type provider
148 | for a data source or schema format XYZ should normally be placed in "FSharp.Data", e.g. "FSharp.Data.XYZ".
149 |
150 |
151 |
152 | ### Guideline: Consider using "Experimental" in project/package names in early stages
153 |
154 | We encourage incubation of candidates for the FSharp.* namespace. One way to do this is to allow some moderation, e.g. allow free use of names like
155 |
156 | - FSharp.Data.Experimental.XYZ
157 | - FSharp.Linq.Experimental.XYZ
158 | - FSharp.Core.Experimental.XYZ
159 |
160 | The use of "Experimental" is useful and recommended in early stages. Renaming projects and packages is fairly well
161 | supported by GitHub and existing package managers, combined with global-search-and-replace.
162 |
163 |
164 |
165 |
166 | ### Guideline: Clearly label project status prior to release
167 |
168 | Projects, packages and tools using the FSharp.* top level namespace should clearly and prominently label their status
169 | in all documentation during the project's early phases of development. Projects should use version numbers below 1.0
170 | to denote pre-release status, and clearly label their status as "Alpha" when the project is still lacking features
171 | or functionality required for widespread usage, and "Beta" prior to adequate usage and testing to be considered a mature package.
172 |
173 |
174 |
175 | ### Guideline: Do seek review of your project, package and namespace names
176 |
177 | The F# community love to help and give good advice. Seek advice via the [#fsharp tag on Twitter](https://twitter.com/hashtag/fsharp?src=hash)
178 | or other community forums.
179 |
180 |
181 |
182 | ## Transpiling Guidelines
183 |
184 |
185 |
186 | Some F# libraries are candidates for cross-compilation using F# transpiler tools such as Fable and WebSharper. Other transpilers for other targets may also be developed over time.
187 |
188 | The following are draft guidelines for adding support for transpilation, based on information available in 2019.
189 |
190 | * Consider supporting transpilation by one or more alternative toolchains. It is not required or obligatory.
191 |
192 | * Do ensure that the qualities of the library are not diminished significantly, e.g. API design, documentation and performance.
193 |
194 | * Do be positive to contributions which add support and testing for other transpilers. However there is no obligation to support any particular transpiler.
195 |
196 | * Do add CI testing for the transpilation.
197 |
198 | * Do use feature-specific switches `#if NO_FOO_FEATURE` rather than `#if MYTRANSPILER`.
199 |
200 | * Do assess the quality of the transpilation tool, and the degree of support for language and library.
201 |
202 | * Consider using an appropriate different namespace, e.g. `Fox.Collections.Rapid` for transpiled version of the (hypothetical) `FSharp.Collections.Rapid` library.
203 |
204 | * Consider the maintenance burden of the necessary `#if` when making your decisions, including the long-term maintenance by other contributors.
205 |
206 | As an example, as of October 2019 the `dotnet/fsharp` repository has decided not to support transpilation for the `FSharp.Compiler.Service` library component. However, some transpilers maintain separate forks of that repository.
207 |
208 | ## Engineering Guidelines
209 |
210 |
211 |
212 | ### Guideline: Apply good software engineering practice before publicizing your project
213 |
214 | Before you publicize an open, public-facing project, it pays to get all the basics in place to allow
215 | people to collaborate with you. These are, minimally:
216 |
217 | - *Naming*. Get the naming of your project right. Make its purpose clear.
218 |
219 | - *README* and *Road Map*. Add a clear, simple README to your project. Make its purpose clear. Add a road map too.
220 |
221 | - *Packaging*. Make a package for your library, component or tool. Often this will be a NuGet package,
222 | but if it is some other kind of tool then make and publish the appropriate package. For example,
223 | the Emacs mode for F# is published as a MELPA package. Fable is published as an NPM package.
224 | Document how the package gets published.
225 |
226 | - *Testing*. Ensure your project has tests that build, run and pass out-of-the-box.
227 |
228 | - *Documentation*. Ensure your project has good documentation. If on GitHub, consider publishing your
229 | documentation via GitHub pages. Consider using documentation generation tools and templates used by the [F# Project Scaffolding](https://github.com/fsprojects/ProjectScaffold)
230 |
231 | - *Tutorials*. Ensure your project has tutorials as part of its documentation. Templates and examples are available in the [F# Project Scaffolding](https://github.com/fsprojects/ProjectScaffold)
232 |
233 | - *Videos*. If you've given a talk on your project, add a link to the video. It's a great way to introduce yourself to potential contributors.
234 |
235 | - *Continuous Integration*. Add continuous integration build and testing to your project, for example using AppVeyor or Travis. For AppVeyor, this is done by adding `appveyor.yml` ([example](https://github.com/fsprojects/ProjectScaffold/blob/master/appveyor.yml)) and
236 | registering your project. For Travis, you add a `.travis.yml` ([example](https://github.com/fsprojects/ProjectScaffold/blob/master/.travis.yml)) and register the project.
237 | Travis provides OSX and Linux machines - OSX machines are used if the language is set to "objective-c".
238 |
239 | - *Reach a Known State*. Document all known issues. Consider labeling some of them as "up-for-grabs". Don't leave undocumented minefields in your package or tool.
240 |
241 | - *Cross-platform*. Set up CI testing on both Windows and Linux/OSX.
242 |
243 | - *.NET Standard if possible*. If writing a library, make your component a .NET Standard 2.0 component where possible.
244 |
245 | If you don't do these things, people are unlikely to want to collaborate with you on your project.
246 |
247 |
248 |
249 |
250 | ### Guideline: Evolving code and new features should be carried out in a PR or a feature branch, and merged in only when ready
251 |
252 | Do not develop features in your "master" branch or published NuGet packages. Instead, use a PR, a feature branch, or a fork,
253 | or a new project, or a component marked Experimental.
254 |
255 |
256 |
257 |
258 |
259 | ## General Guidelines
260 |
261 |
262 |
263 | ### Guideline: Consider putting open incubation projects in [The F# Community Incubation Space](http://github.com/fsprojects)
264 |
265 | The F# Core Engineering group manages [The F# Community Incubation Space](http://github.com/fsprojects) for community
266 | incubation projects. To get your project added or removed from this space, [add an issue to the admin section](https://github.com/fsprojects/FsProjectsAdmin/)
267 | of this space.
268 |
269 |
270 |
271 | ### Guideline: Do recruit additional contributors and maintainers of your project.
272 |
273 | Please contribute fixes and improvement to the project scaffolding to make it easier for others to use. If you add your
274 | project to [The F# Community Incubation Space](http://github.com/fsprojects) then the owners of the space will
275 | also automatically be able to perform some maintenance tasks on your repository, including accepting pull requests
276 | or curating issues.
277 |
278 |
279 |
280 |
281 | ### Guideline: Do use a nice logo for your package or tool.
282 |
283 | Many F# community projects include nice logos. If necessary, ask for help to design a new logo in a matching style.
284 | For example, see the [FSharp.Data](https://twitter.com/FSharpData) library.
285 |
286 |
287 |
288 | ### Guideline: Do add your project to the [F# Community Projects](http://fsharp.org/community/projects/) list
289 |
290 | We recommend you consider adding your project the [F# Community Projects](http://fsharp.org/community/projects/) list. You can
291 | do this by submitting a pull request on GitHub as described on the page.
292 |
293 |
294 |
295 | ### Guideline: Do consider creating a Twitter account for your package or tool
296 |
297 | A Twitter account for a project can increase its visibility, especially in early stages, and set it
298 | on a track to be an independent, long-lived technology with multiple contributors. For
299 | example, see the [FSharp.Data](https://twitter.com/FSharpData) or [F# for Open Editors](https://twitter.com/fsharpbinding)
300 | on Twitter.
301 |
302 | If you tweet, use the [#fsharp tag on Twitter](https://twitter.com/hashtag/fsharp?src=hash).
303 |
304 |
305 |
306 | ### Guideline: Consider making your project "independent" of you or your company
307 |
308 | Projects, packages and tools are often branded in a way to make them less directly dependent on a particular person or company,
309 | relying on people who fill roles rather than being permanently tied to an individual.
310 |
311 | For example, the [Akka.NET](http://getakka.net/) project started life as a project called "Pigeon" in
312 | the GitHub account of one major contributor. It is now branded as an "independent" project.
313 |
314 | Branding your project as independent (or indirectly-dependent) can increase
315 | confidence, help attract additional contributors, give new opportunities (for example to start a consulting company
316 | around the technology), and above all can help with transitions as people move on and off the project. Effectively,
317 | a layer of indirection is placed between the projects and the contributors. Behind the scenes, the same
318 | contributors may be involved, especially initially, but the long term advantages are very large.
319 |
320 | This approach is frequently used for open source packages and tools initially started by individuals.
321 | Note that detaching yourself from your project in this way can be both challenging and liberating.
322 |
323 | This approach can also be used for products or open-source projects where companies are major contributors.
324 | This can be a difficult choice: the company may (or may not) want its name attached to the open-source project in a strong way.
325 |
326 |
327 |
328 |
329 | ## Guidelines for the cultural processing of strings in .NET generally, and F# specifically
330 |
331 |
332 |
333 | ### Guideline: Explicitly state cultural intent, where applicable, in the conversion and comparison of strings
334 |
335 | Default .NET methods for string conversions of number types and DateTimes (value-to-string; string-to-value) have a notable behaviour characteristic: they are 'culturally sensitive'. The same applies to the default methods for upper and lower casing of strings (string-to-string conversions). This means that commonly-used methods such as:-
336 |
337 | - `Double.ToString()`
338 | - `Double.Parse(s)`
339 | - `Double.TryParse(s, out d)`
340 | - `DateTime.ToString(format)`
341 | - `String.ToUpper()` / `.ToLower()`
342 | - and many more
343 |
344 | use the rules of the *current thread's current culture* to perform their conversions. Since this culture can vary from machine to machine (and is very likely to do so when machines are located in different countries), use of these method overloads gives rise to many potential problems, including but not limited to:-
345 |
346 | - failure to parse a string representing a floating-point number or a date (an exception is thrown)
347 | - parsing a string that represents a floating-point number or a date to an incorrect value
348 | - security issues
349 | - subtle bugs
350 |
351 | Similarly, default .NET methods that involve the comparison of strings (for equality testing and ordering) have similar problems. Methods such as:-
352 |
353 | - `String.StartsWith(s)` / `.EndsWith(s)`
354 | - `String.IndexOf(s)`
355 | - `String.Contains(s)`
356 | - `String.Compare(s, s1)`
357 | - `String.Equals(s)`
358 | - and more
359 |
360 | either use the current thread's current culture for a culturally sensitive comparison, or are fixed to use an Ordinal (non-cultural, case-sensitive) comparison. The former can give rise to bugs and poor security decisions where the comparison should have been performed non-culturally. The latter (Ordinal only) may be too restrictive: e.g. the caller may need the comparison to be case-insensitive.
361 |
362 | Since .NET 2.0, released in 2005, all the tools have been in place (in terms of enums, method overloads, .NET types etc.) to allow .NET developers to process strings correctly at all times - especially with respect to performing culturally-varying vs fixed-culture conversions of strings, and cultural vs non-cultural comparisons of strings. These tools should be used at all times. To do so, a .NET developer should, in general, always use those method overloads that allow the caller to explicitly state his/her *cultural intent*.
363 |
364 | An example, for conversions:-
365 |
366 | open System.Globalization
367 |
368 | let floatVal = 2001.345
369 |
370 | let str1 = floatVal.ToString(CultureInfo.InvariantCulture) // 'string floatVal' does the same thing
371 | let str2 = floatVal.ToString(CultureInfo.CurrentCulture)
372 | let str3 = floatVal.ToString(new CultureInfo("en-US"))
373 |
374 | An example, for comparisons:-
375 |
376 | open System
377 |
378 | let s1 = ""
379 | let s2 = ""
380 |
381 | let eq1 = String.Equals(s1, s2, StringComparison.Ordinal) // 's1 = s2' does the same thing
382 | let eq2 = String.Equals(s1, s2, StringComparison.OrdinalIgnoreCase)
383 |
384 |
385 | Always explicitly stating cultural intent should ensure correct operation of the code, and - equally as important - shows that the developer is aware of the issues and has addressed them (calling `Double.ToString()`, even when use of the current thread's current culture is desired, gives no such re-assurance).
386 |
387 | F# developers should be aware of the behaviour of F#'s [core operators](http://msdn.microsoft.com/en-us/library/ee353754.aspx) with respect to cultural sensitivity:-
388 |
389 | - F# and `FSharp.Core` functions always use Ordinal (non-cultural, case-sensitive) string comparison by default for "compare", "=", "<>", "<", ">", Seq.sort, Seq.sortBy, HashIdentity.Structural, ComparisonIdentity.Structural and so on
390 | - core operators `byte`, `decimal`, `float`, `float32`, `int`, `int16`, `int32`, `int64`, `sbyte`, `uint16`, `unit32`, `uint64` convert strings using the **invariant** culture.
391 |
392 | F# developers can and should rely on the behaviour of these operators, and the need to be explicit about Invariant Culture conversions and Ordinal comparisons is removed when using these operators.
393 |
394 |
395 |
396 |
397 | ### Guideline: Always follow the long-established Best Practices for using strings in the .NET Framework
398 |
399 | See Microsoft's official [Best Practices for Using Strings in the .NET Framework](http://msdn.microsoft.com/en-us/library/dd465121%28v=vs.110%29.aspx), as well as the specific guidance for F# developers that is given in this document.
400 |
401 |
402 |
403 |
404 | ### Guideline: F# components should be tested to ensure that they behave correctly when operating under different cultures
405 |
406 | Unit tests typically run in-process and on the same thread as the code-under-test. Therefore culture testing may be as simple as modifying the current thread's current culture in the Act (or Setup) phase of the test; e.g.
407 |
408 | // change the current thread's current culture to French - France
409 | System.Threading.Thread.CurrentThread.CurrentCulture <- CultureInfo.CreateSpecificCulture("fr-FR")
410 |
411 | Integration tests may need to go to greater lengths to manipulate the code-under-test's culture, including modification of the test machine's Region and Language control panel settings.
412 |
413 |
414 |
415 |
416 | ### Guideline: Public-facing F# libraries should make sensible decisions about cultural string processing, and should strive for consistency
417 |
418 | A public-facing library that might reasonably be expected to run on machines of different cultures should ensure that all of the code is written to process strings correctly, with respect to cultural / non-cultural behaviour. Contributors should be encouraged to follow rules and guidelines that are established at the outset, so that the code is consistent in this regard.
419 |
420 | If library-specific functions are used to wrap .NET string conversion and comparison methods then:-
421 |
422 | - these functions should be used by all contributors
423 | - the functions should encourage callers to be explicit about cultural intent, and not hide such details
424 | - the functions should wrap only those .NET method overloads that allow callers to be explicit about cultural intent
425 |
426 | If library-specific operators are used to wrap .NET string conversion and comparison methods then their cultural operation should be explicitly documented and understood by all contributors.
427 |
428 | On the whole it's best to err on the side of caution and *not* introduce such library-specific functions and operators, since contributors may contribute to multiple libraries.
429 |
430 | Where libraries introduce new data structures + associated operators and functions that use string-based identifiers (e.g. keys), the default string comparison for these identifiers should be Ordinal (non-cultural, case-sensitive). This should be noted in a library's documentation.
431 |
432 |
433 |
434 |
435 |
436 |
437 | ### About Us
438 |
439 | The F# Core Engineering Group is a technical group associated with [The F# Software Foundation](http://fsharp.org).
440 |
441 | We manage the cross-platform and open-source [F# Compiler and Components](https://github.com/fsharp) repositories
442 | and the [F# Community Project Incubation Space](https://github.com/fsprojects).
443 |
444 | Visit our [website](http://fsharp.github.io) and please continue all the great work on core F# engineering!
445 |
446 |
447 |
448 | _First Published: 19 September 2014_
449 |
450 | _The F# Core Engineering group_
451 |
--------------------------------------------------------------------------------
/css/bootstrap-responsive.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.1.1
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */
10 |
11 | .clearfix {
12 | *zoom: 1;
13 | }
14 |
15 | .clearfix:before,
16 | .clearfix:after {
17 | display: table;
18 | line-height: 0;
19 | content: "";
20 | }
21 |
22 | .clearfix:after {
23 | clear: both;
24 | }
25 |
26 | .hide-text {
27 | font: 0/0 a;
28 | color: transparent;
29 | text-shadow: none;
30 | background-color: transparent;
31 | border: 0;
32 | }
33 |
34 | .input-block-level {
35 | display: block;
36 | width: 100%;
37 | min-height: 30px;
38 | -webkit-box-sizing: border-box;
39 | -moz-box-sizing: border-box;
40 | box-sizing: border-box;
41 | }
42 |
43 | .hidden {
44 | display: none;
45 | visibility: hidden;
46 | }
47 |
48 | .visible-phone {
49 | display: none !important;
50 | }
51 |
52 | .visible-tablet {
53 | display: none !important;
54 | }
55 |
56 | .hidden-desktop {
57 | display: none !important;
58 | }
59 |
60 | .visible-desktop {
61 | display: inherit !important;
62 | }
63 |
64 | @media (min-width: 768px) and (max-width: 979px) {
65 | .hidden-desktop {
66 | display: inherit !important;
67 | }
68 | .visible-desktop {
69 | display: none !important ;
70 | }
71 | .visible-tablet {
72 | display: inherit !important;
73 | }
74 | .hidden-tablet {
75 | display: none !important;
76 | }
77 | }
78 |
79 | @media (max-width: 767px) {
80 | .hidden-desktop {
81 | display: inherit !important;
82 | }
83 | .visible-desktop {
84 | display: none !important;
85 | }
86 | .visible-phone {
87 | display: inherit !important;
88 | }
89 | .hidden-phone {
90 | display: none !important;
91 | }
92 | }
93 |
94 | @media (min-width: 1200px) {
95 | .row {
96 | margin-left: -30px;
97 | *zoom: 1;
98 | }
99 | .row:before,
100 | .row:after {
101 | display: table;
102 | line-height: 0;
103 | content: "";
104 | }
105 | .row:after {
106 | clear: both;
107 | }
108 | [class*="span"] {
109 | float: left;
110 | min-height: 1px;
111 | margin-left: 30px;
112 | }
113 | .container,
114 | .navbar-static-top .container,
115 | .navbar-fixed-top .container,
116 | .navbar-fixed-bottom .container {
117 | width: 1170px;
118 | }
119 | .span12 {
120 | width: 1170px;
121 | }
122 | .span11 {
123 | width: 1070px;
124 | }
125 | .span10 {
126 | width: 970px;
127 | }
128 | .span9 {
129 | width: 870px;
130 | }
131 | .span8 {
132 | width: 770px;
133 | }
134 | .span7 {
135 | width: 670px;
136 | }
137 | .span6 {
138 | width: 570px;
139 | }
140 | .span5 {
141 | width: 470px;
142 | }
143 | .span4 {
144 | width: 370px;
145 | }
146 | .span3 {
147 | width: 270px;
148 | }
149 | .span2 {
150 | width: 170px;
151 | }
152 | .span1 {
153 | width: 70px;
154 | }
155 | .offset12 {
156 | margin-left: 1230px;
157 | }
158 | .offset11 {
159 | margin-left: 1130px;
160 | }
161 | .offset10 {
162 | margin-left: 1030px;
163 | }
164 | .offset9 {
165 | margin-left: 930px;
166 | }
167 | .offset8 {
168 | margin-left: 830px;
169 | }
170 | .offset7 {
171 | margin-left: 730px;
172 | }
173 | .offset6 {
174 | margin-left: 630px;
175 | }
176 | .offset5 {
177 | margin-left: 530px;
178 | }
179 | .offset4 {
180 | margin-left: 430px;
181 | }
182 | .offset3 {
183 | margin-left: 330px;
184 | }
185 | .offset2 {
186 | margin-left: 230px;
187 | }
188 | .offset1 {
189 | margin-left: 130px;
190 | }
191 | .row-fluid {
192 | width: 100%;
193 | *zoom: 1;
194 | }
195 | .row-fluid:before,
196 | .row-fluid:after {
197 | display: table;
198 | line-height: 0;
199 | content: "";
200 | }
201 | .row-fluid:after {
202 | clear: both;
203 | }
204 | .row-fluid [class*="span"] {
205 | display: block;
206 | float: left;
207 | width: 100%;
208 | min-height: 30px;
209 | margin-left: 2.564102564102564%;
210 | *margin-left: 2.5109110747408616%;
211 | -webkit-box-sizing: border-box;
212 | -moz-box-sizing: border-box;
213 | box-sizing: border-box;
214 | }
215 | .row-fluid [class*="span"]:first-child {
216 | margin-left: 0;
217 | }
218 | .row-fluid .span12 {
219 | width: 100%;
220 | *width: 99.94680851063829%;
221 | }
222 | .row-fluid .span11 {
223 | width: 91.45299145299145%;
224 | *width: 91.39979996362975%;
225 | }
226 | .row-fluid .span10 {
227 | width: 82.90598290598291%;
228 | *width: 82.8527914166212%;
229 | }
230 | .row-fluid .span9 {
231 | width: 74.35897435897436%;
232 | *width: 74.30578286961266%;
233 | }
234 | .row-fluid .span8 {
235 | width: 65.81196581196582%;
236 | *width: 65.75877432260411%;
237 | }
238 | .row-fluid .span7 {
239 | width: 57.26495726495726%;
240 | *width: 57.21176577559556%;
241 | }
242 | .row-fluid .span6 {
243 | width: 48.717948717948715%;
244 | *width: 48.664757228587014%;
245 | }
246 | .row-fluid .span5 {
247 | width: 40.17094017094017%;
248 | *width: 40.11774868157847%;
249 | }
250 | .row-fluid .span4 {
251 | width: 31.623931623931625%;
252 | *width: 31.570740134569924%;
253 | }
254 | .row-fluid .span3 {
255 | width: 23.076923076923077%;
256 | *width: 23.023731587561375%;
257 | }
258 | .row-fluid .span2 {
259 | width: 14.52991452991453%;
260 | *width: 14.476723040552828%;
261 | }
262 | .row-fluid .span1 {
263 | width: 5.982905982905983%;
264 | *width: 5.929714493544281%;
265 | }
266 | .row-fluid .offset12 {
267 | margin-left: 105.12820512820512%;
268 | *margin-left: 105.02182214948171%;
269 | }
270 | .row-fluid .offset12:first-child {
271 | margin-left: 102.56410256410257%;
272 | *margin-left: 102.45771958537915%;
273 | }
274 | .row-fluid .offset11 {
275 | margin-left: 96.58119658119658%;
276 | *margin-left: 96.47481360247316%;
277 | }
278 | .row-fluid .offset11:first-child {
279 | margin-left: 94.01709401709402%;
280 | *margin-left: 93.91071103837061%;
281 | }
282 | .row-fluid .offset10 {
283 | margin-left: 88.03418803418803%;
284 | *margin-left: 87.92780505546462%;
285 | }
286 | .row-fluid .offset10:first-child {
287 | margin-left: 85.47008547008548%;
288 | *margin-left: 85.36370249136206%;
289 | }
290 | .row-fluid .offset9 {
291 | margin-left: 79.48717948717949%;
292 | *margin-left: 79.38079650845607%;
293 | }
294 | .row-fluid .offset9:first-child {
295 | margin-left: 76.92307692307693%;
296 | *margin-left: 76.81669394435352%;
297 | }
298 | .row-fluid .offset8 {
299 | margin-left: 70.94017094017094%;
300 | *margin-left: 70.83378796144753%;
301 | }
302 | .row-fluid .offset8:first-child {
303 | margin-left: 68.37606837606839%;
304 | *margin-left: 68.26968539734497%;
305 | }
306 | .row-fluid .offset7 {
307 | margin-left: 62.393162393162385%;
308 | *margin-left: 62.28677941443899%;
309 | }
310 | .row-fluid .offset7:first-child {
311 | margin-left: 59.82905982905982%;
312 | *margin-left: 59.72267685033642%;
313 | }
314 | .row-fluid .offset6 {
315 | margin-left: 53.84615384615384%;
316 | *margin-left: 53.739770867430444%;
317 | }
318 | .row-fluid .offset6:first-child {
319 | margin-left: 51.28205128205128%;
320 | *margin-left: 51.175668303327875%;
321 | }
322 | .row-fluid .offset5 {
323 | margin-left: 45.299145299145295%;
324 | *margin-left: 45.1927623204219%;
325 | }
326 | .row-fluid .offset5:first-child {
327 | margin-left: 42.73504273504273%;
328 | *margin-left: 42.62865975631933%;
329 | }
330 | .row-fluid .offset4 {
331 | margin-left: 36.75213675213675%;
332 | *margin-left: 36.645753773413354%;
333 | }
334 | .row-fluid .offset4:first-child {
335 | margin-left: 34.18803418803419%;
336 | *margin-left: 34.081651209310785%;
337 | }
338 | .row-fluid .offset3 {
339 | margin-left: 28.205128205128204%;
340 | *margin-left: 28.0987452264048%;
341 | }
342 | .row-fluid .offset3:first-child {
343 | margin-left: 25.641025641025642%;
344 | *margin-left: 25.53464266230224%;
345 | }
346 | .row-fluid .offset2 {
347 | margin-left: 19.65811965811966%;
348 | *margin-left: 19.551736679396257%;
349 | }
350 | .row-fluid .offset2:first-child {
351 | margin-left: 17.094017094017094%;
352 | *margin-left: 16.98763411529369%;
353 | }
354 | .row-fluid .offset1 {
355 | margin-left: 11.11111111111111%;
356 | *margin-left: 11.004728132387708%;
357 | }
358 | .row-fluid .offset1:first-child {
359 | margin-left: 8.547008547008547%;
360 | *margin-left: 8.440625568285142%;
361 | }
362 | input,
363 | textarea,
364 | .uneditable-input {
365 | margin-left: 0;
366 | }
367 | .controls-row [class*="span"] + [class*="span"] {
368 | margin-left: 30px;
369 | }
370 | input.span12,
371 | textarea.span12,
372 | .uneditable-input.span12 {
373 | width: 1156px;
374 | }
375 | input.span11,
376 | textarea.span11,
377 | .uneditable-input.span11 {
378 | width: 1056px;
379 | }
380 | input.span10,
381 | textarea.span10,
382 | .uneditable-input.span10 {
383 | width: 956px;
384 | }
385 | input.span9,
386 | textarea.span9,
387 | .uneditable-input.span9 {
388 | width: 856px;
389 | }
390 | input.span8,
391 | textarea.span8,
392 | .uneditable-input.span8 {
393 | width: 756px;
394 | }
395 | input.span7,
396 | textarea.span7,
397 | .uneditable-input.span7 {
398 | width: 656px;
399 | }
400 | input.span6,
401 | textarea.span6,
402 | .uneditable-input.span6 {
403 | width: 556px;
404 | }
405 | input.span5,
406 | textarea.span5,
407 | .uneditable-input.span5 {
408 | width: 456px;
409 | }
410 | input.span4,
411 | textarea.span4,
412 | .uneditable-input.span4 {
413 | width: 356px;
414 | }
415 | input.span3,
416 | textarea.span3,
417 | .uneditable-input.span3 {
418 | width: 256px;
419 | }
420 | input.span2,
421 | textarea.span2,
422 | .uneditable-input.span2 {
423 | width: 156px;
424 | }
425 | input.span1,
426 | textarea.span1,
427 | .uneditable-input.span1 {
428 | width: 56px;
429 | }
430 | .thumbnails {
431 | margin-left: -30px;
432 | }
433 | .thumbnails > li {
434 | margin-left: 30px;
435 | }
436 | .row-fluid .thumbnails {
437 | margin-left: 0;
438 | }
439 | }
440 |
441 | @media (min-width: 768px) and (max-width: 979px) {
442 | .row {
443 | margin-left: -20px;
444 | *zoom: 1;
445 | }
446 | .row:before,
447 | .row:after {
448 | display: table;
449 | line-height: 0;
450 | content: "";
451 | }
452 | .row:after {
453 | clear: both;
454 | }
455 | [class*="span"] {
456 | float: left;
457 | min-height: 1px;
458 | margin-left: 20px;
459 | }
460 | .container,
461 | .navbar-static-top .container,
462 | .navbar-fixed-top .container,
463 | .navbar-fixed-bottom .container {
464 | width: 724px;
465 | }
466 | .span12 {
467 | width: 724px;
468 | }
469 | .span11 {
470 | width: 662px;
471 | }
472 | .span10 {
473 | width: 600px;
474 | }
475 | .span9 {
476 | width: 538px;
477 | }
478 | .span8 {
479 | width: 476px;
480 | }
481 | .span7 {
482 | width: 414px;
483 | }
484 | .span6 {
485 | width: 352px;
486 | }
487 | .span5 {
488 | width: 290px;
489 | }
490 | .span4 {
491 | width: 228px;
492 | }
493 | .span3 {
494 | width: 166px;
495 | }
496 | .span2 {
497 | width: 104px;
498 | }
499 | .span1 {
500 | width: 42px;
501 | }
502 | .offset12 {
503 | margin-left: 764px;
504 | }
505 | .offset11 {
506 | margin-left: 702px;
507 | }
508 | .offset10 {
509 | margin-left: 640px;
510 | }
511 | .offset9 {
512 | margin-left: 578px;
513 | }
514 | .offset8 {
515 | margin-left: 516px;
516 | }
517 | .offset7 {
518 | margin-left: 454px;
519 | }
520 | .offset6 {
521 | margin-left: 392px;
522 | }
523 | .offset5 {
524 | margin-left: 330px;
525 | }
526 | .offset4 {
527 | margin-left: 268px;
528 | }
529 | .offset3 {
530 | margin-left: 206px;
531 | }
532 | .offset2 {
533 | margin-left: 144px;
534 | }
535 | .offset1 {
536 | margin-left: 82px;
537 | }
538 | .row-fluid {
539 | width: 100%;
540 | *zoom: 1;
541 | }
542 | .row-fluid:before,
543 | .row-fluid:after {
544 | display: table;
545 | line-height: 0;
546 | content: "";
547 | }
548 | .row-fluid:after {
549 | clear: both;
550 | }
551 | .row-fluid [class*="span"] {
552 | display: block;
553 | float: left;
554 | width: 100%;
555 | min-height: 30px;
556 | margin-left: 2.7624309392265194%;
557 | *margin-left: 2.709239449864817%;
558 | -webkit-box-sizing: border-box;
559 | -moz-box-sizing: border-box;
560 | box-sizing: border-box;
561 | }
562 | .row-fluid [class*="span"]:first-child {
563 | margin-left: 0;
564 | }
565 | .row-fluid .span12 {
566 | width: 100%;
567 | *width: 99.94680851063829%;
568 | }
569 | .row-fluid .span11 {
570 | width: 91.43646408839778%;
571 | *width: 91.38327259903608%;
572 | }
573 | .row-fluid .span10 {
574 | width: 82.87292817679558%;
575 | *width: 82.81973668743387%;
576 | }
577 | .row-fluid .span9 {
578 | width: 74.30939226519337%;
579 | *width: 74.25620077583166%;
580 | }
581 | .row-fluid .span8 {
582 | width: 65.74585635359117%;
583 | *width: 65.69266486422946%;
584 | }
585 | .row-fluid .span7 {
586 | width: 57.18232044198895%;
587 | *width: 57.12912895262725%;
588 | }
589 | .row-fluid .span6 {
590 | width: 48.61878453038674%;
591 | *width: 48.56559304102504%;
592 | }
593 | .row-fluid .span5 {
594 | width: 40.05524861878453%;
595 | *width: 40.00205712942283%;
596 | }
597 | .row-fluid .span4 {
598 | width: 31.491712707182323%;
599 | *width: 31.43852121782062%;
600 | }
601 | .row-fluid .span3 {
602 | width: 22.92817679558011%;
603 | *width: 22.87498530621841%;
604 | }
605 | .row-fluid .span2 {
606 | width: 14.3646408839779%;
607 | *width: 14.311449394616199%;
608 | }
609 | .row-fluid .span1 {
610 | width: 5.801104972375691%;
611 | *width: 5.747913483013988%;
612 | }
613 | .row-fluid .offset12 {
614 | margin-left: 105.52486187845304%;
615 | *margin-left: 105.41847889972962%;
616 | }
617 | .row-fluid .offset12:first-child {
618 | margin-left: 102.76243093922652%;
619 | *margin-left: 102.6560479605031%;
620 | }
621 | .row-fluid .offset11 {
622 | margin-left: 96.96132596685082%;
623 | *margin-left: 96.8549429881274%;
624 | }
625 | .row-fluid .offset11:first-child {
626 | margin-left: 94.1988950276243%;
627 | *margin-left: 94.09251204890089%;
628 | }
629 | .row-fluid .offset10 {
630 | margin-left: 88.39779005524862%;
631 | *margin-left: 88.2914070765252%;
632 | }
633 | .row-fluid .offset10:first-child {
634 | margin-left: 85.6353591160221%;
635 | *margin-left: 85.52897613729868%;
636 | }
637 | .row-fluid .offset9 {
638 | margin-left: 79.8342541436464%;
639 | *margin-left: 79.72787116492299%;
640 | }
641 | .row-fluid .offset9:first-child {
642 | margin-left: 77.07182320441989%;
643 | *margin-left: 76.96544022569647%;
644 | }
645 | .row-fluid .offset8 {
646 | margin-left: 71.2707182320442%;
647 | *margin-left: 71.16433525332079%;
648 | }
649 | .row-fluid .offset8:first-child {
650 | margin-left: 68.50828729281768%;
651 | *margin-left: 68.40190431409427%;
652 | }
653 | .row-fluid .offset7 {
654 | margin-left: 62.70718232044199%;
655 | *margin-left: 62.600799341718584%;
656 | }
657 | .row-fluid .offset7:first-child {
658 | margin-left: 59.94475138121547%;
659 | *margin-left: 59.838368402492065%;
660 | }
661 | .row-fluid .offset6 {
662 | margin-left: 54.14364640883978%;
663 | *margin-left: 54.037263430116376%;
664 | }
665 | .row-fluid .offset6:first-child {
666 | margin-left: 51.38121546961326%;
667 | *margin-left: 51.27483249088986%;
668 | }
669 | .row-fluid .offset5 {
670 | margin-left: 45.58011049723757%;
671 | *margin-left: 45.47372751851417%;
672 | }
673 | .row-fluid .offset5:first-child {
674 | margin-left: 42.81767955801105%;
675 | *margin-left: 42.71129657928765%;
676 | }
677 | .row-fluid .offset4 {
678 | margin-left: 37.01657458563536%;
679 | *margin-left: 36.91019160691196%;
680 | }
681 | .row-fluid .offset4:first-child {
682 | margin-left: 34.25414364640884%;
683 | *margin-left: 34.14776066768544%;
684 | }
685 | .row-fluid .offset3 {
686 | margin-left: 28.45303867403315%;
687 | *margin-left: 28.346655695309746%;
688 | }
689 | .row-fluid .offset3:first-child {
690 | margin-left: 25.69060773480663%;
691 | *margin-left: 25.584224756083227%;
692 | }
693 | .row-fluid .offset2 {
694 | margin-left: 19.88950276243094%;
695 | *margin-left: 19.783119783707537%;
696 | }
697 | .row-fluid .offset2:first-child {
698 | margin-left: 17.12707182320442%;
699 | *margin-left: 17.02068884448102%;
700 | }
701 | .row-fluid .offset1 {
702 | margin-left: 11.32596685082873%;
703 | *margin-left: 11.219583872105325%;
704 | }
705 | .row-fluid .offset1:first-child {
706 | margin-left: 8.56353591160221%;
707 | *margin-left: 8.457152932878806%;
708 | }
709 | input,
710 | textarea,
711 | .uneditable-input {
712 | margin-left: 0;
713 | }
714 | .controls-row [class*="span"] + [class*="span"] {
715 | margin-left: 20px;
716 | }
717 | input.span12,
718 | textarea.span12,
719 | .uneditable-input.span12 {
720 | width: 710px;
721 | }
722 | input.span11,
723 | textarea.span11,
724 | .uneditable-input.span11 {
725 | width: 648px;
726 | }
727 | input.span10,
728 | textarea.span10,
729 | .uneditable-input.span10 {
730 | width: 586px;
731 | }
732 | input.span9,
733 | textarea.span9,
734 | .uneditable-input.span9 {
735 | width: 524px;
736 | }
737 | input.span8,
738 | textarea.span8,
739 | .uneditable-input.span8 {
740 | width: 462px;
741 | }
742 | input.span7,
743 | textarea.span7,
744 | .uneditable-input.span7 {
745 | width: 400px;
746 | }
747 | input.span6,
748 | textarea.span6,
749 | .uneditable-input.span6 {
750 | width: 338px;
751 | }
752 | input.span5,
753 | textarea.span5,
754 | .uneditable-input.span5 {
755 | width: 276px;
756 | }
757 | input.span4,
758 | textarea.span4,
759 | .uneditable-input.span4 {
760 | width: 214px;
761 | }
762 | input.span3,
763 | textarea.span3,
764 | .uneditable-input.span3 {
765 | width: 152px;
766 | }
767 | input.span2,
768 | textarea.span2,
769 | .uneditable-input.span2 {
770 | width: 90px;
771 | }
772 | input.span1,
773 | textarea.span1,
774 | .uneditable-input.span1 {
775 | width: 28px;
776 | }
777 | }
778 |
779 | @media (max-width: 767px) {
780 | body {
781 | padding-right: 20px;
782 | padding-left: 20px;
783 | }
784 | .navbar-fixed-top,
785 | .navbar-fixed-bottom,
786 | .navbar-static-top {
787 | margin-right: -20px;
788 | margin-left: -20px;
789 | }
790 | .container-fluid {
791 | padding: 0;
792 | }
793 | .dl-horizontal dt {
794 | float: none;
795 | width: auto;
796 | clear: none;
797 | text-align: left;
798 | }
799 | .dl-horizontal dd {
800 | margin-left: 0;
801 | }
802 | .container {
803 | width: auto;
804 | }
805 | .row-fluid {
806 | width: 100%;
807 | }
808 | .row,
809 | .thumbnails {
810 | margin-left: 0;
811 | }
812 | .thumbnails > li {
813 | float: none;
814 | margin-left: 0;
815 | }
816 | [class*="span"],
817 | .row-fluid [class*="span"] {
818 | display: block;
819 | float: none;
820 | width: 100%;
821 | margin-left: 0;
822 | -webkit-box-sizing: border-box;
823 | -moz-box-sizing: border-box;
824 | box-sizing: border-box;
825 | }
826 | .span12,
827 | .row-fluid .span12 {
828 | width: 100%;
829 | -webkit-box-sizing: border-box;
830 | -moz-box-sizing: border-box;
831 | box-sizing: border-box;
832 | }
833 | .input-large,
834 | .input-xlarge,
835 | .input-xxlarge,
836 | input[class*="span"],
837 | select[class*="span"],
838 | textarea[class*="span"],
839 | .uneditable-input {
840 | display: block;
841 | width: 100%;
842 | min-height: 30px;
843 | -webkit-box-sizing: border-box;
844 | -moz-box-sizing: border-box;
845 | box-sizing: border-box;
846 | }
847 | .input-prepend input,
848 | .input-append input,
849 | .input-prepend input[class*="span"],
850 | .input-append input[class*="span"] {
851 | display: inline-block;
852 | width: auto;
853 | }
854 | .controls-row [class*="span"] + [class*="span"] {
855 | margin-left: 0;
856 | }
857 | .modal {
858 | position: fixed;
859 | top: 20px;
860 | right: 20px;
861 | left: 20px;
862 | width: auto;
863 | margin: 0;
864 | }
865 | .modal.fade.in {
866 | top: auto;
867 | }
868 | }
869 |
870 | @media (max-width: 480px) {
871 | .nav-collapse {
872 | -webkit-transform: translate3d(0, 0, 0);
873 | }
874 | .page-header h1 small {
875 | display: block;
876 | line-height: 20px;
877 | }
878 | input[type="checkbox"],
879 | input[type="radio"] {
880 | border: 1px solid #ccc;
881 | }
882 | .form-horizontal .control-label {
883 | float: none;
884 | width: auto;
885 | padding-top: 0;
886 | text-align: left;
887 | }
888 | .form-horizontal .controls {
889 | margin-left: 0;
890 | }
891 | .form-horizontal .control-list {
892 | padding-top: 0;
893 | }
894 | .form-horizontal .form-actions {
895 | padding-right: 10px;
896 | padding-left: 10px;
897 | }
898 | .modal {
899 | top: 10px;
900 | right: 10px;
901 | left: 10px;
902 | }
903 | .modal-header .close {
904 | padding: 10px;
905 | margin: -10px;
906 | }
907 | .carousel-caption {
908 | position: static;
909 | }
910 | }
911 |
912 | @media (max-width: 979px) {
913 | body {
914 | padding-top: 0;
915 | }
916 | .navbar-fixed-top,
917 | .navbar-fixed-bottom {
918 | position: static;
919 | }
920 | .navbar-fixed-top {
921 | margin-bottom: 20px;
922 | }
923 | .navbar-fixed-bottom {
924 | margin-top: 20px;
925 | }
926 | .navbar-fixed-top .navbar-inner,
927 | .navbar-fixed-bottom .navbar-inner {
928 | padding: 5px;
929 | }
930 | .navbar .container {
931 | width: auto;
932 | padding: 0;
933 | }
934 | .navbar .brand {
935 | padding-right: 10px;
936 | padding-left: 10px;
937 | margin: 0 0 0 -5px;
938 | }
939 | .nav-collapse {
940 | clear: both;
941 | }
942 | .nav-collapse .nav {
943 | float: none;
944 | margin: 0 0 10px;
945 | }
946 | .nav-collapse .nav > li {
947 | float: none;
948 | }
949 | .nav-collapse .nav > li > a {
950 | margin-bottom: 2px;
951 | }
952 | .nav-collapse .nav > .divider-vertical {
953 | display: none;
954 | }
955 | .nav-collapse .nav .nav-header {
956 | color: #777777;
957 | text-shadow: none;
958 | }
959 | .nav-collapse .nav > li > a,
960 | .nav-collapse .dropdown-menu a {
961 | padding: 9px 15px;
962 | font-weight: bold;
963 | color: #777777;
964 | -webkit-border-radius: 3px;
965 | -moz-border-radius: 3px;
966 | border-radius: 3px;
967 | }
968 | .nav-collapse .btn {
969 | padding: 4px 10px 4px;
970 | font-weight: normal;
971 | -webkit-border-radius: 4px;
972 | -moz-border-radius: 4px;
973 | border-radius: 4px;
974 | }
975 | .nav-collapse .dropdown-menu li + li a {
976 | margin-bottom: 2px;
977 | }
978 | .nav-collapse .nav > li > a:hover,
979 | .nav-collapse .dropdown-menu a:hover {
980 | background-color: #f2f2f2;
981 | }
982 | .navbar-inverse .nav-collapse .nav > li > a:hover,
983 | .navbar-inverse .nav-collapse .dropdown-menu a:hover {
984 | background-color: #111111;
985 | }
986 | .nav-collapse.in .btn-group {
987 | padding: 0;
988 | margin-top: 5px;
989 | }
990 | .nav-collapse .dropdown-menu {
991 | position: static;
992 | top: auto;
993 | left: auto;
994 | display: block;
995 | float: none;
996 | max-width: none;
997 | padding: 0;
998 | margin: 0 15px;
999 | background-color: transparent;
1000 | border: none;
1001 | -webkit-border-radius: 0;
1002 | -moz-border-radius: 0;
1003 | border-radius: 0;
1004 | -webkit-box-shadow: none;
1005 | -moz-box-shadow: none;
1006 | box-shadow: none;
1007 | }
1008 | .nav-collapse .dropdown-menu:before,
1009 | .nav-collapse .dropdown-menu:after {
1010 | display: none;
1011 | }
1012 | .nav-collapse .dropdown-menu .divider {
1013 | display: none;
1014 | }
1015 | .nav-collapse .nav > li > .dropdown-menu:before,
1016 | .nav-collapse .nav > li > .dropdown-menu:after {
1017 | display: none;
1018 | }
1019 | .nav-collapse .navbar-form,
1020 | .nav-collapse .navbar-search {
1021 | float: none;
1022 | padding: 10px 15px;
1023 | margin: 10px 0;
1024 | border-top: 1px solid #f2f2f2;
1025 | border-bottom: 1px solid #f2f2f2;
1026 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1027 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1028 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1029 | }
1030 | .navbar-inverse .nav-collapse .navbar-form,
1031 | .navbar-inverse .nav-collapse .navbar-search {
1032 | border-top-color: #111111;
1033 | border-bottom-color: #111111;
1034 | }
1035 | .navbar .nav-collapse .nav.pull-right {
1036 | float: none;
1037 | margin-left: 0;
1038 | }
1039 | .nav-collapse,
1040 | .nav-collapse.collapse {
1041 | height: 0;
1042 | overflow: hidden;
1043 | }
1044 | .navbar .btn-navbar {
1045 | display: block;
1046 | }
1047 | .navbar-static .navbar-inner {
1048 | padding-right: 10px;
1049 | padding-left: 10px;
1050 | }
1051 | }
1052 |
1053 | @media (min-width: 980px) {
1054 | .nav-collapse.collapse {
1055 | height: auto !important;
1056 | overflow: visible !important;
1057 | }
1058 | }
1059 |
--------------------------------------------------------------------------------
/css/bootstrap.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v2.1.1
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */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{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img{max-width:none}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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}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;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}.text-warning{color:#c09853}.text-error{color:#b94a48}.text-info{color:#3a87ad}.text-success{color:#468847}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:1;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1{font-size:36px;line-height:40px}h2{font-size:30px;line-height:40px}h3{font-size:24px;line-height:40px}h4{font-size:18px;line-height:20px}h5{font-size:14px;line-height:20px}h6{font-size:12px;line-height:20px}h1 small{font-size:24px}h2 small{font-size:18px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;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}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:9px;font-size:14px;line-height:20px;color:#555;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-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 .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-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)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal;cursor:pointer}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-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)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:18px;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-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[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"]{float:left}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-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)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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 .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-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)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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 .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-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)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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}.control-group.info>label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-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)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}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:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;font-size:14px;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .add-on,.input-append .btn{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 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,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child 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:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.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-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot: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;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child,.table-bordered tfoot:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topleft:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}table [class*=span],.row-fluid table [class*=span]{display:table-cell;float:none;margin-left:0}.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}.table .span13{float:none;width:1004px;margin-left:0}.table .span14{float:none;width:1084px;margin-left:0}.table .span15{float:none;width:1164px;margin-left:0}.table .span16{float:none;width:1244px;margin-left:0}.table .span17{float:none;width:1324px;margin-left:0}.table .span18{float:none;width:1404px;margin-left:0}.table .span19{float:none;width:1484px;margin-left:0}.table .span20{float:none;width:1564px;margin-left:0}.table .span21{float:none;width:1644px;margin-left:0}.table .span22{float:none;width:1724px;margin-left:0}.table .span23{float:none;width:1804px;margin-left:0}.table .span24{float:none;width:1884px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.warning td{background-color:#fcf8e3}.table tbody tr.info td{background-color:#d9edf7}.table-hover tbody tr.success:hover td{background-color:#d0e9c6}.table-hover tbody tr.error:hover td{background-color:#ebcccc}.table-hover tbody tr.warning:hover td{background-color:#faf2cc}.table-hover tbody tr.info:hover td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-tabs>.active>a>[class^="icon-"],.nav-tabs>.active>a>[class*=" icon-"],.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"]{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{width:16px;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{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#08c;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#08c;background-color:#0081c2;background-image:linear-gradient(to bottom,#08c,#0077b3);background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.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 #e3e3e3;-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)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 14px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;*line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #bbb;*border:0;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);*zoom:1;-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)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-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)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^="icon-"]{margin-top:2px}.btn-small{padding:3px 9px;font-size:12px;line-height:18px}.btn-small [class^="icon-"]{margin-top:0}.btn-mini{padding:2px 6px;font-size:11px;line-height:17px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,0.15) rgba(0,0,0,0.15) rgba(0,0,0,0.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-image:-moz-linear-gradient(top,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #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(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#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(to bottom,#fbb450,#f89406);background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-repeat:repeat-x;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(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#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(to bottom,#ee5f5b,#bd362f);background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-repeat:repeat-x;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(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#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(to bottom,#62c462,#51a351);background-image:-moz-linear-gradient(top,#62c462,#51a351);background-repeat:repeat-x;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(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#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(to bottom,#5bc0de,#2f96b4);background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-repeat:repeat-x;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(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-image:-moz-linear-gradient(top,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;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(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover{color:#333;text-decoration:none}.btn-group{position:relative;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-toolbar .btn+.btn,.btn-toolbar .btn-group+.btn,.btn-toolbar .btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px}.btn-group>.btn-mini{font-size:11px}.btn-group>.btn-small{font-size:12px}.btn-group>.btn-large{font-size:16px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright: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>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left: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)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{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)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-top:0;border-bottom:5px solid #000}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical .btn{display:block;float:none;width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical .btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical .btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical .btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical .btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical .btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;color:#c09853;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 h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.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-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-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:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;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:8px;padding-bottom:8px;line-height:20px;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:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.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:#fff;background-color:#08c}.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-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.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-top-color:#ddd;border-bottom-color:transparent}.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:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.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:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible;color:#777}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px}.navbar-link{color:#777}.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.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:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;width:100%;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1);box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #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(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);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)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .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}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse{color:#999}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline: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)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-image:-moz-linear-gradient(top,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;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(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb .divider{padding:0 5px;color:#ccc}.breadcrumb .active{color:#999}.pagination{height:40px;margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*zoom:1;-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 ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:0 14px;line-height:38px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{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 ul>li:last-child>a,.pagination ul>li:last-child>span{-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:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager a,.pager span{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,.pager .next span{float:right}.pager .previous a{float:left}.pager .disabled a,.pager .disabled a:hover,.pager .disabled span{color:#999;cursor:default;background-color:#fff}.modal-open .modal .dropdown-menu{z-index:2050}.modal-open .modal .dropdown.open{*z-index:2050}.modal-open .modal .popover{z-index:2060}.modal-open .modal .tooltip{z-index:2080}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;width:560px;margin:-250px 0 0 -280px;overflow:auto;background-color:#fff;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{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-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}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;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;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;z-index:1030;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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}.popover.top{margin-bottom:10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-right:10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.popover .arrow,.popover .arrow:after{position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow:after{z-index:-1;content:""}.popover.top .arrow{bottom:-10px;left:50%;margin-left:-10px;border-top-color:#fff;border-width:10px 10px 0}.popover.top .arrow:after{bottom:-1px;left:-11px;border-top-color:rgba(0,0,0,0.25);border-width:11px 11px 0}.popover.right .arrow{top:50%;left:-10px;margin-top:-10px;border-right-color:#fff;border-width:10px 10px 10px 0}.popover.right .arrow:after{bottom:-11px;left:-1px;border-right-color:rgba(0,0,0,0.25);border-width:11px 11px 11px 0}.popover.bottom .arrow{top:-10px;left:50%;margin-left:-10px;border-bottom-color:#fff;border-width:0 10px 10px}.popover.bottom .arrow:after{top:-1px;left:-11px;border-bottom-color:rgba(0,0,0,0.25);border-width:0 11px 11px}.popover.left .arrow{top:50%;right:-10px;margin-top:-10px;border-left-color:#fff;border-width:10px 0 10px 10px}.popover.left .arrow:after{right:-1px;bottom:-11px;border-left-color:rgba(0,0,0,0.25);border-width:11px 0 11px 11px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover{border-color:#08c;-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-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.label,.badge{font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-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(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',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)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;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:-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(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',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 .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;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:-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;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-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(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{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:-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,.progress .bar-success{background-color:#5eb95e;background-image:-moz-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(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{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:-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,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-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(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{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:-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-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-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(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;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:-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:20px}.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-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel .item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.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:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;background-color:#eee;-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;color:inherit}.hero-unit p{font-size:18px;font-weight:200;line-height:30px;color:inherit}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
10 |
--------------------------------------------------------------------------------