diff options
43 files changed, 12992 insertions, 4109 deletions
diff --git a/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java b/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java index cf29458..4305d1c 100644 --- a/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java +++ b/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java @@ -1,5 +1,5 @@ package org.irods.jargon.idrop.lite; public final class Version { public static String VERSION="2.0.1-SNAPSHOT"; - public static String BUILD_TIME="20130529-0944"; + public static String BUILD_TIME="20130723-1452"; } diff --git a/idrop-swing/lib/libbrowser.jar b/idrop-swing/lib/libbrowser.jar Binary files differnew file mode 100644 index 0000000..dc7211c --- /dev/null +++ b/idrop-swing/lib/libbrowser.jar diff --git a/idrop-swing/pom.xml b/idrop-swing/pom.xml index 530627a..996239c 100644 --- a/idrop-swing/pom.xml +++ b/idrop-swing/pom.xml @@ -107,6 +107,11 @@ <artifactId>slf4j-log4j12</artifactId> <version>1.5.10</version> </dependency> + <dependency> + <groupId>vine_certman</groupId> + <artifactId>libbrowser</artifactId> + <version>1</version> + </dependency> </dependencies> <build> <plugins> diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/AddPermissionsDialog.form b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/AddPermissionsDialog.form index 097ab59..4ec4767 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/AddPermissionsDialog.form +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/AddPermissionsDialog.form @@ -15,6 +15,7 @@ </Properties> <SyntheticProperties> <SyntheticProperty name="formSizePolicy" type="int" value="1"/> + <SyntheticProperty name="generateCenter" type="boolean" value="false"/> </SyntheticProperties> <AuxValues> <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java index 9e941e0..37b6c7a 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java @@ -1714,7 +1714,7 @@ public class IDROPConfigurationPanel extends javax.swing.JDialog { IRODSAccount savedAccount = idropCore.getIrodsAccount(); idropCore.setIrodsAccount(null); iDrop idrop = (iDrop) thisPanel.getParent(); - LoginDialog loginDialog = new LoginDialog(thisPanel, idropCore); + LoginDialog loginDialog = new LoginDialog(thisPanel, idropCore,false); loginDialog.setVisible(true); if (idropCore.getIrodsAccount() == null) { diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPDesktop.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPDesktop.java index aa80d05..79facc9 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPDesktop.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPDesktop.java @@ -168,7 +168,7 @@ public class IDROPDesktop { log.info("logging in in splash background thread"); idropSplashWindow.setStatus("Logging in...", ++count); - final LoginDialog loginDialog = new LoginDialog(null, idropCore); + final LoginDialog loginDialog = new LoginDialog(null, idropCore,true); Toolkit tk = idrop.getToolkit(); int x = (tk.getScreenSize().width - loginDialog.getWidth()) / 2; int y = (tk.getScreenSize().height - loginDialog.getHeight()) / 2; diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/LoginDialog.form b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/LoginDialog.form index 43f33c2..12a7651 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/LoginDialog.form +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/LoginDialog.form @@ -1,6 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JDialogFormInfo"> + <NonVisualComponents> + <Component class="javax.swing.ButtonGroup" name="btngrpProxySource"> + </Component> + </NonVisualComponents> <Properties> <Property name="defaultCloseOperation" type="int" value="2"/> </Properties> @@ -18,7 +22,7 @@ <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,96,0,0,3,9"/> + <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-68,0,0,2,-87"/> </AuxValues> <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> @@ -178,7 +182,7 @@ <Container class="javax.swing.JPanel" name="jPanel1"> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="1" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="1" gridY="17" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> @@ -218,7 +222,7 @@ </Properties> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="0" gridY="9" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="0" gridY="16" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> @@ -234,7 +238,7 @@ </Properties> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="1" gridY="9" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="1" gridY="16" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> @@ -244,14 +248,14 @@ </Properties> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="0" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="0" gridY="9" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> <Component class="javax.swing.JTextField" name="txtProxy"> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="1" gridY="7" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="1" gridY="9" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> @@ -261,14 +265,14 @@ </Properties> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="0" gridY="8" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="0" gridY="11" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> <Component class="javax.swing.JTextField" name="txtCerts"> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="1" gridY="8" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="1" gridY="11" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> @@ -281,7 +285,7 @@ </Events> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="2" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="2" gridY="9" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> @@ -294,10 +298,284 @@ </Events> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="2" gridY="11" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JLabel" name="lblCertMode"> + <Properties> + <Property name="text" type="java.lang.String" value="Certificate mode:"/> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="13" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Container class="javax.swing.JPanel" name="jPanel2"> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/> + <SubComponents> + <Component class="javax.swing.JRadioButton" name="btnProxyCertKeyPair"> + <Properties> + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> + <ComponentRef name="btngrpProxySource"/> + </Property> + <Property name="text" type="java.lang.String" value="cert/key pair"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnProxyCertKeyPairActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JRadioButton" name="btnProxyP12"> + <Properties> + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> + <ComponentRef name="btngrpProxySource"/> + </Property> + <Property name="text" type="java.lang.String" value="p12 certificate"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnProxyP12ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JRadioButton" name="btnProxyBrowser"> + <Properties> + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> + <ComponentRef name="btngrpProxySource"/> + </Property> + <Property name="text" type="java.lang.String" value="certificate in browser"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnProxyBrowserActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JRadioButton" name="btnProxyFile"> + <Properties> + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> + <ComponentRef name="btngrpProxySource"/> + </Property> + <Property name="text" type="java.lang.String" value="proxy file"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnProxyFileActionPerformed"/> + </Events> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JTextField" name="txtKeyLocation"> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="1" gridY="10" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="21" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JLabel" name="lblKeyLocation"> + <Properties> + <Property name="text" type="java.lang.String" value="Key location:"/> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="0" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JButton" name="btnKeyLocation"> + <Properties> + <Property name="text" type="java.lang.String" value="Choose..."/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnKeyLocationActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="2" gridY="10" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JLabel" name="lblP12CertificateLocation"> + <Properties> + <Property name="text" type="java.lang.String" value="P12 Certificate location:"/> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="0" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JTextField" name="txtP12CertificateLocation"> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="1" gridY="7" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JButton" name="btnP12CertificateLocation"> + <Properties> + <Property name="text" type="java.lang.String" value="Choose..."/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnP12CertificateLocationActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="2" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JLabel" name="lblCertPass"> + <Properties> + <Property name="text" type="java.lang.String" value="Certificate password:"/> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="0" gridY="12" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JPasswordField" name="certpass"> + <Properties> + <Property name="columns" type="int" value="30"/> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="null"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="1" gridY="12" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JLabel" name="lblPEMCertificateLocation"> + <Properties> + <Property name="text" type="java.lang.String" value="PEM Certificate location:"/> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="0" gridY="8" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JTextField" name="txtPEMCertificateLocation"> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="1" gridY="8" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JButton" name="btnPEMCertificateLocation"> + <Properties> + <Property name="text" type="java.lang.String" value="Choose..."/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnPEMCertificateLocationActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> <GridBagConstraints gridX="2" gridY="8" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> + <Component class="javax.swing.JLabel" name="lbllBrowserCombo"> + <Properties> + <Property name="text" type="java.lang.String" value="Selected browser:"/> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="0" gridY="13" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JPasswordField" name="browserpass"> + <Properties> + <Property name="columns" type="int" value="30"/> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="null"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="1" gridY="14" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JLabel" name="lblBrowserPass"> + <Properties> + <Property name="text" type="java.lang.String" value="Browser password:"/> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="0" gridY="14" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JComboBox" name="cmbBrowsers"> + <Properties> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="4"> + <StringItem index="0" value="Item 1"/> + <StringItem index="1" value="Item 2"/> + <StringItem index="2" value="Item 3"/> + <StringItem index="3" value="Item 4"/> + </StringArray> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cmbBrowsersActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="1" gridY="13" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JLabel" name="lbllCertCombo"> + <Properties> + <Property name="text" type="java.lang.String" value="Selected certificate:"/> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="0" gridY="15" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="22" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JComboBox" name="cmbCertificates"> + <Properties> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="4"> + <StringItem index="0" value="Item 1"/> + <StringItem index="1" value="Item 2"/> + <StringItem index="2" value="Item 3"/> + <StringItem index="3" value="Item 4"/> + </StringArray> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cmbCertificatesActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="1" gridY="15" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> + <Component class="javax.swing.JButton" name="btnCheckCertsInBrowser"> + <Properties> + <Property name="text" type="java.lang.String" value="Access..."/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnCheckCertsInBrowserActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="2" gridY="14" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + </Constraint> + </Constraints> + </Component> </SubComponents> </Container> <Container class="javax.swing.JPanel" name="pnlToolbar"> diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/LoginDialog.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/LoginDialog.java index b60cc97..d45d35c 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/LoginDialog.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/LoginDialog.java @@ -2,6 +2,15 @@ package org.irods.jargon.idrop.desktop.systraygui; import java.awt.Color; import java.awt.event.ActionEvent; +import java.io.File; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.security.InvalidAlgorithmParameterException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; import java.util.logging.Level; import java.util.logging.Logger; @@ -11,9 +20,11 @@ import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.KeyStroke; +import org.globus.gsi.GSIConstants; import org.globus.gsi.GlobusCredential; import org.globus.gsi.GlobusCredentialException; import org.globus.gsi.gssapi.GlobusGSSCredentialImpl; + import org.ietf.jgss.GSSCredential; import org.ietf.jgss.GSSException; import org.irods.jargon.core.connection.GSIIRODSAccount; @@ -22,374 +33,455 @@ import org.irods.jargon.core.connection.IRODSAccount; import org.irods.jargon.core.connection.auth.AuthResponse; import org.irods.jargon.core.exception.JargonException; import org.irods.jargon.core.pub.IRODSFileSystem; +import org.irods.jargon.idrop.desktop.systraygui.gss.CertificateConverter; +import org.irods.jargon.idrop.desktop.systraygui.gss.GssSecurityException; +import org.irods.jargon.idrop.desktop.systraygui.gss.GssUtil; import org.irods.jargon.idrop.desktop.systraygui.services.IdropConfigurationService; import org.irods.jargon.idrop.desktop.systraygui.utils.IdropPropertiesHelper; import org.irods.jargon.idrop.exceptions.IdropException; import org.irods.jargon.idrop.exceptions.IdropRuntimeException; -import org.openide.util.Exceptions; import org.slf4j.LoggerFactory; +import uk.ac.rl.esc.browser.Browser; /** - * + * * @author mikeconway */ public class LoginDialog extends JDialog { - private static final long serialVersionUID = 1L; - private IDROPCore idropCore = null; - public static org.slf4j.Logger log = LoggerFactory - .getLogger(LoginDialog.class); + private static final long serialVersionUID = 1L; + private IDROPCore idropCore = null; + public static org.slf4j.Logger log = LoggerFactory.getLogger(LoginDialog.class); + private boolean loginTrialSuccesful = false; + + public boolean isLoginTrialSuccesful() { + return loginTrialSuccesful; + } + // Indexes of gsi modes used in properties to store users choice + static final int PEM_MODE = 1; + static final int P12_MODE = 2; + static final int BROWSER_MODE = 3; + static final int PROXY_MODE = 4; + + boolean tryToLogin; + + public LoginDialog(final JDialog parentDialog, final IDROPCore idropCore, boolean tryToLogin) { + super(parentDialog, true); + this.tryToLogin = tryToLogin; + + if (idropCore == null) { + throw new IllegalArgumentException("null idropCore"); + } + this.idropCore = idropCore; + initComponents(); - private boolean loginTrialSuccesful = false; + if (idropCore.getIdropConfig().isLoginPreset()) { + loginUsingPreset(); + } else { + loginNormally(); + } - public boolean isLoginTrialSuccesful() { - return loginTrialSuccesful; + registerKeystrokeListener(); + setLocationRelativeTo(parentDialog); + + } + + private void loginNormally() { + // predispose based on preferences + String host = idropCore.getIdropConfig().getPropertyForKey( + IdropConfigurationService.ACCOUNT_CACHE_HOST); + if (host != null) { + txtHost.setText(host); + } + String port = idropCore.getIdropConfig().getPropertyForKey( + IdropConfigurationService.ACCOUNT_CACHE_PORT); + if (port == null || port.isEmpty()) { + port = "1247"; } - public LoginDialog(final JDialog parentDialog, final IDROPCore idropCore) { - super(parentDialog, true); - if (idropCore == null) { - throw new IllegalArgumentException("null idropCore"); - } - this.idropCore = idropCore; - initComponents(); - - if (idropCore.getIdropConfig().isLoginPreset()) { - loginUsingPreset(); - } else { - loginNormally(); - } - - registerKeystrokeListener(); - setLocationRelativeTo(parentDialog); - - } - - private void loginNormally() { - // predispose based on preferences - String host = idropCore.getIdropConfig().getPropertyForKey( - IdropConfigurationService.ACCOUNT_CACHE_HOST); - if (host != null) { - txtHost.setText(host); - } - String port = idropCore.getIdropConfig().getPropertyForKey( - IdropConfigurationService.ACCOUNT_CACHE_PORT); - if (port == null || port.isEmpty()) { - port = "1247"; - } - - String mode = idropCore.getIdropConfig().getPropertyForKey( - IdropConfigurationService.ACCOUNT_CACHE_LOGIN_MODE); - if (mode == null || mode.isEmpty()) { - mode = IRODSAccount.AuthScheme.STANDARD.name(); - } else { - comboLoginMode.setSelectedItem(mode); - } - - String proxy = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_PROXY_LOCATION); - - if(proxy!=null){ - txtProxy.setText(proxy); + String mode = idropCore.getIdropConfig().getPropertyForKey( + IdropConfigurationService.ACCOUNT_CACHE_LOGIN_MODE); + if (mode == null || mode.isEmpty()) { + mode = IRODSAccount.AuthScheme.STANDARD.name(); + } else { + comboLoginMode.setSelectedItem(mode); + } + + String proxy = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_PROXY_LOCATION); + + if (proxy != null) { + txtProxy.setText(proxy); + } + + String certificates = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_CERTIFICATES_LOCATION); + + if (certificates != null) { + txtCerts.setText(certificates); + } + + // Read paths from propeties: PEM certificate, PEM key, p12 certificate + String pemcert = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_CERT_PEM_LOCATION); + if (pemcert != null) { + txtPEMCertificateLocation.setText(pemcert); + + } + String p12cert = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_CERT_P12_LOCATION); + if (p12cert != null) { + txtP12CertificateLocation.setText(p12cert); + } + + String keyLoc = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_KEY_PEM_LOCATION); + if (keyLoc != null) { + txtKeyLocation.setText(keyLoc); + } + // Read gsi mode from properties (p12, PEM, browser, proxy file) + String certMode = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_CERT_LOGIN_MODE); + try { + int certModeNum = Integer.parseInt(certMode); + setSelectedModeFields(certModeNum); + } catch (Exception ex) { + Logger.getLogger(LoginDialog.class.getName()).log(Level.WARNING, null, ex); + } + // + txtPort.setText(port); + String zone = idropCore.getIdropConfig().getPropertyForKey( + IdropConfigurationService.ACCOUNT_CACHE_ZONE); + txtZone.setText(zone); + String resource = idropCore.getIdropConfig().getPropertyForKey( + IdropConfigurationService.ACCOUNT_CACHE_RESOURCE); + txtResource.setText(resource); + String username = idropCore.getIdropConfig().getPropertyForKey( + IdropConfigurationService.ACCOUNT_CACHE_USER_NAME); + txtUserName.setText(username); + + + String save = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_USER_SAVE_PASS); + boolean saveP = "true".equals(save); + boolean autoGsi = false; + String gsi = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_USER_AUTO_GSI); + autoGsi = "true".equals(gsi); + + hideAdvancedViewFields(); + hideProxyLoginFields(); + + if(autoGsi){ + hideNormalLoginFields(); + showProxyLoginFields(); + chkProxyLogin.setSelected(true); + String gsiMode = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_CERT_LOGIN_MODE); + try{ + int gsiModeNum = Integer.parseInt(gsiMode); + setSelectedModeFields(gsiModeNum); + showProxyChoosenModeFields(); + }catch(Exception e){ + } + } + + if (saveP) { + String savedPassword = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_USER_PASSWORD); + password.setText(savedPassword); + chkRememberPass.setSelected(true); + + String certPassword = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_CERT_PASSWORD); + certpass.setText(certPassword); + if(tryToLogin){ + loginTrialSuccesful = !processLogin(); + } + } + } + + private void loginUsingPreset() { + log.debug("login will use presets"); + lblHost.setVisible(false); + txtHost.setVisible(false); + lblPort.setVisible(false); + txtPort.setVisible(false); + lblZone.setVisible(false); + txtZone.setVisible(false); + lblResource.setVisible(false); + txtResource.setVisible(false); + chkAdvancedLogin.setVisible(false); + lblLoginMode.setVisible(false); + comboLoginMode.setVisible(false); + } + + /** + * Action to take when login is initiated + * + * @return + * @throws NumberFormatException + */ + private boolean processLogin() throws NumberFormatException { + // validate various inputs based on whether a full login, or a uid only + // login is indicated + if (!idropCore.getIdropConfig().isLoginPreset()) { + txtHost.setBackground(Color.white); + txtPort.setBackground(Color.white); + txtZone.setBackground(Color.white); + txtResource.setBackground(Color.white); + if (txtHost.getText().length() == 0) { + txtHost.setBackground(Color.red); + } + if (txtPort.getText().length() == 0) { + txtPort.setBackground(Color.red); + } else { + try { + Integer.parseInt(txtPort.getText()); + } catch (Exception e) { + txtPort.setBackground(Color.red); } - - String certificates = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_CERTIFICATES_LOCATION); - - if(certificates!=null){ - txtCerts.setText(certificates); + } + if (txtZone.getText().length() == 0) { + txtZone.setBackground(Color.red); + } + if (txtResource.getText().length() == 0) { + txtResource.setBackground(Color.red); + } + } + + txtUserName.setBackground(Color.white); + password.setBackground(Color.white); + if (txtUserName.getText().length() == 0) { + txtUserName.setBackground(Color.red); + } + if (password.getPassword().length == 0) { + password.setBackground(Color.red); + } + StringBuilder sb = new StringBuilder(); + final IRODSAccount irodsAccount; + + try { + + // validated, now try to log in + if (idropCore.getIdropConfig().isLoginPreset()) { + log.debug("creating account with presets"); + String presetHost = idropCore.getIdropConfig() + .getPropertyForKey( + IdropPropertiesHelper.LOGIN_PRESET_HOST); + log.info("presetHost:{}", presetHost); + int presetPort = Integer.parseInt(idropCore.getIdropConfig() + .getPropertyForKey( + IdropPropertiesHelper.LOGIN_PRESET_PORT)); + log.info("presetPort:{}", presetPort); + String presetZone = idropCore.getIdropConfig() + .getPropertyForKey( + IdropPropertiesHelper.LOGIN_PRESET_ZONE); + log.info("presetZone:{}", presetZone); + String presetResource = idropCore.getIdropConfig() + .getPropertyForKey( + IdropPropertiesHelper.LOGIN_PRESET_RESOURCE); + log.info("presetResource:{}", presetResource); + sb.append('/'); + sb.append(presetZone); + sb.append("/home/"); + sb.append(txtUserName.getText()); + + if (chkGuestLogin.isSelected()) { + irodsAccount = IRODSAccount.instanceForAnonymous( + presetHost, presetPort, "", presetZone, + presetResource); + } else if (chkProxyLogin.isSelected()) { + + GSSCredential gssCred = getGssCredential(); + + GSIIRODSAccount acc = GSIIRODSAccount.instance(presetHost, presetPort, gssCred, presetResource); + acc.setCertificateAuthority(txtCerts.getText()); + irodsAccount = acc; + } else { + irodsAccount = IRODSAccount.instance(presetHost, + presetPort, txtUserName.getText(), new String( + password.getPassword()), sb.toString(), + presetZone, presetResource); + } + } else { + sb.append('/'); + sb.append(txtZone.getText()); + sb.append("/home/"); + sb.append(txtUserName.getText()); + + if (chkGuestLogin.isSelected()) { + irodsAccount = IRODSAccount.instanceForAnonymous(txtHost + .getText().trim(), Integer.parseInt(txtPort + .getText().trim()), "", txtZone.getText().trim(), + txtResource.getText().trim()); + } else if (chkProxyLogin.isSelected()) { + // TODO + GSSCredential gssCred = getGssCredential(); + + + GSIIRODSAccount acc = GSIIRODSAccount.instance( + txtHost.getText().trim(), + Integer.parseInt(txtPort.getText().trim()), gssCred, txtResource.getText().trim()); + acc.setCertificateAuthority(txtCerts.getText().trim()); + irodsAccount = acc; + + } else { + irodsAccount = IRODSAccount.instance(txtHost.getText() + .trim(), + Integer.parseInt(txtPort.getText().trim()), + txtUserName.getText().trim(), + new String(password.getPassword()).trim(), sb + .toString().trim(), txtZone.getText() + .trim(), txtResource.getText().trim()); } + } + } catch (JargonException ex) { + Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, + null, ex); + MessageManager.showError(this, ex.getMessage(), + MessageManager.TITLE_MESSAGE); + return true; + } catch (GlobusCredentialException ex) { + Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, null, ex); + MessageManager.showError(this, ex.getMessage(), MessageManager.TITLE_MESSAGE); + return true; + } catch (GSSException ex) { + Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, null, ex); + MessageManager.showError(this, ex.getMessage(), MessageManager.TITLE_MESSAGE); + return true; + } catch (GssSecurityException ex) {//? + Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, null, ex); + MessageManager.showError(this, + "Wrong certifcate, key, password or proxy.", + "Login Error"); + return true; + } - txtPort.setText(port); - String zone = idropCore.getIdropConfig().getPropertyForKey( - IdropConfigurationService.ACCOUNT_CACHE_ZONE); - txtZone.setText(zone); - String resource = idropCore.getIdropConfig().getPropertyForKey( - IdropConfigurationService.ACCOUNT_CACHE_RESOURCE); - txtResource.setText(resource); - String username = idropCore.getIdropConfig().getPropertyForKey( - IdropConfigurationService.ACCOUNT_CACHE_USER_NAME); - txtUserName.setText(username); + if (comboLoginMode.getSelectedItem().toString() + .equals(IRODSAccount.AuthScheme.PAM.name())) { + irodsAccount.setAuthenticationScheme(IRODSAccount.AuthScheme.PAM); + } - - String save = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_USER_SAVE_PASS); - boolean saveP = "true".equals(save); - if(saveP){ - String savedPassword = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_USER_PASSWORD); - password.setText(savedPassword); - chkRememberPass.setSelected(true); - - String gsi = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.ACCOUNT_CACHE_USER_AUTO_GSI); - boolean autoGsi = "true".equals(gsi); - chkProxyLogin.setSelected(autoGsi); + IRODSFileSystem irodsFileSystem = null; + + /* + * getting userAO will attempt the login + */ + + try { + irodsFileSystem = idropCore.getIrodsFileSystem(); + AuthResponse authResponse = irodsFileSystem + .getIRODSAccessObjectFactory().authenticateIRODSAccount( + irodsAccount); + idropCore.setIrodsAccount(authResponse + .getAuthenticatedIRODSAccount()); + try { + idropCore.getIdropConfigurationService().saveLogin(irodsAccount); + if(chkRememberPass.isSelected()){ + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_PASSWORD, + irodsAccount.getPassword()); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_SAVE_PASS, + "true"); - loginTrialSuccesful = !processLogin(); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_CERT_PASSWORD, + certpass.getText()); + }else{ + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_PASSWORD, + ""); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_SAVE_PASS, + "false"); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_CERT_PASSWORD, + ""); } - - hideAdvancedViewFields(); - hideProxyLoginFields(); - } - - private void loginUsingPreset() { - log.debug("login will use presets"); - lblHost.setVisible(false); - txtHost.setVisible(false); - lblPort.setVisible(false); - txtPort.setVisible(false); - lblZone.setVisible(false); - txtZone.setVisible(false); - lblResource.setVisible(false); - txtResource.setVisible(false); - chkAdvancedLogin.setVisible(false); - lblLoginMode.setVisible(false); - comboLoginMode.setVisible(false); - } - - /** - * Action to take when login is initiated - * - * @return - * @throws NumberFormatException - */ - private boolean processLogin() throws NumberFormatException { - // validate various inputs based on whether a full login, or a uid only - // login is indicated - if (!idropCore.getIdropConfig().isLoginPreset()) { - txtHost.setBackground(Color.white); - txtPort.setBackground(Color.white); - txtZone.setBackground(Color.white); - txtResource.setBackground(Color.white); - if (txtHost.getText().length() == 0) { - txtHost.setBackground(Color.red); - } - if (txtPort.getText().length() == 0) { - txtPort.setBackground(Color.red); - } else { - try { - Integer.parseInt(txtPort.getText()); - } catch (Exception e) { - txtPort.setBackground(Color.red); - } - } - if (txtZone.getText().length() == 0) { - txtZone.setBackground(Color.red); - } - if (txtResource.getText().length() == 0) { - txtResource.setBackground(Color.red); - } - } - - txtUserName.setBackground(Color.white); - password.setBackground(Color.white); - if (txtUserName.getText().length() == 0) { - txtUserName.setBackground(Color.red); - } - if (password.getPassword().length == 0) { - password.setBackground(Color.red); - } - StringBuilder sb = new StringBuilder(); - final IRODSAccount irodsAccount; - - try { - - // validated, now try to log in - if (idropCore.getIdropConfig().isLoginPreset()) { - log.debug("creating account with presets"); - String presetHost = idropCore.getIdropConfig() - .getPropertyForKey( - IdropPropertiesHelper.LOGIN_PRESET_HOST); - log.info("presetHost:{}", presetHost); - int presetPort = Integer.parseInt(idropCore.getIdropConfig() - .getPropertyForKey( - IdropPropertiesHelper.LOGIN_PRESET_PORT)); - log.info("presetPort:{}", presetPort); - String presetZone = idropCore.getIdropConfig() - .getPropertyForKey( - IdropPropertiesHelper.LOGIN_PRESET_ZONE); - log.info("presetZone:{}", presetZone); - String presetResource = idropCore.getIdropConfig() - .getPropertyForKey( - IdropPropertiesHelper.LOGIN_PRESET_RESOURCE); - log.info("presetResource:{}", presetResource); - sb.append('/'); - sb.append(presetZone); - sb.append("/home/"); - sb.append(txtUserName.getText()); - - if (chkGuestLogin.isSelected()) { - irodsAccount = IRODSAccount.instanceForAnonymous( - presetHost, presetPort, "", presetZone, - presetResource); - } else if(chkProxyLogin.isSelected()){ - GlobusCredential globusCred = new GlobusCredential(txtProxy.getText()); - GSSCredential gssCred = new GlobusGSSCredentialImpl(globusCred,GSSCredential.INITIATE_AND_ACCEPT); - GSIIRODSAccount acc = GSIIRODSAccount.instance(presetHost, presetPort, gssCred, presetResource); - acc.setCertificateAuthority(txtCerts.getText()); - irodsAccount = acc; - } else { - irodsAccount = IRODSAccount.instance(presetHost, - presetPort, txtUserName.getText(), new String( - password.getPassword()), sb.toString(), - presetZone, presetResource); - } - } else { - sb.append('/'); - sb.append(txtZone.getText()); - sb.append("/home/"); - sb.append(txtUserName.getText()); - - if (chkGuestLogin.isSelected()) { - irodsAccount = IRODSAccount.instanceForAnonymous(txtHost - .getText().trim(), Integer.parseInt(txtPort - .getText().trim()), "", txtZone.getText().trim(), - txtResource.getText().trim()); - } else if(chkProxyLogin.isSelected()){ - // TODO - GlobusCredential globusCred = new GlobusCredential(txtProxy.getText()); - GSSCredential gssCred = new GlobusGSSCredentialImpl(globusCred, GSSCredential.INITIATE_AND_ACCEPT); - GSIIRODSAccount acc = GSIIRODSAccount.instance( - txtHost.getText().trim(), - Integer.parseInt(txtPort.getText().trim()), gssCred, txtResource.getText().trim()); - acc.setCertificateAuthority(txtCerts.getText().trim()); - irodsAccount = acc; - - } else{ - irodsAccount = IRODSAccount.instance(txtHost.getText() - .trim(), - Integer.parseInt(txtPort.getText().trim()), - txtUserName.getText().trim(), - new String(password.getPassword()).trim(), sb - .toString().trim(), txtZone.getText() - .trim(), txtResource.getText().trim()); - } - } - } catch (JargonException ex) { - Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, - null, ex); - MessageManager.showError(this, ex.getMessage(), - MessageManager.TITLE_MESSAGE); - return true; - } catch (GlobusCredentialException ex) { - Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE,null,ex); - MessageManager.showError(this, ex.getMessage(), MessageManager.TITLE_MESSAGE); - return true; - } catch (GSSException ex) { - Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE,null,ex); - MessageManager.showError(this, ex.getMessage(), MessageManager.TITLE_MESSAGE); - return true; + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_PROXY_LOCATION, txtProxy.getText()); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_CERTIFICATES_LOCATION, txtCerts.getText()); + + if (chkProxyLogin.isSelected()) { + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_AUTO_GSI, "true"); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_CERT_LOGIN_MODE, "" + getSelectedModeFieldNum()); + } else { + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_AUTO_GSI, "false"); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_CERT_LOGIN_MODE, "-1"); } - if (comboLoginMode.getSelectedItem().toString() - .equals(IRODSAccount.AuthScheme.PAM.name())) { - irodsAccount.setAuthenticationScheme(IRODSAccount.AuthScheme.PAM); - } - - IRODSFileSystem irodsFileSystem = null; - - /* - * getting userAO will attempt the login - */ - - try { - irodsFileSystem = idropCore.getIrodsFileSystem(); - AuthResponse authResponse = irodsFileSystem - .getIRODSAccessObjectFactory().authenticateIRODSAccount( - irodsAccount); - idropCore.setIrodsAccount(authResponse - .getAuthenticatedIRODSAccount()); - try { - idropCore.getIdropConfigurationService() - - .saveLogin(irodsAccount, chkRememberPass.isSelected()); - - idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_PROXY_LOCATION, txtProxy.getText()); - idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_CERTIFICATES_LOCATION, txtCerts.getText()); - if(chkProxyLogin.isSelected()){ - idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_AUTO_GSI,"true"); - }else{ - idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_AUTO_GSI,"false"); - } - //todo save proxy path and certificates location - - } catch (IdropException ex) { - throw new IdropRuntimeException("error saving irodsAccount", ex); - } - dispose(); - } catch (JargonException ex) { - if (ex.getMessage().indexOf("Connection refused") > -1) { - Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, - null, ex); - MessageManager.showError(this, - "Cannot connect to the server, is it down?", - "Login Error"); - - return true; - } else if (ex.getMessage().indexOf("Connection reset") > -1) { - Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, - null, ex); - MessageManager.showError(this, - "Cannot connect to the server, is it down?", - "Login Error"); - - return true; - } else if (ex.getMessage().indexOf("io exception opening socket") > -1) { - Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, - null, ex); - MessageManager.showError(this, - "Cannot connect to the server, is it down?", - "Login Error"); - - return true; - } else { - Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, - null, ex); - MessageManager.showError(this, - "login error - unable to log in, or invalid user id", - "Login Error"); - - return true; - } - } finally { - if (irodsFileSystem != null) { - irodsFileSystem.closeAndEatExceptions(); - } - } - return false; - } - - /** - * Register a listener for the enter event, so login can occur. - */ - private void registerKeystrokeListener() { - - KeyStroke enter = KeyStroke.getKeyStroke( - java.awt.event.KeyEvent.VK_ENTER, 0); - Action enterAction = new AbstractAction() { - /** - * - */ - private static final long serialVersionUID = 3468144821565093455L; - - @Override - public void actionPerformed(final ActionEvent e) { - processLogin(); - } - }; - btnOK.registerKeyboardAction(enterAction, enter, - JComponent.WHEN_IN_FOCUSED_WINDOW); - - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - - // <editor-fold defaultstate="collapsed" - // <editor-fold defaultstate="collapsed" + // Save in properties: paths to certificates, key and gsi mode + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_CERT_PEM_LOCATION, txtPEMCertificateLocation.getText()); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_KEY_PEM_LOCATION, txtKeyLocation.getText()); + idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.ACCOUNT_CACHE_CERT_P12_LOCATION, txtP12CertificateLocation.getText()); + + //todo save proxy path and certificates location + + } catch (IdropException ex) { + throw new IdropRuntimeException("error saving irodsAccount", ex); + } + dispose(); + } catch (JargonException ex) { + if (ex.getMessage().indexOf("Connection refused") > -1) { + Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, + null, ex); + MessageManager.showError(this, + "Cannot connect to the server, is it down?", + "Login Error"); + + return true; + } else if (ex.getMessage().indexOf("Connection reset") > -1) { + Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, + null, ex); + MessageManager.showError(this, + "Cannot connect to the server, is it down?", + "Login Error"); + + return true; + } else if (ex.getMessage().indexOf("io exception opening socket") > -1) { + Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, + null, ex); + MessageManager.showError(this, + "Cannot connect to the server, is it down?", + "Login Error"); + + return true; + } else { + Logger.getLogger(LoginDialog.class.getName()).log(Level.SEVERE, + null, ex); + MessageManager.showError(this, + "login error - unable to log in, or invalid user id", + "Login Error"); + + return true; + } + } finally { + if (irodsFileSystem != null) { + irodsFileSystem.closeAndEatExceptions(); + } + } + return false; + } + + /** + * Register a listener for the enter event, so login can occur. + */ + private void registerKeystrokeListener() { + + KeyStroke enter = KeyStroke.getKeyStroke( + java.awt.event.KeyEvent.VK_ENTER, 0); + Action enterAction = new AbstractAction() { + /** + * + */ + private static final long serialVersionUID = 3468144821565093455L; + + @Override + public void actionPerformed(final ActionEvent e) { + processLogin(); + } + }; + btnOK.registerKeyboardAction(enterAction, enter, + JComponent.WHEN_IN_FOCUSED_WINDOW); + + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" + // <editor-fold defaultstate="collapsed" // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; + btngrpProxySource = new javax.swing.ButtonGroup(); pnlLoginInfo = new javax.swing.JPanel(); lblHost = new javax.swing.JLabel(); txtHost = new javax.swing.JTextField(); @@ -415,6 +507,30 @@ public class LoginDialog extends JDialog { txtCerts = new javax.swing.JTextField(); btnProxy = new javax.swing.JButton(); btnCerts = new javax.swing.JButton(); + lblCertMode = new javax.swing.JLabel(); + jPanel2 = new javax.swing.JPanel(); + btnProxyCertKeyPair = new javax.swing.JRadioButton(); + btnProxyP12 = new javax.swing.JRadioButton(); + btnProxyBrowser = new javax.swing.JRadioButton(); + btnProxyFile = new javax.swing.JRadioButton(); + txtKeyLocation = new javax.swing.JTextField(); + lblKeyLocation = new javax.swing.JLabel(); + btnKeyLocation = new javax.swing.JButton(); + lblP12CertificateLocation = new javax.swing.JLabel(); + txtP12CertificateLocation = new javax.swing.JTextField(); + btnP12CertificateLocation = new javax.swing.JButton(); + lblCertPass = new javax.swing.JLabel(); + certpass = new javax.swing.JPasswordField(); + lblPEMCertificateLocation = new javax.swing.JLabel(); + txtPEMCertificateLocation = new javax.swing.JTextField(); + btnPEMCertificateLocation = new javax.swing.JButton(); + lbllBrowserCombo = new javax.swing.JLabel(); + browserpass = new javax.swing.JPasswordField(); + lblBrowserPass = new javax.swing.JLabel(); + cmbBrowsers = new javax.swing.JComboBox(); + lbllCertCombo = new javax.swing.JLabel(); + cmbCertificates = new javax.swing.JComboBox(); + btnCheckCertsInBrowser = new javax.swing.JButton(); pnlToolbar = new javax.swing.JPanel(); chkRememberPass = new javax.swing.JCheckBox(); btnOK = new javax.swing.JButton(); @@ -551,14 +667,14 @@ public class LoginDialog extends JDialog { gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 10; + gridBagConstraints.gridy = 17; pnlLoginInfo.add(jPanel1, gridBagConstraints); lblLoginMode.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); lblLoginMode.setText("Login Mode:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 9; + gridBagConstraints.gridy = 16; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; pnlLoginInfo.add(lblLoginMode, gridBagConstraints); @@ -566,31 +682,31 @@ public class LoginDialog extends JDialog { comboLoginMode.setToolTipText("Authentication mode used at login"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 9; + gridBagConstraints.gridy = 16; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; pnlLoginInfo.add(comboLoginMode, gridBagConstraints); lblProxy.setText("Proxy location:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 7; + gridBagConstraints.gridy = 9; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; pnlLoginInfo.add(lblProxy, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 7; + gridBagConstraints.gridy = 9; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; pnlLoginInfo.add(txtProxy, gridBagConstraints); lblCerts.setText("Certificates location:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 8; + gridBagConstraints.gridy = 11; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; pnlLoginInfo.add(lblCerts, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 8; + gridBagConstraints.gridy = 11; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; pnlLoginInfo.add(txtCerts, gridBagConstraints); @@ -603,7 +719,7 @@ public class LoginDialog extends JDialog { }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 7; + gridBagConstraints.gridy = 9; pnlLoginInfo.add(btnProxy, gridBagConstraints); btnCerts.setText("Choose..."); @@ -614,9 +730,203 @@ public class LoginDialog extends JDialog { }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 8; + gridBagConstraints.gridy = 11; pnlLoginInfo.add(btnCerts, gridBagConstraints); + lblCertMode.setText("Certificate mode:"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; + pnlLoginInfo.add(lblCertMode, gridBagConstraints); + + btngrpProxySource.add(btnProxyCertKeyPair); + btnProxyCertKeyPair.setText("cert/key pair"); + btnProxyCertKeyPair.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnProxyCertKeyPairActionPerformed(evt); + } + }); + jPanel2.add(btnProxyCertKeyPair); + + btngrpProxySource.add(btnProxyP12); + btnProxyP12.setText("p12 certificate"); + btnProxyP12.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnProxyP12ActionPerformed(evt); + } + }); + jPanel2.add(btnProxyP12); + + btngrpProxySource.add(btnProxyBrowser); + btnProxyBrowser.setText("certificate in browser"); + btnProxyBrowser.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnProxyBrowserActionPerformed(evt); + } + }); + jPanel2.add(btnProxyBrowser); + + btngrpProxySource.add(btnProxyFile); + btnProxyFile.setText("proxy file"); + btnProxyFile.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnProxyFileActionPerformed(evt); + } + }); + jPanel2.add(btnProxyFile); + + pnlLoginInfo.add(jPanel2, new java.awt.GridBagConstraints()); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 10; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; + pnlLoginInfo.add(txtKeyLocation, gridBagConstraints); + + lblKeyLocation.setText("Key location:"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 10; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; + pnlLoginInfo.add(lblKeyLocation, gridBagConstraints); + + btnKeyLocation.setText("Choose..."); + btnKeyLocation.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnKeyLocationActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 10; + pnlLoginInfo.add(btnKeyLocation, gridBagConstraints); + + lblP12CertificateLocation.setText("P12 Certificate location:"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 7; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; + pnlLoginInfo.add(lblP12CertificateLocation, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 7; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + pnlLoginInfo.add(txtP12CertificateLocation, gridBagConstraints); + + btnP12CertificateLocation.setText("Choose..."); + btnP12CertificateLocation.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnP12CertificateLocationActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 7; + pnlLoginInfo.add(btnP12CertificateLocation, gridBagConstraints); + + lblCertPass.setText("Certificate password:"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 12; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; + pnlLoginInfo.add(lblCertPass, gridBagConstraints); + + certpass.setColumns(30); + certpass.setPreferredSize(null); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 12; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + pnlLoginInfo.add(certpass, gridBagConstraints); + + lblPEMCertificateLocation.setText("PEM Certificate location:"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 8; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; + pnlLoginInfo.add(lblPEMCertificateLocation, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 8; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + pnlLoginInfo.add(txtPEMCertificateLocation, gridBagConstraints); + + btnPEMCertificateLocation.setText("Choose..."); + btnPEMCertificateLocation.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnPEMCertificateLocationActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 8; + pnlLoginInfo.add(btnPEMCertificateLocation, gridBagConstraints); + + lbllBrowserCombo.setText("Selected browser:"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 13; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; + pnlLoginInfo.add(lbllBrowserCombo, gridBagConstraints); + + browserpass.setColumns(30); + browserpass.setPreferredSize(null); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 14; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + pnlLoginInfo.add(browserpass, gridBagConstraints); + + lblBrowserPass.setText("Browser password:"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 14; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; + pnlLoginInfo.add(lblBrowserPass, gridBagConstraints); + + cmbBrowsers.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + cmbBrowsers.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmbBrowsersActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 13; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + pnlLoginInfo.add(cmbBrowsers, gridBagConstraints); + + lbllCertCombo.setText("Selected certificate:"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 15; + gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; + pnlLoginInfo.add(lbllCertCombo, gridBagConstraints); + + cmbCertificates.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + cmbCertificates.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmbCertificatesActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 15; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + pnlLoginInfo.add(cmbCertificates, gridBagConstraints); + + btnCheckCertsInBrowser.setText("Access..."); + btnCheckCertsInBrowser.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnCheckCertsInBrowserActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 14; + pnlLoginInfo.add(btnCheckCertsInBrowser, gridBagConstraints); + getContentPane().add(pnlLoginInfo, java.awt.BorderLayout.CENTER); pnlToolbar.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT, 2, 5)); @@ -663,15 +973,17 @@ public class LoginDialog extends JDialog { }//GEN-LAST:event_chkRememberPassActionPerformed private void chkProxyLoginActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkProxyLoginActionPerformed - if(chkProxyLogin.isSelected()){ + if (chkProxyLogin.isSelected()) { chkGuestLogin.setSelected(false); //hide username/pass hideForGuestLogin(); - showProxyLoginFields(); - }else{ + showProxyLoginFields(); + //Shows proper fields for choosen gsi mode (p12/pem/browser/proxy file) + showProxyChoosenModeFields(); + } else { //show username/password showWhenGuestLogin(); - hideProxyLoginFields(); + hideProxyLoginFields(); } }//GEN-LAST:event_chkProxyLoginActionPerformed @@ -679,11 +991,11 @@ public class LoginDialog extends JDialog { final JFileChooser chooser = new JFileChooser(); chooser.setFileHidingEnabled(false); int res = chooser.showOpenDialog(this); - if(res == JFileChooser.APPROVE_OPTION){ - if(chooser.getSelectedFile().canRead()){ + if (res == JFileChooser.APPROVE_OPTION) { + if (chooser.getSelectedFile().canRead()) { txtProxy.setText(chooser.getSelectedFile().getAbsolutePath()); } - } + } }//GEN-LAST:event_btnProxyActionPerformed private void btnCertsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCertsActionPerformed @@ -691,66 +1003,166 @@ public class LoginDialog extends JDialog { chooser.setFileHidingEnabled(false); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int res = chooser.showOpenDialog(this); - if(res == JFileChooser.APPROVE_OPTION){ + if (res == JFileChooser.APPROVE_OPTION) { txtCerts.setText(chooser.getSelectedFile().getAbsolutePath()); - } + } }//GEN-LAST:event_btnCertsActionPerformed - private void chkAdvancedLoginActionPerformed( - final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_chkAdvancedLoginActionPerformed - // TODO add your handling code here: - if (chkAdvancedLogin.isSelected()) { - showAdvancedViewFields(); - } else { - hideAdvancedViewFields(); - } - }// GEN-LAST:event_chkAdvancedLoginActionPerformed - - private void chkGuestLoginActionPerformed( - final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_chkGuestLoginActionPerformed - if (chkGuestLogin.isSelected()) { - chkProxyLogin.setSelected(false); - hideProxyLoginFields(); - hideForGuestLogin(); - - } else { - showWhenGuestLogin(); - } - }// GEN-LAST:event_chkGuestLoginActionPerformed - - private void btnOKActionPerformed(final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_btnOKActionPerformed - processLogin(); - }// GEN-LAST:event_btnOKActionPerformed - - private void btnCancelActionPerformed(final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_btnCancelActionPerformed - dispose(); - }// GEN-LAST:event_btnCancelActionPerformed + private void btnKeyLocationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnKeyLocationActionPerformed + //get path of key file when using PEM pair to authenticate user + final JFileChooser chooser = new JFileChooser(); + int res = chooser.showOpenDialog(this); + if (res == JFileChooser.APPROVE_OPTION) { + txtKeyLocation.setText(chooser.getSelectedFile().getAbsolutePath()); + } + }//GEN-LAST:event_btnKeyLocationActionPerformed + + private void btnP12CertificateLocationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnP12CertificateLocationActionPerformed + //get path of certificate file when using p12 certificate to authenticate user + final JFileChooser chooser = new JFileChooser(); + int res = chooser.showOpenDialog(this); + if (res == JFileChooser.APPROVE_OPTION) { + txtP12CertificateLocation.setText(chooser.getSelectedFile().getAbsolutePath()); + } + }//GEN-LAST:event_btnP12CertificateLocationActionPerformed + + private void btnProxyCertKeyPairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnProxyCertKeyPairActionPerformed +// show proper fields when using PEM pair to authenticate user + hideCertP12Fields(); + hideCertInBrowserFields(); + hideProxyFileFields(); + showCertKeyPairFields(); + }//GEN-LAST:event_btnProxyCertKeyPairActionPerformed + + private void btnProxyP12ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnProxyP12ActionPerformed +// show proper fields when using p12 certificate to authenticate user + hideCertKeyPairFields(); + hideCertInBrowserFields(); + hideProxyFileFields(); + showCertP12Fields(); + }//GEN-LAST:event_btnProxyP12ActionPerformed + + private void btnProxyBrowserActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnProxyBrowserActionPerformed +// show proper fields when using credentials from browser to authenticate user + hideCertKeyPairFields(); + hideCertP12Fields(); + hideProxyFileFields(); + showCertInBrowserFields(); + fillBrowserComboBox(); + }//GEN-LAST:event_btnProxyBrowserActionPerformed + + private void btnProxyFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnProxyFileActionPerformed +// show proper fields when using proxy file to authenticate user + hideCertKeyPairFields(); + hideCertP12Fields(); + hideCertInBrowserFields(); + showProxyFileFields(); + }//GEN-LAST:event_btnProxyFileActionPerformed + + private void btnPEMCertificateLocationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPEMCertificateLocationActionPerformed + //get path of certificate file when using PEM pair to authenticate user + final JFileChooser chooser = new JFileChooser(); + int res = chooser.showOpenDialog(this); + if (res == JFileChooser.APPROVE_OPTION) { + txtPEMCertificateLocation.setText(chooser.getSelectedFile().getAbsolutePath()); + } + }//GEN-LAST:event_btnPEMCertificateLocationActionPerformed + + private void cmbBrowsersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbBrowsersActionPerformed + }//GEN-LAST:event_cmbBrowsersActionPerformed + + private void cmbCertificatesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbCertificatesActionPerformed + }//GEN-LAST:event_cmbCertificatesActionPerformed + + private void btnCheckCertsInBrowserActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCheckCertsInBrowserActionPerformed + //fill proper combobox with certificates' list derived from selected browser + String choosenBrowser = (String) cmbBrowsers.getSelectedItem(); + if (choosenBrowser != null) { + setSelectedBrowser(choosenBrowser); + fillCertificateComboBox(); + } + }//GEN-LAST:event_btnCheckCertsInBrowserActionPerformed + + private void chkAdvancedLoginActionPerformed( + final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_chkAdvancedLoginActionPerformed + // TODO add your handling code here: + if (chkAdvancedLogin.isSelected()) { + showAdvancedViewFields(); + } else { + hideAdvancedViewFields(); + } + }// GEN-LAST:event_chkAdvancedLoginActionPerformed + + private void chkGuestLoginActionPerformed( + final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_chkGuestLoginActionPerformed + if (chkGuestLogin.isSelected()) { + chkProxyLogin.setSelected(false); + hideProxyLoginFields(); + hideForGuestLogin(); + + } else { + showWhenGuestLogin(); + } + }// GEN-LAST:event_chkGuestLoginActionPerformed + + private void btnOKActionPerformed(final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_btnOKActionPerformed + processLogin(); + }// GEN-LAST:event_btnOKActionPerformed + + private void btnCancelActionPerformed(final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_btnCancelActionPerformed + dispose(); + }// GEN-LAST:event_btnCancelActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPasswordField browserpass; private javax.swing.JButton btnCancel; private javax.swing.JButton btnCerts; + private javax.swing.JButton btnCheckCertsInBrowser; + private javax.swing.JButton btnKeyLocation; private javax.swing.JButton btnOK; + private javax.swing.JButton btnP12CertificateLocation; + private javax.swing.JButton btnPEMCertificateLocation; private javax.swing.JButton btnProxy; + private javax.swing.JRadioButton btnProxyBrowser; + private javax.swing.JRadioButton btnProxyCertKeyPair; + private javax.swing.JRadioButton btnProxyFile; + private javax.swing.JRadioButton btnProxyP12; + private javax.swing.ButtonGroup btngrpProxySource; + private javax.swing.JPasswordField certpass; private javax.swing.JCheckBox chkAdvancedLogin; private javax.swing.JCheckBox chkGuestLogin; private javax.swing.JCheckBox chkProxyLogin; private javax.swing.JCheckBox chkRememberPass; + private javax.swing.JComboBox cmbBrowsers; + private javax.swing.JComboBox cmbCertificates; private javax.swing.JComboBox comboLoginMode; private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JLabel lblBrowserPass; + private javax.swing.JLabel lblCertMode; + private javax.swing.JLabel lblCertPass; private javax.swing.JLabel lblCerts; private javax.swing.JLabel lblHost; + private javax.swing.JLabel lblKeyLocation; private javax.swing.JLabel lblLogin; private javax.swing.JLabel lblLoginMode; + private javax.swing.JLabel lblP12CertificateLocation; + private javax.swing.JLabel lblPEMCertificateLocation; private javax.swing.JLabel lblPassword; private javax.swing.JLabel lblPort; private javax.swing.JLabel lblProxy; private javax.swing.JLabel lblResource; private javax.swing.JLabel lblUserName; private javax.swing.JLabel lblZone; + private javax.swing.JLabel lbllBrowserCombo; + private javax.swing.JLabel lbllCertCombo; private javax.swing.JPasswordField password; private javax.swing.JPanel pnlLoginInfo; private javax.swing.JPanel pnlToolbar; private javax.swing.JTextField txtCerts; private javax.swing.JTextField txtHost; + private javax.swing.JTextField txtKeyLocation; + private javax.swing.JTextField txtP12CertificateLocation; + private javax.swing.JTextField txtPEMCertificateLocation; private javax.swing.JTextField txtPort; private javax.swing.JTextField txtProxy; private javax.swing.JTextField txtResource; @@ -758,62 +1170,418 @@ public class LoginDialog extends JDialog { private javax.swing.JTextField txtZone; // End of variables declaration//GEN-END:variables - private void showAdvancedViewFields() { - lblHost.setVisible(true); - txtHost.setVisible(true); - lblZone.setVisible(true); - txtZone.setVisible(true); - txtResource.setVisible(true); - txtPort.setVisible(true); - lblPort.setVisible(true); - lblResource.setVisible(true); - } - - private void hideAdvancedViewFields() { - lblHost.setVisible(false); - txtHost.setVisible(false); - lblZone.setVisible(false); - txtZone.setVisible(false); - txtResource.setVisible(false); - txtPort.setVisible(false); - lblPort.setVisible(false); - lblResource.setVisible(false); - } - - private void hideForGuestLogin() { - lblUserName.setVisible(false); - txtUserName.setVisible(false); - lblPassword.setVisible(false); - password.setVisible(false); - lblLoginMode.setVisible(false); - comboLoginMode.setVisible(false); - } - - private void showWhenGuestLogin() { - lblUserName.setVisible(true); - txtUserName.setVisible(true); - lblPassword.setVisible(true); - password.setVisible(true); - } - - private void showProxyLoginFields(){ - lblProxy.setVisible(true); - txtProxy.setVisible(true); - btnProxy.setVisible(true); - lblCerts.setVisible(true); - txtCerts.setVisible(true); - btnCerts.setVisible(true); + private void hideNormalLoginFields(){ + password.setVisible(false); + lblPassword.setVisible(false); + txtUserName.setVisible(false); + lblUserName.setVisible(false); + } + + private void showAdvancedViewFields() { + lblHost.setVisible(true); + txtHost.setVisible(true); + lblZone.setVisible(true); + txtZone.setVisible(true); + txtResource.setVisible(true); + txtPort.setVisible(true); + lblPort.setVisible(true); + lblResource.setVisible(true); + + lblCerts.setVisible(true); + txtCerts.setVisible(true); + btnCerts.setVisible(true); + } + + private void hideAdvancedViewFields() { + lblHost.setVisible(false); + txtHost.setVisible(false); + lblZone.setVisible(false); + txtZone.setVisible(false); + txtResource.setVisible(false); + txtPort.setVisible(false); + lblPort.setVisible(false); + lblResource.setVisible(false); + + lblCerts.setVisible(false); + txtCerts.setVisible(false); + btnCerts.setVisible(false); + } + + private void hideForGuestLogin() { + lblUserName.setVisible(false); + txtUserName.setVisible(false); + lblPassword.setVisible(false); + password.setVisible(false); + lblLoginMode.setVisible(false); + comboLoginMode.setVisible(false); + } + + private void showWhenGuestLogin() { + lblUserName.setVisible(true); + txtUserName.setVisible(true); + lblPassword.setVisible(true); + password.setVisible(true); + lblLoginMode.setVisible(true);//symetric + comboLoginMode.setVisible(true); + } + + private void showProxyLoginFields() { + //show buttngroup to let user choose a way to authenticate + btnProxyBrowser.setVisible(true); + btnProxyCertKeyPair.setVisible(true); + btnProxyFile.setVisible(true); + btnProxyP12.setVisible(true); + lblCertMode.setVisible(true); + } + + private void hideProxyLoginFields() { + btnProxyBrowser.setVisible(false); + btnProxyCertKeyPair.setVisible(false); + btnProxyFile.setVisible(false); + btnProxyP12.setVisible(false); + lblCertMode.setVisible(false); + + hideCertKeyPairFields(); + hideCertP12Fields(); + hideCertInBrowserFields(); + hideProxyFileFields(); + // lblPassword.setVisible(true); + // password.setVisible(true); + } + + private void hideCertKeyPairFields() { + lblPEMCertificateLocation.setVisible(false); + txtPEMCertificateLocation.setVisible(false); + btnPEMCertificateLocation.setVisible(false); + lblKeyLocation.setVisible(false); + txtKeyLocation.setVisible(false); + btnKeyLocation.setVisible(false); + lblCertPass.setVisible(false); + certpass.setVisible(false); + } + + private void showCertKeyPairFields() { + lblPEMCertificateLocation.setVisible(true); + txtPEMCertificateLocation.setVisible(true); + btnPEMCertificateLocation.setVisible(true); + lblKeyLocation.setVisible(true); + txtKeyLocation.setVisible(true); + btnKeyLocation.setVisible(true); + lblCertPass.setVisible(true); + certpass.setVisible(true); + } + + private void hideCertP12Fields() { + lblP12CertificateLocation.setVisible(false); + txtP12CertificateLocation.setVisible(false); + btnP12CertificateLocation.setVisible(false); + lblCertPass.setVisible(false); + certpass.setVisible(false); + } + + private void showCertP12Fields() { + lblP12CertificateLocation.setVisible(true); + txtP12CertificateLocation.setVisible(true); + btnP12CertificateLocation.setVisible(true); + lblCertPass.setVisible(true); + certpass.setVisible(true); + } + + private void hideCertInBrowserFields() { + lblBrowserPass.setVisible(false); + browserpass.setVisible(false); + lbllBrowserCombo.setVisible(false); + cmbBrowsers.setVisible(false); + lbllCertCombo.setVisible(false); + cmbCertificates.setVisible(false); + btnCheckCertsInBrowser.setVisible(false); + cmbCertificates.removeAllItems(); + cmbBrowsers.removeAllItems(); + } + + private void showCertInBrowserFields() { + lblBrowserPass.setVisible(true); + browserpass.setVisible(true); + lbllBrowserCombo.setVisible(true); + cmbBrowsers.setVisible(true); + lbllCertCombo.setVisible(true); + cmbCertificates.setVisible(true); + btnCheckCertsInBrowser.setVisible(true); + cmbCertificates.removeAllItems(); + cmbBrowsers.removeAllItems(); + } + + private void hideProxyFileFields() { + lblProxy.setVisible(false); + txtProxy.setVisible(false); + btnProxy.setVisible(false); + } + + private void showProxyFileFields() { + lblProxy.setVisible(true); + txtProxy.setVisible(true); + btnProxy.setVisible(true); + } + /* + * Set selected the proper radiobutton depending the number of mode + * used while reading from properties + */ + + private void setSelectedModeFields(int num) { + switch (num) { + case PEM_MODE: + btnProxyCertKeyPair.setSelected(true); + break; + case P12_MODE: + btnProxyP12.setSelected(true); + break; + case BROWSER_MODE: + btnProxyBrowser.setSelected(true); + break; + case PROXY_MODE: + btnProxyFile.setSelected(true); + break; } - - private void hideProxyLoginFields(){ - lblProxy.setVisible(false); - txtProxy.setVisible(false); - btnProxy.setVisible(false); - lblCerts.setVisible(false); - txtCerts.setVisible(false); - btnCerts.setVisible(false); + } + + private int getSelectedModeFieldNum() { + if (btnProxyCertKeyPair.isSelected()) { + return PEM_MODE; } - - - + if (btnProxyP12.isSelected()) { + return P12_MODE; + } + if (btnProxyBrowser.isSelected()) { + return BROWSER_MODE; + } + if (btnProxyFile.isSelected()) { + return PROXY_MODE; + } + return -1; //old option used as default + } + + private void showProxyChoosenModeFields() { + if (btnProxyCertKeyPair.isSelected()) { + showCertKeyPairFields(); + } else if (btnProxyP12.isSelected()) { + showCertP12Fields(); + } else if (btnProxyBrowser.isSelected()) { + showCertInBrowserFields(); + } else if (btnProxyFile.isSelected()) { + showProxyFileFields(); + } + } + /* + * Creates a GSSCredential form diferent data: proxy file, p12, pem form file system or browser + * Proxy type as default in grid-proxy-init (GSIConstants.GSI_3_IMPERSONATION_PROXY). + */ + + private GSSCredential getGssCredential() throws GlobusCredentialException, GSSException { + // should it be possinble to change by user? + int proxyLifetimeSeconds = 1000; + if (btnProxyFile.isSelected()) { + //a it was previously + String proxyFilePath = txtProxy.getText(); + GlobusCredential globusCred = new GlobusCredential(proxyFilePath); + return new GlobusGSSCredentialImpl(globusCred, GSSCredential.INITIATE_AND_ACCEPT); + } else if (btnProxyCertKeyPair.isSelected()) { + String pemCert = txtPEMCertificateLocation.getText(); + String pemKey = txtKeyLocation.getText(); + return GssUtil.createCredentialFromCertKeyPassTime(pemCert, pemKey, certpass.getText(), proxyLifetimeSeconds, GSIConstants.GSI_3_IMPERSONATION_PROXY); + } else if (btnProxyP12.isSelected()) { + String p12Cert = txtP12CertificateLocation.getText(); + //convert p12 to pem pair + String certPath = System.getProperty("user.home") + File.separator + ".idrop" + File.separator + "usercert.pem"; + String keyPath = System.getProperty("user.home") + File.separator + ".idrop" + File.separator + "userkey.pem"; + try { + CertificateConverter.PKCS12ToPem(p12Cert, certpass.getText()); + } catch (Exception ex) { + log.error("Error during certificate conversion." + ex.getMessage()); + } + return GssUtil.createCredentialFromCertKeyPassTime(certPath, keyPath, certpass.getText(), proxyLifetimeSeconds, GSIConstants.GSI_3_IMPERSONATION_PROXY); + } else if (btnProxyBrowser.isSelected()) { + String dn = (String) cmbCertificates.getSelectedItem(); + X509Certificate browserCert = getSelectedCertificateFromBrowser(dn); + PrivateKey browserKey = getSelectedKeyFromBrowser(dn); + String emptyPass = ""; + GssUtil.createCredentialFromCertKeyPassTime(browserCert, browserKey, emptyPass, proxyLifetimeSeconds, GSIConstants.GSI_3_IMPERSONATION_PROXY); + } + return null; + } + /* + * WARNING: + * - partly untested code below + * - code based on correct function actionPerformed from CertificateManager.java in Certman project + * + * - to install requred jar file in yout local maven repo please excute: + * mvn install:install-file -Dfile=<your location of this jar>/libbrowser.jar -DgroupId=vine_certman -DartifactId=libbrowser -Dversion=1 -Dpackaging=jar -e + * + * It is necessary due to he fact, that this jar is unreachable in main maven repo + */ + + private void fillBrowserComboBox() { + cmbBrowsers.removeAllItems(); + String[] browsers = getBrowsersList(); + if (browsers != null) { + for (String s : browsers) { + cmbBrowsers.addItem(s); + } + } + } + + private void fillCertificateComboBox() { + cmbCertificates.removeAllItems(); + String[] certs = getCertifiatesInBrowserList(); + if (certs != null) { + for (String s : certs) { + cmbCertificates.addItem(s); + } + } + } + /* + * Class needed by Browser class used by code based on certman + */ + + private static class PasswordPrompt implements Browser.PasswordCallback { + + public char[] prompt(String promptString) { + return dialog.browserpass.getPassword(); + } + + public PasswordPrompt(LoginDialog tmp) { + this.dialog = tmp; + } + final LoginDialog dialog; + } + private String profile = null; + /* + * Gets the list of browsers. + */ + + private String[] getBrowsersList() { + //Browser.getCurrentBrowser(); + String profiles[] = null; + if (profile == null) { + profiles = new String[0]; + try { + profiles = Browser.getBrowserList(); + } catch (IOException e) { + log.debug("Could not find any recognized browsers." + e); + MessageManager.showError(this, "Could not find any recognized browsers.", "Browser Error"); + return null; + } + if (profiles.length == 0) { + log.debug("No browsers found"); + MessageManager.showError(this, "No browsers found.", "Browser Error"); + return null; + } + } + return profiles; + } + /* + * Sets the selected browser, what is needed for other funkctions to know + * where to look for the certificates + */ + + private void setSelectedBrowser(String browserChoosen) { + log.debug("Response option: " + browserChoosen); + if (browserChoosen == null) { + return; + } else { + Browser.setBrowser(browserChoosen); + } + profile = Browser.getCurrentBrowser(); + log.debug("Current browser profile: " + profile); + } + /* + * Gets list of certificates in selected browser keystore + * Acceses selected browser keystore, uses prossword provided by user + */ + + private String[] getCertifiatesInBrowserList() { + if (Browser.getCurrentBrowser() == null) { + return null; + } + String dnlist[] = null; + try { + dnlist = Browser.getDNlist(new PasswordPrompt(this)); + log.debug("Current dnlist: " + dnlist); + } catch (IOException e) { + log.debug("Could not access keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, "Could not access keystore in profile: " + profile, e.getLocalizedMessage()); + return null; + } catch (KeyStoreException e) { + log.debug("Could not access keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, "Could not access keystore in profile: " + profile, e.getLocalizedMessage()); + return null; + } catch (NoSuchAlgorithmException e) { + log.debug("Could not access keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, "Could not access keystore in profile: " + profile, e.getLocalizedMessage()); + return null; + } catch (CertificateException e) { + log.debug("Could not access keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, "Could not access keystore in profile: " + profile, e.getLocalizedMessage()); + return null; + } catch (InvalidAlgorithmParameterException e) { + log.debug("Could not access keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, "Could not access keystore in profile: " + profile, e.getLocalizedMessage()); + return null; + } catch (javax.security.auth.login.FailedLoginException e) { + log.debug("Could not access keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, e.getMessage(), "Incorrect Password"); + return null; + } catch (GeneralSecurityException e) { + if (e.getMessage().indexOf("version>=1.5") >= 0) { + MessageManager.showError(this, e.getMessage(), "Browser selection tool"); + } else { + log.debug("Could not access keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, "Could not access keystore in profile: " + profile, e.getLocalizedMessage()); + } + return null; + } + if (dnlist == null) { + log.debug("Certificates list is empty: " + profile); + MessageManager.showError(this, "No Certificates found", "Browser selection tool"); + return null; + } + if (dnlist.length == 0) { + MessageManager.showError(this, "No Certificates found", "Browser selection tool"); + return null; + } + return dnlist; + } + /* + * Gets the choosen certificate from actual browser. + */ + + private X509Certificate getSelectedCertificateFromBrowser(String dnChoosen) { + X509Certificate certificateBrowser = null; + String browserDNChosen = dnChoosen; + log.debug("Browser cert DN chosen : " + browserDNChosen); + Browser.CertInfo info = null; + try { + certificateBrowser = Browser.getCertificate(browserDNChosen); + log.debug("Browser cert retrieved: " + certificateBrowser.getSubjectDN()); + info = Browser.theProfile; + log.debug("Browser cert info : " + info); + } catch (IOException e) { + log.debug("Could not access certificate in the browser keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, e.getMessage(), "Could not access certificate in the browser keystore in profile: " + profile); + return null; + } catch (GeneralSecurityException e) { + log.debug("Could not access certificate in the browser keystore in profile: " + profile + " : " + e); + MessageManager.showError(this, e.getMessage(), "Could not access certificate in the browser keystore in profile: " + profile); + return null; + } + return certificateBrowser; + } + /* + * Gets the choosen key from actual browser. + */ + + private PrivateKey getSelectedKeyFromBrowser(String dnChoosen) { + PrivateKey browserKey = uk.ac.rl.esc.browser.IECertificateInterface.getKey(dnChoosen); + log.debug("Browser cert key present : " + (browserKey != null)); + return browserKey; + } } diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/MetaSearch.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/MetaSearch.java index d053928..4afadbd 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/MetaSearch.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/MetaSearch.java @@ -5,20 +5,15 @@ package org.irods.jargon.idrop.desktop.systraygui; import java.awt.Dimension; -import java.awt.FlowLayout; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import javax.swing.JComboBox; -import javax.swing.JFrame; -import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; -import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import org.irods.jargon.core.exception.JargonException; import org.irods.jargon.core.pub.DataObjectAO; -//import org.irods.jargon.core.query.MetaDataSet; import org.irods.jargon.core.query.AVUQueryElement; import org.irods.jargon.core.query.AVUQueryElement.AVUQueryPart; import org.irods.jargon.core.query.AVUQueryOperatorEnum; diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/SearchResultsDialog.form b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/SearchResultsDialog.form index 9457c45..13b06da 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/SearchResultsDialog.form +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/SearchResultsDialog.form @@ -109,7 +109,7 @@ <DimensionLayout dim="0"> <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" alignment="1" attributes="0"> - <EmptySpace pref="556" max="32767" attributes="0"/> + <EmptySpace pref="528" max="32767" attributes="0"/> <Component id="btnDismiss" min="-2" max="-2" attributes="0"/> <EmptySpace min="-2" pref="38" max="-2" attributes="0"/> </Group> @@ -120,7 +120,7 @@ <Group type="102" alignment="0" attributes="0"> <EmptySpace min="-2" pref="15" max="-2" attributes="0"/> <Component id="btnDismiss" min="-2" max="-2" attributes="0"/> - <EmptySpace pref="12" max="32767" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> </Group> </Group> </DimensionLayout> diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/SearchResultsDialog.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/SearchResultsDialog.java index 430d23b..f09f73c 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/SearchResultsDialog.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/SearchResultsDialog.java @@ -146,94 +146,96 @@ public class SearchResultsDialog extends javax.swing.JDialog implements */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - jPanel1 = new javax.swing.JPanel(); - pnlTabSearch = new javax.swing.JPanel(); - pnlTabSearchTop = new javax.swing.JPanel(); - pnlTabSearchResults = new javax.swing.JPanel(); - scrollPaneSearchResults = new javax.swing.JScrollPane(); - tableSearchResults = new javax.swing.JTable(); - jPanel2 = new javax.swing.JPanel(); - btnDismiss = new javax.swing.JButton(); - - setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - setTitle(org.openide.util.NbBundle.getMessage(SearchResultsDialog.class, "SearchResultsDialog.title")); // NOI18N - - jPanel1.setLayout(new java.awt.BorderLayout()); - - pnlTabSearch.setToolTipText(org.openide.util.NbBundle.getMessage(SearchResultsDialog.class, "SearchResultsDialog.pnlTabSearch.toolTipText")); // NOI18N - pnlTabSearch.setLayout(new java.awt.BorderLayout()); - pnlTabSearch.add(pnlTabSearchTop, java.awt.BorderLayout.NORTH); - - pnlTabSearchResults.setLayout(new java.awt.GridLayout(1, 0)); - - tableSearchResults.setModel(new javax.swing.table.DefaultTableModel( - new Object [][] { - {null, null, null, null}, - {null, null, null, null}, - {null, null, null, null}, - {null, null, null, null} - }, - new String [] { - "Title 1", "Title 2", "Title 3", "Title 4" - } - )); - scrollPaneSearchResults.setViewportView(tableSearchResults); - - pnlTabSearchResults.add(scrollPaneSearchResults); - - pnlTabSearch.add(pnlTabSearchResults, java.awt.BorderLayout.CENTER); - - jPanel1.add(pnlTabSearch, java.awt.BorderLayout.CENTER); - - getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); - - jPanel2.setPreferredSize(new java.awt.Dimension(661, 50)); - - btnDismiss.setLabel(org.openide.util.NbBundle.getMessage(SearchResultsDialog.class, "SearchResultsDialog.btnDismiss.label")); // NOI18N - btnDismiss.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnDismissActionPerformed(evt); - } - }); - - org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2); - jPanel2.setLayout(jPanel2Layout); - jPanel2Layout.setHorizontalGroup( - jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel2Layout.createSequentialGroup() - .addContainerGap(556, Short.MAX_VALUE) - .add(btnDismiss) - .add(38, 38, 38)) - ); - jPanel2Layout.setVerticalGroup( - jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(jPanel2Layout.createSequentialGroup() - .add(15, 15, 15) - .add(btnDismiss) - .addContainerGap(12, Short.MAX_VALUE)) - ); - - getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH); - - pack(); - }// </editor-fold>//GEN-END:initComponents + // desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jPanel1 = new javax.swing.JPanel(); + pnlTabSearch = new javax.swing.JPanel(); + pnlTabSearchTop = new javax.swing.JPanel(); + pnlTabSearchResults = new javax.swing.JPanel(); + scrollPaneSearchResults = new javax.swing.JScrollPane(); + tableSearchResults = new javax.swing.JTable(); + jPanel2 = new javax.swing.JPanel(); + btnDismiss = new javax.swing.JButton(); + + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + setTitle(org.openide.util.NbBundle.getMessage( + SearchResultsDialog.class, "SearchResultsDialog.title")); // NOI18N + + jPanel1.setLayout(new java.awt.BorderLayout()); + + pnlTabSearch.setToolTipText(org.openide.util.NbBundle.getMessage( + SearchResultsDialog.class, + "SearchResultsDialog.pnlTabSearch.toolTipText")); // NOI18N + pnlTabSearch.setLayout(new java.awt.BorderLayout()); + pnlTabSearch.add(pnlTabSearchTop, java.awt.BorderLayout.NORTH); + + pnlTabSearchResults.setLayout(new java.awt.GridLayout()); + + tableSearchResults.setModel(new javax.swing.table.DefaultTableModel( + new Object[][] { { null, null, null, null }, + { null, null, null, null }, { null, null, null, null }, + { null, null, null, null } }, new String[] { "Title 1", + "Title 2", "Title 3", "Title 4" })); + scrollPaneSearchResults.setViewportView(tableSearchResults); + + pnlTabSearchResults.add(scrollPaneSearchResults); + + pnlTabSearch.add(pnlTabSearchResults, java.awt.BorderLayout.CENTER); + + jPanel1.add(pnlTabSearch, java.awt.BorderLayout.CENTER); + + getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); + + jPanel2.setPreferredSize(new java.awt.Dimension(661, 50)); + + btnDismiss.setLabel(org.openide.util.NbBundle.getMessage( + SearchResultsDialog.class, + "SearchResultsDialog.btnDismiss.label")); // NOI18N + btnDismiss.addActionListener(new java.awt.event.ActionListener() { + @Override + public void actionPerformed(final java.awt.event.ActionEvent evt) { + btnDismissActionPerformed(evt); + } + }); + + org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout( + jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup( + org.jdesktop.layout.GroupLayout.LEADING).add( + org.jdesktop.layout.GroupLayout.TRAILING, + jPanel2Layout.createSequentialGroup() + .addContainerGap(528, Short.MAX_VALUE).add(btnDismiss) + .add(38, 38, 38))); + jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup( + org.jdesktop.layout.GroupLayout.LEADING).add( + jPanel2Layout + .createSequentialGroup() + .add(15, 15, 15) + .add(btnDismiss) + .addContainerGap( + org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE))); + + getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH); + + pack(); + }// </editor-fold>//GEN-END:initComponents private void btnDismissActionPerformed(final java.awt.event.ActionEvent evt) {// GEN-FIRST:event_btnDismissActionPerformed dispose(); }// GEN-LAST:event_btnDismissActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton btnDismiss; - private javax.swing.JPanel jPanel1; - private javax.swing.JPanel jPanel2; - private javax.swing.JPanel pnlTabSearch; - private javax.swing.JPanel pnlTabSearchResults; - private javax.swing.JPanel pnlTabSearchTop; - private javax.swing.JScrollPane scrollPaneSearchResults; - private javax.swing.JTable tableSearchResults; - // End of variables declaration//GEN-END:variables + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton btnDismiss; + private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JPanel pnlTabSearch; + private javax.swing.JPanel pnlTabSearchResults; + private javax.swing.JPanel pnlTabSearchTop; + private javax.swing.JScrollPane scrollPaneSearchResults; + private javax.swing.JTable tableSearchResults; + // End of variables declaration//GEN-END:variables } diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/CertificateConverter.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/CertificateConverter.java new file mode 100644 index 0000000..4d2d447 --- /dev/null +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/CertificateConverter.java @@ -0,0 +1,103 @@ +package org.irods.jargon.idrop.desktop.systraygui.gss; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.security.Key; +import java.security.SecureRandom; +import java.security.Security; +import org.bouncycastle.openssl.PEMWriter; +import java.security.cert.Certificate; + +/** + * Class based on QCG-Icon project on CertificateFromP12ToPem.java file + * + * Commented code - possible improvements requiering much more copied code and classes. + * + * @author Kalina Jasinska + * @author jkonczak + */ +public class CertificateConverter { + + static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(CertificateConverter.class.getName()); + + public static void PKCS12ToPem(final String cerFile, final String password) throws Exception { + char[] pass = password.toCharArray(); + try { + java.security.KeyStore ks = java.security.KeyStore.getInstance("PKCS12"); + ks.load(new FileInputStream(cerFile), pass); + String alias = ks.aliases().nextElement(); + logger.error("Alias: " + alias); + Key key = ks.getKey(alias, pass); + Certificate cert = ks.getCertificate(alias); + + WriteCert(cert); + WriteKey(key, pass); + + } catch (Exception ex) { + logger.error("PKCK12 to PEM conversion failed.\n" + ex.getMessage()); + ex.printStackTrace(); + throw ex; + } + } + + public static void WriteCert(Certificate cert) throws IOException { + File certFile = initializeCredentialFile("usercert.pem"); + FileWriter certWriter = new FileWriter(certFile); + PEMWriter pemCertWriter = new PEMWriter(certWriter); + pemCertWriter.writeObject(cert); + pemCertWriter.close(); + certWriter.close(); + //Utils.trySetOwnerOnlyChmod(certFile, true); + //Utils.tryHideFile(globusDir.getAbsolutePath()); + } + + public static void WriteKey(Key key, char[] password) throws IOException { + File keyFile = initializeCredentialFile("userkey.pem"); + FileWriter keyWriter = new FileWriter(keyFile); + PEMWriter pemKeyWriter = new PEMWriter(keyWriter); + Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); + pemKeyWriter.writeObject(key, "DESEDE", password, new SecureRandom());//to sypie + pemKeyWriter.close(); + keyWriter.close(); + // Utils.trySetOwnerOnlyChmod(keyFile, true); + // Utils.tryHideFile(globusDir.getAbsolutePath()); + } + + public static File initializeCredentialFile(String name) throws IOException { + File keyFile = new File(System.getProperty("user.home") + File.separator + ".idrop" + File.separator + name); + //trySetOwnerOnlyChmod(keyFile, false); + return keyFile; + } +// public static void secureCredentialFile(String property) throws IOException { +// File globusDir = new File(System.getProperty(property)).getParentFile(); +// File keyFile = new File(System.getProperty(property)); +// trySetOwnerOnlyChmod(keyFile, true); +// tryHideFile(globusDir.getAbsolutePath()); +// } +// public static void tryHideFile(String filePath) { +// try { +// PlatformProvider.getProvider().tryHideFile(filePath); +// } catch (Exception ex) { +// logger.debug("Utils.tryHideFile", ex); +// } +// } + /** + * Probably makes the file owner-only accessible and - if specified - read + * only + */ +// public static void trySetOwnerOnlyChmod(File file, boolean readOnly) { +// try { +// if (file.exists()) { +// PlatformProvider.getProvider().trySetOwnerOnlyChmod(file, readOnly); +// return; +// } +// logger.debug("Utils.trySetOwnerOnlyChmod.0: the specified file doesn't exist:" + file.getAbsolutePath()); +// } catch (IOException ex) { +// logger.debug("Utils.trySetOwnerOnlyChmod.2", ex); +// } catch (InterruptedException ex) { +// logger.debug("Utils.trySetOwnerOnlyChmod.3", ex); +// } +// } +} diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/GssSecurityException.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/GssSecurityException.java new file mode 100644 index 0000000..3078eeb --- /dev/null +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/GssSecurityException.java @@ -0,0 +1,27 @@ +package org.irods.jargon.idrop.desktop.systraygui.gss; +/** + * @author <a href="mailto:michael.russell@aei.mpg.de">Michael Russell</a> + * @version $Id: GssSecurityException.java 5 2006-03-08 15:33:41Z wehrens $ + */ + +/** + * Describes a credential related exception. + */ +public class GssSecurityException extends RuntimeException { + + public GssSecurityException() { + super(); + } + + public GssSecurityException(Throwable ex) { + super(ex); + } + + public GssSecurityException(String message) { + super(message); + } + + public GssSecurityException(String message, Throwable ex) { + super(message, ex); + } +}
\ No newline at end of file diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/GssUtil.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/GssUtil.java new file mode 100644 index 0000000..f171375 --- /dev/null +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/GssUtil.java @@ -0,0 +1,597 @@ +package org.irods.jargon.idrop.desktop.systraygui.gss; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.globus.gsi.GSIConstants; +import org.globus.gsi.GlobusCredential; +import org.globus.gsi.OpenSSLKey; +import org.globus.gsi.X509ExtensionSet; +import org.globus.gsi.bc.BouncyCastleCertProcessingFactory; +import org.globus.gsi.bc.BouncyCastleOpenSSLKey; +import org.globus.gsi.gssapi.GlobusGSSCredentialImpl; +import org.globus.util.Base64; +import org.gridforum.jgss.ExtendedGSSCredential; +import org.gridforum.jgss.ExtendedGSSManager; +import org.ietf.jgss.GSSCredential; +import org.apache.log4j.Logger; +import java.io.*; +import java.security.*; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; + +/* + * Class from Certman project, without some unused functions. + */ +public class GssUtil { + + static Logger log = Logger.getLogger(GssUtil.class.getName()); + /** + * Default credential type: + * <code>GSIConstants.GSI_3_IMPERSONATION_PROXY</code> + * + * @see GSIConstants + */ + public static final int DEFAULT_CREDENTIAL_TYPE = GSIConstants.GSI_3_IMPERSONATION_PROXY; + /** + * Default credential lifetime is the "maximum permitted" credential + * lifetime. See + * <code>ExtendedGSSManager</code> for more information. + * + * @see org.ietf.jgss.GSSCredential + */ + public static final int DEFAULT_CREDENTIAL_LIFETIME = GSSCredential.DEFAULT_LIFETIME; + /** + * Default signature algorithm: "MD5WithRSA" + */ + /** + * The Java security provider is determined during initialization of this + * utility. The default will be + * <code>BouncyCastle</code> if one is not already set. + */ + private static Provider provider = null; + /** + * The X509 + * <code>CertificateFactory</code> is determined during initialization of + * this utility and depends on which security provider is enabled for this + * utility. The default will be the + * <code>BouncyCastle</code> certificate factory if one is not already set. + */ + private static CertificateFactory certificateFactory = null; + /** + * Indicates whether this utility has been initialized or not. + */ + private static boolean isInited = false; + private static KeyPair keyPair = null; + + public static KeyPair getKeyPair() { + return keyPair; + } + + /** + * Creates a GSS credential for the system user under which this application + * is running. + * + * @return The default system user GSS credential. + * @throws org.vinetoolkit.certman.spi.GssSecurityException If an error + * occurs while retrieving the GSS credential + */ + public static GSSCredential createDefaultSystemUserGssCredential() throws GssSecurityException { + try { + log.info("Creating default GSS credential for environment "); + GlobusCredential credential = GlobusCredential.getDefaultCredential(); + return new GlobusGSSCredentialImpl(credential, + GSSCredential.INITIATE_AND_ACCEPT); + } catch (Exception e) { + log.error("Unable to create default GSS credential for environment", e); + throw new GssSecurityException(e); + } + } + + /** + * Creates a GSS credential stored in the given proxy file. + * + * @param file The proxy file + * @return The GSS credential + * @throws GssSecurityException If an error occurs while creating the GSS + * credential + */ + public static GSSCredential createCredentialFromProxyFile(File file) throws GssSecurityException { + return createCredentialFromProxyFileTime(file, DEFAULT_CREDENTIAL_LIFETIME); + } + + /** + * Creates a GSS credential from the given proxy file for the given + * lifetime. + * + * @param proxyFile The proxy file + * @param time The credential lifetime + * @return The GSS credential + * @throws GssSecurityException If an error occurs while creating the GSS + * credential + */ + public static GSSCredential createCredentialFromProxyFileTime(File proxyFile, int time) throws GssSecurityException { + FileInputStream in = null; + try { + + // Make sure we're initialized + init(); + + log.info("Creating GSS credential with proxy file " + proxyFile.getPath()); + byte[] data = new byte[(int) proxyFile.length()]; + in = new FileInputStream(proxyFile); + // read in the credential data + in.read(data); + in.close(); + ExtendedGSSManager manager = (ExtendedGSSManager) ExtendedGSSManager.getInstance(); + if (time <= 0) { + time = DEFAULT_CREDENTIAL_LIFETIME; + } + return manager.createCredential(data, + ExtendedGSSCredential.IMPEXP_OPAQUE, + time, + null, // use default mechanism - GSI + GSSCredential.INITIATE_AND_ACCEPT); + } catch (Exception e) { + log.error("Unable to create GSS credential with " + proxyFile); + throw new GssSecurityException(e); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception ex) { + } + } + } + } + + /** + * Creates a GSS credential from the given proxy file for the given + * lifetime. + * + * @param data The proxy file + * @return The GSS credential + * @throws GssSecurityException If an error occurs while creating the GSS + * credential + */ + public static GSSCredential createCredentialFromProxyFileTime(byte[] data) throws GssSecurityException { + return createCredentialFromData(data, DEFAULT_CREDENTIAL_LIFETIME); + } + + /** + * Creates a GSS credential from the given proxy file for the given + * lifetime. + * + * @param data The proxy data + * @param time The credential lifetime + * @return The GSS credential + * @throws GssSecurityException If an error occurs while creating the GSS + * credential + */ + public static GSSCredential createCredentialFromData(byte[] data, int time) throws GssSecurityException { + try { + + // Make sure we're initialized + init(); + + log.info("Creating GSS credential with data " + data.length); + ExtendedGSSManager manager = (ExtendedGSSManager) ExtendedGSSManager.getInstance(); + if (time <= 0) { + time = DEFAULT_CREDENTIAL_LIFETIME; + } + return manager.createCredential(data, + ExtendedGSSCredential.IMPEXP_OPAQUE, + time, + null, // use default mechanism - GSI + GSSCredential.INITIATE_AND_ACCEPT); + } catch (Exception e) { + log.error("Unable to create GSS credential with data " + data.length, e); + throw new GssSecurityException(e); + } + } + + /** + * Creates a GSS credential from the given certificate file and private key + * file paths lasting for the maximum permitted lifetime. + * + * @param certFilePath The path to the certificate file + * @param keyFilePath The path to the private key file + * @return The GSS credential + * @throws GssSecurityException If an error occurs while creating the GSS + * credential + */ + public static GSSCredential createCredentialFromCertKey(String certFilePath, String keyFilePath) + throws GssSecurityException { + return createCredentialFromCertKeyTime(certFilePath, keyFilePath, DEFAULT_CREDENTIAL_LIFETIME); + } + + public static GSSCredential createCredentialFromCertKeyTime(String certFilePath, String keyFilePath, int time) + throws GssSecurityException { + return createCredentialFromCertKeyPassTime(certFilePath, keyFilePath, null, time); + } + + /** + * Creates a GSS credential from the given certificate file and private key + * file paths and private key password lasting for the maximum permitted + * lifetime. + * + * @param certFilePath The path to the certificate file + * @param keyFilePath The path to the private key file + * @param password The private key password + * @return The GSS credential + * @throws GssSecurityException If an error occurs while creating the GSS + * credential + */ + public static GSSCredential createCredentialFromCertKeyPass(String certFilePath, String keyFilePath, String password) + throws GssSecurityException { + return createCredentialFromCertKeyPassTime(certFilePath, keyFilePath, password, 0); + } + + /** + * Creates a GSS credential from the given certificate file and private key + * file paths and private key password lasting for the maximum permitted + * lifetime. + * + * @param certFilePath The path to the certificate file + * @param keyFilePath The path to the private key file + * @param password The private key password + * @param proxyType type of the proxy + * @return The GSS credential + * @throws GssSecurityException If an error occurs while creating the GSS + * credential + */ + public static GSSCredential createCredentialFromCertKeyPass(String certFilePath, String keyFilePath, String password, int proxyType) + throws GssSecurityException { + return createCredentialFromCertKeyPassTime(certFilePath, keyFilePath, password, 0, proxyType); + } + + public static GSSCredential createCredentialFromCertKeyPassTime(String certFilePath, String keyFilePath, String password, int time) + throws GssSecurityException { + return createCredentialFromCertKeyPassTime(certFilePath, keyFilePath, password, time, DEFAULT_CREDENTIAL_TYPE); + } + + public static GSSCredential createCredentialFromCertKeyPassTime(String certFilePath, String keyFilePath, String password, int time, int proxyType) + throws GssSecurityException { + try { + + // Make sure we're initialized + init(); + + GlobusCredential cred = null; + PrivateKey privateKey = loadPrivateKey(keyFilePath, password); + X509Certificate[] certificates = new X509Certificate[]{loadCertificate(certFilePath)}; + BouncyCastleCertProcessingFactory factorybc = + BouncyCastleCertProcessingFactory.getDefault(); + X509ExtensionSet extSet = null; + log.debug("Creating GSS credential"); + cred = factorybc.createCredential(certificates, + privateKey, + 512, + time, + proxyType, + extSet); + log.debug("createCredentialFromCertKeyPassTime() cred \n" + cred.toString()); + GSSCredential gsscred = new GlobusGSSCredentialImpl(cred, + GSSCredential.INITIATE_AND_ACCEPT); + return gsscred; + } catch (Exception e) { + log.error("Unable to create GSS credential with " + certFilePath + " and " + keyFilePath + ". Error message: " + e.getMessage()); + throw new GssSecurityException(e); + } + + } + + public static GSSCredential createCredentialFromCertKeyPassTime(X509Certificate publicCert, PrivateKey key, String password, int time, int proxyType) + throws GssSecurityException { + try { + + // Make sure we're initialized + init(); + + GlobusCredential cred = null; + X509Certificate[] certificates = new X509Certificate[]{publicCert}; + BouncyCastleCertProcessingFactory factorybc = + BouncyCastleCertProcessingFactory.getDefault(); + X509ExtensionSet extSet = null; + log.debug("Creating GSS credential"); + cred = factorybc.createCredential(certificates, + key, + 512, + time, + proxyType, + extSet); + log.debug("createCredentialFromCertKeyPassTime() cred \n" + cred.toString()); + GSSCredential gsscred = new GlobusGSSCredentialImpl(cred, + GSSCredential.INITIATE_AND_ACCEPT); + return gsscred; + } catch (Exception e) { + log.error("Unable to create GSS credential with " + publicCert + " and " + key + ". Error message: " + e.getMessage()); + throw new GssSecurityException(e); + } + + } + + public static GlobusCredential createCredentialFromKeystorePassTime(String keystoreFilePath, String password, String alias, int time, int proxyType) + throws GssSecurityException { + try { + + // Make sure we're initialized + init(); + + GlobusCredential cred = null; + PrivateKey privateKey = loadPrivateKey(keystoreFilePath, alias, password); + X509Certificate[] certificates = new X509Certificate[]{loadCertificateFromKeystore(keystoreFilePath, alias, password)}; + BouncyCastleCertProcessingFactory factorybc = + BouncyCastleCertProcessingFactory.getDefault(); + X509ExtensionSet extSet = null; + log.debug("Creating GSS credential"); + cred = factorybc.createCredential(certificates, + privateKey, + 512, + time, + proxyType, + extSet); + log.debug("createCredentialFromCertKeyPassTime() cred: " + cred.toString()); + log.debug("createCredentialFromCertKeyPassTime() cred class: " + cred.getClass()); + /*GSSCredential gsscred = new GlobusGSSCredentialImpl(cred, + GSSCredential.INITIATE_AND_ACCEPT); + return gsscred; */ + return cred; + } catch (Exception e) { + log.error("Unable to create GSS credential with keystore: " + keystoreFilePath + ". Error message: " + e.getMessage()); + throw new GssSecurityException(e); + } + + } + + public static X509Certificate loadCertificate(String filePath) throws GssSecurityException { + + + boolean isCert = false; + X509Certificate cert = null; + + String line; + StringBuffer buff = new StringBuffer(); + + try { + + // Make sure we're inited + init(); + + BufferedReader reader = new BufferedReader(new FileReader(filePath)); + while ((line = reader.readLine()) != null) { + if (line.indexOf("BEGIN CERTIFICATE") != -1) { + isCert = true; + } else if (isCert && line.indexOf("END CERTIFICATE") != -1) { + byte[] data = Base64.decode(buff.toString().getBytes()); + cert = loadCertificate(new ByteArrayInputStream(data)); + } else if (isCert) { + buff.append(line); + } + } + reader.close(); + } catch (Exception e) { + log.error("Error loading X509 certificate from file " + filePath, e); + throw new GssSecurityException(e); + } + + if (cert == null) { + log.error("No data found in X509 certificate from file " + filePath); + throw new GssSecurityException("Certificate data not found."); + } + + return cert; + } + + /** + * Deserializes the X509 certificate stored in the given file path + * + * @param keystoreFilePath The X509 certificate file path + * @return The X509 certificate + * @throws GssSecurityException If an error occurs during deserialization + */ + public static X509Certificate loadCertificateFromKeystore(String keystoreFilePath, String alias, String password) throws GssSecurityException { + boolean isCert = false; + X509Certificate cert = null; + + String line; + StringBuffer buff = new StringBuffer(); + + try { + + // Make sure we're inited + init(); + + KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); + log.debug("GssUtil: loadCertificateFromKeystore() load keystore " + keystoreFilePath); + + FileInputStream fis = null; + try { + fis = new FileInputStream(keystoreFilePath); + ks.load(fis, password.toCharArray()); + } finally { + if (fis != null) { + fis.close(); + } + } + log.debug("GssUtil: loadCertificateFromKeystore() keystore loaded: " + ks); + + cert = (X509Certificate) ks.getCertificate(alias); + + log.debug("GssUtil: loadCertificateFromKeystore() cert loaded: " + cert); + + } catch (Exception e) { + log.error("Error loading X509 certificate from file " + keystoreFilePath, e); + throw new GssSecurityException(e); + } + + if (cert == null) { + log.error("No data found in X509 certificate from file " + keystoreFilePath); + throw new GssSecurityException("Certificate data not found."); + } + + return cert; + } + + /** + * Deserializes the X509 certificate stored in the given input stream + * + * @param in The input stream + * @return The X509 certificate + * @throws GssSecurityException If an error occurs during deserialization + */ + public static X509Certificate loadCertificate(InputStream in) throws GeneralSecurityException { + return (X509Certificate) getCertificateFactory().generateCertificate(in); + } + + /** + * Returns the private key from the given file path using the given + * password. + * + * @param keyFile The private key file path + * @param password The password + * @return The private key + * @throws GssSecurityException If an error occurs while retrieving the + * private key + */ + public static PrivateKey loadPrivateKey(String keyFile, String password) throws GssSecurityException { + try { + + // Make sure we're inited + init(); + + OpenSSLKey key = new BouncyCastleOpenSSLKey(keyFile); + if (key.isEncrypted()) { + key.decrypt(password); + } + return key.getPrivateKey(); + } catch (IOException e) { + log.error("Failed to load private key ", e); + throw new GssSecurityException("Failed to load private key ", e); + } catch (GeneralSecurityException e) { + log.error("Looks like wrong pass phrase. Error message: " + e.getMessage()); + throw new GssSecurityException(e); + } + } + + /** + * Returns the private key from the given file path to keystore using the + * given password. + * + * @param keyStoreFile The private key file path + * @param alias Alias + * @param password The password + * @return The private key + * @throws GssSecurityException If an error occurs while retrieving the + * private key + */ + public static PrivateKey loadPrivateKey(String keyStoreFile, String alias, String password) throws GssSecurityException { + try { + + // Make sure we're inited + init(); + + KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); + log.debug("GssUtil: loadPrivateKey() load keystore " + keyStoreFile); + + FileInputStream fis = null; + try { + fis = new FileInputStream(keyStoreFile); + ks.load(fis, password.toCharArray()); + } finally { + if (fis != null) { + fis.close(); + } + } + log.debug("GssUtil: loadPrivateKey() keystore loaded: " + ks); + KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(password.toCharArray()); + KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, pp); + PrivateKey myPrivateKey = pkEntry.getPrivateKey(); + log.debug("GssUtil: loadPrivateKey() private key loaded: " + myPrivateKey); + + return myPrivateKey; + } catch (IOException e) { + log.error("Failed to load private key ", e); + throw new GssSecurityException("Failed to load private key ", e); + } catch (GeneralSecurityException e) { + log.error("Looks like wrong pass phrase. Error message: " + e.getMessage()); + throw new GssSecurityException("Wrong pass phrase", e); + } + } + + public static Provider getProvider() throws GeneralSecurityException { + // Make sure we're initialized + init(); + return provider; + } + + /** + * Sets the security provider for this utility. This method will also + * reconfigure the certificate factory used by this utility. + * + * @param provider The security provider + * @throws java.security.GeneralSecurityException If an error occurs getting + * a new certificate factory for the provider. + */ + public static void setProvider(Provider provider) throws GeneralSecurityException { + GssUtil.provider = provider; + // TODO: Should we assume the provider was already added to the JVM? + certificateFactory = CertificateFactory.getInstance("X.509", provider); + } + + /** + * Returns the certificate factory configured for use by this utility. This + * method will initialize this utility if hasn't already been initialized + * + * @return The certificate factory + * @throws java.security.GeneralSecurityException If an error occurs while + * initializing this utilty. + */ + public static CertificateFactory getCertificateFactory() throws GeneralSecurityException { + // Make sure we're initialized + init(); + return certificateFactory; + } + + /** + * Sets the certificate factory for this utilty. This method will also + * reconfigure the security provider used by this utility. + * + * @param certificateFactory The certificate factory + */ + public static void setCertificateFactory(CertificateFactory certificateFactory) { + GssUtil.certificateFactory = certificateFactory; + GssUtil.provider = certificateFactory.getProvider(); + // TODO: Should we assume the provider was already added to the JVM? + } + + /** + * Initializes this utility. Determines the Java security provider and + * certificate factory to use for handling GSS certificates. + * + * @throws java.security.GeneralSecurityException If an error occurs during + * initialization. + */ + public static void init() throws GeneralSecurityException { + // Invoked by credential manager at startup, so don't need to synchronize + if (!isInited) { + log.info("Initializing GSS security"); + if (certificateFactory == null) { + if (provider == null) { + provider = new BouncyCastleProvider(); + if (Security.getProvider(provider.getName()) == null) { + log.info("Registering security provider: " + provider.getName()); + Security.addProvider(provider); + } else { + provider = Security.getProvider(provider.getName()); + log.info("Obtaining security provider: " + provider.getName()); + } + // TODO: Should we just pass the provider here or what (was originally copied from cog)? + } + log.info("Creating certificate factory with security provider: " + provider); + certificateFactory = CertificateFactory.getInstance("X.509", provider); + } else { + } + + isInited = true; + } + } +} diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/ZipFileExtractor.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/ZipFileExtractor.java new file mode 100644 index 0000000..1fb7554 --- /dev/null +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/gss/ZipFileExtractor.java @@ -0,0 +1,111 @@ +package org.irods.jargon.idrop.desktop.systraygui.gss; + +import java.io.*; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import org.slf4j.LoggerFactory; + +/* + * Class based on certMan, used to extract cerificates. + */ +public class ZipFileExtractor { + + public static org.slf4j.Logger log = LoggerFactory.getLogger(ZipFileExtractor.class); + + public static void unzipFile(String zipFileName, + String zipFileDest) throws IOException { + log.info("Unzipping " + zipFileName + " to " + zipFileDest + " with this class loader"); + ClassLoader classLoader = ZipFileExtractor.class.getClassLoader(); + unzipFile(classLoader, zipFileName, zipFileDest); + } + + public static void unzipFile(ClassLoader classLoader, + String zipFileName, + String zipFileDest) throws IOException { + // Unzip with our class loader + extractZipFile(classLoader, zipFileName, zipFileDest); + // Unzip the file + unzip(zipFileDest); + } + + public static void extractZipFile(String zipFileName, + String zipFileDest) throws IOException { + log.info("Extracting " + zipFileName + " to " + zipFileDest + " with this class loader"); + ClassLoader classLoader = ZipFileExtractor.class.getClassLoader(); + extractZipFile(classLoader, zipFileName, zipFileDest); + } + + public static void extractZipFile(ClassLoader classLoader, + String zipFileName, + String zipFileDest) throws IOException { + + log.info("Extracting " + zipFileName + " from class loader to " + zipFileDest); + + try { + log.info("Getting input stream for " + zipFileName); + InputStream inputStream = classLoader.getResourceAsStream(zipFileName); + if (inputStream == null) { + throw new IOException("Unable to get input stream for " + zipFileName + " from class loader!"); + } + log.info("Creating file output stream for " + zipFileDest); + OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(zipFileDest)); + log.info("Output stream created."); + byte[] buffer = new byte[2048]; + for (;;) { + int nBytes = inputStream.read(buffer); + if (nBytes <= 0) { + break; + } + outputStream.write(buffer, 0, nBytes); + } + outputStream.flush(); + outputStream.close(); + inputStream.close(); + log.info(zipFileName + " has been unloaded to " + zipFileDest); + } catch (IOException e) { + log.error("Failed to extract " + zipFileName + " to " + zipFileDest); + e.printStackTrace(); + throw e; + } + } + + public static void unzip(String path) { + Enumeration entries; + ZipFile zipFile; + String dir = new File(path).getParent(); + + try { + zipFile = new ZipFile(path); + entries = zipFile.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = (ZipEntry) entries.nextElement(); + String entryDest = dir + File.separator + entry.getName(); + if (entry.isDirectory()) { + // Assume directories are stored parents first then children. + log.error("Extracting directory: " + entry.getName()); + // This is not robust, just for demonstration purposes. + (new File(entryDest)).mkdir(); + } else { + log.error("Extracting file: " + entry.getName()); + copyInputStream(zipFile.getInputStream(entry), + new BufferedOutputStream(new FileOutputStream(entryDest))); + } + } + zipFile.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + + public static void copyInputStream(InputStream in, OutputStream out) + throws IOException { + byte[] buffer = new byte[1024]; + int len; + while ((len = in.read(buffer)) >= 0) { + out.write(buffer, 0, len); + } + in.close(); + out.close(); + } +}
\ No newline at end of file diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.form b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.form index 199862b..87f7d7c 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.form +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.form @@ -17,6 +17,7 @@ </Properties> <SyntheticProperties> <SyntheticProperty name="formSizePolicy" type="int" value="1"/> + <SyntheticProperty name="generateCenter" type="boolean" value="false"/> </SyntheticProperties> <Events> <EventHandler event="windowClosing" listener="java.awt.event.WindowListener" parameters="java.awt.event.WindowEvent" handler="formWindowClosing"/> @@ -64,7 +65,7 @@ <Dimension value="[622, 125]"/> </Property> <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[1121, 190]"/> + <Dimension value="[1121, 120]"/> </Property> </Properties> <Constraints> @@ -491,7 +492,7 @@ </Events> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="13" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/> </Constraint> </Constraints> </Component> diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.java index aa45c04..a173b8c 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/iDrop.java @@ -166,7 +166,7 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, IRODSAccount savedAccount = iDropCore.getIrodsAccount(); iDropCore.setIrodsAccount(null); - LoginDialog loginDialog = new LoginDialog(null, iDropCore); + LoginDialog loginDialog = new LoginDialog(null, iDropCore,false); loginDialog.setLocationRelativeTo(null); loginDialog.setVisible(true); @@ -1384,7 +1384,7 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, pnlMainToolbarIcons.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 20, 10, 20)); pnlMainToolbarIcons.setMinimumSize(new java.awt.Dimension(622, 125)); - pnlMainToolbarIcons.setPreferredSize(new java.awt.Dimension(1121, 190)); + pnlMainToolbarIcons.setPreferredSize(new java.awt.Dimension(1121, 120)); pnlMainToolbarIcons.setLayout(new java.awt.GridBagLayout()); btnMainToolbarTree.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon_tree.png"))); // NOI18N @@ -1636,7 +1636,10 @@ public class iDrop extends javax.swing.JFrame implements ActionListener, btnMainToolbarSettings1ActionPerformed(evt); } }); - pnlMainToolbarIcons.add(btnMainToolbarSettings1, new java.awt.GridBagConstraints()); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 13; + gridBagConstraints.gridy = 1; + pnlMainToolbarIcons.add(btnMainToolbarSettings1, gridBagConstraints); pnlMain.add(pnlMainToolbarIcons, java.awt.BorderLayout.PAGE_START); diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java index 1558152..a9e49f9 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java @@ -15,57 +15,62 @@ import org.irods.jargon.transfer.engine.synch.ConflictingSynchException; public interface IdropConfigurationService { -public static final String IDROP_VERSION_FILE_NAME = ".idropVersion"; - -public static final String VERSION_3_1 = "3.1.0.0"; - -public static final String VERSION_NUMBER = "idrop.version"; -public static final String IDROP_PROPS_FILE_NAME = "idrop.properties"; -public static final String FORCE_MODE = "force.mode"; -public static final String FORCE_NO_SYNCH = "force.no.synch"; -public static final String LOGIN_PRESET = "login.preset"; -public static final String SHOW_STARTUP = "show.startup"; -public static final String SHOW_GUI = "idrop.show.gui"; -public static final String DEVICE_NAME = "idrop.device.name"; -// account info for cache -public static final String ACCOUNT_CACHE_HOST = "irods.account.host"; -public static final String ACCOUNT_CACHE_PORT = "irods.account.port"; -public static final String ACCOUNT_CACHE_ZONE = "irods.account.zone"; -public static final String ACCOUNT_CACHE_RESOURCE = "irods.account.resource"; -public static final String ACCOUNT_CACHE_USER_NAME = "irods.account.user"; -public static final String ACCOUNT_CACHE_USER_PASSWORD = "irods.account.password"; -public static final String ACCOUNT_CACHE_USER_SAVE_PASS = "irods.account.savepassword"; -public static final String ACCOUNT_CACHE_ROOT_DIR = "irods.account.root.dir"; -public static final String ACCOUNT_CACHE_LOGIN_MODE = "irods.account.login.mode"; -// for GSI -public static final String ACCOUNT_CACHE_PROXY_LOCATION = "irods.account.gsi.proxy.location"; -public static final String ACCOUNT_CACHE_CERTIFICATES_LOCATION = "irods.account.gsi.certificates.location"; -public static final String ACCOUNT_CACHE_USER_AUTO_GSI = "irods.account.autogsi"; -// /for GSI -public static final String POLICY_AWARE_PROPERTY = "policy.aware"; -public static final String LOOK_AND_FEEL = "idrop.lookandfeel"; -public static final String TRANSFER_ENGINE_RECORD_SUCCESSFUL_FILES = "transferengine.record.successful.files"; -public static final String VERIFY_CHECKSUM_ON_TRANSFER = "transfer.computeandvalidate.checksum"; -public static final String ALLOW_CONNECTION_REROUTING = "transfer.allow.redirects"; -public static final String INTRA_FILE_STATUS_CALLBACKS = "transfer.intra.file.callbacks"; -public static final String IRODS_CONNECTION_TIMEOUT = "socket.timeout"; -public static final String IRODS_PARALLEL_CONNECTION_TIMEOUT = "parallel.socket.timeout"; -public static final String IRODS_PARALLEL_CONNECTION_MAX_THREADS = "transfer.max.parallel.threads"; -public static final String IRODS_PARALLEL_USE_PARALLEL = "transfer.use.parallel"; -public static final String IRODS_PARALLEL_USE_NIO = "transfer.use.nio.for.parallel"; -public static final String IRODS_PARALLEL_USE_POOL = "transfer.use.pool"; -public static final String IRODS_IO_INTERNAL_INPUT_STREAM_BUFFER_SIZE = "jargon.io.internal.input.stream.buffer.size"; -public static final String IRODS_IO_INTERNAL_OUTPUT_STREAM_BUFFER_SIZE = "jargon.io.internal.output.stream.buffer.size"; -public static final String IRODS_IO_INTERNAL_CACHE_BUFFER_SIZE = "jargon.io.internal.cache.buffer.size"; -public static final String IRODS_IO_SEND_INPUT_STREAM_BUFFER_SIZE = "jargon.io.send.input.stream.buffer.size"; -public static final String IRODS_IO_INPUT_TO_OUTPUT_COPY_BUFFER_SIZE = "jargon.io.input.to.output.copy.byte.buffer.size"; -public static final String IRODS_IO_LOCAL_INPUT_STREAM_BUFFER_SIZE = "jargon.io.local.input.stream.buffer.size"; -public static final String IRODS_IO_LOCAL_OUTPUT_STREAM_BUFFER_SIZE = "jargon.io.local.output.stream.buffer.size"; -public static final String IRODS_IO_PUT_BUFFER_SIZE = "jargon.put.buffer.size"; -public static final String IRODS_IO_GET_BUFFER_SIZE = "jargon.get.buffer.size"; -public static final String IRODS_CONNECTION_RESTART = "transfer.reconnect"; -public static final String IDROP_ENABLE_RESC_EDIT = "idrop.settings.enable_default_resc_edit"; -public static final String IDROP_PUBLIC_LINK_SERVICE = "idrop.public.link.service.url"; + public static final String IDROP_VERSION_FILE_NAME = ".idropVersion"; + + public static final String VERSION_3_1 = "3.1.0.0"; + + public static final String VERSION_NUMBER = "idrop.version"; + public static final String IDROP_PROPS_FILE_NAME = "idrop.properties"; + public static final String FORCE_MODE = "force.mode"; + public static final String FORCE_NO_SYNCH = "force.no.synch"; + public static final String LOGIN_PRESET = "login.preset"; + public static final String SHOW_STARTUP = "show.startup"; + public static final String SHOW_GUI = "idrop.show.gui"; + public static final String DEVICE_NAME = "idrop.device.name"; + // account info for cache + public static final String ACCOUNT_CACHE_HOST = "irods.account.host"; + public static final String ACCOUNT_CACHE_PORT = "irods.account.port"; + public static final String ACCOUNT_CACHE_ZONE = "irods.account.zone"; + public static final String ACCOUNT_CACHE_RESOURCE = "irods.account.resource"; + public static final String ACCOUNT_CACHE_USER_NAME = "irods.account.user"; + public static final String ACCOUNT_CACHE_USER_PASSWORD = "irods.account.password"; + public static final String ACCOUNT_CACHE_USER_SAVE_PASS = "irods.account.savepassword"; + public static final String ACCOUNT_CACHE_ROOT_DIR = "irods.account.root.dir"; + public static final String ACCOUNT_CACHE_LOGIN_MODE = "irods.account.login.mode"; + // for GSI + public static final String ACCOUNT_CACHE_PROXY_LOCATION = "irods.account.gsi.proxy.location"; + public static final String ACCOUNT_CACHE_CERTIFICATES_LOCATION = "irods.account.gsi.certificates.location"; + public static final String ACCOUNT_CACHE_USER_AUTO_GSI = "irods.account.autogsi"; + public static final String ACCOUNT_CACHE_CERT_PEM_LOCATION = "irods.account.gsi.cert.pem.location"; + public static final String ACCOUNT_CACHE_KEY_PEM_LOCATION = "irods.account.gsi.key.pem.location"; + public static final String ACCOUNT_CACHE_CERT_P12_LOCATION = "irods.account.gsi.cert.p12.location"; + public static final String ACCOUNT_CACHE_CERT_PASSWORD = "irods.account.gsi.cert.password"; + public static final String ACCOUNT_CACHE_CERT_LOGIN_MODE = "irods.account.gsi.cert.login.mode"; + // /for GSI + public static final String POLICY_AWARE_PROPERTY = "policy.aware"; + public static final String LOOK_AND_FEEL = "idrop.lookandfeel"; + public static final String TRANSFER_ENGINE_RECORD_SUCCESSFUL_FILES = "transferengine.record.successful.files"; + public static final String VERIFY_CHECKSUM_ON_TRANSFER = "transfer.computeandvalidate.checksum"; + public static final String ALLOW_CONNECTION_REROUTING = "transfer.allow.redirects"; + public static final String INTRA_FILE_STATUS_CALLBACKS = "transfer.intra.file.callbacks"; + public static final String IRODS_CONNECTION_TIMEOUT = "socket.timeout"; + public static final String IRODS_PARALLEL_CONNECTION_TIMEOUT = "parallel.socket.timeout"; + public static final String IRODS_PARALLEL_CONNECTION_MAX_THREADS = "transfer.max.parallel.threads"; + public static final String IRODS_PARALLEL_USE_PARALLEL = "transfer.use.parallel"; + public static final String IRODS_PARALLEL_USE_NIO = "transfer.use.nio.for.parallel"; + public static final String IRODS_PARALLEL_USE_POOL = "transfer.use.pool"; + public static final String IRODS_IO_INTERNAL_INPUT_STREAM_BUFFER_SIZE = "jargon.io.internal.input.stream.buffer.size"; + public static final String IRODS_IO_INTERNAL_OUTPUT_STREAM_BUFFER_SIZE = "jargon.io.internal.output.stream.buffer.size"; + public static final String IRODS_IO_INTERNAL_CACHE_BUFFER_SIZE = "jargon.io.internal.cache.buffer.size"; + public static final String IRODS_IO_SEND_INPUT_STREAM_BUFFER_SIZE = "jargon.io.send.input.stream.buffer.size"; + public static final String IRODS_IO_INPUT_TO_OUTPUT_COPY_BUFFER_SIZE = "jargon.io.input.to.output.copy.byte.buffer.size"; + public static final String IRODS_IO_LOCAL_INPUT_STREAM_BUFFER_SIZE = "jargon.io.local.input.stream.buffer.size"; + public static final String IRODS_IO_LOCAL_OUTPUT_STREAM_BUFFER_SIZE = "jargon.io.local.output.stream.buffer.size"; + public static final String IRODS_IO_PUT_BUFFER_SIZE = "jargon.put.buffer.size"; + public static final String IRODS_IO_GET_BUFFER_SIZE = "jargon.get.buffer.size"; + public static final String IRODS_CONNECTION_RESTART = "transfer.reconnect"; + public static final String IDROP_ENABLE_RESC_EDIT = "idrop.settings.enable_default_resc_edit"; + public static final String IDROP_PUBLIC_LINK_SERVICE = "idrop.public.link.service.url"; Properties bootstrapConfigurationAndMergePropertiesFromLocalAndClasspath() throws IdropException; @@ -96,7 +101,7 @@ public static final String IDROP_PUBLIC_LINK_SERVICE = "idrop.public.link.servic * {@link IRODSAccount} to be cached * @throws IdropException */ - void saveLogin(final IRODSAccount irodsAccount, boolean savePassword) throws IdropException; + void saveLogin(final IRODSAccount irodsAccount) throws IdropException; void removeConfigProperty(final String key) throws IdropException; diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java index 264f361..cd23864 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java @@ -250,7 +250,7 @@ public class IdropConfigurationServiceImpl implements IdropConfigurationService } @Override - public void saveLogin(final IRODSAccount irodsAccount, boolean savePassword) + public void saveLogin(final IRODSAccount irodsAccount) throws IdropException { log.info("save login"); if (irodsAccount == null) { @@ -272,17 +272,7 @@ public class IdropConfigurationServiceImpl implements IdropConfigurationService irodsAccount.getUserName()); updateConfig(IdropConfigurationService.ACCOUNT_CACHE_LOGIN_MODE, irodsAccount.getAuthenticationScheme().name()); - if(savePassword){ - updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_PASSWORD, - irodsAccount.getPassword()); - updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_SAVE_PASS, - "true"); - }else{ - updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_PASSWORD, - ""); - updateConfig(IdropConfigurationService.ACCOUNT_CACHE_USER_SAVE_PASS, - "false"); - } + log.info("config updated"); } diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java index 7080ebd..bc3281c 100644 --- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java +++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java @@ -1,5 +1,5 @@ package org.irods.jargon.idrop.desktop.systraygui.utils; public final class Version { public static String VERSION="2.0.1-SNAPSHOT"; - public static String BUILD_TIME="20130901-0147"; + public static String BUILD_TIME="20130829-1603"; } diff --git a/idrop-swing/src/main/resources/certificates.zip b/idrop-swing/src/main/resources/certificates.zip Binary files differnew file mode 100644 index 0000000..cb7d4c5 --- /dev/null +++ b/idrop-swing/src/main/resources/certificates.zip diff --git a/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg-logo-large-color2.png b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg-logo-large-color2.png Binary files differnew file mode 100644 index 0000000..0447e30 --- /dev/null +++ b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg-logo-large-color2.png diff --git a/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg_logo.png b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg_logo.png Binary files differnew file mode 100644 index 0000000..67b285d --- /dev/null +++ b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg_logo.png diff --git a/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg_logo_data_logo.png b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg_logo_data_logo.png Binary files differnew file mode 100644 index 0000000..67b285d --- /dev/null +++ b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/images/qcg_logo_data_logo.png diff --git a/idrop-web/grails-app/conf/Config.groovy b/idrop-web/grails-app/conf/Config.groovy index db1bb49..3577777 100755 --- a/idrop-web/grails-app/conf/Config.groovy +++ b/idrop-web/grails-app/conf/Config.groovy @@ -18,9 +18,14 @@ environments { production { grails.serverURL = "http://iren-web.renci.org:8080/${appName}" } production { grails.serverURL = "http://srbbrick15.ucsd.edu:1525//${appName}" } production { grails.serverURL = "http://www.irods.org" } */ + production { grails.serverURL = "http://elder10.man.poznan.pl:8090/${appName}" } + development { grails.serverURL = "http://elder10.man.poznan.pl:8090/${appName}" } + test { grails.serverURL = "http://elder10.man.poznan.pl:8090/${appName}" } +/* production { grails.serverURL = "http://localhost:8080/${appName}" } development { grails.serverURL = "http://localhost:8080/${appName}" } test { grails.serverURL = "http://localhost:8080/${appName}" } +*/ } /* diff --git a/idrop-web/grails-app/conf/Config.groovy~ b/idrop-web/grails-app/conf/Config.groovy~ index 97def3b..749417f 100755 --- a/idrop-web/grails-app/conf/Config.groovy~ +++ b/idrop-web/grails-app/conf/Config.groovy~ @@ -26,13 +26,13 @@ environments { /* * 2) If you want to set things up so that the idrop web browser automatically points to a certain grid (i.e. only user ID and password show, then do something like below. * Take the following outside of the comment block and configure here - * + */ idrop.config.preset.host="elder10.man.poznan.pl" idrop.config.preset.port="1247" idrop.config.preset.zone="testZone" idrop.config.preset.resource="" idrop.config.preset.authScheme="Standard" - */ + /* @@ -61,7 +61,7 @@ idrop.config.idrop.lite.use.applet.dir=false * idrop.config.idrop.jnlp="https://lifetime-library.ils.unc.edu/llclient/idrop.jnlp" */ -idrop.config.idrop.jnlp="http://localhost:8080/idrop-web/idrop.jnlp" +idrop.config.idrop.jnlp="http://elder10.man.poznan.pl:8080/idrop-web/idrop.jnlp" //drop.config.idrop.jnlp="http://iren-web.renci.org/idrop-snapshot/idrop.jnlp" //idrop.config.idrop.jnlp="http://http://iren-web.renci.org/idrop.jnlp" /* diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy index ece2f82..1edb684 100755 --- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy +++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy @@ -43,6 +43,7 @@ class MetadataController { irodsAccessObjectFactory.closeSession() } + def index = { } /** * Load the metadata details area, this will show the main form, and subsequently, the table will be loaded via AJAX */ diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataSearchController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataSearchController.groovy new file mode 100644 index 0000000..f9dd3fb --- /dev/null +++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataSearchController.groovy @@ -0,0 +1,267 @@ +package org.irods.mydrop.controller + +import org.apache.commons.collections.FactoryUtils +import org.apache.commons.collections.ListUtils +import org.irods.jargon.core.connection.IRODSAccount +import org.irods.jargon.core.pub.CollectionAO +import org.irods.jargon.core.pub.CollectionAndDataObjectListAndSearchAO; +import org.irods.jargon.core.pub.IRODSAccessObjectFactory +import org.irods.jargon.core.query.AVUQueryElement +import org.irods.jargon.core.query.AVUQueryOperatorEnum +import org.irods.jargon.core.query.CollectionAndDataObjectListingEntry; +import org.irods.jargon.core.query.MetaDataAndDomainData +import org.irods.jargon.core.query.AVUQueryElement.AVUQueryPart +import org.irods.jargon.core.pub.DataObjectAO; + + + +import java.util.ArrayList; + +class MetadataSearchController { + + IRODSAccessObjectFactory irodsAccessObjectFactory + IRODSAccount irodsAccount + + /** + * Interceptor grabs IRODSAccount from the SecurityContextHolder + */ + def beforeInterceptor = [action:this.&auth] + + def auth() { + if(!session["SPRING_SECURITY_CONTEXT"]) { + redirect(controller:"login", action:"login") + return false + } + irodsAccount = session["SPRING_SECURITY_CONTEXT"] + } + + + def afterInterceptor = { + log.debug("closing the session") + irodsAccessObjectFactory.closeSession() + } + + def index = { + + } + + /** + * Search iRODS metadata + * Here the data from inputs is posted. + */ + def search (MetadataSearchCommand metadataSearchCommand) { + + CollectionAndDataObjectListAndSearchAO collectionAndDataObjectListAndSearchAO = irodsAccessObjectFactory.getCollectionAndDataObjectListAndSearchAO(irodsAccount) + DataObjectAO dataObjAO = irodsAccessObjectFactory.getDataObjectAO(irodsAccount) //dataObjects + CollectionAO collectionAO = irodsAccessObjectFactory.getCollectionAO(irodsAccount) //folders + + List<CollectionAndDataObjectListingEntry> results = new ArrayList<CollectionAndDataObjectListingEntry>() + List<MetaDataAndDomainData> queryResults = new ArrayList<MetaDataAndDomainData>() + List<MetaDataAndDomainData> finalResults = new ArrayList<MetaDataAndDomainData>() + + int counter = -1 + + for(AVUNode avuNode in metadataSearchCommand.AVUNodes) { //for every condition node do: + if(avuNode.andOr == "Every") { //if every condition has to be fulfilled + queryResults = connectedByAnd(avuNode, dataObjAO, collectionAO) + } else { //if at least one condition has to be fulfilled + queryResults = connectedByOr(avuNode, dataObjAO, collectionAO) + } + if(counter >= 0) { //if there's more than one node, check operator between nodes + log.info("OPERATOR:" + metadataSearchCommand.AVUOps[counter]) + if (metadataSearchCommand.AVUOps[counter] == "AND") { + finalResults = intersectLists(finalResults, queryResults) + } else { + finalResults = sumOfLists(finalResults, queryResults) + } + } else { + finalResults = sumOfLists(finalResults, queryResults) + } + counter++ + } + + + + for (MetaDataAndDomainData data : finalResults){ + results.add(collectionAndDataObjectListAndSearchAO.getCollectionAndDataObjectListingEntryAtGivenAbsolutePath(data.domainObjectUniqueName)) + } + + + render(view:"/search/searchResult", model:[results:results]) + } + //method used to finding files as well as folders matching every metadata query, final result is the sum of these results + private def connectedByAnd(AVUNode avuNode, DataObjectAO dataObjAO, CollectionAO collectionAO) { + List<MetaDataAndDomainData> queryRes1 = collectionAO.findMetadataValuesByMetadataQuery(createAVUQ(avuNode), true) //match folders names + List<MetaDataAndDomainData> queryRes2 = dataObjAO.findMetadataValuesByMetadataQuery(createAVUQ(avuNode)) //match dataObj names + List<MetaDataAndDomainData> queryResults = ListUtils.sum(queryRes1, queryRes2) //connect lists + + queryResults + } + + //method used to finding files as well as folders matching AT LEAST ONE metadata query + private def connectedByOr(AVUNode avuNode, DataObjectAO dataObjAO, CollectionAO collectionAO) { + List<AVUQueryElement> metadataQuery = new ArrayList<AVUQueryElement>() + List<MetaDataAndDomainData> finalResult = new ArrayList<MetaDataAndDomainData>() + List<MetaDataAndDomainData> queryRes1 = new ArrayList<MetaDataAndDomainData>() + List<MetaDataAndDomainData> queryRes2 = new ArrayList<MetaDataAndDomainData>() + List<MetaDataAndDomainData> queryResults = new ArrayList<MetaDataAndDomainData>() + + for(AVUCommand avu in avuNode.AVUs) { + metadataQuery.clear() + metadataQuery.add(AVUQueryElement.instanceForValueQuery(AVUQueryPart.ATTRIBUTE, AVUQueryOperatorEnum.EQUAL, avu.attribute)); + if((avu.value).isNumber() && avu.operator in ["<", "<=", ">="]) //">" + { + metadataQuery.add(AVUQueryElement.instanceForValueQuery(AVUQueryPart.VALUE, chooseNumOperator(avu.operator), avu.value)); + } else { + metadataQuery.add(AVUQueryElement.instanceForValueQuery(AVUQueryPart.VALUE, chooseOperator(avu.operator), avu.value)); + } + + if(!avu.unit.empty){ + metadataQuery.add(AVUQueryElement.instanceForValueQuery(AVUQueryPart.UNITS, AVUQueryOperatorEnum.EQUAL, avu.unit)); + } + + queryRes1 = collectionAO.findMetadataValuesByMetadataQuery(metadataQuery, true) + queryRes2 = dataObjAO.findMetadataValuesByMetadataQuery(metadataQuery) + queryResults = ListUtils.sum(queryRes1, queryRes2) + + finalResult = sumOfLists(finalResult, queryResults) + } + + finalResult //return list without duplicates + + } + + def createAVUQ(AVUNode avuNode) { //create list of metadata queries + + List<AVUQueryElement> metadataQuery = new ArrayList<AVUQueryElement>() + + for(AVUCommand avu in avuNode.AVUs){ + + metadataQuery.add(AVUQueryElement.instanceForValueQuery(AVUQueryPart.ATTRIBUTE, AVUQueryOperatorEnum.EQUAL, avu.attribute)); + if((avu.value).isNumber() && avu.operator in ["<", "<=", ">="]) //">" + { + metadataQuery.add(AVUQueryElement.instanceForValueQuery(AVUQueryPart.VALUE, chooseNumOperator(avu.operator), avu.value)); + } else { + metadataQuery.add(AVUQueryElement.instanceForValueQuery(AVUQueryPart.VALUE, chooseOperator(avu.operator), avu.value)); + } + + if(!avu.unit.empty){ + metadataQuery.add(AVUQueryElement.instanceForValueQuery(AVUQueryPart.UNITS, AVUQueryOperatorEnum.EQUAL, avu.unit)); + } + } + + metadataQuery + } + + //create one list from two ones without duplicates + private def sumOfLists(List<MetaDataAndDomainData> list1, List<MetaDataAndDomainData> list2) { + + boolean alreadyEx = false + + for(MetaDataAndDomainData elem1 in list1) { + alreadyEx = false + for(MetaDataAndDomainData elem2 in list2) { + if(elem1.getDomainObjectUniqueName() == elem2.getDomainObjectUniqueName()) + alreadyEx = true + } + if(!alreadyEx) list2.add(elem1) + } + list2 + } + + + //create list in which there are files and collections occured in both input lists + private def intersectLists(List<MetaDataAndDomainData> list1, List<MetaDataAndDomainData> list2) { + + List<MetaDataAndDomainData> finalList = new ArrayList<MetaDataAndDomainData>() + boolean ex = false + + for(MetaDataAndDomainData elem1 in list1) { + ex = false + for(MetaDataAndDomainData elem2 in list2) { + if(elem1.getDomainObjectUniqueName() == elem2.getDomainObjectUniqueName()) + ex = true + } + if(ex) finalList.add(elem1) + } + finalList + } + + + + def chooseOperator(String op) { + switch(op){ + case "=": + AVUQueryOperatorEnum.EQUAL; + break + case ">": + AVUQueryOperatorEnum.GREATER_THAN; + break + case "<": + AVUQueryOperatorEnum.LESS_THAN; + break + case ">=": + AVUQueryOperatorEnum.GREATER_OR_EQUAL; + break + case "<=": + AVUQueryOperatorEnum.LESS_OR_EQUAL; + break + case "<>": + AVUQueryOperatorEnum.NOT_EQUAL; + break + case "like": + AVUQueryOperatorEnum.LIKE; + break + case "not like": + AVUQueryOperatorEnum.NOT_LIKE; + break + } + } + + def chooseNumOperator(String op) { + switch(op) { + /*case ">": + AVUQueryOperatorEnum.NUM_GREATER_THAN; + break*/ + case "<": + AVUQueryOperatorEnum.NUM_LESS_THAN; + break + case ">=": + AVUQueryOperatorEnum.NUM_GREATER_OR_EQUAL; + break + case "<=": + AVUQueryOperatorEnum.NUM_LESS_OR_EQUAL; + break + } + } + +} + + +//Class which constists of the list of condition nodes and list of operators connecting them +class MetadataSearchCommand { + List <AVUNode> AVUNodes = ListUtils.lazyList([], FactoryUtils.instantiateFactory(AVUNode)) + List <String> AVUOps = ListUtils.lazyList([], FactoryUtils.instantiateFactory(String)) + +} + +//class consisted of AVU + operator +class AVUCommand { + String attribute + String operator //=, <, >, <=, >=, <>, like, not like + String value + String unit + + static constraints = { + attribute(blank:false) + value(blank:false) + } + +} + +//Class consisted of list of conditions and the option (in GUI radiobutton), decripted below +class AVUNode { + List <AVUCommand> AVUs = ListUtils.lazyList([], FactoryUtils.instantiateFactory(AVUCommand)) + String andOr //every condition fulfilled or at least one +} + diff --git a/idrop-web/grails-app/i18n/messages.properties b/idrop-web/grails-app/i18n/messages.properties index ee447a1..f5ce9e6 100755 --- a/idrop-web/grails-app/i18n/messages.properties +++ b/idrop-web/grails-app/i18n/messages.properties @@ -59,6 +59,7 @@ text.length=Size text.login=Login text.logout=Logout text.metadata=Metadata +text.metaSearch=By Metadata text.modified=Modified text.name=Name text.new.folder=New Folder diff --git a/idrop-web/grails-app/views/common/_cssAndJs.gsp b/idrop-web/grails-app/views/common/_cssAndJs.gsp index a516319..cf957dd 100755 --- a/idrop-web/grails-app/views/common/_cssAndJs.gsp +++ b/idrop-web/grails-app/views/common/_cssAndJs.gsp @@ -1,5 +1,6 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><g:layoutTitle default="iDrop-web - iRODS Cloud Browser" /></title> + <link rel="stylesheet" href="${resource(dir:'css',file:'dhx_comboStyle.css')}" /> <link rel="stylesheet" href="${resource(dir:'css',file:'style.css')}" /> <link rel="stylesheet" href="${resource(dir:'css',file:'bootstrap.css')}" /> <link rel="stylesheet" href="${resource(dir:'css',file:'bootstrap-responsive.min.css')}" /> @@ -38,4 +39,4 @@ <g:javascript library="galleria-1.2.6" /> <g:javascript library="jquery.gritter.min" /> <g:javascript library="jquery.opacityrollover" /> - <g:javascript library="superfish" />
\ No newline at end of file + <g:javascript library="superfish" /> diff --git a/idrop-web/grails-app/views/common/_cssAndJs.gsp~ b/idrop-web/grails-app/views/common/_cssAndJs.gsp~ new file mode 100755 index 0000000..a516319 --- /dev/null +++ b/idrop-web/grails-app/views/common/_cssAndJs.gsp~ @@ -0,0 +1,41 @@ +<meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title><g:layoutTitle default="iDrop-web - iRODS Cloud Browser" /></title> + <link rel="stylesheet" href="${resource(dir:'css',file:'style.css')}" /> + <link rel="stylesheet" href="${resource(dir:'css',file:'bootstrap.css')}" /> + <link rel="stylesheet" href="${resource(dir:'css',file:'bootstrap-responsive.min.css')}" /> + <link rel="stylesheet" href="${resource(dir:'css',file:'jqcloud.css')}" /> + <link rel="stylesheet" href="${resource(dir:'css',file:'layout-default-latest.css')}" /> + <link rel="stylesheet" href="${resource(dir:'css',file:'jquery.fileupload-ui.css')}" /> + <link rel="stylesheet" href="${resource(dir:'css',file:'superfish.css')}" /> + <link rel="stylesheet" href="${resource(dir:'css',file:'jquery.gritter.css')}" /> + <link rel="stylesheet" href="${resource(dir:'css',file:'overcast/jquery-ui-1.9.0.custom.css')}" /> + <link rel="shortcut icon" + href="${resource(dir:'images',file:'favicon.ico')}" type="image/x-icon" /> + <g:layoutHead /> + <g:javascript library="jquery-1.7.2.min" /> + <g:javascript library="jquery-ui-1.8.7.custom.min" /> + <g:javascript library="bootstrap.min" /> + <g:javascript library="jquery.hotkeys" /> + <g:javascript library="jquery.jstree" /> + <g:javascript library="jquery.jeditable.mini" /> + <g:javascript library="jquery.dataTables.min" /> + <g:javascript library="mydrop/ticket" /> + <g:javascript library="jquery.i18n.properties-min-1.0.9" /> + <g:javascript library="jqcloud-0.1.6" /> + <g:javascript library="jquery.fileupload-ui" /> + <g:javascript library="jquery.fileupload" /> + <g:javascript library="jquery.media" /> + <g:javascript library="mydrop/lingo_common" /> + <g:javascript library="mydrop/main" /> + <g:javascript library="jquery-ui-13" /> + <g:javascript library="jquery.blockUI" /> + <g:javascript library="jquery.ba-bbq.min" /> + <g:javascript library="jquery.layout-latest.min" /> + <g:javascript library="jquery-ui-13" /> + <g:javascript library="jquery.tools.min" /> + <g:javascript library="mydrop/shopping_cart" /> + <g:javascript library="mydrop/user" /> + <g:javascript library="galleria-1.2.6" /> + <g:javascript library="jquery.gritter.min" /> + <g:javascript library="jquery.opacityrollover" /> + <g:javascript library="superfish" />
\ No newline at end of file diff --git a/idrop-web/grails-app/views/common/_topbar.gsp b/idrop-web/grails-app/views/common/_topbar.gsp index fee43d3..43f7c6f 100755 --- a/idrop-web/grails-app/views/common/_topbar.gsp +++ b/idrop-web/grails-app/views/common/_topbar.gsp @@ -21,6 +21,8 @@ <ul class="dropdown-menu"> <!-- <li><a href="#" id="searchFileName" onclick="xxx()")>Search By File Name</a></li> --> <li><a href="#" id="searchTag"><g:link controller="tags" action="index"><g:message code="text.tags" /></g:link></li> + <li><a href="#" id="searchMeta"><g:link controller="MetadataSearch" action="index"><g:message code="text.metaSearch" /></g:link></li> + <!-- <li><a href="#" id="searchMetadata" onclick="xxx()")>Search By Metadata</a></li> --> </ul> </li> diff --git a/idrop-web/grails-app/views/common/_topbar.gsp~ b/idrop-web/grails-app/views/common/_topbar.gsp~ new file mode 100755 index 0000000..fee43d3 --- /dev/null +++ b/idrop-web/grails-app/views/common/_topbar.gsp~ @@ -0,0 +1,75 @@ +<div class="navbar navbar-fixed-top navbar-inverse"> +<div class="navbar-inner"> + <a class="brand" href="#">iDrop</a> + + <ul class="nav"> + <g:ifAuthenticated> + + <!-- menu items shown if user has been authenticated --> + + <li id="topbarHome" class="topbarItem"><g:link controller="home" action="index"><g:message code="text.home" /></g:link></li> + <li id="topbarBrowser" class="topbarItem"><g:link controller="browse" action="index"><g:message code="text.browse" /></g:link></li> + + <g:ifNotGuestAccount> + <g:if test="${grailsApplication.config.idrop.config.use.userprofile==true}"> + <li id="topbarPreferences" class="topbarItem"><g:link controller="profile" action="index">Profile</g:link></li> + </g:if> + </g:ifNotGuestAccount> + <li id="topbarSearch" class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"> + <g:message code="text.search" /><b class="caret"></b></a> + <ul class="dropdown-menu"> + <!-- <li><a href="#" id="searchFileName" onclick="xxx()")>Search By File Name</a></li> --> + <li><a href="#" id="searchTag"><g:link controller="tags" action="index"><g:message code="text.tags" /></g:link></li> + <!-- <li><a href="#" id="searchMetadata" onclick="xxx()")>Search By Metadata</a></li> --> + </ul> + </li> + <li id="topbarTools" class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"> + <g:message code="text.tools" /><b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="${grailsApplication.config.idrop.config.idrop.jnlp}" id="idropDesktop")>iDrop Desktop</a></li> + </ul> + </li> + + </g:ifAuthenticated> + + <li id="topbarAccount" class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"> + <g:message code="text.account" /> <g:ifAuthenticated> <g:ifNotGuestAccount>( <span id="accountZoneAndUserDisplay"><g:accountInfo /></span> )<b class="caret"></b> </g:ifNotGuestAccount></g:ifAuthenticated></a> + <ul class="dropdown-menu"> + <g:ifAuthenticated> + <li><g:link controller="login" action="logout"><g:message code="text.logout" /></g:link></li> + <g:ifNotGuestAccount> + <li><a href="#" id="changePasswordButton"><g:link controller="login" action="changePasswordForm"><g:message code="text.change.password" /></g:link></a></li> + </g:ifNotGuestAccount> + <li><a href="#" id="setDefaultResourceButton"><g:link controller="login" action="defaultResource"><g:message code="text.set.default.resource" /></g:link></a></li> + </g:ifAuthenticated> + <g:ifNotAuthenticated> + <li><g:link href="#" id="loginButton" controller="login" action="login"><g:message code="text.login" /></g:link></li> + </g:ifNotAuthenticated> + + </ul> + </li> + + <g:ifAuthenticated> + <li id="topbarShoppingCart" class="topbarItem"><g:link class="pull-right" controller="shoppingCart" action="index"><span id="shoppingCartToolbarLabel"><g:message code="text.shopping.cart" /></span></g:link></li> + </g:ifAuthenticated> + + </ul> + </div> +</div> + <g:ifAuthenticated> +<script> + var currentZone = "${irodsAccount?.zone}"; + var currentUser = "${irodsAccount?.userName}"; + //$(function() { + //$("#accountZoneAndUserDisplay").html(currentZone + ":" + currentUser); +// }); + </g:ifAuthenticated> +</script> + + + + + diff --git a/idrop-web/grails-app/views/metadata/index.gsp b/idrop-web/grails-app/views/metadata/index.gsp new file mode 100644 index 0000000..c775f34 --- /dev/null +++ b/idrop-web/grails-app/views/metadata/index.gsp @@ -0,0 +1,104 @@ +<head> + <meta name="layout" content="mainNoSidebar" /> +<g:javascript library="mydrop/metadata"/> +<g:javascript library="mydrop/metaFiltering"/> +<g:javascript library="mydrop/myScript"/> + +</head> + + + +<ul class="nav nav-tabs" id="searchTabsMeta"> + <li><a href="#">Search</a></li> + <li><a href="#">Results</a></li> +</ul> + + +<div class="row-fluid"> + <div class="span2"> + <div class="nav-header">Help</div> + <div class="metaHelp"> + <p> + There'll be help + <br><br><br><br><br><br><br><br> + </p> + </div> + + </div> + <div class="span9"> + <table class="filterMetaTable" id="filterTab1"> + <thead> + <tr> + <th colspan="2"> + + </th> + <th colspan="2"> + <button class="deleteNodeBtn" id="del" disabled>X</button> + </th> + </tr> + <tr> + <th colspan="2"> + <input type="radio" value="Every" id="every" name="condOption0" checked> + <label class="labelRadio" for="every"> Every condition fulfilled </label> + </th> + <th colspan="2"> + <input type="radio" value="One" id="one" name="condOption0"> + <label class="labelRadio" for="one"> At least one condition fulfilled</label> + </th> + </tr> + </thead> + <tbody> + <tr id="filterRow0"> + <!-- <td colspan="2"> + <!-- <form class="formMeta"> + <div class="singleFilter"> --> + <td> <div class="meta-header"> Attribute </div> + <div class="dhx_combo_box dhx_skyblue" style="width: 180px;"> + <input class="dhx_combo_input" type="text" autocomplete="off" style="width: 155px;"> + <input type="hidden" name="" value=""> + <input type="hidden" name="_new_value" value="false"> + <img class="dhx_combo_img" src="<g:resource dir="imgs" file="combo_select_dhx_skyblue.gif" alt="file icon"/>"/> + </div> + </td> + <!-- </div> + <div class="singleFilter"> --> + <td> + <div class="meta-header"> Operator</div> + <select id="MetaOp1" class="metaOperator"> + <option> = </option> + <option> > </option> + <option> < </option> + <option> >= </option> + <option> <= </option> + <option> <> </option> + </select> + </td> + <!--</div> + <div class="singleFilter"> --> + <td> <div class="meta-header"> Value </div><input type="text"> + </td> + <!--</div> + <div class="singleFilter">--> + <td> + <br> + <button class="delConditionBtn" disabled>DELETE</button> + </td> + <!--</div> + </form>--> + <!-- </td> --> + </tr> + </tbody> + <tfoot> + <tr> + <td colspan ="2"> + <button class="addConditionBtn">ADD CONDITION</button> + </td> + </tr> + </tfoot> + </table> + + <div><button id="newNodeBtn">New conditions node</button></div> + <div><button id="searchBtn">SEARCH</button></div> + </div> +</div> + diff --git a/idrop-web/grails-app/views/metadataSearch/index.gsp b/idrop-web/grails-app/views/metadataSearch/index.gsp new file mode 100644 index 0000000..734b9d6 --- /dev/null +++ b/idrop-web/grails-app/views/metadataSearch/index.gsp @@ -0,0 +1,158 @@ +<head> + <meta name="layout" content="mainNoSidebar" /> +<g:javascript library="mydrop/metadata"/> +<g:javascript library="mydrop/metaFiltering"/> +<g:javascript library="mydrop/search" /> +<g:javascript library="mydrop/tag" /> +<g:javascript library="mydrop/home" /> + +</head> + + + +<ul class="nav nav-tabs" id="searchTabs"> + <li><a href="#metaQueryTab">Query</a></li> + <li><a href="#resultsTab">Results</a></li> +</ul> + +<div class="tab-content"> + <div class="tab-pane active" id="metaQueryTab"> + <div class="row-fluid"> + <div class="span2"> + <div class="nav-header">Help</div> + <div class="metaHelp"> + <p> + To search by metadata please enter some conditions to inputs. One table limited by the lines is one condition node. + In this node you can enter as much queries as you want to. Additionaly, you can connect them by option choosing suitable + radiobutton. The nodes of conditions can also be connected, by "AND" - then the result will have to fulfill EVERY conditions + node according to the chosen option - or "OR" - at least one node. To add new query, press "ADD CONDITION", to delete it + "DELETE" , to add new node "New condition node", to delete node press the "X" button in the right corner of chosen table. + Eventually, to search by entered queries press "SEARCH" and be satisfied by results! + </p> + </div> + + </div> + <div class="span9"> + <g:form id="avuQuery" method="post" controller="metadataSearch" + action="search" class=""> + <table class="filterMetaTable" id="filterTab1"> + <thead> + <tr> + <th colspan="2"> + + </th> + <th colspan="3"> + <input type="button" class="deleteNodeBtn" id="del" disabled value="X"> + </th> + </tr> + <tr> + <th colspan="2"> + <input type="radio" value="Every" name="AVUNodes[0].andOr" checked> + <label class="labelRadio"> Every condition fulfilled </label> + </th> + <th colspan="3"> + <input type="radio" value="One" name="AVUNodes[0].andOr"> + <label class="labelRadio"> At least one condition fulfilled</label> + </th> + </tr> + </thead> + <tbody> + <tr id="filterRow0"> + <!-- <td colspan="2"> + <!-- <form class="formMeta"> + <div class="singleFilter"> --> + <td> <div class="meta-header"> Attribute </div> + <input name="attr" type="text" autocomplete="off"> + </td> + <!-- </div> + <div class="singleFilter"> --> + <td> + <div class="meta-header"> Operator</div> + <select name="op" class="metaOperator"> + <option> = </option> + <option> > </option> + <option> < </option> + <option> >= </option> + <option> <= </option> + <option> <> </option> + <option> like </option> + <option> not like </option> + </select> + </td> + <!--</div> + <div class="singleFilter"> --> + <td> <div class="meta-header"> Value </div> + <input name="val" type="text" autocomplete="off"> + </td> + <td> <div class="meta-header"> Unit </div> + <input name="unit" type="text" autocomplete="off"> + </td> + <!--</div> + <div class="singleFilter">--> + <td> + <br> + <input type='button' class="delConditionBtn" value='DELETE' disabled> + </td> + <!--</div> + </form>--> + <!-- </td> --> + </tr> + </tbody> + <tfoot> + <tr> + <td colspan ="2"> + <input type="button" class="addConditionBtn" value="ADD CONDITION"> + </td> + </tr> + </tfoot> + </table> + + <div><input type="button" id="newNodeBtn" value="New conditions node"></div> + </g:form> + <div><button id="searchBtn" onclick="processMetadataQuery()">SEARCH</button></div> + + + </div> + </div> + </div> + <div class="tab-pane" id="resultsTab"> + <div id="resultsTabInner">Search Results here</div> + + </div> + +</div> + +<script> + $(document).ready(function() { + + $.ajaxSetup({ + cache : false + }); + $("#topbarSearch").addClass("active"); + + $('#searchTabs a').click(function (e) { + + e.preventDefault(); + $(this).tab('show'); + var state = {}; + var tabId = this.hash + state["tab"] = tabId; + $.bbq.pushState(state); + }); + + $(window).bind( 'hashchange', function(e) { + processTagSearchStateChange( $.bbq.getState()); + }); + + $(window).trigger( 'hashchange' ); + + + }); + + + //function addAVUTriplet() { + + + //} + +</script>
\ No newline at end of file diff --git a/idrop-web/src/templates/war/web.xml b/idrop-web/src/templates/war/web.xml index aa5182b..51543b3 100755 --- a/idrop-web/src/templates/war/web.xml +++ b/idrop-web/src/templates/war/web.xml @@ -88,7 +88,7 @@ --> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> - <welcome-file>index.gsp</welcome-file> + <welcome-file>login/login</welcome-file> </welcome-file-list> <jsp-config> diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/MetadataSearchControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/MetadataSearchControllerTests.groovy new file mode 100644 index 0000000..3a61185 --- /dev/null +++ b/idrop-web/test/unit/org/irods/mydrop/controller/MetadataSearchControllerTests.groovy @@ -0,0 +1,17 @@ +package org.irods.mydrop.controller + + + +import grails.test.mixin.* +import org.junit.* + +/** + * See the API for {@link grails.test.mixin.web.ControllerUnitTestMixin} for usage instructions + */ +@TestFor(MetadataSearchController) +class MetadataSearchControllerTests { + + void testSomething() { + fail "Implement me" + } +} diff --git a/idrop-web/web-app/css/bootstrap.css b/idrop-web/web-app/css/bootstrap.css index 323e264..258561d 100755 --- a/idrop-web/web-app/css/bootstrap.css +++ b/idrop-web/web-app/css/bootstrap.css @@ -8,31 +8,31 @@ * Designed and built with all the love in the world @twitter by @mdo and @fat. */ .clearfix { - *zoom: 1; + *zoom: 1; } .clearfix:before, .clearfix:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } -.clearfix:after { - clear: both; +.clearfix:afterP { + clear: both; } .hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; + 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; + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } article, aside, @@ -44,476 +44,590 @@ header, hgroup, nav, section { - display: block; + display: block; } audio, canvas, video { - display: inline-block; - *display: inline; - *zoom: 1; + display: inline-block; + *display: inline; + *zoom: 1; } audio:not([controls]) { - display: none; + display: none; } html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; + 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; + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } a:hover, a:active { - outline: 0; + outline: 0; } sub, sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } sup { - top: -0.5em; + top: -0.5em; } sub { - bottom: -0.25em; + bottom: -0.25em; } img { - /* Responsive images (ensure images don't scale beyond their parents) */ + /* Responsive images (ensure images don't scale beyond their parents) */ - max-width: 100%; - /* Part 1: Set a maxium relative to the parent */ + max-width: 100%; + /* Part 1: Set a maxium relative to the parent */ - width: auto\9; - /* IE7-8 need help adjusting responsive images */ + width: auto\9; + /* IE7-8 need help adjusting responsive images */ - height: auto; - /* Part 2: Scale the height according to the width, otherwise you get stretching */ + height: auto; + /* Part 2: Scale the height according to the width, otherwise you get stretching */ - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; } #map_canvas img { - max-width: none; + max-width: none; } button, input, select, textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; + margin: 0; + font-size: 100%; + vertical-align: middle; } button, input { - *overflow: visible; - line-height: normal; + *overflow: visible; + line-height: normal; } button::-moz-focus-inner, input::-moz-focus-inner { - padding: 0; - border: 0; + padding: 0; + border: 0; } button, input[type="button"], input[type="reset"], input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; + 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; + -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; + -webkit-appearance: none; } textarea { - overflow: auto; - vertical-align: top; + overflow: auto; + vertical-align: top; } body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; } a { - color: #0088cc; - text-decoration: none; + color: #0088cc; + text-decoration: none; } a:hover { - color: #005580; - text-decoration: underline; + color: #005580; + text-decoration: underline; +} + +/*Paulina's changes start*/ + +.delConditionBtn{ + padding: 5px 20px; + background-color: transparent; + font-size: 14px; + color: #B80000; + text-shadow: 0 1px 0 #B80000; + opacity: 0.75; + border-color: #B80000; + border-style: solid; + border-width: 2px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + +} + +.addConditionBtn{ + padding: 5px; + margin-right: 70%; + margin-top: 10px; + margin-bottom: 10px; + background-color: transparent; + font-size: 14px; + font-weight: bold; + color: #336699; + text-shadow: 0 1px 0 #336699; + opacity: 0.75; + border-color: #336699; + border-style: solid; + border-width: 2px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; +} + +.deleteNodeBtn{ + margin-left: 85%; + font-size: 15px; + font-weight: bold; + color: #336699; + opacity: 0.75; + border-color: transparent; + +} +.span2 > .metaHelp{ + display: block; + background-color: #d5d5d5; + width: 100%; + font-size: 13px; + text-align: justify; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} + +.filterMetaTable { + min-width: 95%; + border-bottom: medium inset silver; + border-top: medium ridge silver; +} + +.filterMetaTable th { + padding: 8px; + vertical-align: middle; +} + +.filterMetaTable > tbody > tr { + vertical-align: middle; + border-top: thin solid silver; + padding: 10px; +} +.filterMetaTable > tbody > tr > td { + + padding: 8px; + width:25%; +} + + + +.labelRadio { + font-size: 13px; + display: inline; + color: #336699; + text-shadow: 0 1px 0 #336699; +} + + + +.meta-header { /*header for input in filter form */ + + display: block; + padding: 3px; + width: 180px; + font-size: 12px; + font-weight: bold; + color: #336699; + background-color: #d5d5d5; + text-shadow: 0 1px 0 #336699; + text-transform: uppercase; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; } + + +.metaOperator { + width: 80px; +} + + +/*Paulina's changes end*/ .img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; + -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); + 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; + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; } .row { - margin-left: -20px; - *zoom: 1; + margin-left: -20px; + *zoom: 1; } .row:before, .row:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .row:after { - clear: both; + clear: both; } [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; + float: left; + min-height: 1px; + margin-left: 20px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { - width: 940px; + width: 940px; } .span12 { - width: 940px; + width: 940px; } .span11 { - width: 860px; + width: 860px; } .span10 { - width: 780px; + width: 780px; } .span9 { - width: 700px; + width: 700px; } .span8 { - width: 620px; + width: 620px; } .span7 { - width: 540px; + width: 540px; } .span6 { - width: 460px; + width: 460px; } .span5 { - width: 380px; + width: 380px; } .span4 { - width: 300px; + width: 300px; } .span3 { - width: 220px; + width: 220px; } .span2 { - width: 140px; + width: 140px; } .span1 { - width: 60px; + width: 60px; } .offset12 { - margin-left: 980px; + margin-left: 980px; } .offset11 { - margin-left: 900px; + margin-left: 900px; } .offset10 { - margin-left: 820px; + margin-left: 820px; } .offset9 { - margin-left: 740px; + margin-left: 740px; } .offset8 { - margin-left: 660px; + margin-left: 660px; } .offset7 { - margin-left: 580px; + margin-left: 580px; } .offset6 { - margin-left: 500px; + margin-left: 500px; } .offset5 { - margin-left: 420px; + margin-left: 420px; } .offset4 { - margin-left: 340px; + margin-left: 340px; } .offset3 { - margin-left: 260px; + margin-left: 260px; } .offset2 { - margin-left: 180px; + margin-left: 180px; } .offset1 { - margin-left: 100px; + margin-left: 100px; } .row-fluid { - width: 100%; - *zoom: 1; + width: 100%; + *zoom: 1; } .row-fluid:before, .row-fluid:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .row-fluid:after { - clear: both; + clear: both; } .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; } .row-fluid [class*="span"]:first-child { - margin-left: 0; + margin-left: 0; } .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; + width: 100%; + *width: 99.94680851063829%; } .row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; + width: 91.48936170212765%; + *width: 91.43617021276594%; } .row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; + width: 82.97872340425532%; + *width: 82.92553191489361%; } .row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; + width: 74.46808510638297%; + *width: 74.41489361702126%; } .row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; + width: 65.95744680851064%; + *width: 65.90425531914893%; } .row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; + width: 57.44680851063829%; + *width: 57.39361702127659%; } .row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; + width: 48.93617021276595%; + *width: 48.88297872340425%; } .row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; + width: 40.42553191489362%; + *width: 40.37234042553192%; } .row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; + width: 31.914893617021278%; + *width: 31.861702127659576%; } .row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; + width: 23.404255319148934%; + *width: 23.351063829787233%; } .row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; + width: 14.893617021276595%; + *width: 14.840425531914894%; } .row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; + width: 6.382978723404255%; + *width: 6.329787234042553%; } .row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; } .row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; } .row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; } .row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; } .row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; } .row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; } .row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; } .row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; } .row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; } .row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; } .row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; } .row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; } .row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; } .row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; } .row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; } .row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; } .row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; } .row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; } .row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; } .row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; } .row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; } .row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; } .row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; } .row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; } [class*="span"].hide, .row-fluid [class*="span"].hide { - display: none; + display: none; } [class*="span"].pull-right, .row-fluid [class*="span"].pull-right { - float: right; + float: right; } .container { - margin-right: auto; - margin-left: auto; - *zoom: 1; + margin-right: auto; + margin-left: auto; + *zoom: 1; } .container:before, .container:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .container:after { - clear: both; + clear: both; } .container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; + padding-right: 20px; + padding-left: 20px; + *zoom: 1; } .container-fluid:before, .container-fluid:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .container-fluid:after { - clear: both; + clear: both; } p { - margin: 0 0 10px; + margin: 0 0 10px; } .lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; } small { - font-size: 85%; + font-size: 85%; } strong { - font-weight: bold; + font-weight: bold; } em { - font-style: italic; + font-style: italic; } cite { - font-style: normal; + font-style: normal; } .muted { - color: #999999; + color: #999999; } .text-warning { - color: #c09853; + color: #c09853; } .text-error { - color: #b94a48; + color: #b94a48; } .text-info { - color: #3a87ad; + color: #3a87ad; } .text-success { - color: #468847; + color: #468847; } h1, h2, @@ -521,12 +635,12 @@ h3, h4, h5, h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 1; - color: inherit; - text-rendering: optimizelegibility; + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 1; + color: inherit; + text-rendering: optimizelegibility; } h1 small, h2 small, @@ -534,316 +648,319 @@ h3 small, h4 small, h5 small, h6 small { - font-weight: normal; - line-height: 1; - color: #999999; + font-weight: normal; + line-height: 1; + color: #999999; } h1 { - font-size: 36px; - line-height: 40px; + font-size: 36px; + line-height: 40px; } h2 { - font-size: 30px; - line-height: 40px; + font-size: 30px; + line-height: 40px; } h3 { - font-size: 24px; - line-height: 40px; + font-size: 24px; + line-height: 40px; } h4 { - font-size: 18px; - line-height: 20px; + font-size: 18px; + line-height: 20px; } h5 { - font-size: 14px; - line-height: 20px; + font-size: 14px; + line-height: 20px; } h6 { - font-size: 12px; - line-height: 20px; + font-size: 12px; + line-height: 20px; } h1 small { - font-size: 24px; + font-size: 24px; } h2 small { - font-size: 18px; + font-size: 18px; } h3 small { - font-size: 14px; + font-size: 14px; } h4 small { - font-size: 14px; + font-size: 14px; } .page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; } ul, ol { - padding: 0; - margin: 0 0 10px 25px; + padding: 0; + margin: 0 0 10px 25px; } ul ul, ul ol, ol ol, ol ul { - margin-bottom: 0; + margin-bottom: 0; } li { - line-height: 20px; + line-height: 20px; } ul.unstyled, ol.unstyled { - margin-left: 0; - list-style: none; + margin-left: 0; + list-style: none; } dl { - margin-bottom: 20px; + margin-bottom: 20px; } dt, dd { - line-height: 20px; + line-height: 20px; } dt { - font-weight: bold; + font-weight: bold; } dd { - margin-left: 10px; + margin-left: 10px; } .dl-horizontal { - *zoom: 1; + *zoom: 1; } .dl-horizontal:before, .dl-horizontal:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .dl-horizontal:after { - clear: both; + clear: both; } .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .dl-horizontal dd { - margin-left: 180px; + margin-left: 180px; } hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; } abbr[title] { - cursor: help; - border-bottom: 1px dotted #999999; + cursor: help; + border-bottom: 1px dotted #999999; } abbr.initialism { - font-size: 90%; - text-transform: uppercase; + font-size: 90%; + text-transform: uppercase; } blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee;tab } blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 25px; + margin-bottom: 0; + font-size: 16px; + font-weight: 300; + line-height: 25px; } blockquote small { - display: block; - line-height: 20px; - color: #999999; + display: block; + line-height: 20px; + color: #999999; } blockquote small:before { - content: '\2014 \00A0'; + content: '\2014 \00A0'; } blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; } blockquote.pull-right p, blockquote.pull-right small { - text-align: right; + text-align: right; } blockquote.pull-right small:before { - content: ''; + content: ''; } blockquote.pull-right small:after { - content: '\00A0 \2014'; + content: '\00A0 \2014'; } q:before, q:after, blockquote:before, blockquote:after { - content: ""; + content: ""; } address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; + 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: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; } code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; + 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; + 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; + margin-bottom: 20px; } pre code { - padding: 0; - color: inherit; - background-color: transparent; - border: 0; + padding: 0; + color: inherit; + background-color: transparent; + border: 0; } .pre-scrollable { - max-height: 340px; - overflow-y: scroll; + max-height: 340px; + overflow-y: scroll; } .label, .badge { - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + vertical-align: baseline; + white-space: nowrap; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #999999; } .label { - padding: 1px 4px 2px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; + 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; + padding: 1px 9px 2px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; } a.label:hover, a.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; + color: #ffffff; + text-decoration: none; + cursor: pointer; } .label-important, .badge-important { - background-color: #b94a48; + background-color: #b94a48; } .label-important[href], .badge-important[href] { - background-color: #953b39; + background-color: #953b39; } .label-warning, .badge-warning { - background-color: #f89406; + background-color: #f89406; } .label-warning[href], .badge-warning[href] { - background-color: #c67605; + background-color: #c67605; } .label-success, .badge-success { - background-color: #468847; + background-color: #468847; } .label-success[href], .badge-success[href] { - background-color: #356635; + background-color: #356635; } .label-info, .badge-info { - background-color: #3a87ad; + background-color: #3a87ad; } .label-info[href], .badge-info[href] { - background-color: #2d6987; + background-color: #2d6987; } .label-inverse, .badge-inverse { - background-color: #333333; + background-color: #333333; } .label-inverse[href], .badge-inverse[href] { - background-color: #1a1a1a; + background-color: #1a1a1a; } .btn .label, .btn .badge { - position: relative; - top: -1px; + position: relative; + top: -1px; } .btn-mini .label, .btn-mini .badge { - top: 0; + top: 0; } table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; } + + .table { - width: 100%; - margin-bottom: 20px; + width: 100%; + margin-bottom: 20px; } .table th, .table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; } + .table th { - font-weight: bold; + font-weight: bold; } .table thead th { - vertical-align: bottom; + vertical-align: bottom; } .table caption + thead tr:first-child th, .table caption + thead tr:first-child td, @@ -851,27 +968,27 @@ table { .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; + border-top: 0; } .table tbody + tbody { - border-top: 2px solid #dddddd; + border-top: 2px solid #dddddd; } .table-condensed th, .table-condensed td { - padding: 4px 5px; + padding: 4px 5px; } .table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + border: 1px solid #dddddd; + 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 #dddddd; + border-left: 1px solid #dddddd; } .table-bordered caption + thead tr:first-child th, .table-bordered caption + tbody tr:first-child th, @@ -882,252 +999,252 @@ table { .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; + 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; + -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; + -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; + -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; + -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; + -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; + -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; + background-color: #f9f9f9; } .table-hover tbody tr:hover td, .table-hover tbody tr:hover th { - background-color: #f5f5f5; + background-color: #f5f5f5; } table [class*=span], .row-fluid table [class*=span] { - display: table-cell; - float: none; - margin-left: 0; + display: table-cell; + float: none; + margin-left: 0; } .table .span1 { - float: none; - width: 44px; - margin-left: 0; + float: none; + width: 44px; + margin-left: 0; } .table .span2 { - float: none; - width: 124px; - margin-left: 0; + float: none; + width: 124px; + margin-left: 0; } .table .span3 { - float: none; - width: 204px; - margin-left: 0; + float: none; + width: 204px; + margin-left: 0; } .table .span4 { - float: none; - width: 284px; - margin-left: 0; + float: none; + width: 284px; + margin-left: 0; } .table .span5 { - float: none; - width: 364px; - margin-left: 0; + float: none; + width: 364px; + margin-left: 0; } .table .span6 { - float: none; - width: 444px; - margin-left: 0; + float: none; + width: 444px; + margin-left: 0; } .table .span7 { - float: none; - width: 524px; - margin-left: 0; + float: none; + width: 524px; + margin-left: 0; } .table .span8 { - float: none; - width: 604px; - margin-left: 0; + float: none; + width: 604px; + margin-left: 0; } .table .span9 { - float: none; - width: 684px; - margin-left: 0; + float: none; + width: 684px; + margin-left: 0; } .table .span10 { - float: none; - width: 764px; - margin-left: 0; + float: none; + width: 764px; + margin-left: 0; } .table .span11 { - float: none; - width: 844px; - margin-left: 0; + float: none; + width: 844px; + margin-left: 0; } .table .span12 { - float: none; - width: 924px; - margin-left: 0; + float: none; + width: 924px; + margin-left: 0; } .table .span13 { - float: none; - width: 1004px; - margin-left: 0; + float: none; + width: 1004px; + margin-left: 0; } .table .span14 { - float: none; - width: 1084px; - margin-left: 0; + float: none; + width: 1084px; + margin-left: 0; } .table .span15 { - float: none; - width: 1164px; - margin-left: 0; + float: none; + width: 1164px; + margin-left: 0; } .table .span16 { - float: none; - width: 1244px; - margin-left: 0; + float: none; + width: 1244px; + margin-left: 0; } .table .span17 { - float: none; - width: 1324px; - margin-left: 0; + float: none; + width: 1324px; + margin-left: 0; } .table .span18 { - float: none; - width: 1404px; - margin-left: 0; + float: none; + width: 1404px; + margin-left: 0; } .table .span19 { - float: none; - width: 1484px; - margin-left: 0; + float: none; + width: 1484px; + margin-left: 0; } .table .span20 { - float: none; - width: 1564px; - margin-left: 0; + float: none; + width: 1564px; + margin-left: 0; } .table .span21 { - float: none; - width: 1644px; - margin-left: 0; + float: none; + width: 1644px; + margin-left: 0; } .table .span22 { - float: none; - width: 1724px; - margin-left: 0; + float: none; + width: 1724px; + margin-left: 0; } .table .span23 { - float: none; - width: 1804px; - margin-left: 0; + float: none; + width: 1804px; + margin-left: 0; } .table .span24 { - float: none; - width: 1884px; - margin-left: 0; + float: none; + width: 1884px; + margin-left: 0; } .table tbody tr.success td { - background-color: #dff0d8; + background-color: #dff0d8; } .table tbody tr.error td { - background-color: #f2dede; + background-color: #f2dede; } .table tbody tr.warning td { - background-color: #fcf8e3; + background-color: #fcf8e3; } .table tbody tr.info td { - background-color: #d9edf7; + background-color: #d9edf7; } .table-hover tbody tr.success:hover td { - background-color: #d0e9c6; + background-color: #d0e9c6; } .table-hover tbody tr.error:hover td { - background-color: #ebcccc; + background-color: #ebcccc; } .table-hover tbody tr.warning:hover td { - background-color: #faf2cc; + background-color: #faf2cc; } .table-hover tbody tr.info:hover td { - background-color: #c4e3f3; + background-color: #c4e3f3; } form { - margin: 0 0 20px; + margin: 0 0 20px; } fieldset { - padding: 0; - margin: 0; - border: 0; + padding: 0; + margin: 0; + border: 0; } legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; } legend small { - font-size: 15px; - color: #999999; + font-size: 15px; + color: #999999; } label, input, button, select, textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; + font-size: 14px; + font-weight: normal; + line-height: 20px; } input, button, select, textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } label { - display: block; - margin-bottom: 5px; + display: block; + margin-bottom: 5px; } select, textarea, @@ -1146,24 +1263,24 @@ 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: #555555; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 9px; + font-size: 14px; + line-height: 20px; + color: #555555; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; } input, textarea, .uneditable-input { - /*width: 206px;*/ + /*width: 206px;*/ } textarea { - height: auto; + height: auto; } textarea, input[type="text"], @@ -1181,15 +1298,15 @@ input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -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; + background-color: #ffffff; + border: 1px solid #cccccc; + -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, @@ -1207,26 +1324,26 @@ 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; - /* IE6-9 */ + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-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); + -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: 0; - /* IE7 */ + margin: 4px 0 0; + *margin-top: 0; + /* IE7 */ - margin-top: 1px \9; - /* IE8-9 */ + margin-top: 1px \9; + /* IE8-9 */ - line-height: normal; - cursor: pointer; + line-height: normal; + cursor: pointer; } input[type="file"], input[type="image"], @@ -1235,107 +1352,107 @@ input[type="reset"], input[type="button"], input[type="radio"], input[type="checkbox"] { - width: auto; + width: auto; } select, input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ - line-height: 30px; + line-height: 30px; } select { - width: 220px; - border: 1px solid #cccccc; - background-color: #ffffff; + width: 220px; + border: 1px solid #cccccc; + background-color: #ffffff; } select[multiple], select[size] { - height: auto; + 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; + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } .uneditable-input, .uneditable-textarea { - color: #999999; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; + color: #999999; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; } .uneditable-input { - overflow: hidden; - white-space: nowrap; + overflow: hidden; + white-space: nowrap; } .uneditable-textarea { - width: auto; - height: auto; + width: auto; + height: auto; } input:-moz-placeholder, textarea:-moz-placeholder { - color: #999999; + color: #999999; } input:-ms-input-placeholder, textarea:-ms-input-placeholder { - color: #999999; + color: #999999; } input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { - color: #999999; + color: #999999; } .radio, .checkbox { - min-height: 18px; - padding-left: 18px; + min-height: 18px; + padding-left: 18px; } .radio input[type="radio"], .checkbox input[type="checkbox"] { - float: left; - margin-left: -18px; + float: left; + margin-left: -18px; } .controls > .radio:first-child, .controls > .checkbox:first-child { - padding-top: 5px; + padding-top: 5px; } .radio.inline, .checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; } .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { - margin-left: 10px; + margin-left: 10px; } .input-mini { - width: 60px; + width: 60px; } .input-small { - width: 90px; + width: 90px; } .input-medium { - width: 150px; + width: 150px; } .input-large { - width: 210px; + width: 210px; } .input-xlarge { - width: 270px; + width: 270px; } .input-xxlarge { - width: 530px; + width: 530px; } input[class*="span"], select[class*="span"], @@ -1345,8 +1462,8 @@ textarea[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; + float: none; + margin-left: 0; } .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], @@ -1358,66 +1475,66 @@ textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { - display: inline-block; + display: inline-block; } input, textarea, .uneditable-input { - margin-left: 0; + margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; + margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { - width: 926px; + width: 926px; } input.span11, textarea.span11, .uneditable-input.span11 { - width: 846px; + width: 846px; } input.span10, textarea.span10, .uneditable-input.span10 { - width: 766px; + width: 766px; } input.span9, textarea.span9, .uneditable-input.span9 { - width: 686px; + width: 686px; } input.span8, textarea.span8, .uneditable-input.span8 { - width: 606px; + width: 606px; } input.span7, textarea.span7, .uneditable-input.span7 { - width: 526px; + width: 526px; } input.span6, textarea.span6, .uneditable-input.span6 { - width: 446px; + width: 446px; } input.span5, textarea.span5, .uneditable-input.span5 { - width: 366px; + width: 366px; } input.span4, textarea.span4, .uneditable-input.span4 { - width: 286px; + width: 286px; } input.span3, textarea.span3, .uneditable-input.span3 { - width: 206px; + width: 206px; } input.span2, textarea.span2, .uneditable-input.span2 { - width: 126px; + width: 126px; } input.span1, textarea.span1, .uneditable-input.span1 { - width: 46px; + width: 46px; } .controls-row { - *zoom: 1; + *zoom: 1; } .controls-row:before, .controls-row:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .controls-row:after { - clear: both; + clear: both; } .controls-row [class*="span"] { - float: left; + float: left; } input[disabled], select[disabled], @@ -1425,204 +1542,204 @@ textarea[disabled], input[readonly], select[readonly], textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; + cursor: not-allowed; + background-color: #eeeeee; } input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"][readonly], input[type="checkbox"][readonly] { - background-color: transparent; + background-color: transparent; } .control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline { - color: #c09853; + color: #c09853; } .control-group.warning .checkbox, .control-group.warning .radio, .control-group.warning input, .control-group.warning select, .control-group.warning textarea { - color: #c09853; + 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); + 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; + 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; + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; } .control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline { - color: #b94a48; + color: #b94a48; } .control-group.error .checkbox, .control-group.error .radio, .control-group.error input, .control-group.error select, .control-group.error textarea { - color: #b94a48; + 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); + 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; + 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; + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; } .control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline { - color: #468847; + color: #468847; } .control-group.success .checkbox, .control-group.success .radio, .control-group.success input, .control-group.success select, .control-group.success textarea { - color: #468847; + 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); + 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; + 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; + color: #468847; + background-color: #dff0d8; + border-color: #468847; } .control-group.info > label, .control-group.info .help-block, .control-group.info .help-inline { - color: #3a87ad; + color: #3a87ad; } .control-group.info .checkbox, .control-group.info .radio, .control-group.info input, .control-group.info select, .control-group.info textarea { - color: #3a87ad; + 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); + 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; + 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; + 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; + 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; + 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; + 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; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .form-actions:after { - clear: both; + clear: both; } .help-block, .help-inline { - color: #595959; + color: #595959; } .help-block { - display: block; - margin-bottom: 10px; + display: block; + margin-bottom: 10px; } .help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ - *zoom: 1; - vertical-align: middle; - padding-left: 5px; + *zoom: 1; + vertical-align: middle; + padding-left: 5px; } .input-append, .input-prepend { - margin-bottom: 5px; - font-size: 0; - white-space: nowrap; + margin-bottom: 5px; + font-size: 0; + white-space: nowrap; } .input-append input, .input-prepend input, @@ -1630,14 +1747,14 @@ select:focus:required:invalid:focus { .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; + 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, @@ -1645,123 +1762,123 @@ select:focus:required:invalid:focus { .input-prepend select:focus, .input-append .uneditable-input:focus, .input-prepend .uneditable-input:focus { - z-index: 2; + 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 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; + 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 #ffffff; + background-color: #eeeeee; + 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; + 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; + background-color: #a9dba9; + border-color: #46a546; } .input-prepend .add-on, .input-prepend .btn { - margin-right: -1px; + 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; + -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; + -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; + 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; + -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; + -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; + 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; + 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; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; } /* Allow for input prepend/append in search forms */ .form-search .input-append .search-query, .form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; + -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; + -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; + -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; + -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; + -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, @@ -1784,229 +1901,229 @@ input.search-query { .form-search .input-append, .form-inline .input-append, .form-horizontal .input-append { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ - *zoom: 1; - margin-bottom: 0; - vertical-align: middle; + *zoom: 1; + margin-bottom: 0; + vertical-align: middle; } .form-search .hide, .form-inline .hide, .form-horizontal .hide { - display: none; + display: none; } .form-search label, .form-inline label, .form-search .btn-group, .form-inline .btn-group { - display: inline-block; + display: inline-block; } .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { - margin-bottom: 0; + margin-bottom: 0; } .form-search .radio, .form-search .checkbox, .form-inline .radio, .form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; + 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; + float: left; + margin-right: 3px; + margin-left: 0; } .control-group { - margin-bottom: 10px; + margin-bottom: 10px; } legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; + margin-top: 20px; + -webkit-margin-top-collapse: separate; } .form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; + margin-bottom: 20px; + *zoom: 1; } .form-horizontal .control-group:before, .form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .form-horizontal .control-group:after { - clear: both; + clear: both; } .form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; + 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; + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; } .form-horizontal .controls:first-child { - *padding-left: 180px; + *padding-left: 180px; } .form-horizontal .help-block { - margin-bottom: 0; + margin-bottom: 0; } .form-horizontal input + .help-block, .form-horizontal select + .help-block, .form-horizontal textarea + .help-block { - margin-top: 10px; + margin-top: 10px; } .form-horizontal .form-actions { - padding-left: 180px; + padding-left: 180px; } .btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ - *zoom: 1; - padding: 4px 14px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - *line-height: 20px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + *zoom: 1; + padding: 4px 14px; + margin-bottom: 0; + font-size: 14px; + line-height: 20px; + *line-height: 20px; + text-align: center; + vertical-align: middle; + cursor: pointer; + color: #333333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e6e6e6; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #bbbbbb; - *border: 0; - border-bottom-color: #a2a2a2; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *margin-left: .3em; - -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); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border: 1px solid #bbbbbb; + *border: 0; + border-bottom-color: #a2a2a2; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *margin-left: .3em; + -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: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; } .btn:active, .btn.active { - background-color: #cccccc \9; + background-color: #cccccc \9; } .btn:first-child { - *margin-left: 0; + *margin-left: 0; } .btn:hover { - color: #333333; - text-decoration: none; - background-color: #e6e6e6; - *background-color: #d9d9d9; - /* Buttons in IE7 don't get borders, so darken on hover */ + color: #333333; + text-decoration: none; + background-color: #e6e6e6; + *background-color: #d9d9d9; + /* Buttons in IE7 don't get borders, so darken on hover */ - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; } .btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; + 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); + 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: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; + cursor: default; + background-color: #e6e6e6; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } .btn-large { - padding: 9px 14px; - font-size: 16px; - line-height: normal; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; + 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; + margin-top: 2px; } .btn-small { - padding: 3px 9px; - font-size: 12px; - line-height: 18px; + padding: 3px 9px; + font-size: 12px; + line-height: 18px; } .btn-small [class^="icon-"] { - margin-top: 0; + margin-top: 0; } .btn-mini { - padding: 2px 6px; - font-size: 11px; - line-height: 17px; + padding: 2px 6px; + font-size: 11px; + line-height: 17px; } .btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } .btn-block + .btn-block { - margin-top: 5px; + margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { - width: 100%; + width: 100%; } .btn-primary.active, .btn-warning.active, @@ -2014,261 +2131,261 @@ input[type="button"].btn-block { .btn-success.active, .btn-info.active, .btn-inverse.active { - color: rgba(255, 255, 255, 0.75); + 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); + 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: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; } .btn-primary:active, .btn-primary.active { - background-color: #003399 \9; + background-color: #003399 \9; } .btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - 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); - 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); - *background-color: #f89406; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + 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); + 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); + *background-color: #f89406; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-warning:hover, .btn-warning:active, .btn-warning.active, .btn-warning.disabled, .btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; } .btn-warning:active, .btn-warning.active { - background-color: #c67605 \9; + background-color: #c67605 \9; } .btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #bd362f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #bd362f; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-danger:hover, .btn-danger:active, .btn-danger.active, .btn-danger.disabled, .btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; } .btn-danger:active, .btn-danger.active { - background-color: #942a25 \9; + background-color: #942a25 \9; } .btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #51a351; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-success:hover, .btn-success:active, .btn-success.active, .btn-success.disabled, .btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; + color: #ffffff; + background-color: #51a351; + *background-color: #499249; } .btn-success:active, .btn-success.active { - background-color: #408140 \9; + background-color: #408140 \9; } .btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #2f96b4; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-info:hover, .btn-info:active, .btn-info.active, .btn-info.disabled, .btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; } .btn-info:active, .btn-info.active { - background-color: #24748c \9; + background-color: #24748c \9; } .btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #222222; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #222222; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-inverse:hover, .btn-inverse:active, .btn-inverse.active, .btn-inverse.disabled, .btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; + color: #ffffff; + background-color: #222222; + *background-color: #151515; } .btn-inverse:active, .btn-inverse.active { - background-color: #080808 \9; + background-color: #080808 \9; } button.btn, input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; + *padding-top: 3px; + *padding-bottom: 3px; } button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; + padding: 0; + border: 0; } button.btn.btn-large, input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; + *padding-top: 7px; + *padding-bottom: 7px; } button.btn.btn-small, input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; + *padding-top: 3px; + *padding-bottom: 3px; } button.btn.btn-mini, input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; + *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; + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } .btn-link { - border-color: transparent; - cursor: pointer; - color: #0088cc; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; + border-color: transparent; + cursor: pointer; + color: #0088cc; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; } .btn-link:hover { - color: #005580; - text-decoration: underline; - background-color: transparent; + color: #005580; + text-decoration: underline; + background-color: transparent; } .btn-link[disabled]:hover { - color: #333333; - text-decoration: none; + color: #333333; + text-decoration: none; } [class^="icon-"], [class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - *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; - margin-top: 1px; + display: inline-block; + width: 14px; + height: 14px; + *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; + margin-top: 1px; } /* White icons with optional class, or on hover/active states of certain elements */ .icon-white, @@ -2284,597 +2401,597 @@ input[type="submit"].btn.btn-mini { .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"); + background-image: url("../img/glyphicons-halflings-white.png"); } .icon-glass { - background-position: 0 0; + background-position: 0 0; } .icon-music { - background-position: -24px 0; + background-position: -24px 0; } .icon-search { - background-position: -48px 0; + background-position: -48px 0; } .icon-envelope { - background-position: -72px 0; + background-position: -72px 0; } .icon-heart { - background-position: -96px 0; + background-position: -96px 0; } .icon-star { - background-position: -120px 0; + background-position: -120px 0; } .icon-star-empty { - background-position: -144px 0; + background-position: -144px 0; } .icon-user { - background-position: -168px 0; + background-position: -168px 0; } .icon-film { - background-position: -192px 0; + background-position: -192px 0; } .icon-th-large { - background-position: -216px 0; + background-position: -216px 0; } .icon-th { - background-position: -240px 0; + background-position: -240px 0; } .icon-th-list { - background-position: -264px 0; + background-position: -264px 0; } .icon-ok { - background-position: -288px 0; + background-position: -288px 0; } .icon-remove { - background-position: -312px 0; + background-position: -312px 0; } .icon-zoom-in { - background-position: -336px 0; + background-position: -336px 0; } .icon-zoom-out { - background-position: -360px 0; + background-position: -360px 0; } .icon-off { - background-position: -384px 0; + background-position: -384px 0; } .icon-signal { - background-position: -408px 0; + background-position: -408px 0; } .icon-cog { - background-position: -432px 0; + background-position: -432px 0; } .icon-trash { - background-position: -456px 0; + background-position: -456px 0; } .icon-home { - background-position: 0 -24px; + background-position: 0 -24px; } .icon-file { - background-position: -24px -24px; + background-position: -24px -24px; } .icon-time { - background-position: -48px -24px; + background-position: -48px -24px; } .icon-road { - background-position: -72px -24px; + background-position: -72px -24px; } .icon-download-alt { - background-position: -96px -24px; + background-position: -96px -24px; } .icon-download { - background-position: -120px -24px; + background-position: -120px -24px; } .icon-upload { - background-position: -144px -24px; + background-position: -144px -24px; } .icon-inbox { - background-position: -168px -24px; + background-position: -168px -24px; } .icon-play-circle { - background-position: -192px -24px; + background-position: -192px -24px; } .icon-repeat { - background-position: -216px -24px; + background-position: -216px -24px; } .icon-refresh { - background-position: -240px -24px; + background-position: -240px -24px; } .icon-list-alt { - background-position: -264px -24px; + background-position: -264px -24px; } .icon-lock { - background-position: -287px -24px; + background-position: -287px -24px; } .icon-flag { - background-position: -312px -24px; + background-position: -312px -24px; } .icon-headphones { - background-position: -336px -24px; + background-position: -336px -24px; } .icon-volume-off { - background-position: -360px -24px; + background-position: -360px -24px; } .icon-volume-down { - background-position: -384px -24px; + background-position: -384px -24px; } .icon-volume-up { - background-position: -408px -24px; + background-position: -408px -24px; } .icon-qrcode { - background-position: -432px -24px; + background-position: -432px -24px; } .icon-barcode { - background-position: -456px -24px; + background-position: -456px -24px; } .icon-tag { - background-position: 0 -48px; + background-position: 0 -48px; } .icon-tags { - background-position: -25px -48px; + background-position: -25px -48px; } .icon-book { - background-position: -48px -48px; + background-position: -48px -48px; } .icon-bookmark { - background-position: -72px -48px; + background-position: -72px -48px; } .icon-print { - background-position: -96px -48px; + background-position: -96px -48px; } .icon-camera { - background-position: -120px -48px; + background-position: -120px -48px; } .icon-font { - background-position: -144px -48px; + background-position: -144px -48px; } .icon-bold { - background-position: -167px -48px; + background-position: -167px -48px; } .icon-italic { - background-position: -192px -48px; + background-position: -192px -48px; } .icon-text-height { - background-position: -216px -48px; + background-position: -216px -48px; } .icon-text-width { - background-position: -240px -48px; + background-position: -240px -48px; } .icon-align-left { - background-position: -264px -48px; + background-position: -264px -48px; } .icon-align-center { - background-position: -288px -48px; + background-position: -288px -48px; } .icon-align-right { - background-position: -312px -48px; + background-position: -312px -48px; } .icon-align-justify { - background-position: -336px -48px; + background-position: -336px -48px; } .icon-list { - background-position: -360px -48px; + background-position: -360px -48px; } .icon-indent-left { - background-position: -384px -48px; + background-position: -384px -48px; } .icon-indent-right { - background-position: -408px -48px; + background-position: -408px -48px; } .icon-facetime-video { - background-position: -432px -48px; + background-position: -432px -48px; } .icon-picture { - background-position: -456px -48px; + background-position: -456px -48px; } .icon-pencil { - background-position: 0 -72px; + background-position: 0 -72px; } .icon-map-marker { - background-position: -24px -72px; + background-position: -24px -72px; } .icon-adjust { - background-position: -48px -72px; + background-position: -48px -72px; } .icon-tint { - background-position: -72px -72px; + background-position: -72px -72px; } .icon-edit { - background-position: -96px -72px; + background-position: -96px -72px; } .icon-share { - background-position: -120px -72px; + background-position: -120px -72px; } .icon-check { - background-position: -144px -72px; + background-position: -144px -72px; } .icon-move { - background-position: -168px -72px; + background-position: -168px -72px; } .icon-step-backward { - background-position: -192px -72px; + background-position: -192px -72px; } .icon-fast-backward { - background-position: -216px -72px; + background-position: -216px -72px; } .icon-backward { - background-position: -240px -72px; + background-position: -240px -72px; } .icon-play { - background-position: -264px -72px; + background-position: -264px -72px; } .icon-pause { - background-position: -288px -72px; + background-position: -288px -72px; } .icon-stop { - background-position: -312px -72px; + background-position: -312px -72px; } .icon-forward { - background-position: -336px -72px; + background-position: -336px -72px; } .icon-fast-forward { - background-position: -360px -72px; + background-position: -360px -72px; } .icon-step-forward { - background-position: -384px -72px; + background-position: -384px -72px; } .icon-eject { - background-position: -408px -72px; + background-position: -408px -72px; } .icon-chevron-left { - background-position: -432px -72px; + background-position: -432px -72px; } .icon-chevron-right { - background-position: -456px -72px; + background-position: -456px -72px; } .icon-plus-sign { - background-position: 0 -96px; + background-position: 0 -96px; } .icon-minus-sign { - background-position: -24px -96px; + background-position: -24px -96px; } .icon-remove-sign { - background-position: -48px -96px; + background-position: -48px -96px; } .icon-ok-sign { - background-position: -72px -96px; + background-position: -72px -96px; } .icon-question-sign { - background-position: -96px -96px; + background-position: -96px -96px; } .icon-info-sign { - background-position: -120px -96px; + background-position: -120px -96px; } .icon-screenshot { - background-position: -144px -96px; + background-position: -144px -96px; } .icon-remove-circle { - background-position: -168px -96px; + background-position: -168px -96px; } .icon-ok-circle { - background-position: -192px -96px; + background-position: -192px -96px; } .icon-ban-circle { - background-position: -216px -96px; + background-position: -216px -96px; } .icon-arrow-left { - background-position: -240px -96px; + background-position: -240px -96px; } .icon-arrow-right { - background-position: -264px -96px; + background-position: -264px -96px; } .icon-arrow-up { - background-position: -289px -96px; + background-position: -289px -96px; } .icon-arrow-down { - background-position: -312px -96px; + background-position: -312px -96px; } .icon-share-alt { - background-position: -336px -96px; + background-position: -336px -96px; } .icon-resize-full { - background-position: -360px -96px; + background-position: -360px -96px; } .icon-resize-small { - background-position: -384px -96px; + background-position: -384px -96px; } .icon-plus { - background-position: -408px -96px; + background-position: -408px -96px; } .icon-minus { - background-position: -433px -96px; + background-position: -433px -96px; } .icon-asterisk { - background-position: -456px -96px; + background-position: -456px -96px; } .icon-exclamation-sign { - background-position: 0 -120px; + background-position: 0 -120px; } .icon-gift { - background-position: -24px -120px; + background-position: -24px -120px; } .icon-leaf { - background-position: -48px -120px; + background-position: -48px -120px; } .icon-fire { - background-position: -72px -120px; + background-position: -72px -120px; } .icon-eye-open { - background-position: -96px -120px; + background-position: -96px -120px; } .icon-eye-close { - background-position: -120px -120px; + background-position: -120px -120px; } .icon-warning-sign { - background-position: -144px -120px; + background-position: -144px -120px; } .icon-plane { - background-position: -168px -120px; + background-position: -168px -120px; } .icon-calendar { - background-position: -192px -120px; + background-position: -192px -120px; } .icon-random { - background-position: -216px -120px; - width: 16px; + background-position: -216px -120px; + width: 16px; } .icon-comment { - background-position: -240px -120px; + background-position: -240px -120px; } .icon-magnet { - background-position: -264px -120px; + background-position: -264px -120px; } .icon-chevron-up { - background-position: -288px -120px; + background-position: -288px -120px; } .icon-chevron-down { - background-position: -313px -119px; + background-position: -313px -119px; } .icon-retweet { - background-position: -336px -120px; + background-position: -336px -120px; } .icon-shopping-cart { - background-position: -360px -120px; + background-position: -360px -120px; } .icon-folder-close { - background-position: -384px -120px; + background-position: -384px -120px; } .icon-folder-open { - background-position: -408px -120px; - width: 16px; + background-position: -408px -120px; + width: 16px; } .icon-resize-vertical { - background-position: -432px -119px; + background-position: -432px -119px; } .icon-resize-horizontal { - background-position: -456px -118px; + background-position: -456px -118px; } .icon-hdd { - background-position: 0 -144px; + background-position: 0 -144px; } .icon-bullhorn { - background-position: -24px -144px; + background-position: -24px -144px; } .icon-bell { - background-position: -48px -144px; + background-position: -48px -144px; } .icon-certificate { - background-position: -72px -144px; + background-position: -72px -144px; } .icon-thumbs-up { - background-position: -96px -144px; + background-position: -96px -144px; } .icon-thumbs-down { - background-position: -120px -144px; + background-position: -120px -144px; } .icon-hand-right { - background-position: -144px -144px; + background-position: -144px -144px; } .icon-hand-left { - background-position: -168px -144px; + background-position: -168px -144px; } .icon-hand-up { - background-position: -192px -144px; + background-position: -192px -144px; } .icon-hand-down { - background-position: -216px -144px; + background-position: -216px -144px; } .icon-circle-arrow-right { - background-position: -240px -144px; + background-position: -240px -144px; } .icon-circle-arrow-left { - background-position: -264px -144px; + background-position: -264px -144px; } .icon-circle-arrow-up { - background-position: -288px -144px; + background-position: -288px -144px; } .icon-circle-arrow-down { - background-position: -312px -144px; + background-position: -312px -144px; } .icon-globe { - background-position: -336px -144px; + background-position: -336px -144px; } .icon-wrench { - background-position: -360px -144px; + background-position: -360px -144px; } .icon-tasks { - background-position: -384px -144px; + background-position: -384px -144px; } .icon-filter { - background-position: -408px -144px; + background-position: -408px -144px; } .icon-briefcase { - background-position: -432px -144px; + background-position: -432px -144px; } .icon-fullscreen { - background-position: -456px -144px; + background-position: -456px -144px; } .btn-group { - position: relative; - font-size: 0; - vertical-align: middle; - white-space: nowrap; - *margin-left: .3em; + position: relative; + font-size: 0; + vertical-align: middle; + white-space: nowrap; + *margin-left: .3em; } .btn-group:first-child { - *margin-left: 0; + *margin-left: 0; } .btn-group + .btn-group { - margin-left: 5px; + margin-left: 5px; } .btn-toolbar { - font-size: 0; - margin-top: 10px; - margin-bottom: 10px; + font-size: 0; + margin-top: 10px; + margin-bottom: 10px; } .btn-toolbar .btn-group { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ - *zoom: 1; + *zoom: 1; } .btn-toolbar .btn + .btn, .btn-toolbar .btn-group + .btn, .btn-toolbar .btn + .btn-group { - margin-left: 5px; + margin-left: 5px; } .btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; } .btn-group > .btn + .btn { - margin-left: -1px; + margin-left: -1px; } .btn-group > .btn, .btn-group > .dropdown-menu { - font-size: 14px; + font-size: 14px; } .btn-group > .btn-mini { - font-size: 11px; + font-size: 11px; } .btn-group > .btn-small { - font-size: 12px; + font-size: 12px; } .btn-group > .btn-large { - font-size: 16px; + font-size: 16px; } .btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; + margin-left: 0; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; } .btn-group > .btn:last-child, .btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; } .btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; + margin-left: 0; + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; } .btn-group > .btn.large:last-child, .btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; } .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active { - z-index: 2; + z-index: 2; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { - outline: 0; + outline: 0; } .btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - *padding-top: 5px; - *padding-bottom: 5px; + padding-left: 8px; + padding-right: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + *padding-top: 5px; + *padding-bottom: 5px; } .btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; + padding-left: 5px; + padding-right: 5px; + *padding-top: 2px; + *padding-bottom: 2px; } .btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; + *padding-top: 5px; + *padding-bottom: 4px; } .btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; + padding-left: 12px; + padding-right: 12px; + *padding-top: 7px; + *padding-bottom: 7px; } .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); + 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; + background-color: #e6e6e6; } .btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; + background-color: #0044cc; } .btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; + background-color: #f89406; } .btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; + background-color: #bd362f; } .btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; + background-color: #51a351; } .btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; + background-color: #2f96b4; } .btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; + background-color: #222222; } .btn .caret { - margin-top: 8px; - margin-left: 0; + margin-top: 8px; + margin-left: 0; } .btn-mini .caret, .btn-small .caret, .btn-large .caret { - margin-top: 6px; + margin-top: 6px; } .btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; + border-left-width: 5px; + border-right-width: 5px; + border-top-width: 5px; } .dropup .btn-large .caret { - border-bottom: 5px solid #000000; - border-top: 0; + border-bottom: 5px solid #000000; + border-top: 0; } .btn-primary .caret, .btn-warning .caret, @@ -2882,2956 +2999,2956 @@ input[type="submit"].btn.btn-mini { .btn-info .caret, .btn-success .caret, .btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; + border-top-color: #ffffff; + border-bottom-color: #ffffff; } .btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ - *zoom: 1; + *zoom: 1; } .btn-group-vertical .btn { - display: block; - float: none; - width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; + display: block; + float: none; + width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; } .btn-group-vertical .btn + .btn { - margin-left: 0; - margin-top: -1px; + margin-left: 0; + margin-top: -1px; } .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; + -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; + -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; + -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; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; } .nav { - margin-left: 0; - margin-bottom: 20px; - list-style: none; + margin-left: 0; + margin-bottom: 20px; + list-style: none; } .nav > li > a { - display: block; + display: block; } .nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; + text-decoration: none; + background-color: #eeeeee; } .nav > .pull-right { - float: right; + float: right; } .nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; } .nav li + .nav-header { - margin-top: 9px; + margin-top: 9px; } .nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; + padding-left: 15px; + padding-right: 15px; + margin-bottom: 0; } .nav-list > li > a, .nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + margin-left: -15px; + margin-right: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .nav-list > li > a { - padding: 3px 15px; + padding: 3px 15px; } .nav-list > .active > a, .nav-list > .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; } .nav-list [class^="icon-"] { - margin-right: 2px; + 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 #ffffff; + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; } .nav-tabs, .nav-pills { - *zoom: 1; + *zoom: 1; } .nav-tabs:before, .nav-pills:before, .nav-tabs:after, .nav-pills:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .nav-tabs:after, .nav-pills:after { - clear: both; + clear: both; } .nav-tabs > li, .nav-pills > li { - float: left; + float: left; } .nav-tabs > li > a, .nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; } .nav-tabs { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #ddd; } .nav-tabs > li { - margin-bottom: -1px; + 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; + 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: #eeeeee #eeeeee #dddddd; + border-color: #eeeeee #eeeeee #dddddd; } .nav-tabs > .active > a, .nav-tabs > .active > a:hover { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; + color: #555555; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; } .nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; } .nav-pills > .active > a, .nav-pills > .active > a:hover { - color: #ffffff; - background-color: #0088cc; + color: #ffffff; + background-color: #0088cc; } .nav-stacked > li { - float: none; + float: none; } .nav-stacked > li > a { - margin-right: 0; + margin-right: 0; } .nav-tabs.nav-stacked { - border-bottom: 0; + border-bottom: 0; } .nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; + 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; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; } .nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; } .nav-tabs.nav-stacked > li > a:hover { - border-color: #ddd; - z-index: 2; + border-color: #ddd; + z-index: 2; } .nav-pills.nav-stacked > li > a { - margin-bottom: 3px; + margin-bottom: 3px; } .nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; + 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; + -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; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; } .nav .dropdown-toggle .caret { - border-top-color: #0088cc; - border-bottom-color: #0088cc; - margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; + margin-top: 6px; } .nav .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; + border-top-color: #005580; + border-bottom-color: #005580; } /* move down carets for tabs */ .nav-tabs .dropdown-toggle .caret { - margin-top: 8px; + margin-top: 8px; } .nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; + border-top-color: #fff; + border-bottom-color: #fff; } .nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; + border-top-color: #555555; + border-bottom-color: #555555; } .nav > .dropdown.active > a:hover { - cursor: pointer; + cursor: pointer; } .nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > li.dropdown.open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; + color: #ffffff; + background-color: #999999; + border-color: #999999; } .nav li.dropdown.open .caret, .nav li.dropdown.open.active .caret, .nav li.dropdown.open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); } .tabs-stacked .open > a:hover { - border-color: #999999; + border-color: #999999; } .tabbable { - *zoom: 1; + *zoom: 1; } .tabbable:before, .tabbable:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .tabbable:after { - clear: both; + clear: both; } .tab-content { - overflow: auto; + overflow: auto; } .tabs-below > .nav-tabs, .tabs-right > .nav-tabs, .tabs-left > .nav-tabs { - border-bottom: 0; + border-bottom: 0; } .tab-content > .tab-pane, .pill-content > .pill-pane { - display: none; + display: none; } .tab-content > .active, .pill-content > .active { - display: block; + display: block; } .tabs-below > .nav-tabs { - border-top: 1px solid #ddd; + border-top: 1px solid #ddd; } .tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; + 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; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; } .tabs-below > .nav-tabs > li > a:hover { - border-bottom-color: transparent; - border-top-color: #ddd; + border-bottom-color: transparent; + border-top-color: #ddd; } .tabs-below > .nav-tabs > .active > a, .tabs-below > .nav-tabs > .active > a:hover { - border-color: transparent #ddd #ddd #ddd; + border-color: transparent #ddd #ddd #ddd; } .tabs-left > .nav-tabs > li, .tabs-right > .nav-tabs > li { - float: none; + float: none; } .tabs-left > .nav-tabs > li > a, .tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; } .tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; + 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; + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; } .tabs-left > .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; + border-color: #eeeeee #dddddd #eeeeee #eeeeee; } .tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; } .tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; + 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; + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; } .tabs-right > .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; + border-color: #eeeeee #eeeeee #eeeeee #dddddd; } .tabs-right > .nav-tabs .active > a, .tabs-right > .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; } .nav > .disabled > a { - color: #999999; + color: #999999; } .nav > .disabled > a:hover { - text-decoration: none; - background-color: transparent; - cursor: default; + text-decoration: none; + background-color: transparent; + cursor: default; } .navbar { - overflow: visible; - margin-bottom: 20px; - color: #777777; - *position: relative; - *z-index: 2; + overflow: visible; + margin-bottom: 20px; + color: #777777; + *position: relative; + *z-index: 2; } .navbar-inner { - min-height: 40px; - padding-left: 20px; - padding-right: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -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); - *zoom: 1; + min-height: 40px; + padding-left: 20px; + padding-right: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -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); + *zoom: 1; } .navbar-inner:before, .navbar-inner:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .navbar-inner:after { - clear: both; + clear: both; } .navbar .container { - width: auto; + width: auto; } .nav-collapse.collapse { - height: auto; + height: auto; } .navbar .brand { - float: left; - display: block; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; + float: left; + display: block; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; } .navbar .brand:hover { - text-decoration: none; + text-decoration: none; } .navbar-text { - margin-bottom: 0; - line-height: 40px; + margin-bottom: 0; + line-height: 40px; } .navbar-link { - color: #777777; + color: #777777; } .navbar-link:hover { - color: #333333; + color: #333333; } .navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-left: 1px solid #f2f2f2; - border-right: 1px solid #ffffff; + height: 40px; + margin: 0 9px; + border-left: 1px solid #f2f2f2; + border-right: 1px solid #ffffff; } .navbar .btn, .navbar .btn-group { - margin-top: 5px; + margin-top: 5px; } .navbar .btn-group .btn, .navbar .input-prepend .btn, .navbar .input-append .btn { - margin-top: 0; + margin-top: 0; } .navbar-form { - margin-bottom: 0; - *zoom: 1; + margin-bottom: 0; + *zoom: 1; } .navbar-form:before, .navbar-form:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .navbar-form:after { - clear: both; + clear: both; } .navbar-form input, .navbar-form select, .navbar-form .radio, .navbar-form .checkbox { - margin-top: 5px; + margin-top: 5px; } .navbar-form input, .navbar-form select, .navbar-form .btn { - display: inline-block; - margin-bottom: 0; + display: inline-block; + margin-bottom: 0; } .navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] { - margin-top: 3px; + margin-top: 3px; } .navbar-form .input-append, .navbar-form .input-prepend { - margin-top: 6px; - white-space: nowrap; + margin-top: 6px; + white-space: nowrap; } .navbar-form .input-append input, .navbar-form .input-prepend input { - margin-top: 0; + margin-top: 0; } .navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; } .navbar-search .search-query { - margin-bottom: 0; - padding: 4px 14px; - 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; + margin-bottom: 0; + padding: 4px 14px; + 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; + position: static; + width: 100%; + margin-bottom: 0; } .navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; + -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; + 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; + border-width: 0 0 1px; } .navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; + border-width: 1px 0 0; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; + padding-left: 0; + padding-right: 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; + width: 940px; } .navbar-fixed-top { - top: 0; + 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); + -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; + 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); + -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; + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; } .navbar .nav.pull-right { - float: right; - margin-right: 0; + float: right; + margin-right: 0; } .navbar .nav > li { - float: left; + float: left; } .navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; } .navbar .nav .dropdown-toggle .caret { - margin-top: 8px; + margin-top: 8px; } .navbar .nav > li > a:focus, .navbar .nav > li > a:hover { - background-color: transparent; - color: #333333; - text-decoration: none; + background-color: transparent; + color: #333333; + text-decoration: none; } .navbar .nav > .active > a, .navbar .nav > .active > a:hover, .navbar .nav > .active > a:focus { - color: #555555; - 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); + color: #555555; + 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-left: 5px; - margin-right: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - background-image: -moz-linear-gradient(top, #f2f2f2, #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-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - 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); - *background-color: #e5e5e5; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + display: none; + float: right; + padding: 7px 10px; + margin-left: 5px; + margin-right: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + background-image: -moz-linear-gradient(top, #f2f2f2, #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-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + 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); + *background-color: #e5e5e5; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - 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); + 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: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; } .navbar .btn-navbar:active, .navbar .btn-navbar.active { - background-color: #cccccc \9; + background-color: #cccccc \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); + 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; + margin-top: 3px; } .navbar .nav > li > .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + top: -7px; + left: 9px; } .navbar .nav > li > .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; + top: -6px; + left: 10px; } .navbar-fixed-bottom .nav > li > .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; + border-top: 7px solid #ccc; + border-top-color: rgba(0, 0, 0, 0.2); + border-bottom: 0; + bottom: -7px; + top: auto; } .navbar-fixed-bottom .nav > li > .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; + border-top: 6px solid #ffffff; + border-bottom: 0; + bottom: -6px; + top: auto; } .navbar .nav li.dropdown.open > .dropdown-toggle, .navbar .nav li.dropdown.active > .dropdown-toggle, .navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #e5e5e5; - color: #555555; + background-color: #e5e5e5; + color: #555555; } .navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; + border-top-color: #777777; + border-bottom-color: #777777; } .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: #555555; - border-bottom-color: #555555; + border-top-color: #555555; + border-bottom-color: #555555; } .navbar .pull-right > li > .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; + left: auto; + right: 0; } .navbar .pull-right > li > .dropdown-menu:before, .navbar .nav > li > .dropdown-menu.pull-right:before { - left: auto; - right: 12px; + left: auto; + right: 12px; } .navbar .pull-right > li > .dropdown-menu:after, .navbar .nav > li > .dropdown-menu.pull-right:after { - left: auto; - right: 13px; + left: auto; + right: 13px; } .navbar .pull-right > li > .dropdown-menu .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; + left: auto; + right: 100%; + margin-left: 0; + margin-right: -1px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; } .navbar-inverse { - color: #999999; + color: #999999; } .navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); - border-color: #252525; + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); + border-color: #252525; } .navbar-inverse .brand, .navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .navbar-inverse .brand:hover, .navbar-inverse .nav > li > a:hover { - color: #ffffff; + color: #ffffff; } .navbar-inverse .nav > li > a:focus, .navbar-inverse .nav > li > a:hover { - background-color: transparent; - color: #ffffff; + background-color: transparent; + color: #ffffff; } .navbar-inverse .nav .active > a, .navbar-inverse .nav .active > a:hover, .navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; + color: #ffffff; + background-color: #111111; } .navbar-inverse .navbar-link { - color: #999999; + color: #999999; } .navbar-inverse .navbar-link:hover { - color: #ffffff; + color: #ffffff; } .navbar-inverse .divider-vertical { - border-left-color: #111111; - border-right-color: #222222; + border-left-color: #111111; + border-right-color: #222222; } .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 { - background-color: #111111; - color: #ffffff; + background-color: #111111; + color: #ffffff; } .navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; + border-top-color: #999999; + border-bottom-color: #999999; } .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: #ffffff; - border-bottom-color: #ffffff; + border-top-color: #ffffff; + border-bottom-color: #ffffff; } .navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -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; + color: #ffffff; + background-color: #515151; + border-color: #111111; + -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: #cccccc; + color: #cccccc; } .navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; + color: #cccccc; } .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; + color: #cccccc; } .navbar-inverse .navbar-search .search-query:focus, .navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + outline: 0; } .navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - background-image: -moz-linear-gradient(top, #151515, #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-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #040404; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + background-image: -moz-linear-gradient(top, #151515, #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-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #040404; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + 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: #ffffff; - background-color: #040404; - *background-color: #000000; + color: #ffffff; + background-color: #040404; + *background-color: #000000; } .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active { - background-color: #000000 \9; + background-color: #000000 \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; + 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; - /* IE7 inline-block hack */ + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ - *zoom: 1; - text-shadow: 0 1px 0 #ffffff; + *zoom: 1; + text-shadow: 0 1px 0 #ffffff; } .breadcrumb .divider { - padding: 0 5px; - color: #ccc; + padding: 0 5px; + color: #ccc; } .breadcrumb .active { - color: #999999; + color: #999999; } .pagination { - height: 40px; - margin: 20px 0; + height: 40px; + margin: 20px 0; } .pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + *zoom: 1; + margin-left: 0; + margin-bottom: 0; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .pagination ul > li { - display: inline; + display: inline; } .pagination ul > li > a, .pagination ul > li > span { - float: left; - padding: 0 14px; - line-height: 38px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; + float: left; + padding: 0 14px; + line-height: 38px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; } .pagination ul > li > a:hover, .pagination ul > .active > a, .pagination ul > .active > span { - background-color: #f5f5f5; + background-color: #f5f5f5; } .pagination ul > .active > a, .pagination ul > .active > span { - color: #999999; - cursor: default; + color: #999999; + cursor: default; } .pagination ul > .disabled > span, .pagination ul > .disabled > a, .pagination ul > .disabled > a:hover { - color: #999999; - background-color: transparent; - cursor: default; + color: #999999; + background-color: transparent; + cursor: default; } .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; + 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; + -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; + text-align: center; } .pagination-right { - text-align: right; + text-align: right; } .pager { - margin: 20px 0; - list-style: none; - text-align: center; - *zoom: 1; + margin: 20px 0; + list-style: none; + text-align: center; + *zoom: 1; } .pager:before, .pager:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .pager:after { - clear: both; + clear: both; } .pager li { - display: inline; + 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; + 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; + text-decoration: none; + background-color: #f5f5f5; } .pager .next a, .pager .next span { - float: right; + float: right; } .pager .previous a { - float: left; + float: left; } .pager .disabled a, .pager .disabled a:hover, .pager .disabled span { - color: #999999; - background-color: #fff; - cursor: default; + color: #999999; + background-color: #fff; + cursor: default; } .thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; + margin-left: -20px; + list-style: none; + *zoom: 1; } .thumbnails:before, .thumbnails:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .thumbnails:after { - clear: both; + clear: both; } .row-fluid .thumbnails { - margin-left: 0; + margin-left: 0; } .thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; + 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 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; + 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 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); } .thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; + display: block; + max-width: 100%; + margin-left: auto; + margin-right: auto; } .thumbnail .caption { - padding: 9px; - color: #555555; + padding: 9px; + color: #555555; } .alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - 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; - color: #c09853; + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + 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; + color: #c09853; } .alert h4 { - margin: 0; + margin: 0; } .alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; + position: relative; + top: -2px; + right: -21px; + line-height: 20px; } .alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; + color: #468847; } .alert-danger, .alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; + color: #b94a48; } .alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; + color: #3a87ad; } .alert-block { - padding-top: 14px; - padding-bottom: 14px; + padding-top: 14px; + padding-bottom: 14px; } .alert-block > p, .alert-block > ul { - margin-bottom: 0; + margin-bottom: 0; } .alert-block p + p { - margin-top: 5px; + margin-top: 5px; } @-webkit-keyframes progress-bar-stripes { - from { + from { background-position: 40px 0; - } - to { +} +to { background-position: 0 0; - } +} } @-moz-keyframes progress-bar-stripes { - from { + from { background-position: 40px 0; - } - to { +} +to { background-position: 0 0; - } +} } @-ms-keyframes progress-bar-stripes { - from { + from { background-position: 40px 0; - } - to { +} +to { background-position: 0 0; - } +} } @-o-keyframes progress-bar-stripes { - from { + from { background-position: 0 0; - } - to { +} +to { background-position: 40px 0; - } +} } @keyframes progress-bar-stripes { - from { + from { background-position: 40px 0; - } - to { +} +to { background-position: 0 0; - } +} } .progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - 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; - 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); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + overflow: hidden; + height: 20px; + margin-bottom: 20px; + 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; + 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); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; } .progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -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 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; + width: 0%; + height: 100%; + color: #ffffff; + float: left; + font-size: 12px; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -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 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.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); + -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; + 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; + -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); + 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); + 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); + 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); + 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); + 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); + 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); + 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); + 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); } .hero-unit { - padding: 60px; - margin-bottom: 30px; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; + padding: 60px; + margin-bottom: 30px; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; } .hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; + margin-bottom: 0; + font-size: 60px; + line-height: 1; + color: inherit; + letter-spacing: -1px; } .hero-unit p { - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; } .tooltip { - position: absolute; - z-index: 1030; - display: block; - visibility: visible; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); + position: absolute; + z-index: 1030; + display: block; + visibility: visible; + padding: 5px; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); } .tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); + opacity: 0.8; + filter: alpha(opacity=80); } .tooltip.top { - margin-top: -3px; + margin-top: -3px; } .tooltip.right { - margin-left: 3px; + margin-left: 3px; } .tooltip.bottom { - margin-top: 3px; + margin-top: 3px; } .tooltip.left { - margin-left: -3px; + margin-left: -3px; } .tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; } .tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } .tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; } .tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; } .tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; } .tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; } .popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - width: 236px; - padding: 1px; - background-color: #ffffff; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - 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); + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + width: 236px; + padding: 1px; + background-color: #ffffff; + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + 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); } .popover.top { - margin-bottom: 10px; + margin-bottom: 10px; } .popover.right { - margin-left: 10px; + margin-left: 10px; } .popover.bottom { - margin-top: 10px; + margin-top: 10px; } .popover.left { - margin-right: 10px; + margin-right: 10px; } .popover-title { - margin: 0; - padding: 8px 14px; - 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; + margin: 0; + padding: 8px 14px; + 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; + padding: 9px 14px; } .popover-content p, .popover-content ul, .popover-content ol { - margin-bottom: 0; + margin-bottom: 0; } .popover .arrow, .popover .arrow:after { - position: absolute; - display: inline-block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; + position: absolute; + display: inline-block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } .popover .arrow:after { - content: ""; - z-index: -1; + content: ""; + z-index: -1; } .popover.top .arrow { - bottom: -10px; - left: 50%; - margin-left: -10px; - border-width: 10px 10px 0; - border-top-color: #ffffff; + bottom: -10px; + left: 50%; + margin-left: -10px; + border-width: 10px 10px 0; + border-top-color: #ffffff; } .popover.top .arrow:after { - border-width: 11px 11px 0; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -1px; - left: -11px; + border-width: 11px 11px 0; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -1px; + left: -11px; } .popover.right .arrow { - top: 50%; - left: -10px; - margin-top: -10px; - border-width: 10px 10px 10px 0; - border-right-color: #ffffff; + top: 50%; + left: -10px; + margin-top: -10px; + border-width: 10px 10px 10px 0; + border-right-color: #ffffff; } .popover.right .arrow:after { - border-width: 11px 11px 11px 0; - border-right-color: rgba(0, 0, 0, 0.25); - bottom: -11px; - left: -1px; + border-width: 11px 11px 11px 0; + border-right-color: rgba(0, 0, 0, 0.25); + bottom: -11px; + left: -1px; } .popover.bottom .arrow { - top: -10px; - left: 50%; - margin-left: -10px; - border-width: 0 10px 10px; - border-bottom-color: #ffffff; + top: -10px; + left: 50%; + margin-left: -10px; + border-width: 0 10px 10px; + border-bottom-color: #ffffff; } .popover.bottom .arrow:after { - border-width: 0 11px 11px; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -1px; - left: -11px; + border-width: 0 11px 11px; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -1px; + left: -11px; } .popover.left .arrow { - top: 50%; - right: -10px; - margin-top: -10px; - border-width: 10px 0 10px 10px; - border-left-color: #ffffff; + top: 50%; + right: -10px; + margin-top: -10px; + border-width: 10px 0 10px 10px; + border-left-color: #ffffff; } .popover.left .arrow:after { - border-width: 11px 0 11px 11px; - border-left-color: rgba(0, 0, 0, 0.25); - bottom: -11px; - right: -1px; + border-width: 11px 0 11px 11px; + border-left-color: rgba(0, 0, 0, 0.25); + bottom: -11px; + right: -1px; } .modal-open .modal .dropdown-menu { - z-index: 2050; + z-index: 2050; } .modal-open .modal .dropdown.open { - *z-index: 2050; + *z-index: 2050; } .modal-open .modal .popover { - z-index: 2060; + z-index: 2060; } .modal-open .modal .tooltip { - z-index: 2080; + z-index: 2080; } .modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; } .modal-backdrop.fade { - opacity: 0; + opacity: 0; } .modal-backdrop, .modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); + opacity: 0.8; + filter: alpha(opacity=80); } .modal { - position: fixed; - top: 50%; - left: 50%; - z-index: 1050; - overflow: auto; - width: 560px; - margin: -250px 0 0 -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ + position: fixed; + top: 50%; + left: 50%; + z-index: 1050; + overflow: auto; + width: 560px; + margin: -250px 0 0 -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; } .modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - 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; + top: -25%; } .modal.fade.in { - top: 50%; + top: 50%; } .modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; + padding: 9px 15px; + border-bottom: 1px solid #eee; } .modal-header .close { - margin-top: 2px; + margin-top: 2px; } .modal-header h3 { - margin: 0; - line-height: 30px; + margin: 0; + line-height: 30px; } .modal-body { - overflow-y: auto; - max-height: 400px; - padding: 15px; + overflow-y: auto; + max-height: 400px; + padding: 15px; } .modal-form { - margin-bottom: 0; + 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; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; + 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; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + *zoom: 1; } .modal-footer:before, .modal-footer:after { - display: table; - content: ""; - line-height: 0; + display: table; + content: ""; + line-height: 0; } .modal-footer:after { - clear: both; + clear: both; } .modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; + margin-left: 5px; + margin-bottom: 0; } .modal-footer .btn-group .btn + .btn { - margin-left: -1px; + margin-left: -1px; } .dropup, .dropdown { - position: relative; + position: relative; } .dropdown-toggle { - *margin-bottom: -3px; + *margin-bottom: -3px; } .dropdown-toggle:active, .open .dropdown-toggle { - outline: 0; + outline: 0; } .caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; } .dropdown .caret { - margin-top: 8px; - margin-left: 2px; + 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: #ffffff; - 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; + 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: #ffffff; + 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; + 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 #ffffff; + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; } .dropdown-menu a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; } .dropdown-menu li > a:hover, .dropdown-menu li > a:focus, .dropdown-submenu:hover > a { - text-decoration: none; - color: #ffffff; - background-color: #0088cc; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); + text-decoration: none; + color: #ffffff; + background-color: #0088cc; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #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: #ffffff; - text-decoration: none; - outline: 0; - background-color: #0088cc; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #0088cc; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); } .dropdown-menu .disabled > a, .dropdown-menu .disabled > a:hover { - color: #999999; + color: #999999; } .dropdown-menu .disabled > a:hover { - text-decoration: none; - background-color: transparent; - cursor: default; + text-decoration: none; + background-color: transparent; + cursor: default; } .open { - *z-index: 1000; + *z-index: 1000; } .open > .dropdown-menu { - display: block; + display: block; } .pull-right > .dropdown-menu { - right: 0; - left: auto; + right: 0; + left: auto; } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; + top: auto; + bottom: 100%; + margin-bottom: 1px; } .dropdown-submenu { - position: relative; + 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; + 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; + display: block; } .dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; } .dropdown-submenu:hover > a:after { - border-left-color: #ffffff; + border-left-color: #ffffff; } .dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; + padding-left: 20px; + padding-right: 20px; } .typeahead { - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; } .accordion { - margin-bottom: 20px; + margin-bottom: 20px; } .accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; } .accordion-heading { - border-bottom: 0; + border-bottom: 0; } .accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; + display: block; + padding: 8px 15px; } .accordion-toggle { - cursor: pointer; + cursor: pointer; } .accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; + padding: 9px 15px; + border-top: 1px solid #e5e5e5; } .carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; + position: relative; + margin-bottom: 20px; + line-height: 1; } .carousel-inner { - overflow: hidden; - width: 100%; - position: relative; + overflow: hidden; + width: 100%; + position: relative; } .carousel .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; } .carousel .item > img { - display: block; - line-height: 1; + display: block; + line-height: 1; } .carousel .active, .carousel .next, .carousel .prev { - display: block; + display: block; } .carousel .active { - left: 0; + left: 0; } .carousel .next, .carousel .prev { - position: absolute; - top: 0; - width: 100%; + position: absolute; + top: 0; + width: 100%; } .carousel .next { - left: 100%; + left: 100%; } .carousel .prev { - left: -100%; + left: -100%; } .carousel .next.left, .carousel .prev.right { - left: 0; + left: 0; } .carousel .active.left { - left: -100%; + left: -100%; } .carousel .active.right { - left: 100%; + left: 100%; } .carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); } .carousel-control.right { - left: auto; - right: 15px; + left: auto; + right: 15px; } .carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); } .carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); } .carousel-caption h4, .carousel-caption p { - color: #ffffff; - line-height: 20px; + color: #ffffff; + line-height: 20px; } .carousel-caption h4 { - margin: 0 0 5px; + margin: 0 0 5px; } .carousel-caption p { - margin-bottom: 0; + margin-bottom: 0; } .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); + 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); + 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; + 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; + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; } .close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); } .close:hover { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); } button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; } .pull-right { - float: right; + float: right; } .pull-left { - float: left; + float: left; } .hide { - display: none; + display: none; } .show { - display: block; + display: block; } .invisible { - visibility: hidden; + visibility: hidden; } .affix { - position: fixed; + position: fixed; } .fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; } .fade.in { - opacity: 1; + opacity: 1; } .collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; } .collapse.in { - height: auto; + height: auto; } .hidden { - display: none; - visibility: hidden; + display: none; + visibility: hidden; } .visible-phone { - display: none !important; + display: none !important; } .visible-tablet { - display: none !important; + display: none !important; } .hidden-desktop { - display: none !important; + display: none !important; } .visible-desktop { - display: inherit !important; + 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; - } + .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; - } + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } } @media (max-width: 767px) { - body { - padding-left: 20px; - padding-right: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - clear: none; - width: auto; - 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"] { - float: none; - display: block; - 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; - left: 20px; - right: 20px; - width: auto; - margin: 0; - } - .modal.fade.in { - top: auto; - } + body { + padding-left: 20px; + padding-right: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-left: -20px; + margin-right: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + clear: none; + width: auto; + 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"] { + float: none; + display: block; + 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; + left: 20px; + right: 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-left: 10px; - padding-right: 10px; - } - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } + .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-left: 10px; + padding-right: 10px; + } + .modal { + top: 10px; + left: 10px; + right: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } } @media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .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; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - } - .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; - } + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + line-height: 0; + } + .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; + content: ""; + line-height: 0; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + } + .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 (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .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; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - } - .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; - } + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + line-height: 0; + } + .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;t + } + .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; + content: ""; + line-height: 0; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + } + .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 (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-left: 10px; - padding-right: 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: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -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: #111111; - } - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: block; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .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: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } + 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-left: 10px; + padding-right: 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: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -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: #111111; + } + .nav-collapse.in .btn-group { + margin-top: 5px; + padding: 0; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + float: none; + display: block; + max-width: none; + margin: 0 15px; + padding: 0; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .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: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + overflow: hidden; + height: 0; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-left: 10px; + padding-right: 10px; + } } @media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } } diff --git a/idrop-web/web-app/css/bootstrap.css~ b/idrop-web/web-app/css/bootstrap.css~ new file mode 100755 index 0000000..e80a582 --- /dev/null +++ b/idrop-web/web-app/css/bootstrap.css~ @@ -0,0 +1,5952 @@ +/*! + * Bootstrap v2.1.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + display: table; + content: ""; + line-height: 0; +} +.clearfix:afterP { + 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; +} +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 { + /* Responsive images (ensure images don't scale beyond their parents) */ + + max-width: 100%; + /* Part 1: Set a maxium relative to the parent */ + + width: auto\9; + /* IE7-8 need help adjusting responsive images */ + + height: auto; + /* Part 2: Scale the height according to the width, otherwise you get stretching */ + + 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; +} +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} +a { + color: #0088cc; + text-decoration: none; +} +a:hover { + color: #005580; + text-decoration: underline; +} + +/*Paulina's changes start*/ + +.delConditionBtn{ + padding: 5px 20px; + background-color: transparent; + font-size: 14px; + color: #B80000; + text-shadow: 0 1px 0 #B80000; + opacity: 0.75; + border-color: #B80000; + border-style: solid; + border-width: 2px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + +} + +.addConditionBtn{ + padding: 5px; + margin-right: 70%; + background-color: transparent; + font-size: 14px; + font-weight: bold; + color: #336699; + text-shadow: 0 1px 0 #336699; + opacity: 0.75; + border-color: #336699; + border-style: solid; + border-width: 2px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; +} + +.deleteNodeBtn{ + margin-left: 85%; + font-size: 15px; + font-weight: bold; + color: #336699; + opacity: 0.75; + border-color: transparent; + +} +.span2 > .metaHelp{ + display: block; + background-color: #d5d5d5; + width: 100%; + font-size: 13px; + text-align: justify; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} + +.filterMetaTable { + min-width: 95%; + border-bottom: medium inset silver; + border-top: medium ridge silver; +} + +.filterMetaTable th { + padding: 8px; + vertical-align: middle; +} + +.filterMetaTable > tbody > tr { + vertical-align: middle; + border-top: thin solid silver; + padding: 10px; +} +.filterMetaTable >tbody > tr > td { + + padding: 8px; + width:25%; +} + + + +.labelRadio { + font-size: 13px; + display: inline; + color: #336699; + text-shadow: 0 1px 0 #336699; +} + + + +.meta-header { /*header for input in filter form */ + + display: block; + padding: 3px; + width: 180px; + font-size: 12px; + font-weight: bold; + color: #336699; + background-color: #d5d5d5; + text-shadow: 0 1px 0 #336699; + text-transform: uppercase; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + + +.metaOperator { + width: 80px; +} + + +/*Paulina's changes end*/ +.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; + content: ""; + line-height: 0; +} +.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; + content: ""; + line-height: 0; +} +.row-fluid:after { + clear: both; +} +.row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; +} +.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; + content: ""; + line-height: 0; +} +.container:after { + clear: both; +} +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} +.container-fluid:before, +.container-fluid:after { + display: table; + content: ""; + line-height: 0; +} +.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: #999999; +} +.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: #999999; +} +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 #eeeeee; +} +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; + content: ""; + line-height: 0; +} +.dl-horizontal:after { + clear: both; +} +.dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.dl-horizontal dd { + margin-left: 180px; +} +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} +abbr[title] { + cursor: help; + border-bottom: 1px dotted #999999; +} +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee;tab +} +blockquote p { + margin-bottom: 0; + font-size: 16px; + font-weight: 300; + line-height: 25px; +} +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} +blockquote small:before { + content: '\2014 \00A0'; +} +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + 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: #333333; + -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; +} +.label, +.badge { + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + vertical-align: baseline; + white-space: nowrap; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #999999; +} +.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: #ffffff; + 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: #333333; +} +.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; +} +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 #dddddd; +} + +.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 #dddddd; +} +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} +.table-bordered { + border: 1px solid #dddddd; + 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 #dddddd; +} +.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; +} +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: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +legend small { + font-size: 15px; + color: #999999; +} +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: #555555; + -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: #ffffff; + border: 1px solid #cccccc; + -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; + /* IE6-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: 0; + /* IE7 */ + + margin-top: 1px \9; + /* IE8-9 */ + + 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; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} +select { + width: 220px; + border: 1px solid #cccccc; + background-color: #ffffff; +} +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: #999999; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} +.uneditable-textarea { + width: auto; + height: auto; +} +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} +.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; + content: ""; + line-height: 0; +} +.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: #eeeeee; +} +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; + content: ""; + line-height: 0; +} +.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; + /* IE7 inline-block hack */ + + *zoom: 1; + vertical-align: middle; + padding-left: 5px; +} +.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 #ffffff; + background-color: #eeeeee; + 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; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +/* Allow for input prepend/append in search forms */ +.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; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-bottom: 0; + vertical-align: middle; +} +.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; + content: ""; + line-height: 0; +} +.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; +} +.btn { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + padding: 4px 14px; + margin-bottom: 0; + font-size: 14px; + line-height: 20px; + *line-height: 20px; + text-align: center; + vertical-align: middle; + cursor: pointer; + color: #333333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e6e6e6; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border: 1px solid #bbbbbb; + *border: 0; + border-bottom-color: #a2a2a2; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *margin-left: .3em; + -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: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} +.btn:active, +.btn.active { + background-color: #cccccc \9; +} +.btn:first-child { + *margin-left: 0; +} +.btn:hover { + color: #333333; + text-decoration: none; + background-color: #e6e6e6; + *background-color: #d9d9d9; + /* Buttons in IE7 don't get borders, so darken on hover */ + + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn.active, +.btn:active { + background-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: 0.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-left: 0; + padding-right: 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: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-primary:hover, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + 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); + 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); + *background-color: #f89406; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-warning:hover, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #bd362f; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-danger:hover, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #51a351; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-success:hover, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #2f96b4; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-info:hover, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #222222; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *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 { + border-color: transparent; + cursor: pointer; + color: #0088cc; + -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: #333333; + text-decoration: none; +} +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + *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; + margin-top: 1px; +} +/* White icons with optional class, or on hover/active states of certain elements */ +.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 { + background-position: -216px -120px; + width: 16px; +} +.icon-comment { + background-position: -240px -120px; +} +.icon-magnet { + background-position: -264px -120px; +} +.icon-chevron-up { + background-position: -288px -120px; +} +.icon-chevron-down { + background-position: -313px -119px; +} +.icon-retweet { + background-position: -336px -120px; +} +.icon-shopping-cart { + background-position: -360px -120px; +} +.icon-folder-close { + background-position: -384px -120px; +} +.icon-folder-open { + background-position: -408px -120px; + width: 16px; +} +.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; +} +.btn-group { + position: relative; + font-size: 0; + vertical-align: middle; + white-space: nowrap; + *margin-left: .3em; +} +.btn-group:first-child { + *margin-left: 0; +} +.btn-group + .btn-group { + margin-left: 5px; +} +.btn-toolbar { + font-size: 0; + margin-top: 10px; + margin-bottom: 10px; +} +.btn-toolbar .btn-group { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *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-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + *padding-top: 5px; + *padding-bottom: 5px; +} +.btn-group > .btn-mini + .dropdown-toggle { + padding-left: 5px; + padding-right: 5px; + *padding-top: 2px; + *padding-bottom: 2px; +} +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} +.btn-group > .btn-large + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; + *padding-top: 7px; + *padding-bottom: 7px; +} +.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: #0044cc; +} +.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: #222222; +} +.btn .caret { + margin-top: 8px; + margin-left: 0; +} +.btn-mini .caret, +.btn-small .caret, +.btn-large .caret { + margin-top: 6px; +} +.btn-large .caret { + border-left-width: 5px; + border-right-width: 5px; + border-top-width: 5px; +} +.dropup .btn-large .caret { + border-bottom: 5px solid #000000; + border-top: 0; +} +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *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-left: 0; + margin-top: -1px; +} +.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; +} +.nav { + margin-left: 0; + margin-bottom: 20px; + list-style: none; +} +.nav > li > a { + display: block; +} +.nav > li > a:hover { + text-decoration: none; + background-color: #eeeeee; +} +.nav > .pull-right { + float: right; +} +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} +.nav li + .nav-header { + margin-top: 9px; +} +.nav-list { + padding-left: 15px; + padding-right: 15px; + margin-bottom: 0; +} +.nav-list > li > a, +.nav-list .nav-header { + margin-left: -15px; + margin-right: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.nav-list > li > a { + padding: 3px 15px; +} +.nav-list > .active > a, +.nav-list > .active > a:hover { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} +.nav-list [class^="icon-"] { + margin-right: 2px; +} +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} +.nav-tabs, +.nav-pills { + *zoom: 1; +} +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + content: ""; + line-height: 0; +} +.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: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover { + color: #555555; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.nav-pills > .active > a, +.nav-pills > .active > a:hover { + color: #ffffff; + background-color: #0088cc; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li > a { + margin-right: 0; +} +.nav-tabs.nav-stacked { + border-bottom: 0; +} +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; +} +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.nav-tabs.nav-stacked > li > a:hover { + border-color: #ddd; + z-index: 2; +} +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} +.nav-tabs .dropdown-menu { + -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 { + border-top-color: #0088cc; + border-bottom-color: #0088cc; + margin-top: 6px; +} +.nav .dropdown-toggle:hover .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} +/* move down carets for tabs */ +.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: #555555; + border-bottom-color: #555555; +} +.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: #ffffff; + background-color: #999999; + border-color: #999999; +} +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} +.tabs-stacked .open > a:hover { + border-color: #999999; +} +.tabbable { + *zoom: 1; +} +.tabbable:before, +.tabbable:after { + display: table; + content: ""; + line-height: 0; +} +.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-bottom-color: transparent; + border-top-color: #ddd; +} +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover { + border-color: transparent #ddd #ddd #ddd; +} +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.tabs-left > .nav-tabs > li > a:hover { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.tabs-right > .nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} +.nav > .disabled > a { + color: #999999; +} +.nav > .disabled > a:hover { + text-decoration: none; + background-color: transparent; + cursor: default; +} +.navbar { + overflow: visible; + margin-bottom: 20px; + color: #777777; + *position: relative; + *z-index: 2; +} +.navbar-inner { + min-height: 40px; + padding-left: 20px; + padding-right: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -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); + *zoom: 1; +} +.navbar-inner:before, +.navbar-inner:after { + display: table; + content: ""; + line-height: 0; +} +.navbar-inner:after { + clear: both; +} +.navbar .container { + width: auto; +} +.nav-collapse.collapse { + height: auto; +} +.navbar .brand { + float: left; + display: block; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} +.navbar .brand:hover { + text-decoration: none; +} +.navbar-text { + margin-bottom: 0; + line-height: 40px; +} +.navbar-link { + color: #777777; +} +.navbar-link:hover { + color: #333333; +} +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-left: 1px solid #f2f2f2; + border-right: 1px solid #ffffff; +} +.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; + content: ""; + line-height: 0; +} +.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 { + margin-bottom: 0; + padding: 4px 14px; + 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-left: 0; + padding-right: 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: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + background-color: transparent; + color: #333333; + text-decoration: none; +} +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + 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-left: 5px; + margin-right: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + background-image: -moz-linear-gradient(top, #f2f2f2, #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-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + 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); + *background-color: #e5e5e5; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + 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: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \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 { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + top: -7px; + left: 9px; +} +.navbar .nav > li > .dropdown-menu:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; + top: -6px; + left: 10px; +} +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + border-top: 7px solid #ccc; + border-top-color: rgba(0, 0, 0, 0.2); + border-bottom: 0; + bottom: -7px; + top: auto; +} +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + border-top: 6px solid #ffffff; + border-bottom: 0; + bottom: -6px; + top: auto; +} +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + background-color: #e5e5e5; + color: #555555; +} +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} +.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: #555555; + border-bottom-color: #555555; +} +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + left: auto; + right: 0; +} +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + left: auto; + right: 12px; +} +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + left: auto; + right: 13px; +} +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + left: auto; + right: 100%; + margin-left: 0; + margin-right: -1px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} +.navbar-inverse { + color: #999999; +} +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); + border-color: #252525; +} +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; +} +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + background-color: transparent; + color: #ffffff; +} +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} +.navbar-inverse .navbar-link { + color: #999999; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .divider-vertical { + border-left-color: #111111; + border-right-color: #222222; +} +.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 { + background-color: #111111; + color: #ffffff; +} +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} +.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: #ffffff; + border-bottom-color: #ffffff; +} +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -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: #cccccc; +} +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + outline: 0; +} +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + background-image: -moz-linear-gradient(top, #151515, #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-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #040404; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + 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: #ffffff; + background-color: #040404; + *background-color: #000000; +} +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \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; + /* IE7 inline-block hack */ + + *zoom: 1; + text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb .divider { + padding: 0 5px; + color: #ccc; +} +.breadcrumb .active { + color: #999999; +} +.pagination { + height: 40px; + margin: 20px 0; +} +.pagination ul { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-left: 0; + margin-bottom: 0; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination 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: #ffffff; + border: 1px solid #dddddd; + 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: #999999; + cursor: default; +} +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover { + color: #999999; + background-color: transparent; + cursor: default; +} +.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; + list-style: none; + text-align: center; + *zoom: 1; +} +.pager:before, +.pager:after { + display: table; + content: ""; + line-height: 0; +} +.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: #999999; + background-color: #fff; + cursor: default; +} +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} +.thumbnails:before, +.thumbnails:after { + display: table; + content: ""; + line-height: 0; +} +.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 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +a.thumbnail:hover { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} +.thumbnail > img { + display: block; + max-width: 100%; + margin-left: auto; + margin-right: auto; +} +.thumbnail .caption { + padding: 9px; + color: #555555; +} +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + 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; + color: #c09853; +} +.alert h4 { + margin: 0; +} +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #468847; +} +.alert-danger, +.alert-error { + background-color: #f2dede; + border-color: #eed3d7; + color: #b94a48; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #3a87ad; +} +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} +.alert-block p + p { + margin-top: 5px; +} +@-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 { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + 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; + 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); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.progress .bar { + width: 0%; + height: 100%; + color: #ffffff; + float: left; + font-size: 12px; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -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 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.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); +} +.hero-unit { + padding: 60px; + margin-bottom: 30px; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + color: inherit; + letter-spacing: -1px; +} +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; +} +.tooltip { + position: absolute; + z-index: 1030; + display: block; + visibility: visible; + padding: 5px; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} +.tooltip.top { + margin-top: -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: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + width: 236px; + padding: 1px; + background-color: #ffffff; + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + 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); +} +.popover.top { + margin-bottom: 10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-right: 10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + 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 { + content: ""; + z-index: -1; +} +.popover.top .arrow { + bottom: -10px; + left: 50%; + margin-left: -10px; + border-width: 10px 10px 0; + border-top-color: #ffffff; +} +.popover.top .arrow:after { + border-width: 11px 11px 0; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -1px; + left: -11px; +} +.popover.right .arrow { + top: 50%; + left: -10px; + margin-top: -10px; + border-width: 10px 10px 10px 0; + border-right-color: #ffffff; +} +.popover.right .arrow:after { + border-width: 11px 11px 11px 0; + border-right-color: rgba(0, 0, 0, 0.25); + bottom: -11px; + left: -1px; +} +.popover.bottom .arrow { + top: -10px; + left: 50%; + margin-left: -10px; + border-width: 0 10px 10px; + border-bottom-color: #ffffff; +} +.popover.bottom .arrow:after { + border-width: 0 11px 11px; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -1px; + left: -11px; +} +.popover.left .arrow { + top: 50%; + right: -10px; + margin-top: -10px; + border-width: 10px 0 10px 10px; + border-left-color: #ffffff; +} +.popover.left .arrow:after { + border-width: 11px 0 11px 11px; + border-left-color: rgba(0, 0, 0, 0.25); + bottom: -11px; + right: -1px; +} +.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: #000000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 1050; + overflow: auto; + width: 560px; + margin: -250px 0 0 -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.modal.fade { + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} +.modal.fade.in { + top: 50%; +} +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} +.modal-header .close { + margin-top: 2px; +} +.modal-header h3 { + margin: 0; + line-height: 30px; +} +.modal-body { + overflow-y: auto; + max-height: 400px; + padding: 15px; +} +.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; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + *zoom: 1; +} +.modal-footer:before, +.modal-footer:after { + display: table; + content: ""; + line-height: 0; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.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 #000000; + 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: #ffffff; + 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 #ffffff; +} +.dropdown-menu a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} +.dropdown-menu li > a:hover, +.dropdown-menu li > a:focus, +.dropdown-submenu:hover > a { + text-decoration: none; + color: #ffffff; + background-color: #0088cc; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #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: #ffffff; + text-decoration: none; + outline: 0; + background-color: #0088cc; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} +.dropdown-menu .disabled > a, +.dropdown-menu .disabled > a:hover { + color: #999999; +} +.dropdown-menu .disabled > a:hover { + text-decoration: none; + background-color: transparent; + cursor: default; +} +.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 #000000; + 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; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} +.dropdown .dropdown-menu .nav-header { + padding-left: 20px; + padding-right: 20px; +} +.typeahead { + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.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 { + overflow: hidden; + width: 100%; + position: relative; +} +.carousel .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel .item > img { + display: block; + line-height: 1; +} +.carousel .active, +.carousel .next, +.carousel .prev { + display: block; +} +.carousel .active { + left: 0; +} +.carousel .next, +.carousel .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel .next { + left: 100%; +} +.carousel .prev { + left: -100%; +} +.carousel .next.left, +.carousel .prev.right { + left: 0; +} +.carousel .active.left { + left: -100%; +} +.carousel .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} +.carousel-control.right { + left: auto; + right: 15px; +} +.carousel-control:hover { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-caption { + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} +.carousel-caption h4, +.carousel-caption p { + color: #ffffff; + line-height: 20px; +} +.carousel-caption h4 { + margin: 0 0 5px; +} +.carousel-caption p { + margin-bottom: 0; +} +.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; +} +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.hide { + display: none; +} +.show { + display: block; +} +.invisible { + visibility: hidden; +} +.affix { + position: fixed; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} +.collapse.in { + height: auto; +} +.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 (max-width: 767px) { + body { + padding-left: 20px; + padding-right: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-left: -20px; + margin-right: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + clear: none; + width: auto; + 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"] { + float: none; + display: block; + 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; + left: 20px; + right: 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"], |