Index: update.php =================================================================== RCS file: /cvs/drupal/drupal/update.php,v retrieving revision 1.205 diff -u -F^f -r1.205 update.php --- update.php 2 Oct 2006 11:36:17 -0000 1.205 +++ update.php 24 Nov 2006 02:04:19 -0000 @@ -785,6 +785,9 @@ function update_create_cache_tables() { update_fix_watchdog(); update_fix_sessions(); + // Clear any cached CSS files, in case any module updates its CSS as well + drupal_flush_css_cache(); + $op = isset($_REQUEST['op']) ? $_REQUEST['op'] : ''; switch ($op) { case 'Update': Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.589 diff -u -F^f -r1.589 common.inc --- includes/common.inc 21 Nov 2006 19:40:09 -0000 1.589 +++ includes/common.inc 24 Nov 2006 02:04:19 -0000 @@ -1286,19 +1286,27 @@ function drupal_add_link($attributes) { * Adds a CSS file to the stylesheet queue. * * @param $path - * The path to the CSS file relative to the base_path(), e.g., /modules/devel/devel.css. + * (optional) The path to the CSS file relative to the base_path(), e.g., /modules/devel/devel.css. * @param $type - * The type of stylesheet that is being added. Types are: core, module, and theme. + * (optional) The type of stylesheet that is being added. Types are: core, module, and theme. * @param $media * (optional) The media type for the stylesheet, e.g., all, print, screen. + * @param $cache + * (optional) Should this CSS file be cached if cache CSS setting is turned on? * @return * An array of CSS files. */ -function drupal_add_css($path = NULL, $type = 'module', $media = 'all') { - static $css = array('core' => array(), 'module' => array(), 'theme' => array()); +function drupal_add_css($path = NULL, $type = 'module', $media = 'all', $cache = TRUE) { + static $css = array(); - if (!is_null($path)) { - $css[$type][$path] = array('path' => $path, 'media' => $media); + // Create an array of CSS files for each media type first, since each type needs to be served + // to the browser differently. + if (isset($path)) { + // This check is necessary to ensure proper cascading of styles and is faster than an asort() + if (!isset($css[$media])) { + $css[$media] = array('core' => array(), 'module' => array(), 'theme' => array()); + } + $css[$media][$type][$path] = $cache; } return $css; @@ -1316,13 +1324,34 @@ function drupal_add_css($path = NULL, $t */ function drupal_get_css($css = NULL) { $output = ''; - if (is_null($css)) { + if (!isset($css)) { $css = drupal_add_css(); } - foreach ($css as $type) { - foreach ($type as $file) { - $output .= '\n"; + $cache_css = variable_get('cache_css', FALSE); + $directory_path = file_directory_path(); + $is_writable = is_writable($directory_path); + + foreach ($css as $media => $types) { + if ($is_writable && $cache_css) { + $filename = md5(serialize($types)) .'.css'; + $path = $directory_path .'/css/'; + + if (!file_exists($path . $filename)) { + $filename = drupal_build_css_cache($types); + } + + $output .= ''. "\n"; + } + + // If CSS caching is off, we still need to ouput the styles + // Additionally, go through any remaining styles if CSS caching is on and output the non-cached ones + foreach ($types as $type) { + foreach ($type as $file => $cache) { + if (!$cache || !$cache_css) { + $output .= '' ."\n"; + } + } } } @@ -1330,6 +1359,71 @@ function drupal_get_css($css = NULL) { } /** + * Aggregate and optimize CSS files, putting them in the files directory. + * + * @param $css + * An array of CSS files to aggregate and compress into one file. + * @return + * The name of the CSS file. + */ +function drupal_build_css_cache($css) { + $data = ''; + $filename = md5(serialize($css)) .'.css'; + + // Create the css/ within the files folder + file_check_directory(file_create_path('css'), FILE_CREATE_DIRECTORY); + + // Build aggregate CSS file + foreach ($css as $type) { + foreach ($type as $file => $cache) { + if ($cache) { + $contents = file_get_contents($file); + // Return the path to where this CSS file originated from, stripping off the name of the file at the end of the path + $path = base_path() . substr($file, 0, strrpos($file, '/')) .'/'; + // Fix all paths within this CSS file, ignoring absolute paths + $contents = preg_replace('/url\(([\'"]?)(?![a-z]+:)/i', 'url(\1'. $path . '\2', $contents); + // Fix any @import that don't use url() and is not absoslute + $data .= preg_replace('/@import\s*([\'"]?)(?![a-z]+:)/i', '@import \1'. $path . '\2', $contents); + } + } + } + + // @import rules must proceed any either style, so we move those to the top + preg_match_all('/@import[^;]+;/i', $data, $matches); + $data = preg_replace('/@import[^;]+;/i', '', $data); + $data = implode('', $matches[0]) . $data; + + // If any modules implement hook_compress_css, let them handle compressing + // the css, otherwise just strip out the whitespace, which can be done safely. + if (module_invoke_all('hook_compress_css')) { + foreach (module_implements('compress_css') as $module) { + $function = $module .'_compress_css'; + $function($contents); + } + } + else { + // Perform some safe CSS optimizations + $data = preg_replace('< + \s*([@{}:;\)])\s* | # Remove whitespace around separators. + /\*([^*\\\\]|\*(?!/))+\*/ | # Remove comments that are not CSS hacks + [\n\r] # Remove line breaks + >xi', '\1', $data); + } + + // Create the CSS file + file_save_data($data, file_create_path('css/') .'/'. $filename, FILE_EXISTS_REPLACE); + + return $filename; +} + +/** + * Delete all cached CSS files + */ +function drupal_flush_css_cache() { + file_scan_directory(file_create_path('css'), '.*', array('.', '..', 'CVS'), 'file_delete', TRUE); +} + +/** * Add a JavaScript file, setting or inline code to the page. * * The behavior of this function depends on the parameters it is called with. Index: modules/color/color.module =================================================================== RCS file: /cvs/drupal/drupal/modules/color/color.module,v retrieving revision 1.7 diff -u -F^f -r1.7 color.module --- modules/color/color.module 10 Nov 2006 19:59:30 -0000 1.7 +++ modules/color/color.module 24 Nov 2006 02:04:19 -0000 @@ -41,7 +41,7 @@ function _color_page_alter(&$vars) { // Override stylesheet $path = variable_get('color_'. $theme_key .'_stylesheet', NULL); if ($path) { - $vars['css']['theme'] = array($path => array('path' => $path, 'media' => 'all')); + $vars['css']['all']['theme'][$path] = TRUE; $vars['styles'] = drupal_get_css($vars['css']); } Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.402 diff -u -F^f -r1.402 system.module --- modules/system/system.module 21 Nov 2006 20:55:35 -0000 1.402 +++ modules/system/system.module 24 Nov 2006 02:04:20 -0000 @@ -674,6 +674,14 @@ function system_page_caching_settings() '#options' => $period, '#description' => t('On high-traffic sites it can become necessary to enforce a minimum cache lifetime. The minimum cache lifetime is the minimum amount of time that will go by before the cache is emptied and recreated. A larger minimum cache lifetime offers better performance, but users will not see new content for a longer period of time.') ); + + $form['cache_css'] = array( + '#type' => 'select', + '#title' => t('Cache and compress CSS files'), + '#default_value' => variable_get('cache_css', FALSE), + '#options' => array(t('No'), t('Yes')), + '#description' => t("A lot of Drupal modules include their own CSS files. When these modules are enabled, each module's CSS file adds an additional HTTP request to the page, which can slow down the initial page load for a user browsing the site. Additionally, this additional HTTP request can increase the server load. It is recommended to only turn this option on when your site is in production, as leaving it on can interfere with theming development."), + ); return system_settings_form($form); } @@ -1102,6 +1110,12 @@ function system_settings_form_submit($fo else { drupal_set_message(t('The configuration options have been saved.')); } + + // Only clear the CSS cache if the settings on the caching paged are saved + if ($form_id == 'system_page_caching_settings') { + drupal_flush_css_cache(); + } + menu_rebuild(); } @@ -1109,6 +1123,8 @@ function system_settings_form_submit($fo * Menu callback; displays a listing of all themes. */ function system_themes() { + // Clear cached CSS files + drupal_flush_css_cache(); $themes = system_theme_data(); ksort($themes); @@ -1481,6 +1497,10 @@ function system_modules_submit($form_id, if ($dependencies && !isset($form_values['confirm'])) { return FALSE; } + + // Clear the CSS cache + drupal_flush_css_cache(); + return 'admin/build/modules'; } Index: themes/garland/style.css =================================================================== RCS file: /cvs/drupal/drupal/themes/garland/style.css,v retrieving revision 1.9 diff -u -F^f -r1.9 style.css --- themes/garland/style.css 24 Nov 2006 01:39:22 -0000 1.9 +++ themes/garland/style.css 24 Nov 2006 02:04:20 -0000 @@ -1,984 +1 @@ -/** - * Themetastic, for Drupal 5.0 - * Stefan Nagtegaal, iStyledThis [dot] nl - * Steven Wittens, acko [dot] net` - * - * If you use a customized color scheme, you must regenerate it after - * modifying this file. - */ - -/** - * Generic elements - */ -body { - margin: 0; - padding: 0; - background: #edf5fa; - font: 12px/170% Verdana; - color: #494949; -} - -input { - font: 12px/100% "Verdana"; - color: #494949; -} - -textarea, select { - font: 12px/160% "Verdana"; - color: #494949; -} - -h1, h2, h3, h4, h5, h6 { - margin: 0; - padding: 0; - font-weight: normal; - font-family: Helvetica, Arial, sans-serif; -} - -h1 { - font-size: 170%; -} - -h2 { - font-size: 160%; - line-height: 130%; -} - -h3 { - font-size: 140%; -} - -h4 { - font-size: 130%; -} - -h5 { - font-size: 120%; -} - -h6 { - font-size: 110%; -} - -ul, quote, code, fieldset { - margin: .5em 0; -} - -p { - margin: 0.6em 0 1.2em; - padding: 0; -} - -a:link, a:visited { - color: #027AC6; - text-decoration: none; -} - -a:hover { - color: #0062A0; - text-decoration: underline; -} - -a:active, a.active { - color: #5895be; -} - -hr { - margin: 0; - padding: 0; - border: none; - height: 1px; - background: #5294c1; -} - -ul { - margin: 0.5em 0 1em; - padding: 0; -} - -ul li { - margin: 0.4em 0 0.4em .5em; -} - -ul.menu, .item-list ul { - margin: 0.35em 0 0 -0.5em; - padding: 0; -} - -ul.menu ul, .item-list ul ul { - margin-left: 0em; -} - -ul li, ul.menu li, .item-list ul li, li.leaf { - margin: 0.15em 0 0.15em .5em; -} - -ul li, ul.menu li, .item-list ul li, li.leaf { - padding: 0 0 .2em 1.5em; - list-style-type: none; - list-style-image: none; - background: transparent url(images/menu-leaf.gif) no-repeat 1px .35em; -} - -ul li.expanded { - background: transparent url(images/menu-expanded.gif) no-repeat 1px .35em; -} - -ul li.collapsed { - background: transparent url(images/menu-collapsed.gif) no-repeat 0px .35em; -} - -ul li.leaf a, ul li.expanded a, ul li.collapsed a { - display: block; -} - -ul.inline li { - background: none; - margin: 0; - padding: 0 1em 0 0; -} - -fieldset ul.clear-block li { - margin: 0; - padding: 0; - background-image: none; -} - -dl { - margin: 0.5em 0 1em 1.5em; -} - -dl dt { -} - -dl dd { - margin: 0 0 .5em 1.5em; -} - -img, a img { - border: none; -} - -table { - margin: 1em 0; - width: 100%; -} - -thead th { - border-bottom: 2px solid #d3e7f4; - color: #494949; - font-weight: bold; -} - -th a:link, th a:visited { - color: #6f9dbd; -} - -td, th { - padding: .3em .5em; -} - -tr.even, tr.odd, tbody th { - border: solid #d3e7f4; - border-width: 1px 0; -} - -tr.odd, tr.info { - background-color: #edf5fa; -} - -tr.even { - background-color: #fff; -} - -tr.odd td.active { - background-color: #ddecf5; -} - -tr.even td.active { - background-color: #e6f1f7; -} - -td.region, td.module, td.container { - border-top: 1.5em solid #fff; - border-bottom: 1px solid #b4d7f0; - background-color: #d4e7f3; - color: #455067; - font-weight: bold; -} - -tr:first-child td.region, tr:first-child td.module, tr:first-child td.container { - border-top-width: 0; -} - -span.form-required { - color: #ffae00; -} - -span.submitted, .description { - font-size: 0.92em; - color: #898989; -} - -.description { - line-height: 150%; - margin-bottom: 0.75em; - color: #898989; -} - -.messages, .preview { - margin: .75em 0 .75em; - padding: .5em 1em; -} - -.messages ul { - margin: 0; -} - -.form-checkboxes, .form-radios, .form-checkboxes .form-item, .form-radios .form-item { - margin: 0.25em 0; -} - -#center form { - margin-bottom: 2em; -} - -.form-button, .form-submit { - margin: 2em 0.5em 1em 0; -} - -.confirmation .form-submit, -.search-form .form-submit, -.poll .form-submit, -fieldset .form-button, fieldset .form-submit, -.sidebar .form-button, .sidebar .form-submit, -table .form-button, table .form-submit { - margin: 0; -} - -.box { - margin-bottom: 2.5em; -} - -/** - * Layout - */ -#header-region { - min-height: 1em; - background: #d2e6f3 url(images/bg-navigation.png) repeat-x 50% 100%; -} - -#header-region .block { - display: block; - margin: 0 1em; -} - -#header-region .block-region { - display: block; - margin: 0 0.5em 1em; - padding: 0.5em; - position: relative; - top: 0.5em; -} - -#header-region * { - display: inline; - line-height: 1.5em; - margin-top: 0; - margin-bottom: 0; -} - -#header-region p, #header-region img { - margin-top: 0.5em; -} - -#header-region h2 { - margin: 0 1em 0 0; -} - -#header-region h3, #header-region label, #header-region li { - margin: 0 1em; - padding: 0; - background: none; -} - -#wrapper { - background: #edf5fa url(images/body.png) repeat-x 50% 0; -} - -#wrapper #container { - margin: 0 auto; - padding: 0 20px; - max-width: 1270px; -} - -#wrapper #container #header { - height: 80px; -} - -#wrapper #container #header #logo-floater { - position: absolute; -} - -#wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited { - line-height: 120px; - position: relative; - z-index: 2; - white-space: nowrap; -} - -#wrapper #container #header h1 span { - font-weight: bold; -} - -#wrapper #container #header h1 img { - padding-top: 16px; - padding-right: 20px; - float: left; -} - -/* With 3 columns, require a minimum width of 1000px to ensure there is enough horizontal space. */ -body.sidebars { - min-width: 980px; -} -/* With 2 columsn, require a minimum width of 800px. */ -body.sidebar-left, body.sidebar-right { - min-width: 780px; -} - -/* We must define 100% width to avoid the body being too narrow for near-empty pages */ -#wrapper #container #center { - float: left; - width: 100%; -} - -/* So we move the #center container over the sidebars to compensate */ -body.sidebar-left #center { - margin-left: -210px; -} -body.sidebar-right #center { - margin-right: -210px; -} -body.sidebars #center { - margin: 0 -210px; -} - -/* And add blanks left and right for the sidebars to fill */ -body.sidebar-left #squeeze { - margin-left: 210px; -} -body.sidebar-right #squeeze { - margin-right: 210px; -} -body.sidebars #squeeze { - margin: 0 210px; -} - -/* We ensure the sidebars are still clickable using z-index */ -#wrapper #container .sidebar { - margin: 60px 0 5em; - width: 210px; - float: left; - z-index: 2; - position: relative; -} - -#wrapper #container .sidebar .block { - margin: 0 0 1.5em 0; -} - -#sidebar-left .block { - padding: 0 15px 0 0px; -} - -#sidebar-right .block { - padding: 0 0px 0 15px; -} - -.block .content { - margin: 0.5em 0; -} - -#sidebar-left .block-region { - margin: 0 15px 0 0px; -} - -#sidebar-right .block-region { - margin: 0 0px 0 15px; -} - -.block-region { - padding: 1em; - background: transparent; - border: 2px dashed #b4d7f0; - text-align: center; - font-size: 1.3em; -} - -/* Now we add the backgrounds for the main content shading */ -#wrapper #container #center #squeeze { - background: #fff url(images/bg-content.png) repeat-x 50% 0; - position: relative; -} - -#wrapper #container #center .right-corner { - background: transparent url(images/bg-content-right.png) no-repeat 100% 0; - position: relative; - left: 10px; -} - -#wrapper #container #center .right-corner .left-corner { - padding: 60px 25px 5em 35px; - background: transparent url(images/bg-content-left.png) no-repeat 0 0; - margin-left: -10px; - position: relative; - left: -10px; - min-height: 400px; -} - -#wrapper #container #footer { - float: none; - clear: both; - text-align: center; - margin: 4em 0 -3em; - color: #898989; -} - -#wrapper #container .breadcrumb { - position: absolute; - top: 15px; - left: 35px; - z-index: 3; -} - -body.sidebar-left #footer { - margin-left: -210px; -} - -body.sidebar-right #footer { - margin-right: -210px; -} - -body.sidebars #footer { - margin: 0 -210px; -} - -/** - * Header - */ -#wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited { - color: #fff; - font-weight: normal; - text-shadow: #1659ac 0px 1px 3px; - font-size: 1.5em; -} - -#wrapper #container #header h1 a:hover { - text-decoration: none; -} - -#wrapper #container .breadcrumb { - font-size: 0.92em; -} - -#wrapper #container .breadcrumb, #wrapper #container .breadcrumb a { - color: #529ad6; -} - -#mission { - padding: 1em; - background-color: #fff; - border: 1px solid #e0e5fb; - margin-bottom: 2em; -} - -/** - * Primary navigation - */ -ul.primary-links { - margin: 0; - padding: 0; - float: right; - position: relative; - z-index: 4; -} - -ul.primary-links li { - margin: 0; - padding: 0; - float: left; - background-image: none; -} - -ul.primary-links li a, ul.primary-links li a:link, ul.primary-links li a:visited { - display: block; - margin: 0 1em; - padding: .75em 0 0; - color: #fff; - background: transparent url(images/bg-navigation-item.png) no-repeat 50% 0; -} - -ul.primary-links li a:hover, ul.primary-links li a.active { - color: #fff; - background: transparent url(images/bg-navigation-item-hover.png) no-repeat 50% 0; -} - -/** - * Secondary navigation - */ -ul.secondary-links { - margin: 0; - padding: 20px 0 0; - float: right; - clear: right; - position: relative; - z-index: 4; -} - -ul.secondary-links li { - margin: 0; - padding: 0; - float: left; - background-image: none; -} - -ul.secondary-links li a, ul.secondary-links li a:link, ul.secondary-links li a:visited { - display: block; - margin: 0 1em; - padding: .75em 0 0; - color: #cde3f1; - background: transparent; -} - -ul.secondary-links li a:hover, ul.secondary-links li a.active { - color: #cde3f1; - background: transparent; -} - -/** - * Local tasks - */ -ul.primary, ul.primary li, ul.secondary, ul.secondary li { - border: 0; - background: none; - margin: 0; - padding: 0; -} - -#tabs-wrapper { - margin: 0 -26px 1em; - padding: 0 26px; - border-bottom: 1px solid #e9eff3; - position: relative; -} -ul.primary { - padding: 0.5em 0 10px; - float: left; -} -ul.secondary { - clear: both; - text-align: left; - border-bottom: 1px solid #e9eff3; - margin: -0.2em -26px 1em; - padding: 0 26px 0.6em; -} -h2.with-tabs { - float: left; - margin: 0 2em 0 0; - padding: 0; -} - -ul.primary li a, ul.primary li.active a, ul.primary li a:hover, ul.primary li a:visited, -ul.secondary li a, ul.secondary li.active a, ul.secondary li a:hover, ul.secondary li a:visited { - border: 0; - background: transparent; - padding: 4px 1em; - margin: 0 0 0 1px; - height: auto; - text-decoration: none; - position: relative; - top: -1px; -} -ul.primary li.active a, ul.primary li.active a:link, ul.primary li.active a:visited, ul.primary li a:hover, -ul.secondary li.active a, ul.secondary li.active a:link, ul.secondary li.active a:visited, ul.secondary li a:hover { - background: url(images/bg-tab.png) repeat-x 0 50%; - color: #fff; -} -ul.primary li.active a, -ul.secondary li.active a { - font-weight: bold; -} - -/** - * Nodes & comments - */ -.node { - border-bottom: 1px solid #e9eff3; - margin: -1.5em -26px 1.5em; - padding: 1.5em 26px; -} - -ul.links li, ul.inline li { - margin-left: 0; - margin-right: 0; - padding-left: 0; - padding-right: 1em; - background-image: none; -} - -.node .links, .comment .links { - text-align: left; -} - -.node .links ul.links li, .comment .links ul.links li {} -.terms ul.links li { - margin-left: 0; - margin-right: 0; - padding-right: 0; - padding-left: 1em; -} - -.picture, .comment .submitted { - float: right; - clear: right; - padding-left: 1em; -} - -.new { - color: #ffae00; - font-size: 0.92em; - font-weight: bold; - float: right; -} - -.terms { - float: right; -} - -.preview .node, .preview .comment, .sticky { - margin: 0; - padding: 0.5em 0; - border: 0; - background: 0; -} - -.sticky { - padding: 1em; - background-color: #fff; - border: 1px solid #e0e5fb; - margin-bottom: 2em; -} - -#comments { - position: relative; - top: -1px; - border-bottom: 1px solid #e9eff3; - margin: -1.5em -25px 0; - padding: 0 25px; -} - -#comments h2.comments { - margin: 0 -25px; - padding: .5em 25px; - background: #fff url(images/gradient-inner.png) repeat-x 0 0; -} - -.comment { - margin: 0 -25px; - padding: 1.5em 25px 1.5em; - border-top: 1px solid #e9eff3; -} - -.indented { - margin-left: 25px; -} - -.comment h3 a.active { - color: #494949; -} - -.node .content, .comment .content { - margin: 0.6em 0; -} - -/** - * Aggregator.module - */ -#aggregator { - margin-top: 1em; -} -#aggregator .feed-item-title { - font-size: 160%; - line-height: 130%; -} -#aggregator .feed-item { - border-bottom: 1px solid #e9eff3; - margin: -1.5em -31px 1.75em; - padding: 1.5em 31px; -} -#aggregator .feed-item-categories { - font-size: 0.92em; -} -#aggregator .feed-item-meta { - font-size: 0.92em; - color: #898989; -} - -/** - * Color.module - */ -#palette .form-item { - border: 1px solid #fff; -} -#palette .item-selected { - background: #fff url(images/gradient-inner.png) repeat-x 0 0; - border: 1px solid #d9eaf5; -} - -/** - * Menu.module - */ -tr.odd td.menu-disabled { - background-color: #edf5fa; -} -tr.even td.menu-disabled { - background-color: #fff; -} -td.menu-disabled { - opacity: 0.5; -} - -/** - * Poll.module - */ -.poll .bar { - background: #fff url(images/bg-bar-white.png) repeat-x 0 0; - border: solid #f0f0f0; - border-width: 0 1px 1px; -} - -.poll .bar .foreground { - background: #71a7cc url(images/bg-bar.png) repeat-x 0 100%; -} - -.poll .percent { - font-size: .9em; -} - -/** - * Autocomplete. - */ -#autocomplete li { - cursor: default; - padding: 2px; - margin: 0; -} - -/** - * Collapsible fieldsets - */ -fieldset { - margin: 1em 0; - padding: 1em; - border: 1px solid #d9eaf5; - background: #fff url(images/gradient-inner.png) repeat-x 0 0; -} - -html.js fieldset.collapsed { - background: transparent; - padding-top: 0; - padding-bottom: 3px; -} - -html.js fieldset.collapsible legend a { - padding-left: 2em; - background: url(images/menu-expanded.gif) no-repeat 0% 50%; -} - -html.js fieldset.collapsed legend a { - background: url(images/menu-collapsed.gif) no-repeat 0% 50%; -} - -/** - * Syndication Block - */ -#block-node-0 h2 { - float: left; - padding-right: 20px; -} - -#block-node-0 img { - float: right; - padding-top: 4px; -} - -#block-node-0 .content { - clear: right; -} - -/** - * Login Block - */ -#user-login-form { - text-align: center; -} -#user-login-form ul { - text-align: left; -} - -/** - * Admin Styles - */ -div.admin-panel, -div.admin-panel .description, -div.admin-panel .body, -div.admin, -div.admin .left, -div.admin .right, -div.admin .expert-link, -div.item-list, -.menu { - margin: 0; - padding: 0; -} - -div.admin .left { - float: left; - width: 48%; -} -div.admin .right { - float: right; - width: 48%; -} - -div.admin-panel { - background: #fff url(images/gradient-inner.png) repeat-x 0 0; - padding: 1em 1em 1.5em; -} -div.admin-panel .description { - margin-bottom: 1.5em; -} -div.admin-panel dl { - margin: 0; -} -div.admin-panel dd { - color: #898989; - font-size: 0.92em; - line-height: 1.3em; - margin-top: -.2em; - margin-bottom: .65em; -} - -table.system-status-report th { - border-color: #d3e7f4; -} - -#autocomplete li.selected, tr.selected td, tr.selected td.active { - background: #027ac6; - color: #fff; -} - -tr.selected td a:link, tr.selected td a:visited, tr.selected td a:active { - color: #d3e7f4; -} - -/** - * CSS support - */ -span.clear { - display: block; - clear: both; - height: 1px; - line-height: 0px; - font-size: 0px; - margin-bottom: -1px; -} - -/******************************************************************* - * Color Module: Don't touch * - *******************************************************************/ - -/** - * Generic elements. - */ -.messages { - background-color: #fff; - border: 1px solid #b8d3e5; -} - -.preview { - background-color: #fcfce8; - border: 1px solid #e5e58f; -} - -div.status { - color: #3a3; - border-color: #c7f2c8; -} - -div.error { - color: #c52020; -} - -.form-item input.error, .form-item textarea.error { - border: 1px solid #c52020; - color: #494949; -} - -/** - * Watchdog.module - */ -tr.watchdog-user { - background-color: #fcf9e5; -} - -tr.watchdog-user td.active { - background-color: #fbf5cf; -} - -tr.watchdog-content { - background-color: #fefefe; -} - -tr.watchdog-content td.active { - background-color: #f5f5f5; -} - -tr.watchdog-warning { - background-color: #fdf5e6; -} - -tr.watchdog-warning td.active { - background-color: #fdf2de; -} - -tr.watchdog-error { - background-color: #fbe4e4; -} - -tr.watchdog-error td.active { - background-color: #fbdbdb; -} -tr.watchdog-page-not-found, tr.watchdog-access-denied { - background: #d7ffd7; -} -tr.watchdog-page-not-found td.active, tr.watchdog-access-denied td.active { - background: #c7eec7; -} - -/** - * Status report colors. - */ -table.system-status-report tr.error, table.system-status-report tr.error th { - background-color: #fcc; - border-color: #ebb; - color: #200; -} -table.system-status-report tr.warning, table.system-status-report tr.warning th { - background-color: #ffd; - border-color: #eeb; -} -table.system-status-report tr.ok, table.system-status-report tr.ok th { - background-color: #dfd; - border-color: #beb; -} +body{margin:0;padding:0;background:#edf5fa;font:12px/170% Verdana;color:#494949;}input{font:12px/100% "Verdana";color:#494949;}textarea, select{font:12px/160% "Verdana";color:#494949;}h1, h2, h3, h4, h5, h6{margin:0;padding:0;font-weight:normal;font-family:Helvetica, Arial, sans-serif;}h1{font-size:170%;}h2{font-size:160%;line-height:130%;}h3{font-size:140%;}h4{font-size:130%;}h5{font-size:120%;}h6{font-size:110%;}ul, quote, code, fieldset{margin:.5em 0;}p{margin:0.6em 0 1.2em;padding:0;}a:link, a:visited{color:#027AC6;text-decoration:none;}a:hover{color:#0062A0;text-decoration:underline;}a:active, a.active{color:#5895be;}hr{margin:0;padding:0;border:none;height:1px;background:#5294c1;}ul{margin:0.5em 0 1em;padding:0;}ul li{margin:0.4em 0 0.4em .5em;}ul.menu, .item-list ul{margin:0.35em 0 0 -0.5em;padding:0;}ul.menu ul, .item-list ul ul{margin-left:0em;}ul li, ul.menu li, .item-list ul li, li.leaf{margin:0.15em 0 0.15em .5em;}ul li, ul.menu li, .item-list ul li, li.leaf{padding:0 0 .2em 1.5em;list-style-type:none;list-style-image:none;background:transparent url(images/menu-leaf.gif)no-repeat 1px .35em;}ul li.expanded{background:transparent url(images/menu-expanded.gif)no-repeat 1px .35em;}ul li.collapsed{background:transparent url(images/menu-collapsed.gif)no-repeat 0px .35em;}ul li.leaf a, ul li.expanded a, ul li.collapsed a{display:block;}ul.inline li{background:none;margin:0;padding:0 1em 0 0;}fieldset ul.clear-block li{margin:0;padding:0;background-image:none;}dl{margin:0.5em 0 1em 1.5em;}dl dt{}dl dd{margin:0 0 .5em 1.5em;}img, a img{border:none;}table{margin:1em 0;width:100%;}thead th{border-bottom:2px solid #d3e7f4;color:#494949;font-weight:bold;}th a:link, th a:visited{color:#6f9dbd;}td, th{padding:.3em .5em;}tr.even, tr.odd, tbody th{border:solid #d3e7f4;border-width:1px 0;}tr.odd, tr.info{background-color:#edf5fa;}tr.even{background-color:#fff;}tr.odd td.active{background-color:#ddecf5;}tr.even td.active{background-color:#e6f1f7;}td.region, td.module, td.container{border-top:1.5em solid #fff;border-bottom:1px solid #b4d7f0;background-color:#d4e7f3;color:#455067;font-weight:bold;}tr:first-child td.region, tr:first-child td.module, tr:first-child td.container{border-top-width:0;}span.form-required{color:#ffae00;}span.submitted, .description{font-size:0.92em;color:#898989;}.description{line-height:150%;margin-bottom:0.75em;color:#898989;}.messages, .preview{margin:.75em 0 .75em;padding:.5em 1em;}.messages ul{margin:0;}.form-checkboxes, .form-radios, .form-checkboxes .form-item, .form-radios .form-item{margin:0.25em 0;}#center form{margin-bottom:2em;}.form-button, .form-submit{margin:2em 0.5em 1em 0;}.confirmation .form-submit,.search-form .form-submit,.poll .form-submit,fieldset .form-button, fieldset .form-submit,.sidebar .form-button, .sidebar .form-submit,table .form-button, table .form-submit{margin:0;}.box{margin-bottom:2.5em;}#header-region{min-height:1em;background:#d2e6f3 url(images/bg-navigation.png)repeat-x 50% 100%;}#header-region .block{display:block;margin:0 1em;}#header-region .block-region{display:block;margin:0 0.5em 1em;padding:0.5em;position:relative;top:0.5em;}#header-region *{display:inline;line-height:1.5em;margin-top:0;margin-bottom:0;}#header-region p, #header-region img{margin-top:0.5em;}#header-region h2{margin:0 1em 0 0;}#header-region h3, #header-region label, #header-region li{margin:0 1em;padding:0;background:none;}#wrapper{background:#edf5fa url(images/body.png)repeat-x 50% 0;}#wrapper #container{margin:0 auto;padding:0 20px;max-width:1270px;}#wrapper #container #header{height:80px;}#wrapper #container #header #logo-floater{position:absolute;}#wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited{line-height:120px;position:relative;z-index:2;white-space:nowrap;}#wrapper #container #header h1 span{font-weight:bold;}#wrapper #container #header h1 img{padding-top:16px;padding-right:20px;float:left;}body.sidebars{min-width:980px;}body.sidebar-left, body.sidebar-right{min-width:780px;}#wrapper #container #center{float:left;width:100%;}body.sidebar-left #center{margin-left:-210px;}body.sidebar-right #center{margin-right:-210px;}body.sidebars #center{margin:0 -210px;}body.sidebar-left #squeeze{margin-left:210px;}body.sidebar-right #squeeze{margin-right:210px;}body.sidebars #squeeze{margin:0 210px;}#wrapper #container .sidebar{margin:60px 0 5em;width:210px;float:left;z-index:2;position:relative;}#wrapper #container .sidebar .block{margin:0 0 1.5em 0;}#sidebar-left .block{padding:0 15px 0 0px;}#sidebar-right .block{padding:0 0px 0 15px;}.block .content{margin:0.5em 0;}#sidebar-left .block-region{margin:0 15px 0 0px;}#sidebar-right .block-region{margin:0 0px 0 15px;}.block-region{padding:1em;background:transparent;border:2px dashed #b4d7f0;text-align:center;font-size:1.3em;}#wrapper #container #center #squeeze{background:#fff url(images/bg-content.png)repeat-x 50% 0;position:relative;}#wrapper #container #center .right-corner{background:transparent url(images/bg-content-right.png)no-repeat 100% 0;position:relative;left:10px;}#wrapper #container #center .right-corner .left-corner{padding:60px 25px 5em 35px;background:transparent url(images/bg-content-left.png)no-repeat 0 0;margin-left:-10px;position:relative;left:-10px;min-height:400px;}#wrapper #container #footer{float:none;clear:both;text-align:center;margin:4em 0 -3em;color:#898989;}#wrapper #container .breadcrumb{position:absolute;top:15px;left:35px;z-index:3;}body.sidebar-left #footer{margin-left:-210px;}body.sidebar-right #footer{margin-right:-210px;}body.sidebars #footer{margin:0 -210px;}#wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited{color:#fff;font-weight:normal;text-shadow:#1659ac 0px 1px 3px;font-size:1.5em;}#wrapper #container #header h1 a:hover{text-decoration:none;}#wrapper #container .breadcrumb{font-size:0.92em;}#wrapper #container .breadcrumb, #wrapper #container .breadcrumb a{color:#529ad6;}#mission{padding:1em;background-color:#fff;border:1px solid #e0e5fb;margin-bottom:2em;}ul.primary-links{margin:0;padding:0;float:right;position:relative;z-index:4;}ul.primary-links li{margin:0;padding:0;float:left;background-image:none;}ul.primary-links li a, ul.primary-links li a:link, ul.primary-links li a:visited{display:block;margin:0 1em;padding:.75em 0 0;color:#fff;background:transparent url(images/bg-navigation-item.png)no-repeat 50% 0;}ul.primary-links li a:hover, ul.primary-links li a.active{color:#fff;background:transparent url(images/bg-navigation-item-hover.png)no-repeat 50% 0;}ul.secondary-links{margin:0;padding:20px 0 0;float:right;clear:right;position:relative;z-index:4;}ul.secondary-links li{margin:0;padding:0;float:left;background-image:none;}ul.secondary-links li a, ul.secondary-links li a:link, ul.secondary-links li a:visited{display:block;margin:0 1em;padding:.75em 0 0;color:#cde3f1;background:transparent;}ul.secondary-links li a:hover, ul.secondary-links li a.active{color:#cde3f1;background:transparent;}ul.primary, ul.primary li, ul.secondary, ul.secondary li{border:0;background:none;margin:0;padding:0;}#tabs-wrapper{margin:0 -26px 1em;padding:0 26px;border-bottom:1px solid #e9eff3;position:relative;}ul.primary{padding:0.5em 0 10px;float:left;}ul.secondary{clear:both;text-align:left;border-bottom:1px solid #e9eff3;margin:-0.2em -26px 1em;padding:0 26px 0.6em;}h2.with-tabs{float:left;margin:0 2em 0 0;padding:0;}ul.primary li a, ul.primary li.active a, ul.primary li a:hover, ul.primary li a:visited,ul.secondary li a, ul.secondary li.active a, ul.secondary li a:hover, ul.secondary li a:visited{border:0;background:transparent;padding:4px 1em;margin:0 0 0 1px;height:auto;text-decoration:none;position:relative;top:-1px;}ul.primary li.active a, ul.primary li.active a:link, ul.primary li.active a:visited, ul.primary li a:hover,ul.secondary li.active a, ul.secondary li.active a:link, ul.secondary li.active a:visited, ul.secondary li a:hover{background:url(images/bg-tab.png)repeat-x 0 50%;color:#fff;}ul.primary li.active a,ul.secondary li.active a{font-weight:bold;}.node{border-bottom:1px solid #e9eff3;margin:-1.5em -26px 1.5em;padding:1.5em 26px;}ul.links li, ul.inline li{margin-left:0;margin-right:0;padding-left:0;padding-right:1em;background-image:none;}.node .links, .comment .links{text-align:left;}.node .links ul.links li, .comment .links ul.links li{}.terms ul.links li{margin-left:0;margin-right:0;padding-right:0;padding-left:1em;}.picture, .comment .submitted{float:right;clear:right;padding-left:1em;}.new{color:#ffae00;font-size:0.92em;font-weight:bold;float:right;}.terms{float:right;}.preview .node, .preview .comment, .sticky{margin:0;padding:0.5em 0;border:0;background:0;}.sticky{padding:1em;background-color:#fff;border:1px solid #e0e5fb;margin-bottom:2em;}#comments{position:relative;top:-1px;border-bottom:1px solid #e9eff3;margin:-1.5em -25px 0;padding:0 25px;}#comments h2.comments{margin:0 -25px;padding:.5em 25px;background:#fff url(images/gradient-inner.png)repeat-x 0 0;}.comment{margin:0 -25px;padding:1.5em 25px 1.5em;border-top:1px solid #e9eff3;}.indented{margin-left:25px;}.comment h3 a.active{color:#494949;}.node .content, .comment .content{margin:0.6em 0;}#aggregator{margin-top:1em;}#aggregator .feed-item-title{font-size:160%;line-height:130%;}#aggregator .feed-item{border-bottom:1px solid #e9eff3;margin:-1.5em -31px 1.75em;padding:1.5em 31px;}#aggregator .feed-item-categories{font-size:0.92em;}#aggregator .feed-item-meta{font-size:0.92em;color:#898989;}#palette .form-item{border:1px solid #fff;}#palette .item-selected{background:#fff url(images/gradient-inner.png)repeat-x 0 0;border:1px solid #d9eaf5;}tr.odd td.menu-disabled{background-color:#edf5fa;}tr.even td.menu-disabled{background-color:#fff;}td.menu-disabled{opacity:0.5;}.poll .bar{background:#fff url(images/bg-bar-white.png)repeat-x 0 0;border:solid #f0f0f0;border-width:0 1px 1px;}.poll .bar .foreground{background:#71a7cc url(images/bg-bar.png)repeat-x 0 100%;}.poll .percent{font-size:.9em;}#autocomplete li{cursor:default;padding:2px;margin:0;}fieldset{margin:1em 0;padding:1em;border:1px solid #d9eaf5;background:#fff url(images/gradient-inner.png)repeat-x 0 0;}html.js fieldset.collapsed{background:transparent;padding-top:0;padding-bottom:3px;}html.js fieldset.collapsible legend a{padding-left:2em;background:url(images/menu-expanded.gif)no-repeat 0% 50%;}html.js fieldset.collapsed legend a{background:url(images/menu-collapsed.gif)no-repeat 0% 50%;}#block-node-0 h2{float:left;padding-right:20px;}#block-node-0 img{float:right;padding-top:4px;}#block-node-0 .content{clear:right;}#user-login-form{text-align:center;}#user-login-form ul{text-align:left;}div.admin-panel,div.admin-panel .description,div.admin-panel .body,div.admin,div.admin .left,div.admin .right,div.admin .expert-link,div.item-list,.menu{margin:0;padding:0;}div.admin .left{float:left;width:48%;}div.admin .right{float:right;width:48%;}div.admin-panel{background:#fff url(images/gradient-inner.png)repeat-x 0 0;padding:1em 1em 1.5em;}div.admin-panel .description{margin-bottom:1.5em;}div.admin-panel dl{margin:0;}div.admin-panel dd{color:#898989;font-size:0.92em;line-height:1.3em;margin-top:-.2em;margin-bottom:.65em;}table.system-status-report th{border-color:#d3e7f4;}#autocomplete li.selected, tr.selected td, tr.selected td.active{background:#027ac6;color:#fff;}tr.selected td a:link, tr.selected td a:visited, tr.selected td a:active{color:#d3e7f4;}span.clear{display:block;clear:both;height:1px;line-height:0px;font-size:0px;margin-bottom:-1px;}.messages{background-color:#fff;border:1px solid #b8d3e5;}.preview{background-color:#fcfce8;border:1px solid #e5e58f;}div.status{color:#3a3;border-color:#c7f2c8;}div.error{color:#c52020;}.form-item input.error, .form-item textarea.error{border:1px solid #c52020;color:#494949;}tr.watchdog-user{background-color:#fcf9e5;}tr.watchdog-user td.active{background-color:#fbf5cf;}tr.watchdog-content{background-color:#fefefe;}tr.watchdog-content td.active{background-color:#f5f5f5;}tr.watchdog-warning{background-color:#fdf5e6;}tr.watchdog-warning td.active{background-color:#fdf2de;}tr.watchdog-error{background-color:#fbe4e4;}tr.watchdog-error td.active{background-color:#fbdbdb;}tr.watchdog-page-not-found, tr.watchdog-access-denied{background:#d7ffd7;}tr.watchdog-page-not-found td.active, tr.watchdog-access-denied td.active{background:#c7eec7;}table.system-status-report tr.error, table.system-status-report tr.error th{background-color:#fcc;border-color:#ebb;color:#200;}table.system-status-report tr.warning, table.system-status-report tr.warning th{background-color:#ffd;border-color:#eeb;}table.system-status-report tr.ok, table.system-status-report tr.ok th{background-color:#dfd;border-color:#beb;} \ No newline at end of file