diff --git a/admin/settings/grades.php b/admin/settings/grades.php index 2cb6122d508..84a5296dfde 100644 --- a/admin/settings/grades.php +++ b/admin/settings/grades.php @@ -96,11 +96,9 @@ if (has_capability('moodle/grade:manage', $systemcontext) GRADE_AGGREGATE_MODE =>new lang_string('aggregatemode', 'grades'), GRADE_AGGREGATE_SUM =>new lang_string('aggregatesum', 'grades')); - $defaultvisible = array(GRADE_AGGREGATE_MEAN, GRADE_AGGREGATE_WEIGHTED_MEAN, GRADE_AGGREGATE_WEIGHTED_MEAN2, - GRADE_AGGREGATE_EXTRACREDIT_MEAN, GRADE_AGGREGATE_MEDIAN, GRADE_AGGREGATE_MIN, - GRADE_AGGREGATE_MAX, GRADE_AGGREGATE_MODE, GRADE_AGGREGATE_SUM); + $defaultvisible = array(GRADE_AGGREGATE_SUM); - $defaults = array('value'=>GRADE_AGGREGATE_WEIGHTED_MEAN2, 'forced'=>false, 'adv'=>false); + $defaults = array('value' => GRADE_AGGREGATE_SUM, 'forced' => false, 'adv' => false); $temp->add(new admin_setting_gradecat_combo('grade_aggregation', new lang_string('aggregation', 'grades'), new lang_string('aggregation_help', 'grades'), $defaults, $options)); $temp->add(new admin_setting_configmultiselect('grade_aggregations_visible', new lang_string('aggregationsvisible', 'grades'), diff --git a/backup/moodle2/backup_stepslib.php b/backup/moodle2/backup_stepslib.php index e79c667b07a..4dd37be303c 100644 --- a/backup/moodle2/backup_stepslib.php +++ b/backup/moodle2/backup_stepslib.php @@ -940,8 +940,8 @@ class backup_gradebook_structure_step extends backup_structure_step { 'iteminstance', 'itemnumber', 'iteminfo', 'idnumber', 'calculation', 'gradetype', 'grademax', 'grademin', 'scaleid', 'outcomeid', 'gradepass', 'multfactor', - 'plusfactor', 'aggregationcoef', 'sortorder', 'display', - 'decimals', 'hidden', 'locked', 'locktime', + 'plusfactor', 'aggregationcoef', 'aggregationcoef2', 'weightoverride', + 'sortorder', 'display', 'decimals', 'hidden', 'locked', 'locktime', 'needsupdate', 'timecreated', 'timemodified')); $grade_grades = new backup_nested_element('grade_grades'); @@ -950,7 +950,8 @@ class backup_gradebook_structure_step extends backup_structure_step { 'rawscaleid', 'usermodified', 'finalgrade', 'hidden', 'locked', 'locktime', 'exported', 'overridden', 'excluded', 'feedback', 'feedbackformat', 'information', - 'informationformat', 'timecreated', 'timemodified')); + 'informationformat', 'timecreated', 'timemodified', + 'aggregationstatus', 'aggregationweight')); //grade_categories $grade_categories = new backup_nested_element('grade_categories'); @@ -2163,8 +2164,8 @@ class backup_activity_grades_structure_step extends backup_structure_step { 'iteminstance', 'itemnumber', 'iteminfo', 'idnumber', 'calculation', 'gradetype', 'grademax', 'grademin', 'scaleid', 'outcomeid', 'gradepass', 'multfactor', - 'plusfactor', 'aggregationcoef', 'sortorder', 'display', - 'decimals', 'hidden', 'locked', 'locktime', + 'plusfactor', 'aggregationcoef', 'aggregationcoef2', 'weightoverride', + 'sortorder', 'display', 'decimals', 'hidden', 'locked', 'locktime', 'needsupdate', 'timecreated', 'timemodified')); $grades = new backup_nested_element('grade_grades'); @@ -2174,7 +2175,8 @@ class backup_activity_grades_structure_step extends backup_structure_step { 'rawscaleid', 'usermodified', 'finalgrade', 'hidden', 'locked', 'locktime', 'exported', 'overridden', 'excluded', 'feedback', 'feedbackformat', 'information', - 'informationformat', 'timecreated', 'timemodified')); + 'informationformat', 'timecreated', 'timemodified', + 'aggregationstatus', 'aggregationweight')); $letters = new backup_nested_element('grade_letters'); diff --git a/grade/edit/scale/edit.php b/grade/edit/scale/edit.php index 04373b19912..e0165603626 100644 --- a/grade/edit/scale/edit.php +++ b/grade/edit/scale/edit.php @@ -32,6 +32,8 @@ $id = optional_param('id', 0, PARAM_INT); $PAGE->set_url('/grade/edit/scale/edit.php', array('id' => $id, 'courseid' => $courseid)); $PAGE->set_pagelayout('admin'); +navigation_node::override_active_url(new moodle_url('/grade/edit/scale/index.php', + array('id' => $courseid))); $systemcontext = context_system::instance(); $heading = ''; @@ -145,11 +147,7 @@ if ($mform->is_cancelled()) { redirect($returnurl); } -if ($courseid) { - print_grade_page_head($course->id, 'scale', 'edit', $heading); -} else { - echo $OUTPUT->header(); -} +print_grade_page_head($COURSE->id, 'scale', null, $heading, false, false, false); $mform->display(); diff --git a/grade/edit/settings/index.php b/grade/edit/settings/index.php index fa7a81f6361..3baacc7935d 100644 --- a/grade/edit/settings/index.php +++ b/grade/edit/settings/index.php @@ -45,8 +45,6 @@ $gpr = new grade_plugin_return(array('type'=>'edit', 'plugin'=>'settings', 'cour $strgrades = get_string('grades'); $pagename = get_string('coursesettings', 'grades'); -$navigation = grade_build_nav(__FILE__, $pagename, $courseid); - $returnurl = $CFG->wwwroot.'/grade/index.php?id='.$course->id; $mform = new course_settings_form(); @@ -76,7 +74,7 @@ if ($mform->is_cancelled()) { redirect($returnurl); } -print_grade_page_head($courseid, 'settings', 'coursesettings', get_string('coursesettings', 'grades')); +print_grade_page_head($courseid, 'settings', 'coursesettings', get_string('coursegradesettings', 'grades')); echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthnormal centerpara'); echo get_string('coursesettingsexplanation', 'grades'); diff --git a/grade/edit/tree/action.php b/grade/edit/tree/action.php index f8d18f32599..cea87915708 100644 --- a/grade/edit/tree/action.php +++ b/grade/edit/tree/action.php @@ -107,6 +107,37 @@ switch ($action) { $object->set_locked(0, true, true); } break; + + case 'resetweights': + if ($eid && confirm_sesskey()) { + + // This is specific to category items with natural weight as an aggregation method, and can + // only be done by someone who can manage the grades. + if ($type != 'category' || $object->aggregation != GRADE_AGGREGATE_SUM || + !has_capability('moodle/grade:manage', $context)) { + print_error('nopermissiontoresetweights', 'grades', $returnurl); + } + + // Remove the weightoverride flag from the children. + $children = $object->get_children(); + foreach ($children as $item) { + if ($item['type'] == 'category') { + $gradeitem = $item['object']->load_grade_item(); + } else { + $gradeitem = $item['object']; + } + + if ($gradeitem->weightoverride == false) { + continue; + } + + $gradeitem->weightoverride = false; + $gradeitem->update(); + } + + // Force regrading. + $object->force_regrading(); + } } redirect($returnurl); diff --git a/grade/edit/tree/calculation.php b/grade/edit/tree/calculation.php index bd275513d8a..e0dabcf861a 100644 --- a/grade/edit/tree/calculation.php +++ b/grade/edit/tree/calculation.php @@ -46,6 +46,10 @@ require_login($course); $context = context_course::instance($course->id); require_capability('moodle/grade:manage', $context); +$PAGE->set_pagelayout('admin'); +navigation_node::override_active_url(new moodle_url('/grade/edit/tree/index.php', + array('id'=>$course->id))); + // default return url $gpr = new grade_plugin_return(); $returnurl = $gpr->get_return_url($CFG->wwwroot.'/grade/report/index.php?id='.$course->id); @@ -109,10 +113,8 @@ $strgrades = get_string('grades'); $strgraderreport = get_string('graderreport', 'grades'); $strcalculationedit = get_string('editcalculation', 'grades'); -grade_build_nav(__FILE__, $strcalculationedit, array('courseid' => $courseid)); -$PAGE->set_title($strgrades . ': ' . $strgraderreport); -$PAGE->set_heading($course->fullname); -echo $OUTPUT->header(); +$PAGE->navbar->add($strcalculationedit); +print_grade_page_head($courseid, 'settings', null, $strcalculationedit, false, false, false); $mform->display(); // Now show the gradetree with the idnumbers add/edit form diff --git a/grade/edit/tree/category.php b/grade/edit/tree/category.php index 852fdd55206..206b12de92d 100644 --- a/grade/edit/tree/category.php +++ b/grade/edit/tree/category.php @@ -36,6 +36,8 @@ if ($id !== 0) { } $PAGE->set_url($url); $PAGE->set_pagelayout('admin'); +navigation_node::override_active_url(new moodle_url('/grade/edit/tree/index.php', + array('id'=>$courseid))); if (!$course = $DB->get_record('course', array('id' => $courseid))) { print_error('nocourseid'); @@ -75,6 +77,7 @@ if ($id) { $category->grade_item_gradepass = format_float($category->grade_item_gradepass, $decimalpoints); $category->grade_item_multfactor = format_float($category->grade_item_multfactor, 4); $category->grade_item_plusfactor = format_float($category->grade_item_plusfactor, 4); + $category->grade_item_aggregationcoef2 = format_float($category->grade_item_aggregationcoef2 * 100.0, 4); if (!$parent_category) { // keep as is @@ -84,6 +87,16 @@ if ($id) { $category->grade_item_aggregationcoef = format_float($category->grade_item_aggregationcoef, 4); } + if ($category->aggregation == GRADE_AGGREGATE_SUM) { + // Input fields for grademin and grademax are disabled for the "Natural" category, + // this means they will be ignored if user does not change aggregation method. + // But if user does change aggregation method the default values should be used. + $category->grademax = 100; + $category->grade_item_grademax = 100; + $category->grademin = 0; + $category->grade_item_grademin = 0; + } + } else { $heading = get_string('newcategory', 'grades'); $grade_category = new grade_category(array('courseid'=>$courseid), false); @@ -160,12 +173,15 @@ if ($mform->is_cancelled()) { unset($itemdata->locked); unset($itemdata->locktime); - $convert = array('grademax', 'grademin', 'gradepass', 'multfactor', 'plusfactor', 'aggregationcoef'); + $convert = array('grademax', 'grademin', 'gradepass', 'multfactor', 'plusfactor', 'aggregationcoef', 'aggregationcoef2'); foreach ($convert as $param) { if (property_exists($itemdata, $param)) { $itemdata->$param = unformat_float($itemdata->$param); } } + if (isset($itemdata->aggregationcoef2)) { + $itemdata->aggregationcoef2 = $itemdata->aggregationcoef2 / 100.0; + } // When creating a new category, a number of grade item fields are filled out automatically, and are required. // If the user leaves these fields empty during creation of a category, we let the default values take effect @@ -195,6 +211,14 @@ if ($mform->is_cancelled()) { $grade_item->decimals = null; } + // Change weightoverride flag. Check if the value is set, because it is not when the checkbox is not ticked. + $itemdata->weightoverride = isset($itemdata->weightoverride) ? $itemdata->weightoverride : 0; + if ($grade_item->weightoverride != $itemdata->weightoverride && $grade_category->aggregation == GRADE_AGGREGATE_SUM) { + // If we are using natural weight and the weight has been un-overriden, force parent category to recalculate weights. + $grade_category->force_regrading(); + } + $grade_item->weightoverride = $itemdata->weightoverride; + $grade_item->outcomeid = null; // update hiding flag @@ -217,10 +241,8 @@ if ($mform->is_cancelled()) { redirect($returnurl); } -$return = false; -$buttons = false; -$shownavigation = false; -print_grade_page_head($courseid, 'edittree', null, $heading, $return, $buttons, $shownavigation); +$PAGE->navbar->add($heading); +print_grade_page_head($courseid, 'settings', null, $heading, false, false, false); $mform->display(); diff --git a/grade/edit/tree/category_form.php b/grade/edit/tree/category_form.php index f893091e8d4..6a155fded5d 100644 --- a/grade/edit/tree/category_form.php +++ b/grade/edit/tree/category_form.php @@ -37,15 +37,7 @@ class edit_category_form extends moodleform { $category = $this->_customdata['current']; - $this->aggregation_options = array(GRADE_AGGREGATE_MEAN =>get_string('aggregatemean', 'grades'), - GRADE_AGGREGATE_WEIGHTED_MEAN =>get_string('aggregateweightedmean', 'grades'), - GRADE_AGGREGATE_WEIGHTED_MEAN2 =>get_string('aggregateweightedmean2', 'grades'), - GRADE_AGGREGATE_EXTRACREDIT_MEAN=>get_string('aggregateextracreditmean', 'grades'), - GRADE_AGGREGATE_MEDIAN =>get_string('aggregatemedian', 'grades'), - GRADE_AGGREGATE_MIN =>get_string('aggregatemin', 'grades'), - GRADE_AGGREGATE_MAX =>get_string('aggregatemax', 'grades'), - GRADE_AGGREGATE_MODE =>get_string('aggregatemode', 'grades'), - GRADE_AGGREGATE_SUM =>get_string('aggregatesum', 'grades')); + $this->aggregation_options = grade_helper::get_aggregation_strings(); // visible elements $mform->addElement('header', 'headercategory', get_string('gradecategory', 'grades')); @@ -62,7 +54,6 @@ class edit_category_form extends moodleform { $mform->addElement('checkbox', 'aggregateonlygraded', get_string('aggregateonlygraded', 'grades')); $mform->addHelpButton('aggregateonlygraded', 'aggregateonlygraded', 'grades'); - $mform->disabledIf('aggregateonlygraded', 'aggregation', 'eq', GRADE_AGGREGATE_SUM); if ((int)$CFG->grade_aggregateonlygraded_flag & 2) { $mform->setAdvanced('aggregateonlygraded'); @@ -170,6 +161,14 @@ class edit_category_form extends moodleform { $mform->disabledIf('grade_item_grademin', 'aggregation', 'eq', GRADE_AGGREGATE_SUM); } + $mform->addElement('advcheckbox', 'grade_item_weightoverride', get_string('adjustedweight', 'grades')); + $mform->addHelpButton('grade_item_weightoverride', 'weightoverride', 'grades'); + + $mform->addElement('text', 'grade_item_aggregationcoef2', get_string('weight', 'grades')); + $mform->addHelpButton('grade_item_aggregationcoef2', 'weight', 'grades'); + $mform->setType('grade_item_aggregationcoef2', PARAM_RAW); + $mform->disabledIf('grade_item_aggregationcoef2', 'grade_item_weightoverride'); + $mform->addElement('text', 'grade_item_gradepass', get_string('gradepass', 'grades')); $mform->setType('grade_item_gradepass', PARAM_RAW); $mform->addHelpButton('grade_item_gradepass', 'gradepass', 'grades'); @@ -332,6 +331,18 @@ class edit_category_form extends moodleform { } + // Prevent the user from using drop lowest/keep highest when the aggregation method cannot handle it. + if (!$grade_category->can_apply_limit_rules()) { + if ($mform->elementExists('keephigh')) { + $mform->setConstant('keephigh', 0); + $mform->hardFreeze('keephigh'); + } + if ($mform->elementExists('droplow')) { + $mform->setConstant('droplow', 0); + $mform->hardFreeze('droplow'); + } + } + if ($grade_item->is_calculated()) { // following elements are ignored when calculation formula used if ($mform->elementExists('aggregation')) { @@ -430,6 +441,12 @@ class edit_category_form extends moodleform { $mform->removeElement('grade_item_aggregationcoef'); } + if ($mform->elementExists('grade_item_weightoverride')) { + $mform->removeElement('grade_item_weightoverride'); + } + if ($mform->elementExists('grade_item_aggregationcoef2')) { + $mform->removeElement('grade_item_aggregationcoef2'); + } } else { if ($grade_item->is_category_item()) { $category = $grade_item->get_item_category(); @@ -448,8 +465,9 @@ class edit_category_form extends moodleform { $coefstring = $grade_item->get_coefstring(); - if ($coefstring == 'aggregationcoefextrasum') { + if ($coefstring == 'aggregationcoefextrasum' || $coefstring == 'aggregationcoefextraweightsum') { // advcheckbox is not compatible with disabledIf! + $coefstring = 'aggregationcoefextrasum'; $element =& $mform->createElement('checkbox', 'grade_item_aggregationcoef', get_string($coefstring, 'grades')); } else { $element =& $mform->createElement('text', 'grade_item_aggregationcoef', get_string($coefstring, 'grades')); @@ -457,6 +475,16 @@ class edit_category_form extends moodleform { $mform->insertElementBefore($element, 'parentcategory'); $mform->addHelpButton('grade_item_aggregationcoef', $coefstring, 'grades'); } + + // Remove fields used by natural weighting if the parent category is not using natural weighting. + if ($parent_category->aggregation != GRADE_AGGREGATE_SUM) { + if ($mform->elementExists('grade_item_weightoverride')) { + $mform->removeElement('grade_item_weightoverride'); + } + if ($mform->elementExists('grade_item_aggregationcoef2')) { + $mform->removeElement('grade_item_aggregationcoef2'); + } + } } } } diff --git a/grade/edit/tree/functions.js b/grade/edit/tree/functions.js index 5649ea22d70..2da2f011658 100644 --- a/grade/edit/tree/functions.js +++ b/grade/edit/tree/functions.js @@ -69,6 +69,18 @@ function update_category_aggregation(e, args) { window.location = 'index.php?id='+args.courseid+'&category='+args.category+'&aggregationtype='+selectmenu.get('value')+'&sesskey='+args.sesskey; } +/** + * The weight override checkboxes toggle the disabled status of their associated weight fields. + */ +YUI().use('node', 'delegate', function(Y) { + Y.on('domready', function() { + Y.delegate('click', function(e) { + var t = e.currentTarget, + itemid = t.get('id').split('_')[1]; + Y.one('input[name=weight_' + itemid + ']').set('disabled', t.get('checked') ? false : true); + }, Y.config.doc.body, 'input.weightoverride'); + }); +}); /* TODO: finish and rewrite for YUI3... Y.YUI2.namespace('grade_edit_tree'); diff --git a/grade/edit/tree/grade_form.php b/grade/edit/tree/grade_form.php index 06e51624b97..be8a0a69a22 100644 --- a/grade/edit/tree/grade_form.php +++ b/grade/edit/tree/grade_form.php @@ -85,11 +85,7 @@ class edit_grade_form extends moodleform { $mform->disabledIf('finalgrade', 'overridden', 'notchecked'); } - if ($grade_category and $grade_category->aggregation == GRADE_AGGREGATE_SUM) { - $mform->addElement('advcheckbox', 'excluded', get_string('excluded', 'grades'), '('.get_string('warningexcludedsum', 'grades').')'); - } else { - $mform->addElement('advcheckbox', 'excluded', get_string('excluded', 'grades')); - } + $mform->addElement('advcheckbox', 'excluded', get_string('excluded', 'grades')); $mform->addHelpButton('excluded', 'excluded', 'grades'); /// hiding diff --git a/grade/edit/tree/index.php b/grade/edit/tree/index.php index 68bb267666d..849c23b58a5 100644 --- a/grade/edit/tree/index.php +++ b/grade/edit/tree/index.php @@ -32,12 +32,8 @@ $action = optional_param('action', 0, PARAM_ALPHA); $eid = optional_param('eid', 0, PARAM_ALPHANUM); $category = optional_param('category', null, PARAM_INT); $aggregationtype = optional_param('aggregationtype', null, PARAM_INT); -$showadvanced = optional_param('showadvanced', -1, PARAM_BOOL); // sticky editing mode $url = new moodle_url('/grade/edit/tree/index.php', array('id' => $courseid)); -if($showadvanced!=-1) { - $url->param("showadvanced",$showadvanced); -} $PAGE->set_url($url); $PAGE->set_pagelayout('admin'); @@ -57,41 +53,6 @@ $PAGE->requires->js('/grade/edit/tree/functions.js'); $gpr = new grade_plugin_return(array('type'=>'edit', 'plugin'=>'tree', 'courseid'=>$courseid)); $returnurl = $gpr->get_return_url(null); -/// Build editing on/off buttons -if (!isset($USER->gradeediting)) { - $USER->gradeediting = array(); -} - -$current_view = ''; - -if (has_capability('moodle/grade:manage', $context)) { - if (!isset($USER->gradeediting[$course->id])) { - $USER->gradeediting[$course->id] = 0; - } - - if ($showadvanced == 1) { - $USER->gradeediting[$course->id] = 1; - } else if ($showadvanced == 0) { - $USER->gradeediting[$course->id] = 0; - } - - // page params for the turn editing on - $options = $gpr->get_options(); - $options['sesskey'] = sesskey(); - - if ($USER->gradeediting[$course->id]) { - $options['showadvanced'] = 0; - $current_view = 'fullview'; - } else { - $options['showadvanced'] = 1; - $current_view = 'simpleview'; - } - -} else { - $USER->gradeediting[$course->id] = 0; - $buttons = ''; -} - // Change category aggregation if requested if (!is_null($category) && !is_null($aggregationtype) && confirm_sesskey()) { if (!$grade_category = grade_category::fetch(array('id'=>$category, 'courseid'=>$courseid))) { @@ -107,8 +68,18 @@ if (!is_null($category) && !is_null($aggregationtype) && confirm_sesskey()) { } //first make sure we have proper final grades - we need it for locking changes +$normalisationmessage = null; + +$originalweights = grade_helper::fetch_all_natural_weights_for_course($courseid); + grade_regrade_final_grades($courseid); +$alteredweights = grade_helper::fetch_all_natural_weights_for_course($courseid); + +if (array_diff($originalweights, $alteredweights)) { + $normalisationmessage = get_string('weightsadjusted', 'grades'); +} + // get the grading tree object // note: total must be first for moving to work correctly, if you want it last moving code must be rewritten! $gtree = new grade_tree($courseid, false, false); @@ -128,8 +99,6 @@ $switch = grade_get_setting($course->id, 'aggregationposition', $CFG->grade_aggr $strgrades = get_string('grades'); $strgraderreport = get_string('graderreport', 'grades'); -$strcategoriesedit = get_string('categoriesedit', 'grades'); -$strcategoriesanditems = get_string('categoriesanditems', 'grades'); $moving = false; $movingeid = false; @@ -206,21 +175,6 @@ switch ($action) { break; } -// Hide advanced columns if moving -if ($grade_edit_tree->moving) { - $original_gradeediting = $USER->gradeediting[$course->id]; - $USER->gradeediting[$course->id] = 0; -} - -$current_view_str = ''; -if ($current_view != '') { - if ($current_view == 'simpleview') { - $current_view_str = get_string('simpleview', 'grades'); - } elseif ($current_view == 'fullview') { - $current_view_str = get_string('fullview', 'grades'); - } -} - //if we go straight to the db to update an element we need to recreate the tree as // $grade_edit_tree has already been constructed. //Ideally we could do the updates through $grade_edit_tree to avoid recreating it @@ -232,7 +186,7 @@ if ($data = data_submitted() and confirm_sesskey()) { $elements = array(); foreach ($data as $key => $value) { - if (preg_match('/select_(i[0-9]*)/', $key, $matches)) { + if (preg_match('/select_(ig[0-9]*)/', $key, $matches)) { $elements[] = $matches[1]; } } @@ -240,77 +194,57 @@ if ($data = data_submitted() and confirm_sesskey()) { $grade_edit_tree->move_elements($elements, $returnurl); } - // Category and item field updates + // Update weights (extra credits) on categories and items. foreach ($data as $key => $value) { - // Grade category text inputs - if (preg_match('/^(aggregation|droplow|keephigh)_([0-9]+)$/', $key, $matches)) { - $param = $matches[1]; - $aid = $matches[2]; - - // Do not allow negative values - $value = clean_param($value, PARAM_INT); - $value = ($value < 0) ? 0 : $value; - - $grade_category = grade_category::fetch(array('id'=>$aid, 'courseid'=>$courseid)); - $grade_category->$param = $value; - - $grade_category->update(); - grade_regrade_final_grades($courseid); - - $recreatetree = true; - - // Grade item text inputs - } elseif (preg_match('/^(grademax|aggregationcoef|multfactor|plusfactor)_([0-9]+)$/', $key, $matches)) { - $param = $matches[1]; - $aid = $matches[2]; + if (preg_match('/^weight_([0-9]+)$/', $key, $matches)) { + $aid = $matches[1]; $value = unformat_float($value); $value = clean_param($value, PARAM_FLOAT); - $grade_item = grade_item::fetch(array('id'=>$aid, 'courseid'=>$courseid)); + $grade_item = grade_item::fetch(array('id' => $aid, 'courseid' => $courseid)); - if ($param === 'grademax' and $value < $grade_item->grademin) { - // better not allow values lower than grade min - $value = $grade_item->grademin; + // Convert weight to aggregation coef2. + $aggcoef = $grade_item->get_coefstring(); + if ($aggcoef == 'aggregationcoefextraweightsum') { + // The field 'weight' should only be sent when the checkbox 'weighoverride' is checked, + // so there is not need to set weightoverride here, it is done below. + $value = $value / 100.0; + $grade_item->aggregationcoef2 = $value; + } else if ($aggcoef == 'aggregationcoefweight' || $aggcoef == 'aggregationcoefextraweight') { + $grade_item->aggregationcoef = $value; } + + $grade_item->update(); + + $recreatetree = true; + + // Grade item checkbox inputs. + } elseif (preg_match('/^(weightoverride)_([0-9]+)$/', $key, $matches)) { + $param = $matches[1]; + $aid = $matches[2]; + $value = clean_param($value, PARAM_BOOL); + + $grade_item = grade_item::fetch(array('id' => $aid, 'courseid' => $courseid)); $grade_item->$param = $value; $grade_item->update(); - grade_regrade_final_grades($courseid); - - $recreatetree = true; - - // Grade item checkbox inputs - } elseif (preg_match('/^extracredit_([0-9]+)$/', $key, $matches)) { // Sum extra credit checkbox - $aid = $matches[1]; - $value = clean_param($value, PARAM_BOOL); - - $grade_item = grade_item::fetch(array('id'=>$aid, 'courseid'=>$courseid)); - $grade_item->aggregationcoef = $value; - - $grade_item->update(); - grade_regrade_final_grades($courseid); - - $recreatetree = true; - - // Grade category checkbox inputs - } elseif (preg_match('/^aggregate(onlygraded|subcats|outcomes)_([0-9]+)$/', $key, $matches)) { - $param = 'aggregate'.$matches[1]; - $aid = $matches[2]; - $value = clean_param($value, PARAM_BOOL); - - $grade_category = grade_category::fetch(array('id'=>$aid, 'courseid'=>$courseid)); - $grade_category->$param = $value; - - $grade_category->update(); - grade_regrade_final_grades($courseid); $recreatetree = true; } } + + $originalweights = grade_helper::fetch_all_natural_weights_for_course($courseid); + + grade_regrade_final_grades($courseid); + + $alteredweights = grade_helper::fetch_all_natural_weights_for_course($courseid); + if (array_diff($originalweights, $alteredweights)) { + $normalisationmessage = get_string('weightsadjusted', 'grades'); + } } -print_grade_page_head($courseid, 'edittree', $current_view, get_string('categoriesedit', 'grades') . ': ' . $current_view_str); +print_grade_page_head($courseid, 'settings', 'setup', get_string('setupgradeslayout', 'grades')); // Print Table of categories and items echo $OUTPUT->box_start('gradetreebox generalbox'); @@ -323,6 +257,10 @@ echo ''; if ($recreatetree) { $grade_edit_tree = new grade_edit_tree($gtree, $movingeid, $gpr); } +// Check to see if we have a normalisation message to send. +if (!empty($normalisationmessage)) { + echo $OUTPUT->notification($normalisationmessage, 'notifymessage'); +} echo html_writer::table($grade_edit_tree->table); @@ -377,11 +315,6 @@ $PAGE->requires->yui_module('moodle-core-formchangechecker', $PAGE->requires->string_for_js('changesmadereallygoaway', 'moodle'); echo $OUTPUT->footer(); - -// Restore original show/hide preference if moving -if ($moving) { - $USER->gradeediting[$course->id] = $original_gradeediting; -} die; diff --git a/grade/edit/tree/item.php b/grade/edit/tree/item.php index 7acf2ebe17d..acbf5812a71 100644 --- a/grade/edit/tree/item.php +++ b/grade/edit/tree/item.php @@ -37,6 +37,8 @@ if ($id !== 0) { } $PAGE->set_url($url); $PAGE->set_pagelayout('admin'); +navigation_node::override_active_url(new moodle_url('/grade/edit/tree/index.php', + array('id'=>$courseid))); if (!$course = $DB->get_record('course', array('id' => $courseid))) { print_error('nocourseid'); @@ -97,6 +99,9 @@ if ($parent_category->aggregation == GRADE_AGGREGATE_SUM or $parent_category->ag } else { $item->aggregationcoef = format_float($item->aggregationcoef, 4); } +if ($parent_category->aggregation == GRADE_AGGREGATE_SUM) { + $item->aggregationcoef2 = format_float($item->aggregationcoef2 * 100.0); +} $item->cancontrolvisibility = $grade_item->can_control_visibility(); $mform = new edit_item_form(null, array('current'=>$item, 'gpr'=>$gpr)); @@ -132,12 +137,15 @@ if ($mform->is_cancelled()) { unset($data->locked); unset($data->locktime); - $convert = array('grademax', 'grademin', 'gradepass', 'multfactor', 'plusfactor', 'aggregationcoef'); + $convert = array('grademax', 'grademin', 'gradepass', 'multfactor', 'plusfactor', 'aggregationcoef', 'aggregationcoef2'); foreach ($convert as $param) { if (property_exists($data, $param)) { $data->$param = unformat_float($data->$param); } } + if (isset($data->aggregationcoef2) && $parent_category->aggregation == GRADE_AGGREGATE_SUM) { + $data->aggregationcoef2 = $data->aggregationcoef2 / 100.0; + } $grade_item = new grade_item(array('id'=>$id, 'courseid'=>$courseid)); grade_item::set_properties($grade_item, $data); @@ -174,10 +182,8 @@ if ($mform->is_cancelled()) { redirect($returnurl); } -$return = false; -$buttons = false; -$shownavigation = false; -print_grade_page_head($courseid, 'edittree', null, $heading, $return, $buttons, $shownavigation); +$PAGE->navbar->add($heading); +print_grade_page_head($courseid, 'settings', null, $heading, false, false, false); $mform->display(); diff --git a/grade/edit/tree/item_form.php b/grade/edit/tree/item_form.php index 13ad68703c9..a74120fdc0c 100644 --- a/grade/edit/tree/item_form.php +++ b/grade/edit/tree/item_form.php @@ -97,6 +97,14 @@ class edit_item_form extends moodleform { $mform->setType('grademin', PARAM_RAW); } + $mform->addElement('advcheckbox', 'weightoverride', get_string('adjustedweight', 'grades')); + $mform->addHelpButton('weightoverride', 'weightoverride', 'grades'); + + $mform->addElement('text', 'aggregationcoef2', get_string('weight', 'grades')); + $mform->addHelpButton('aggregationcoef2', 'weight', 'grades'); + $mform->setType('aggregationcoef2', PARAM_RAW); + $mform->disabledIf('aggregationcoef2', 'weightoverride'); + $mform->addElement('text', 'gradepass', get_string('gradepass', 'grades')); $mform->addHelpButton('gradepass', 'gradepass', 'grades'); $mform->disabledIf('gradepass', 'gradetype', 'eq', GRADE_TYPE_NONE); @@ -278,8 +286,9 @@ class edit_item_form extends moodleform { $coefstring = $grade_item->get_coefstring(); if ($coefstring !== '') { - if ($coefstring == 'aggregationcoefextrasum') { + if ($coefstring == 'aggregationcoefextrasum' || $coefstring == 'aggregationcoefextraweightsum') { // advcheckbox is not compatible with disabledIf! + $coefstring = 'aggregationcoefextrasum'; $element =& $mform->createElement('checkbox', 'aggregationcoef', get_string($coefstring, 'grades')); } else { $element =& $mform->createElement('text', 'aggregationcoef', get_string($coefstring, 'grades')); @@ -295,6 +304,16 @@ class edit_item_form extends moodleform { $mform->disabledIf('aggregationcoef', 'parentcategory', 'eq', $parent_category->id); } + // Remove fields used by natural weighting if the parent category is not using natural weighting. + if ($parent_category->aggregation != GRADE_AGGREGATE_SUM) { + if ($mform->elementExists('weightoverride')) { + $mform->removeElement('weightoverride'); + } + if ($mform->elementExists('aggregationcoef2')) { + $mform->removeElement('aggregationcoef2'); + } + } + if ($category = $grade_item->get_item_category()) { if ($category->aggregation == GRADE_AGGREGATE_SUM) { if ($mform->elementExists('gradetype')) { diff --git a/grade/edit/tree/lib.php b/grade/edit/tree/lib.php index c483ff25986..177fdb44af4 100644 --- a/grade/edit/tree/lib.php +++ b/grade/edit/tree/lib.php @@ -42,10 +42,11 @@ class grade_edit_tree { public $deepest_level; - public $uses_extra_credit = false; - public $uses_weight = false; + /** @var bool indicates if tree has categories with aggregation method other than Natural. */ + protected $uses_non_natural = false; + public $table; public $categories = array(); @@ -70,42 +71,32 @@ class grade_edit_tree { $this->gpr = $gpr; $this->deepest_level = $this->get_deepest_level($this->gtree->top_element); - $this->columns = array(grade_edit_tree_column::factory('name', array('deepest_level' => $this->deepest_level)), - grade_edit_tree_column::factory('aggregation', array('flag' => true))); + $this->columns = array(grade_edit_tree_column::factory('name', array('deepest_level' => $this->deepest_level))); + + if ($this->uses_non_natural) { + $this->columns[] = grade_edit_tree_column::factory('aggregation', array('flag' => true)); + } if ($this->uses_weight) { - $this->columns[] = grade_edit_tree_column::factory('weight', array('adv' => 'aggregationcoef')); - } - if ($this->uses_extra_credit) { - $this->columns[] = grade_edit_tree_column::factory('extracredit', array('adv' => 'aggregationcoef')); + $this->columns[] = grade_edit_tree_column::factory('weight', array('adv' => 'weight')); } $this->columns[] = grade_edit_tree_column::factory('range'); // This is not a setting... How do we deal with it? - $this->columns[] = grade_edit_tree_column::factory('aggregateonlygraded', array('flag' => true)); - $this->columns[] = grade_edit_tree_column::factory('aggregatesubcats', array('flag' => true)); - $this->columns[] = grade_edit_tree_column::factory('aggregateoutcomes', array('flag' => true)); - $this->columns[] = grade_edit_tree_column::factory('droplow', array('flag' => true)); - $this->columns[] = grade_edit_tree_column::factory('keephigh', array('flag' => true)); - $this->columns[] = grade_edit_tree_column::factory('multfactor', array('adv' => true)); - $this->columns[] = grade_edit_tree_column::factory('plusfactor', array('adv' => true)); $this->columns[] = grade_edit_tree_column::factory('actions'); - $this->columns[] = grade_edit_tree_column::factory('select'); - $mode = ($USER->gradeediting[$COURSE->id]) ? 'advanced' : 'simple'; - - $widthstyle = ''; - if ($mode == 'simple') { - $widthstyle = ' style="width:auto;" '; + if ($this->deepest_level > 1) { + $this->columns[] = grade_edit_tree_column::factory('select'); } $this->table = new html_table(); $this->table->id = "grade_edit_tree_table"; - $this->table->cellpadding = 5; - $this->table->attributes['class'] = 'generaltable ' . $mode; - $this->table->style = $widthstyle; + $this->table->attributes['class'] = 'generaltable simple setup-grades'; + if ($this->moving) { + $this->table->attributes['class'] .= ' moving'; + } foreach ($this->columns as $column) { - if (!($this->moving && $column->hide_when_moving) && !$column->is_hidden($mode)) { + if (!($this->moving && $column->hide_when_moving)) { $this->table->head[] = $column->get_header_cell(); } } @@ -143,6 +134,7 @@ class grade_edit_tree { } $actions = ''; + $moveaction = ''; if (!$is_category_item) { $actions .= $this->gtree->get_edit_icon($element, $this->gpr); @@ -159,13 +151,12 @@ class grade_edit_tree { } $aurl = new moodle_url('index.php', array('id' => $COURSE->id, 'action' => 'moveselect', 'eid' => $eid, 'sesskey' => sesskey())); - $actions .= $OUTPUT->action_icon($aurl, new pix_icon('t/move', get_string('move'))); + $moveaction .= $OUTPUT->action_icon($aurl, new pix_icon('t/move', get_string('move'))); } $actions .= $this->gtree->get_hiding_icon($element, $this->gpr); - $actions .= $this->gtree->get_locking_icon($element, $this->gpr); - $mode = ($USER->gradeediting[$COURSE->id]) ? 'advanced' : 'simple'; + $actions .= $this->gtree->get_reset_icon($element, $this->gpr); $returnrows = array(); $root = false; @@ -180,7 +171,8 @@ class grade_edit_tree { // do not diplay children $cell = new html_table_cell(); $cell->colspan = 12; - $cell->attributes['class'] = $element['type'] . ' moving'; + $cell->attributes['class'] = $element['type'] . ' moving column-name level' . + ($level + 1) . ' level' . ($level % 2 ? 'even' : 'odd'); $cell->text = $object->name.' ('.get_string('move').')'; return array(new html_table_row(array($cell))); } @@ -225,7 +217,7 @@ class grade_edit_tree { $strmove = get_string('move'); $strmovehere = get_string('movehere'); - $actions = ''; // no action icons when moving + $actions = $moveaction = ''; // no action icons when moving $aurl = new moodle_url('index.php', array('id' => $COURSE->id, 'action' => 'move', 'eid' => $this->moving, 'moveafter' => $child_eid, 'sesskey' => sesskey())); if ($first) { @@ -234,6 +226,7 @@ class grade_edit_tree { $cell = new html_table_cell(); $cell->colspan = 12; + $cell->attributes['class'] = 'movehere level' . ($level + 1) . ' level' . ($level % 2 ? 'even' : 'odd'); $icon = new pix_icon('movehere', $strmovehere, null, array('class'=>'movetarget')); $cell->text = $OUTPUT->action_icon($aurl, $icon); @@ -285,7 +278,7 @@ class grade_edit_tree { $root = true; } - $levelclass = "level$level"; + $levelclass = "level$level level" . ($level % 2 ? 'odd' : 'even'); $courseclass = ''; if ($level == 1) { @@ -302,13 +295,15 @@ class grade_edit_tree { $headercell->header = true; $headercell->scope = 'row'; $headercell->attributes['title'] = $object->stripped_name; - $headercell->attributes['class'] = 'cell rowspan ' . $levelclass; + $headercell->attributes['class'] = 'cell column-rowspan rowspan ' . $levelclass; $headercell->rowspan = $row_count + 1; $row->cells[] = $headercell; foreach ($this->columns as $column) { - if (!($this->moving && $column->hide_when_moving) && !$column->is_hidden($mode)) { - $row->cells[] = $column->get_category_cell($category, $levelclass, array('id' => $id, 'name' => $object->name, 'level' => $level, 'actions' => $actions, 'eid' => $eid)); + if (!($this->moving && $column->hide_when_moving)) { + $row->cells[] = $column->get_category_cell($category, $levelclass, array('id' => $id, + 'name' => $object->name, 'level' => $level, 'actions' => $actions, + 'moveaction' => $moveaction, 'eid' => $eid)); } } @@ -319,7 +314,7 @@ class grade_edit_tree { // Print a coloured row to show the end of the category across the table $endcell = new html_table_cell(); $endcell->colspan = (19 - $level); - $endcell->attributes['class'] = 'colspan ' . $levelclass; + $endcell->attributes['class'] = 'emptyrow colspan ' . $levelclass; $returnrows[] = new html_table_row(array($endcell)); @@ -333,6 +328,9 @@ class grade_edit_tree { if ($item->itemtype == 'category') { $categoryitemclass = 'categoryitem'; } + if ($item->itemtype == 'course') { + $categoryitemclass = 'courseitem'; + } $dimmed = ($item->is_hidden()) ? "dimmed_text" : ""; $gradeitemrow = new html_table_row(); @@ -342,9 +340,10 @@ class grade_edit_tree { } foreach ($this->columns as $column) { - if (!($this->moving && $column->hide_when_moving) && !$column->is_hidden($mode)) { - $gradeitemrow->cells[] = $column->get_item_cell($item, array('id' => $id, 'name' => $object->name, 'level' => $level, 'actions' => $actions, - 'element' => $element, 'eid' => $eid, 'itemtype' => $object->itemtype)); + if (!($this->moving && $column->hide_when_moving)) { + $gradeitemrow->cells[] = $column->get_item_cell($item, array('id' => $id, 'name' => $object->name, + 'level' => $level, 'actions' => $actions, 'element' => $element, 'eid' => $eid, + 'moveaction' => $moveaction, 'itemtype' => $object->itemtype)); } } @@ -358,10 +357,9 @@ class grade_edit_tree { /** * Given a grade_item object, returns a labelled input if an aggregation coefficient (weight or extra credit) applies to it. * @param grade_item $item - * @param string type "extra" or "weight": the type of the column hosting the weight input * @return string HTML */ - static function get_weight_input($item, $type) { + static function get_weight_input($item) { global $OUTPUT; if (!is_object($item) || get_class($item) !== 'grade_item') { @@ -377,21 +375,60 @@ class grade_edit_tree { $parent_category->apply_forced_settings(); $aggcoef = $item->get_coefstring(); - if ((($aggcoef == 'aggregationcoefweight' || $aggcoef == 'aggregationcoef') && $type == 'weight') || - ($aggcoef == 'aggregationcoefextraweight' && $type == 'extra')) { - return ''. - get_string('extracreditvalue', 'grades', $item->itemname).''. - ''; - } elseif ($aggcoef == 'aggregationcoefextrasum' && $type == 'extra') { - $checked = ($item->aggregationcoef > 0) ? 'checked="checked"' : ''; - return ' - '. - get_string('extracreditvalue', 'grades', $item->itemname).' - \n"; - } else { - return ''; + $itemname = $item->itemname; + if ($item->is_category_item()) { + // Remember, the parent category of a category item is the category itself. + $itemname = $parent_category->get_name(); } + $str = ''; + + if ($aggcoef == 'aggregationcoefweight' || $aggcoef == 'aggregationcoef' || $aggcoef == 'aggregationcoefextraweight') { + return ''. + get_string('extracreditvalue', 'grades', $itemname).''. + ''; + } else if ($aggcoef == 'aggregationcoefextraweightsum') { + + $checkboxname = 'weightoverride_' . $item->id; + $checkboxlbl = html_writer::tag('label', get_string('overrideweightofa', 'grades', $itemname), + array('for' => $checkboxname, 'class' => 'accesshide')); + $checkbox = html_writer::empty_tag('input', array('name' => $checkboxname, + 'type' => 'hidden', 'value' => 0)); + $checkbox .= html_writer::empty_tag('input', array('name' => $checkboxname, + 'type' => 'checkbox', 'value' => 1, 'id' => $checkboxname, 'class' => 'weightoverride', + 'checked' => ($item->weightoverride ? 'checked' : null))); + + $name = 'weight_' . $item->id; + $hiddenlabel = html_writer::tag( + 'label', + get_string('weightofa', 'grades', $itemname), + array( + 'class' => 'accesshide', + 'for' => $name + ) + ); + + $input = html_writer::empty_tag( + 'input', + array( + 'type' => 'text', + 'size' => 6, + 'id' => $name, + 'name' => $name, + 'value' => grade_edit_tree::format_number($item->aggregationcoef2 * 100.0), + 'disabled' => ($item->weightoverride ? null : 'disabled') + ) + ); + + $str .= $checkboxlbl . $checkbox . $hiddenlabel . $input; + + if ($item->aggregationcoef > 0) { + $str .= ' ' . html_writer::tag('abbr', get_string('aggregationcoefextrasumabbr', 'grades'), + array('title' => get_string('aggregationcoefextrasum', 'grades'))); + } + } + + return $str; } //Trims trailing zeros @@ -448,7 +485,7 @@ class grade_edit_tree { $eids = array($eids); } - if(!$after_el = $this->gtree->locate_element("c$moveafter")) { + if(!$after_el = $this->gtree->locate_element("cg$moveafter")) { print_error('invalidelementid', '', $returnurl); } @@ -486,10 +523,13 @@ class grade_edit_tree { $level++; $coefstring = $element['object']->get_coefstring(); if ($element['type'] == 'category') { - if ($coefstring == 'aggregationcoefweight') { + if ($element['object']->aggregation != GRADE_AGGREGATE_SUM) { + $this->uses_non_natural = true; + } + + if ($coefstring == 'aggregationcoefweight' || $coefstring == 'aggregationcoefextraweightsum' || + $coefstring == 'aggregationcoefextraweight') { $this->uses_weight = true; - } elseif ($coefstring == 'aggregationcoefextraweight' || $coefstring == 'aggregationcoefextrasum') { - $this->uses_extra_credit = true; } foreach($element['children'] as $child_el) { @@ -504,6 +544,12 @@ class grade_edit_tree { } } +/** + * Class grade_edit_tree_column + * + * @package core_grades + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ abstract class grade_edit_tree_column { public $forced; public $hidden; @@ -538,16 +584,27 @@ abstract class grade_edit_tree_column { public abstract function get_header_cell(); - public abstract function get_category_cell($category, $levelclass, $params); + public function get_category_cell($category, $levelclass, $params) { + $cell = clone($this->categorycell); + $cell->attributes['class'] .= ' ' . $levelclass; + $cell->attributes['text'] = ''; + return $cell; + } - public abstract function get_item_cell($item, $params); - - public abstract function is_hidden($mode='simple'); + public function get_item_cell($item, $params) { + $cell = clone($this->itemcell); + $cell->attributes['text'] = ''; + if (isset($params['level'])) { + $level = $params['level'] + (($item->itemtype == 'category' || $item->itemtype == 'course') ? 0 : 1); + $cell->attributes['class'] .= ' level' . $level; + $cell->attributes['class'] .= ' level' . ($level % 2 ? 'odd' : 'even'); + } + return $cell; + } public function __construct() { $this->headercell = new html_table_cell(); $this->headercell->header = true; - $this->headercell->style = 'whitespace: normal;'; $this->headercell->attributes['class'] = 'header'; $this->categorycell = new html_table_cell(); @@ -555,35 +612,21 @@ abstract class grade_edit_tree_column { $this->itemcell = new html_table_cell(); $this->itemcell->attributes['class'] = 'cell'; - } -} -abstract class grade_edit_tree_column_category extends grade_edit_tree_column { - - public $forced; - public $advanced; - - public function __construct($name) { - global $CFG; - $this->forced = (int)$CFG->{"grade_$name"."_flag"} & 1; - $this->advanced = (int)$CFG->{"grade_$name"."_flag"} & 2; - parent::__construct(); - } - - public function is_hidden($mode='simple') { - global $CFG; - if ($mode == 'simple') { - return $this->advanced; - } elseif ($mode == 'advanced') { - if ($this->forced && $CFG->grade_hideforcedsettings) { - return true; - } else { - return false; - } + if (preg_match('/^grade_edit_tree_column_(\w*)$/', get_class($this), $matches)) { + $this->headercell->attributes['class'] .= ' column-' . $matches[1]; + $this->categorycell->attributes['class'] .= ' column-' . $matches[1]; + $this->itemcell->attributes['class'] .= ' column-' . $matches[1]; } } } +/** + * Class grade_edit_tree_column_name + * + * @package core_grades + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ class grade_edit_tree_column_name extends grade_edit_tree_column { public $forced = false; public $hidden = false; @@ -603,7 +646,6 @@ class grade_edit_tree_column_name extends grade_edit_tree_column { public function get_header_cell() { $headercell = clone($this->headercell); - $headercell->attributes['class'] .= ' name'; $headercell->colspan = $this->deepest_level + 1; $headercell->text = get_string('name'); return $headercell; @@ -614,10 +656,10 @@ class grade_edit_tree_column_name extends grade_edit_tree_column { if (empty($params['name']) || empty($params['level'])) { throw new Exception('Array key (name or level) missing from 3rd param of grade_edit_tree_column_name::get_category_cell($category, $levelclass, $params)'); } - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' name ' . $levelclass; + $moveaction = isset($params['moveaction']) ? $params['moveaction'] : ''; + $categorycell = parent::get_category_cell($category, $levelclass, $params); $categorycell->colspan = ($this->deepest_level +1) - $params['level']; - $categorycell->text = $OUTPUT->heading($params['name'], 4); + $categorycell->text = $OUTPUT->heading($moveaction . $params['name'], 4); return $categorycell; } @@ -629,20 +671,22 @@ class grade_edit_tree_column_name extends grade_edit_tree_column { } $name = $params['name']; + $moveaction = isset($params['moveaction']) ? $params['moveaction'] : ''; - $itemcell = clone($this->itemcell); - $itemcell->attributes['class'] .= ' name'; + $itemcell = parent::get_item_cell($item, $params); $itemcell->colspan = ($this->deepest_level + 1) - $params['level']; - $itemcell->text = $name; + $itemcell->text = $moveaction . $name; return $itemcell; } - - public function is_hidden($mode='simple') { - return false; - } } -class grade_edit_tree_column_aggregation extends grade_edit_tree_column_category { +/** + * Class grade_edit_tree_column_aggregation + * + * @package core_grades + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class grade_edit_tree_column_aggregation extends grade_edit_tree_column { public function __construct($params) { parent::__construct('aggregation'); @@ -661,106 +705,42 @@ class grade_edit_tree_column_aggregation extends grade_edit_tree_column_category throw new Exception('Array key (id) missing from 3rd param of grade_edit_tree_column_aggregation::get_category_cell($category, $levelclass, $params)'); } - $options = array(GRADE_AGGREGATE_MEAN => get_string('aggregatemean', 'grades'), - GRADE_AGGREGATE_WEIGHTED_MEAN => get_string('aggregateweightedmean', 'grades'), - GRADE_AGGREGATE_WEIGHTED_MEAN2 => get_string('aggregateweightedmean2', 'grades'), - GRADE_AGGREGATE_EXTRACREDIT_MEAN => get_string('aggregateextracreditmean', 'grades'), - GRADE_AGGREGATE_MEDIAN => get_string('aggregatemedian', 'grades'), - GRADE_AGGREGATE_MIN => get_string('aggregatemin', 'grades'), - GRADE_AGGREGATE_MAX => get_string('aggregatemax', 'grades'), - GRADE_AGGREGATE_MODE => get_string('aggregatemode', 'grades'), - GRADE_AGGREGATE_SUM => get_string('aggregatesum', 'grades')); + $options = grade_helper::get_aggregation_strings(); + $aggregation = $options[$category->aggregation]; - $visible = explode(',', $CFG->grade_aggregations_visible); - foreach ($options as $constant => $string) { - if (!in_array($constant, $visible) && $constant != $category->aggregation) { - unset($options[$constant]); - } - } - - if ($this->forced) { - $aggregation = $options[$category->aggregation]; - } else { - $attributes = array(); - $attributes['id'] = 'aggregation_'.$category->id; - $attributes['class'] = 'ignoredirty'; - $aggregation = html_writer::label(get_string('aggregation', 'grades'), 'aggregation_'.$category->id, false, array('class' => 'accesshide')); - $aggregation .= html_writer::select($options, 'aggregation_'.$category->id, $category->aggregation, null, $attributes); - $action = new component_action('change', 'update_category_aggregation', array('courseid' => $params['id'], 'category' => $category->id, 'sesskey' => sesskey())); - $OUTPUT->add_action_handler($action, 'aggregation_'.$category->id); - } - - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; + $categorycell = parent::get_category_cell($category, $levelclass, $params); $categorycell->text = $aggregation; return $categorycell; } public function get_item_cell($item, $params) { - $itemcell = clone($this->itemcell); + $itemcell = parent::get_item_cell($item, $params); $itemcell->text = ' - '; return $itemcell; } } -class grade_edit_tree_column_extracredit extends grade_edit_tree_column { - - public function get_header_cell() { - global $OUTPUT; - $headercell = clone($this->headercell); - $headercell->text = get_string('aggregationcoefextra', 'grades').$OUTPUT->help_icon('aggregationcoefextra', 'grades'); - return $headercell; - } - - public function get_category_cell($category, $levelclass, $params) { - $item = $category->get_grade_item(); - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = grade_edit_tree::get_weight_input($item, 'extra'); - return $categorycell; - } - - public function get_item_cell($item, $params) { - if (empty($params['element'])) { - throw new Exception('Array key (element) missing from 2nd param of grade_edit_tree_column_weightorextracredit::get_item_cell($item, $params)'); - } - - $itemcell = clone($this->itemcell); - $itemcell->text = ' '; - - if (!in_array($params['element']['object']->itemtype, array('courseitem', 'categoryitem', 'category'))) { - $itemcell->text = grade_edit_tree::get_weight_input($item, 'extra'); - } - - return $itemcell; - } - - public function is_hidden($mode='simple') { - global $CFG; - if ($mode == 'simple') { - return strstr($CFG->grade_item_advanced, 'aggregationcoef'); - } elseif ($mode == 'advanced') { - return false; - } - } -} - +/** + * Class grade_edit_tree_column_weight + * + * @package core_grades + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ class grade_edit_tree_column_weight extends grade_edit_tree_column { public function get_header_cell() { global $OUTPUT; $headercell = clone($this->headercell); - $headercell->text = get_string('weightuc', 'grades').$OUTPUT->help_icon('aggregationcoefweight', 'grades'); + $headercell->text = get_string('weights', 'grades').$OUTPUT->help_icon('aggregationcoefweight', 'grades'); return $headercell; } public function get_category_cell($category, $levelclass, $params) { $item = $category->get_grade_item(); - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = grade_edit_tree::get_weight_input($item, 'weight'); + $categorycell = parent::get_category_cell($category, $levelclass, $params); + $categorycell->text = grade_edit_tree::get_weight_input($item); return $categorycell; } @@ -768,26 +748,23 @@ class grade_edit_tree_column_weight extends grade_edit_tree_column { if (empty($params['element'])) { throw new Exception('Array key (element) missing from 2nd param of grade_edit_tree_column_weightorextracredit::get_item_cell($item, $params)'); } - $itemcell = clone($this->itemcell); + $itemcell = parent::get_item_cell($item, $params); $itemcell->text = ' '; if (!in_array($params['element']['object']->itemtype, array('courseitem', 'categoryitem', 'category'))) { - $itemcell->text = grade_edit_tree::get_weight_input($item, 'weight'); + $itemcell->text = grade_edit_tree::get_weight_input($item); } return $itemcell; } - - public function is_hidden($mode='simple') { - global $CFG; - if ($mode == 'simple') { - return strstr($CFG->grade_item_advanced, 'aggregationcoef'); - } elseif ($mode == 'advanced') { - return false; - } - } } +/** + * Class grade_edit_tree_column_range + * + * @package core_grades + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ class grade_edit_tree_column_range extends grade_edit_tree_column { public function get_header_cell() { @@ -797,8 +774,7 @@ class grade_edit_tree_column_range extends grade_edit_tree_column { } public function get_category_cell($category, $levelclass, $params) { - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' range ' . $levelclass; + $categorycell = parent::get_category_cell($category, $levelclass, $params); $categorycell->text = ' - '; return $categorycell; } @@ -806,14 +782,12 @@ class grade_edit_tree_column_range extends grade_edit_tree_column { public function get_item_cell($item, $params) { global $DB, $OUTPUT; - // If the parent aggregation is Sum of Grades, we should show the number, even for scales, as that value is used... + // If the parent aggregation is Natural, we should show the number, even for scales, as that value is used... // ...in the computation. For text grades, the grademax is not used, so we can still show the no value string. $parent_cat = $item->get_parent_category(); if ($item->gradetype == GRADE_TYPE_TEXT) { $grademax = ' - '; - } else if ($parent_cat->aggregation == GRADE_AGGREGATE_SUM) { - $grademax = format_float($item->grademax, $item->get_decimals()); - } elseif ($item->gradetype == GRADE_TYPE_SCALE) { + } else if ($item->gradetype == GRADE_TYPE_SCALE) { $scale = $DB->get_record('scale', array('id' => $item->scaleid)); $scale_items = null; if (empty($scale)) { //if the item is using a scale that's been removed @@ -821,323 +795,28 @@ class grade_edit_tree_column_range extends grade_edit_tree_column { } else { $scale_items = explode(',', $scale->scale); } - $grademax = end($scale_items) . ' (' . count($scale_items) . ')'; - } elseif ($item->is_external_item()) { - $grademax = format_float($item->grademax, $item->get_decimals()); + if ($parent_cat->aggregation == GRADE_AGGREGATE_SUM) { + $grademax = end($scale_items) . ' (' . + format_float($item->grademax, $item->get_decimals()) . ')'; + } else { + $grademax = end($scale_items) . ' (' . count($scale_items) . ')'; + } } else { - $grademax = ''.get_string('grademax', 'grades').' - '; + $grademax = format_float($item->grademax, $item->get_decimals()); } - $itemcell = clone($this->itemcell); + $itemcell = parent::get_item_cell($item, $params); $itemcell->text = $grademax; return $itemcell; } - - public function is_hidden($mode='simple') { - global $CFG; - if ($mode == 'simple') { - return strstr($CFG->grade_item_advanced, 'grademax'); - } elseif ($mode == 'advanced') { - return false; - } - } -} - -class grade_edit_tree_column_aggregateonlygraded extends grade_edit_tree_column_category { - - public function __construct($params) { - parent::__construct('aggregateonlygraded'); - } - - public function get_header_cell() { - global $OUTPUT; - $headercell = clone($this->headercell); - $headercell->style .= 'width: 40px;'; - $headercell->text = get_string('aggregateonlygraded', 'grades') - . $OUTPUT->help_icon('aggregateonlygraded', 'grades'); - return $headercell; - } - - public function get_category_cell($category, $levelclass, $params) { - $onlygradedcheck = ($category->aggregateonlygraded == 1) ? 'checked="checked"' : ''; - $hidden = ''; - $aggregateonlygraded = ''. - get_string('aggregateonlygraded', 'grades').' - '; - - if ($this->forced) { - $aggregateonlygraded = ($category->aggregateonlygraded) ? get_string('yes') : get_string('no'); - } - - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = $hidden.$aggregateonlygraded; - return $categorycell; - } - - public function get_item_cell($item, $params) { - $itemcell = clone($this->itemcell); - $itemcell->text = ' - '; - return $itemcell; - } -} - -class grade_edit_tree_column_aggregatesubcats extends grade_edit_tree_column_category { - - public function __construct($params) { - parent::__construct('aggregatesubcats'); - } - - public function get_header_cell() { - global $OUTPUT; - $headercell = clone($this->headercell); - $headercell->style .= 'width: 40px;'; - $headercell->text = get_string('aggregatesubcats', 'grades') - .$OUTPUT->help_icon('aggregatesubcats', 'grades'); - return $headercell; - } - - public function get_category_cell($category, $levelclass, $params) { - $subcatscheck = ($category->aggregatesubcats == 1) ? 'checked="checked"' : ''; - $hidden = ''; - $aggregatesubcats = ''. - get_string('aggregatesubcats', 'grades').' - '; - - if ($this->forced) { - $aggregatesubcats = ($category->aggregatesubcats) ? get_string('yes') : get_string('no'); - } - - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = $hidden.$aggregatesubcats; - return $categorycell; - - } - - public function get_item_cell($item, $params) { - $itemcell = clone($this->itemcell); - $itemcell->text = ' - '; - return $itemcell; - } -} - -class grade_edit_tree_column_aggregateoutcomes extends grade_edit_tree_column_category { - - public function __construct($params) { - parent::__construct('aggregateoutcomes'); - } - - public function get_header_cell() { - global $OUTPUT; - $headercell = clone($this->headercell); - $headercell->style .= 'width: 40px;'; - $headercell->text = get_string('aggregateoutcomes', 'grades') - .$OUTPUT->help_icon('aggregateoutcomes', 'grades'); - return $headercell; - } - - public function get_category_cell($category, $levelclass, $params) { - $outcomescheck = ($category->aggregateoutcomes == 1) ? 'checked="checked"' : ''; - $hidden = ''; - $aggregateoutcomes = ''. - get_string('aggregateoutcomes', 'grades').' - '; - - if ($this->forced) { - $aggregateoutcomes = ($category->aggregateoutcomes) ? get_string('yes') : get_string('no'); - } - - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = $hidden.$aggregateoutcomes; - return $categorycell; - } - - public function get_item_cell($item, $params) { - $itemcell = clone($this->itemcell); - $itemcell->text = ' - '; - return $itemcell; - } - - public function is_hidden($mode='simple') { - global $CFG; - if ($CFG->enableoutcomes) { - return parent::is_hidden($mode); - } else { - return true; - } - } -} - -class grade_edit_tree_column_droplow extends grade_edit_tree_column_category { - - public function __construct($params) { - parent::__construct('droplow'); - } - - public function get_header_cell() { - global $OUTPUT; - $headercell = clone($this->headercell); - $headercell->text = get_string('droplow', 'grades').$OUTPUT->help_icon('droplow', 'grades'); - return $headercell; - } - - public function get_category_cell($category, $levelclass, $params) { - $droplow = '' . get_string('droplowestvalue', 'grades') . ''; - $droplow .= ''; - - if ($this->forced) { - $droplow = $category->droplow; - } - - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = $droplow; - return $categorycell; - } - - public function get_item_cell($item, $params) { - $itemcell = clone($this->itemcell); - $itemcell->text = ' - '; - return $itemcell; - } -} - -class grade_edit_tree_column_keephigh extends grade_edit_tree_column_category { - - public function __construct($params) { - parent::__construct('keephigh'); - } - - public function get_header_cell() { - global $OUTPUT; - $headercell = clone($this->headercell); - $headercell->text = get_string('keephigh', 'grades').$OUTPUT->help_icon('keephigh', 'grades'); - return $headercell; - } - - public function get_category_cell($category, $levelclass, $params) { - $keephigh = ''.get_string('keephigh', 'grades').''; - $keephigh .= ''; - - if ($this->forced) { - $keephigh = $category->keephigh; - } - - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = $keephigh; - return $categorycell; - } - - public function get_item_cell($item, $params) { - $itemcell = clone($this->itemcell); - $itemcell->text = ' - '; - return $itemcell; - } -} - -class grade_edit_tree_column_multfactor extends grade_edit_tree_column { - - public function __construct($params) { - parent::__construct(); - } - - public function get_header_cell() { - global $OUTPUT; - $headercell = clone($this->headercell); - $headercell->text = get_string('multfactor', 'grades').$OUTPUT->help_icon('multfactor', 'grades'); - return $headercell; - } - - public function get_category_cell($category, $levelclass, $params) { - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = ' - '; - return $categorycell; - } - - public function get_item_cell($item, $params) { - global $OUTPUT; - - $itemcell = clone($this->itemcell); - if (!$item->is_raw_used()) { - $itemcell->text = ' '; - return $itemcell; - } - $multfactor = ''. - get_string('multfactorvalue', 'grades', $item->itemname).' - '; - - $itemcell->text = $multfactor; - return $itemcell; - } - - public function is_hidden($mode='simple') { - global $CFG; - if ($mode == 'simple') { - return strstr($CFG->grade_item_advanced, 'multfactor'); - } elseif ($mode == 'advanced') { - return false; - } - } -} - -class grade_edit_tree_column_plusfactor extends grade_edit_tree_column { - - public function get_header_cell() { - global $OUTPUT; - $headercell = clone($this->headercell); - $headercell->text = get_string('plusfactor', 'grades').$OUTPUT->help_icon('plusfactor', 'grades'); - return $headercell; - } - - public function get_category_cell($category, $levelclass, $params) { - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; - $categorycell->text = ' - '; - return $categorycell; - - } - - public function get_item_cell($item, $params) { - global $OUTPUT; - - $itemcell = clone($this->itemcell); - if (!$item->is_raw_used()) { - $itemcell->text = ' '; - return $itemcell; - } - - $plusfactor = ''. - get_string('plusfactorvalue', 'grades', $item->itemname).' - '; - - $itemcell->text = $plusfactor; - return $itemcell; - - } - - public function is_hidden($mode='simple') { - global $CFG; - if ($mode == 'simple') { - return strstr($CFG->grade_item_advanced, 'plusfactor'); - } elseif ($mode == 'advanced') { - return false; - } - } } +/** + * Class grade_edit_tree_column_actions + * + * @package core_grades + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ class grade_edit_tree_column_actions extends grade_edit_tree_column { public function __construct($params) { @@ -1146,7 +825,6 @@ class grade_edit_tree_column_actions extends grade_edit_tree_column { public function get_header_cell() { $headercell = clone($this->headercell); - $headercell->attributes['class'] .= ' actions'; $headercell->text = get_string('actions'); return $headercell; } @@ -1157,8 +835,7 @@ class grade_edit_tree_column_actions extends grade_edit_tree_column { throw new Exception('Array key (actions) missing from 3rd param of grade_edit_tree_column_actions::get_category_actions($category, $levelclass, $params)'); } - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' ' . $levelclass; + $categorycell = parent::get_category_cell($category, $levelclass, $params); $categorycell->text = $params['actions']; return $categorycell; } @@ -1167,22 +844,22 @@ class grade_edit_tree_column_actions extends grade_edit_tree_column { if (empty($params['actions'])) { throw new Exception('Array key (actions) missing from 2nd param of grade_edit_tree_column_actions::get_item_cell($item, $params)'); } - $itemcell = clone($this->itemcell); - $itemcell->attributes['class'] .= ' actions'; + $itemcell = parent::get_item_cell($item, $params); $itemcell->text = $params['actions']; return $itemcell; } - - public function is_hidden($mode='simple') { - return false; - } } +/** + * Class grade_edit_tree_column_select + * + * @package core_grades + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ class grade_edit_tree_column_select extends grade_edit_tree_column { public function get_header_cell() { $headercell = clone($this->headercell); - $headercell->attributes['class'] .= ' selection'; $headercell->text = get_string('select'); return $headercell; } @@ -1195,9 +872,7 @@ class grade_edit_tree_column_select extends grade_edit_tree_column { $selectall = new action_link(new moodle_url('#'), get_string('all'), new component_action('click', 'togglecheckboxes', array('eid' => $params['eid'], 'check' => true))); $selectnone = new action_link(new moodle_url('#'), get_string('none'), new component_action('click', 'togglecheckboxes', array('eid' => $params['eid'], 'check' => false))); - $categorycell = clone($this->categorycell); - $categorycell->attributes['class'] .= ' last ' . $levelclass; - $categorycell->style .= 'text-align: center;'; + $categorycell = parent::get_category_cell($category, $levelclass, $params); $categorycell->text = $OUTPUT->render($selectall) . '' . $OUTPUT->render($selectnone); return $categorycell; } @@ -1206,20 +881,15 @@ class grade_edit_tree_column_select extends grade_edit_tree_column { if (empty($params['itemtype']) || empty($params['eid'])) { error('Array key (itemtype or eid) missing from 2nd param of grade_edit_tree_column_select::get_item_cell($item, $params)'); } - $itemselect = ''; + $itemcell = parent::get_item_cell($item, $params); if ($params['itemtype'] != 'course' && $params['itemtype'] != 'category') { - $itemselect = ''. + $itemcell->text = ''. get_string('select', 'grades', $item->itemname).' '; // TODO: convert to YUI handler } - //html_writer::table() will wrap the item cell contents in a so don't do it here - return $itemselect; - } - - public function is_hidden($mode='simple') { - return false; + return $itemcell; } } diff --git a/grade/edit/tree/outcomeitem.php b/grade/edit/tree/outcomeitem.php index 460a379e8e5..6c5c3301975 100644 --- a/grade/edit/tree/outcomeitem.php +++ b/grade/edit/tree/outcomeitem.php @@ -35,6 +35,9 @@ if ($id !== 0) { $url->param('id', $id); } $PAGE->set_url($url); +$PAGE->set_pagelayout('admin'); +navigation_node::override_active_url(new moodle_url('/grade/edit/tree/index.php', + array('id'=>$courseid))); if (!$course = $DB->get_record('course', array('id' => $courseid))) { print_error('nocourseid'); @@ -214,7 +217,8 @@ if ($data = $mform->get_data()) { redirect($returnurl); } -print_grade_page_head($courseid, 'edittree', null, $heading); +$PAGE->navbar->add($heading); +print_grade_page_head($courseid, 'settings', null, $heading, false, false, false); if (!grade_outcome::fetch_all_available($COURSE->id)) { echo $OUTPUT->confirm(get_string('nooutcomes', 'grades'), $CFG->wwwroot.'/grade/edit/outcome/course.php?id='.$courseid, $returnurl); diff --git a/grade/lib.php b/grade/lib.php index d3f13ac4d40..643bdb96132 100644 --- a/grade/lib.php +++ b/grade/lib.php @@ -458,6 +458,48 @@ function grade_get_graded_users_select($report, $course, $userid, $groupid, $inc return $select; } +/** + * Hide warning about changed grades during upgrade to 2.8. + * + * @param int $courseid The current course id. + */ +function hide_natural_aggregation_upgrade_notice($courseid) { + set_config('show_sumofgrades_upgrade_' . $courseid, false); +} + +/** + * Print warning about changed grades during upgrade to 2.8. + * + * @param int $courseid The current course id. + * @param context $context The course context. + * @param boolean $return return as string + * + * @return nothing or string if $return true + */ +function print_natural_aggregation_upgrade_notice($courseid, $context, $return=false) { + global $OUTPUT; + $html = ''; + $show = get_config('core', 'show_sumofgrades_upgrade_' . $courseid); + + if ($show) { + $message = get_string('sumofgradesupgradedgrades', 'grades'); + $hidemessage = get_string('sumofgradesupgradedgradeshidemessage', 'grades'); + $urlparams = array( 'id' => $courseid, + 'seensumofgradesupgradedgrades' => true, + 'sesskey' => sesskey()); + $goawayurl = new moodle_url('/grade/report/grader/index.php', $urlparams); + $goawaybutton = $OUTPUT->single_button($goawayurl, $hidemessage, 'get'); + $html .= $OUTPUT->notification($message, 'notifysuccess'); + $html .= $goawaybutton; + } + + if ($return) { + return $html; + } else { + echo $html; + } +} + /** * Print grading plugin selection popup form. * @@ -609,13 +651,6 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) { $plugin_info['report'] = $reports; } - //showing grade categories and items make no sense if we're not within a course - if ($courseid!=$SITE->id) { - if ($edittree = grade_helper::get_info_edit_structure($courseid)) { - $plugin_info['edittree'] = $edittree; - } - } - if ($scale = grade_helper::get_info_scales($courseid)) { $plugin_info['scale'] = array('view'=>$scale); } @@ -650,11 +685,9 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) { } } - //hide course settings if we're not in a course - if ($courseid!=$SITE->id) { - if ($setting = grade_helper::get_info_manage_settings($courseid)) { - $plugin_info['settings'] = array('course'=>$setting); - } + // Hide course settings if we're not in a course + if ($settings = grade_helper::get_info_manage_settings($courseid)) { + $plugin_info['settings'] = $settings; } // Put preferences last @@ -778,7 +811,9 @@ function print_grade_page_head($courseid, $active_type, $active_plugin=null, $buttons = $OUTPUT->render($buttons); } $PAGE->set_button($buttons); - grade_extend_settings($plugin_info, $courseid); + if ($courseid != SITEID) { + grade_extend_settings($plugin_info, $courseid); + } $returnval = $OUTPUT->header(); if (!$return) { @@ -791,7 +826,8 @@ function print_grade_page_head($courseid, $active_type, $active_plugin=null, } if ($shownavigation) { - if ($CFG->grade_navmethod == GRADE_NAVMETHOD_COMBO || $CFG->grade_navmethod == GRADE_NAVMETHOD_DROPDOWN) { + if ($courseid != SITEID && + ($CFG->grade_navmethod == GRADE_NAVMETHOD_COMBO || $CFG->grade_navmethod == GRADE_NAVMETHOD_DROPDOWN)) { $returnval .= print_grade_plugin_selector($plugin_info, $active_type, $active_plugin, $return); } @@ -801,7 +837,8 @@ function print_grade_page_head($courseid, $active_type, $active_plugin=null, echo $OUTPUT->heading($heading); } - if ($CFG->grade_navmethod == GRADE_NAVMETHOD_COMBO || $CFG->grade_navmethod == GRADE_NAVMETHOD_TABS) { + if ($courseid != SITEID && + ($CFG->grade_navmethod == GRADE_NAVMETHOD_COMBO || $CFG->grade_navmethod == GRADE_NAVMETHOD_TABS)) { $returnval .= grade_print_tabs($active_type, $active_plugin, $plugin_info, $return); } } @@ -1171,19 +1208,22 @@ class grade_structure { } else if (($is_course or $is_category) and ($is_scale or $is_value)) { if ($category = $element['object']->get_item_category()) { + $aggrstrings = grade_helper::get_aggregation_strings(); + $stragg = $aggrstrings[$category->aggregation]; switch ($category->aggregation) { case GRADE_AGGREGATE_MEAN: case GRADE_AGGREGATE_MEDIAN: case GRADE_AGGREGATE_WEIGHTED_MEAN: case GRADE_AGGREGATE_WEIGHTED_MEAN2: case GRADE_AGGREGATE_EXTRACREDIT_MEAN: - $stragg = get_string('aggregation', 'grades'); return ''; case GRADE_AGGREGATE_SUM: - $stragg = get_string('aggregation', 'grades'); return ''; + default: + return ''; } } @@ -1236,10 +1276,11 @@ class grade_structure { * @param bool $withlink Whether or not this header has a link * @param bool $icon Whether or not to display an icon with this header * @param bool $spacerifnone return spacer if no icon found + * @param bool $withdescription Show description if defined by this item. * * @return string header */ - public function get_element_header(&$element, $withlink=false, $icon=true, $spacerifnone=false) { + public function get_element_header(&$element, $withlink=false, $icon=true, $spacerifnone=false, $withdescription=false) { $header = ''; if ($icon) { @@ -1264,6 +1305,13 @@ class grade_structure { } } + if ($withdescription) { + $desc = $element['object']->get_description(); + if (!empty($desc)) { + $header .= '' . s($desc) . ''; + } + } + return $header; } @@ -1416,7 +1464,7 @@ class grade_structure { * @return string eid */ public function get_item_eid($grade_item) { - return 'i'.$grade_item->id; + return 'ig'.$grade_item->id; } /** @@ -1454,6 +1502,34 @@ class grade_structure { return $strparams; } + /** + * Return a reset icon for the given element. + * + * @param array $element An array representing an element in the grade_tree + * @param object $gpr A grade_plugin_return object + * @return string + */ + public function get_reset_icon($element, $gpr) { + global $CFG, $OUTPUT; + + // Limit to category items set to use the natural weights aggregation method, and users + // with the capability to manage grades. + if ($element['type'] != 'category' || $element['object']->aggregation != GRADE_AGGREGATE_SUM || + !has_capability('moodle/grade:manage', $this->context)) { + return ''; + } + + $str = get_string('resetweights', 'grades', $this->get_params_for_iconstr($element)); + $url = new moodle_url('/grade/edit/tree/action.php', array( + 'id' => $this->courseid, + 'action' => 'resetweights', + 'eid' => $element['eid'], + 'sesskey' => sesskey(), + )); + + return $OUTPUT->action_icon($gpr->add_url_params($url), new pix_icon('t/reset', $str)); + } + /** * Return edit icon for give element * @@ -1779,7 +1855,7 @@ class grade_seq extends grade_structure { $userid = $matches[2]; //extra security check - the grade item must be in this tree - if (!$item_el = $this->locate_element('i'.$itemid)) { + if (!$item_el = $this->locate_element('ig'.$itemid)) { return null; } @@ -1795,7 +1871,7 @@ class grade_seq extends grade_structure { return null; } //extra security check - the grade item must be in this tree - if (!$item_el = $this->locate_element('i'.$grade->itemid)) { + if (!$item_el = $this->locate_element('ig'.$grade->itemid)) { return null; } $grade->grade_item =& $item_el['object']; // this may speedup grade_grade methods! @@ -1993,9 +2069,9 @@ class grade_tree extends grade_structure { // prepare unique identifier if ($element['type'] == 'category') { - $element['eid'] = 'c'.$element['object']->id; + $element['eid'] = 'cg'.$element['object']->id; } else if (in_array($element['type'], array('item', 'courseitem', 'categoryitem'))) { - $element['eid'] = 'i'.$element['object']->id; + $element['eid'] = 'ig'.$element['object']->id; $this->items[$element['object']->id] =& $element['object']; } @@ -2099,7 +2175,7 @@ class grade_tree extends grade_structure { $userid = $matches[2]; //extra security check - the grade item must be in this tree - if (!$item_el = $this->locate_element('i'.$itemid)) { + if (!$item_el = $this->locate_element('ig'.$itemid)) { return null; } @@ -2115,7 +2191,7 @@ class grade_tree extends grade_structure { return null; } //extra security check - the grade item must be in this tree - if (!$item_el = $this->locate_element('i'.$grade->itemid)) { + if (!$item_el = $this->locate_element('ig'.$grade->itemid)) { return null; } $grade->grade_item =& $item_el['object']; // this may speedup grade_grade methods! @@ -2343,8 +2419,11 @@ function grade_extend_settings($plugininfo, $courseid) { } } - if ($setting = grade_helper::get_info_manage_settings($courseid)) { - $gradenode->add(get_string('coursegradesettings', 'grades'), $setting->link, navigation_node::TYPE_SETTING, null, $setting->id, new pix_icon('i/settings', '')); + if ($settings = grade_helper::get_info_manage_settings($courseid)) { + $settingsnode = $gradenode->add($strings['settings'], null, navigation_node::TYPE_CONTAINER); + foreach ($settings as $setting) { + $settingsnode->add($setting->string, $setting->link, navigation_node::TYPE_SETTING, null, $setting->id, new pix_icon('i/settings', '')); + } } if ($preferences = grade_helper::get_plugins_report_preferences($courseid)) { @@ -2368,13 +2447,6 @@ function grade_extend_settings($plugininfo, $courseid) { $gradenode->add($strings['scale'], $scales->link, navigation_node::TYPE_SETTING, null, $scales->id, new pix_icon('i/scales', '')); } - if ($categories = grade_helper::get_info_edit_structure($courseid)) { - $categoriesnode = $gradenode->add(get_string('categoriesanditems','grades'), null, navigation_node::TYPE_CONTAINER); - foreach ($categories as $category) { - $categoriesnode->add($category->string, $category->link, navigation_node::TYPE_SETTING, null, $category->id, new pix_icon('i/report', '')); - } - } - if ($gradenode->contains_active_node()) { // If the gradenode is active include the settings base node (gradeadministration) in // the navbar, typcially this is ignored. @@ -2424,11 +2496,6 @@ abstract class grade_helper { * @var grade_plugin_info|false */ protected static $outcomeinfo = null; - /** - * Cached info on edit structure {@see get_info_edit_structure} - * @var array|false - */ - protected static $edittree = null; /** * Cached leftter info {@see get_info_letters} * @var grade_plugin_info|false @@ -2449,12 +2516,16 @@ abstract class grade_helper { * @var array */ protected static $pluginstrings = null; + /** + * Cached grade aggregation strings + * @var array + */ + protected static $aggregationstrings = null; /** * Gets strings commonly used by the describe plugins * * report => get_string('view'), - * edittree => get_string('edittree', 'grades'), * scale => get_string('scales'), * outcome => get_string('outcomes', 'grades'), * letter => get_string('letters', 'grades'), @@ -2469,7 +2540,6 @@ abstract class grade_helper { if (self::$pluginstrings === null) { self::$pluginstrings = array( 'report' => get_string('view'), - 'edittree' => get_string('edittree', 'grades'), 'scale' => get_string('scales'), 'outcome' => get_string('outcomes', 'grades'), 'letter' => get_string('letters', 'grades'), @@ -2481,21 +2551,48 @@ abstract class grade_helper { } return self::$pluginstrings; } + + /** + * Gets strings describing the available aggregation methods. + * + * @return array + */ + public static function get_aggregation_strings() { + if (self::$aggregationstrings === null) { + self::$aggregationstrings = array( + GRADE_AGGREGATE_MEAN => get_string('aggregatemean', 'grades'), + GRADE_AGGREGATE_WEIGHTED_MEAN => get_string('aggregateweightedmean', 'grades'), + GRADE_AGGREGATE_WEIGHTED_MEAN2 => get_string('aggregateweightedmean2', 'grades'), + GRADE_AGGREGATE_EXTRACREDIT_MEAN => get_string('aggregateextracreditmean', 'grades'), + GRADE_AGGREGATE_MEDIAN => get_string('aggregatemedian', 'grades'), + GRADE_AGGREGATE_MIN => get_string('aggregatemin', 'grades'), + GRADE_AGGREGATE_MAX => get_string('aggregatemax', 'grades'), + GRADE_AGGREGATE_MODE => get_string('aggregatemode', 'grades'), + GRADE_AGGREGATE_SUM => get_string('aggregatesum', 'grades') + ); + } + return self::$aggregationstrings; + } + /** * Get grade_plugin_info object for managing settings if the user can * * @param int $courseid - * @return grade_plugin_info + * @return grade_plugin_info[] */ public static function get_info_manage_settings($courseid) { if (self::$managesetting !== null) { return self::$managesetting; } $context = context_course::instance($courseid); - if (has_capability('moodle/grade:manage', $context)) { - self::$managesetting = new grade_plugin_info('coursesettings', new moodle_url('/grade/edit/settings/index.php', array('id'=>$courseid)), get_string('course')); - } else { - self::$managesetting = false; + self::$managesetting = array(); + if ($courseid != SITEID && has_capability('moodle/grade:manage', $context)) { + self::$managesetting['coursesettings'] = new grade_plugin_info('coursesettings', + new moodle_url('/grade/edit/settings/index.php', array('id'=>$courseid)), + get_string('coursegradesettings', 'grades')); + self::$managesetting['setup'] = new grade_plugin_info('setup', + new moodle_url('/grade/edit/tree/index.php', array('id' => $courseid)), + get_string('setupgradeslayout', 'grades')); } return self::$managesetting; } @@ -2616,26 +2713,6 @@ abstract class grade_helper { } return self::$outcomeinfo; } - /** - * Get information on editing structures - * @param int $courseid - * @return array - */ - public static function get_info_edit_structure($courseid) { - if (self::$edittree !== null) { - return self::$edittree; - } - if (has_capability('moodle/grade:manage', context_course::instance($courseid))) { - $url = new moodle_url('/grade/edit/tree/index.php', array('sesskey'=>sesskey(), 'showadvanced'=>'0', 'id'=>$courseid)); - self::$edittree = array( - 'simpleview' => new grade_plugin_info('simpleview', $url, get_string('simpleview', 'grades')), - 'fullview' => new grade_plugin_info('fullview', new moodle_url($url, array('showadvanced'=>'1')), get_string('fullview', 'grades')) - ); - } else { - self::$edittree = false; - } - return self::$edittree; - } /** * Get information on letters * @param int $courseid @@ -2836,5 +2913,22 @@ abstract class grade_helper { return $fields; } + + /** + * This helper method gets a snapshot of all the weights for a course. + * It is used as a quick method to see if any wieghts have been automatically adjusted. + * @param int $courseid + * @return array of itemid -> aggregationcoef2 + */ + public static function fetch_all_natural_weights_for_course($courseid) { + global $DB; + $result = array(); + + $records = $DB->get_records('grade_items', array('courseid'=>$courseid), 'id', 'id, aggregationcoef2'); + foreach ($records as $record) { + $result[$record->id] = $record->aggregationcoef2; + } + return $result; + } } diff --git a/grade/report/grader/index.php b/grade/report/grader/index.php index 66b944772c7..cc2f4235270 100644 --- a/grade/report/grader/index.php +++ b/grade/report/grader/index.php @@ -128,6 +128,13 @@ $reportname = get_string('pluginname', 'gradereport_grader'); // Print header print_grade_page_head($COURSE->id, 'report', 'grader', $reportname, false, $buttons); +// Hide the following warning if the user told it to go away. +if (optional_param('seensumofgradesupgradedgrades', false, PARAM_BOOL) && confirm_sesskey()) { + hide_natural_aggregation_upgrade_notice($courseid); +} +// This shows a notice about the upgrade to Natural aggregation. +print_natural_aggregation_upgrade_notice($COURSE->id, $context); + //Initialise the grader report object that produces the table //the class grade_report_grader_ajax was removed as part of MDL-21562 $report = new grade_report_grader($courseid, $gpr, $context, $page, $sortitemid); diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php index cf02a6ee5db..6aabf4c1a71 100644 --- a/grade/report/grader/lib.php +++ b/grade/report/grader/lib.php @@ -1049,6 +1049,12 @@ class grade_report_grader extends grade_report { if ($item->needsupdate) { $itemcell->text .= "" . $error . ""; } else { + // The max and min for an aggregation may be different to the grade_item. + if (!is_null($gradeval)) { + $item->grademax = $grade->rawgrademax; + $item->grademin = $grade->rawgrademin; + } + $itemcell->text .= "" . grade_format_gradevalue($gradeval, $item, true, $gradedisplaytype, null) . ""; if ($showanalysisicon) { @@ -1690,11 +1696,11 @@ class grade_report_grader extends grade_report { public static function do_process_action($target, $action, $courseid = null) { global $DB; // TODO: this code should be in some grade_tree static method - $targettype = substr($target, 0, 1); - $targetid = substr($target, 1); + $targettype = substr($target, 0, 2); + $targetid = substr($target, 2); // TODO: end - if ($targettype !== 'c') { + if ($targettype !== 'cg') { // The following code only works with categories. return true; } diff --git a/grade/report/lib.php b/grade/report/lib.php index 31ae9a6335b..a365d56be8f 100644 --- a/grade/report/lib.php +++ b/grade/report/lib.php @@ -414,7 +414,7 @@ abstract class grade_report { * @param string $courseid the course id * @param string $course_item an instance of grade_item * @param string $finalgrade the grade for the course_item - * @return array[] containing values for 'grade', 'grademax' and 'grademin' + * @return array[] containing values for 'grade', 'grademax', 'grademin', 'aggregationstatus' and 'aggregationweight' */ protected function blank_hidden_total_and_adjust_bounds($courseid, $course_item, $finalgrade) { global $CFG, $DB; @@ -426,8 +426,18 @@ abstract class grade_report { // If we're dealing with multiple courses we need to know when we've moved on to a new course. static $previous_courseid = null; + $coursegradegrade = grade_grade::fetch(array('userid'=>$this->user->id, 'itemid'=>$course_item->id)); $grademin = $course_item->grademin; $grademax = $course_item->grademax; + if ($coursegradegrade) { + $grademin = $coursegradegrade->rawgrademin; + $grademax = $coursegradegrade->rawgrademax; + } else { + $coursegradegrade = new grade_grade(array('userid'=>$this->user->id, 'itemid'=>$course_item->id), false); + } + $hint = $coursegradegrade->get_aggregation_hint(); + $aggregationstatus = $hint['status']; + $aggregationweight = $hint['weight']; if (!is_array($this->showtotalsifcontainhidden)) { debugging('showtotalsifcontainhidden should be an array', DEBUG_DEVELOPER); @@ -435,7 +445,11 @@ abstract class grade_report { } if ($this->showtotalsifcontainhidden[$courseid] == GRADE_REPORT_SHOW_REAL_TOTAL_IF_CONTAINS_HIDDEN) { - return array('grade' => $finalgrade, 'grademin' => $grademin, 'grademax' => $grademax); + return array('grade' => $finalgrade, + 'grademin' => $grademin, + 'grademax' => $grademax, + 'aggregationstatus' => $aggregationstatus, + 'aggregationweight' => $aggregationweight); } // If we've moved on to another course or user, reload the grades. @@ -471,19 +485,31 @@ abstract class grade_report { } //if the item definitely depends on a hidden item - if (array_key_exists($course_item->id, $hiding_affected['altered'])) { + if (array_key_exists($course_item->id, $hiding_affected['altered']) || + array_key_exists($course_item->id, $hiding_affected['alteredgrademin']) || + array_key_exists($course_item->id, $hiding_affected['alteredgrademax']) || + array_key_exists($course_item->id, $hiding_affected['alteredaggregationstatus']) || + array_key_exists($course_item->id, $hiding_affected['alteredaggregationweight'])) { if (!$this->showtotalsifcontainhidden[$courseid]) { //hide the grade $finalgrade = null; } else { //use reprocessed marks that exclude hidden items - $finalgrade = $hiding_affected['altered'][$course_item->id]; - if (!empty($hiding_affected['alteredgrademin'][$course_item->id])) { + if (array_key_exists($course_item->id, $hiding_affected['altered'])) { + $finalgrade = $hiding_affected['altered'][$course_item->id]; + } + if (array_key_exists($course_item->id, $hiding_affected['alteredgrademin'])) { $grademin = $hiding_affected['alteredgrademin'][$course_item->id]; } - if (!empty($hiding_affected['alteredgrademax'][$course_item->id])) { + if (array_key_exists($course_item->id, $hiding_affected['alteredgrademax'])) { $grademax = $hiding_affected['alteredgrademax'][$course_item->id]; } + if (array_key_exists($course_item->id, $hiding_affected['alteredaggregationstatus'])) { + $aggregationstatus = $hiding_affected['alteredaggregationstatus'][$course_item->id]; + } + if (array_key_exists($course_item->id, $hiding_affected['alteredaggregationweight'])) { + $aggregationweight = $hiding_affected['alteredaggregationweight'][$course_item->id]; + } } } else if (!empty($hiding_affected['unknown'][$course_item->id])) { //not sure whether or not this item depends on a hidden item @@ -494,16 +520,22 @@ abstract class grade_report { //use reprocessed marks that exclude hidden items $finalgrade = $hiding_affected['unknown'][$course_item->id]; - if (!empty($hiding_affected['alteredgrademin'][$course_item->id])) { + if (array_key_exists($course_item->id, $hiding_affected['alteredgrademin'])) { $grademin = $hiding_affected['alteredgrademin'][$course_item->id]; } - if (!empty($hiding_affected['alteredgrademax'][$course_item->id])) { + if (array_key_exists($course_item->id, $hiding_affected['alteredgrademax'])) { $grademax = $hiding_affected['alteredgrademax'][$course_item->id]; } + if (array_key_exists($course_item->id, $hiding_affected['alteredaggregationstatus'])) { + $aggregationstatus = $hiding_affected['alteredaggregationstatus'][$course_item->id]; + } + if (array_key_exists($course_item->id, $hiding_affected['alteredaggregationweight'])) { + $aggregationweight = $hiding_affected['alteredaggregationweight'][$course_item->id]; + } } } - return array('grade' => $finalgrade, 'grademin' => $grademin, 'grademax' => $grademax); + return array('grade' => $finalgrade, 'grademin' => $grademin, 'grademax' => $grademax, 'aggregationstatus'=>$aggregationstatus, 'aggregationweight'=>$aggregationweight); } /** diff --git a/grade/report/overview/lib.php b/grade/report/overview/lib.php index 90ca93def3e..4bd2e615c67 100644 --- a/grade/report/overview/lib.php +++ b/grade/report/overview/lib.php @@ -179,6 +179,13 @@ class grade_report_overview extends grade_report { $course_item->grademax = $adjustedgrade['grademax']; $course_item->grademin = $adjustedgrade['grademin']; } + } else { + // We must use the rawgrademin / rawgrademax because it can be different for + // each grade_grade when items are excluded from sum of grades. + if (!is_null($finalgrade)) { + $course_item->grademin = $course_grade->rawgrademin; + $course_item->grademax = $course_grade->rawgrademax; + } } $data = array($courselink, grade_format_gradevalue($finalgrade, $course_item, true)); diff --git a/grade/report/user/lib.php b/grade/report/user/lib.php index 695ecf3a03a..9c0660c128f 100644 --- a/grade/report/user/lib.php +++ b/grade/report/user/lib.php @@ -129,6 +129,12 @@ class grade_report_user extends grade_report { */ public $showlettergrade = false; + /** + * Show the calculated contribution to the course total column. + * @var bool + */ + public $showcontributiontocoursetotal = false; + /** * Show average grades in the report, default false. * @var false @@ -170,6 +176,15 @@ class grade_report_user extends grade_report { */ protected $viewasuser = false; + /** + * An array that collects the aggregationhints for every + * grade_item. The hints contain grade, grademin, grademax + * status, weight and parent. + * + * @var array + */ + protected $aggregationhints = array(); + /** * Constructor. Sets local copies of user preferences and initialises grade_tree. * @param int $courseid @@ -191,6 +206,7 @@ class grade_report_user extends grade_report { $this->showrange = grade_get_setting($this->courseid, 'report_user_showrange', !empty($CFG->grade_report_user_showrange)); $this->showfeedback = grade_get_setting($this->courseid, 'report_user_showfeedback', !empty($CFG->grade_report_user_showfeedback)); $this->showweight = grade_get_setting($this->courseid, 'report_user_showweight', !empty($CFG->grade_report_user_showweight)); + $this->showcontributiontocoursetotal = grade_get_setting($this->courseid, 'report_user_showcontributiontocoursetotal', !empty($CFG->grade_report_user_showcontributiontocoursetotal)); $this->showlettergrade = grade_get_setting($this->courseid, 'report_user_showlettergrade', !empty($CFG->grade_report_user_showlettergrade)); $this->showaverage = grade_get_setting($this->courseid, 'report_user_showaverage', !empty($CFG->grade_report_user_showaverage)); @@ -327,6 +343,11 @@ class grade_report_user extends grade_report { $this->tablecolumns[] = 'feedback'; $this->tableheaders[] = $this->get_lang_string('feedback', 'grades'); } + + if ($this->showcontributiontocoursetotal) { + $this->tablecolumns[] = 'contributiontocoursetotal'; + $this->tableheaders[] = $this->get_lang_string('contributiontocoursetotal', 'grades'); + } } function fill_table() { @@ -338,6 +359,11 @@ class grade_report_user extends grade_report { return true; } + /** + * Fill the table with data. + * + * @param $element - An array containing the table data for the current row. + */ private function fill_table_recursive(&$element) { global $DB, $CFG; @@ -346,11 +372,12 @@ class grade_report_user extends grade_report { $grade_object = $element['object']; $eid = $grade_object->id; $element['userid'] = $this->user->id; - $fullname = $this->gtree->get_element_header($element, true, true, true); + $fullname = $this->gtree->get_element_header($element, true, true, true, true); $data = array(); $hidden = ''; $excluded = ''; - $class = ''; + $itemlevel = ($type == 'categoryitem' || $type == 'category' || $type == 'courseitem') ? $depth : ($depth + 1); + $class = 'level' . $itemlevel . ' level' . ($itemlevel % 2 ? 'odd' : 'even'); $classfeedback = ''; // If this is a hidden grade category, hide it completely from the user @@ -408,13 +435,15 @@ class grade_report_user extends grade_report { if (!$hide) { /// Excluded Item + /** if ($grade_grade->is_excluded()) { $fullname .= ' ['.get_string('excluded', 'grades').']'; $excluded = ' excluded'; } + **/ /// Other class information - $class = "$hidden $excluded"; + $class .= $hidden . $excluded; if ($this->switch) { // alter style based on whether aggregation is first or last $class .= ($type == 'categoryitem' or $type == 'courseitem') ? " ".$alter."d$depth baggt b2b" : " item b1b"; } else { @@ -433,17 +462,27 @@ class grade_report_user extends grade_report { /// Actual Grade $gradeval = $grade_grade->finalgrade; + $hint = $grade_grade->get_aggregation_hint(); if (!$this->canviewhidden) { /// Virtual Grade (may be calculated excluding hidden items etc). $adjustedgrade = $this->blank_hidden_total_and_adjust_bounds($this->courseid, $grade_grade->grade_item, $gradeval); + $gradeval = $adjustedgrade['grade']; // We temporarily adjust the view of this grade item - because the min and // max are affected by the hidden values in the aggregation. $grade_grade->grade_item->grademax = $adjustedgrade['grademax']; $grade_grade->grade_item->grademin = $adjustedgrade['grademin']; + $hint['status'] = $adjustedgrade['aggregationstatus']; + $hint['weight'] = $adjustedgrade['aggregationweight']; + } else { + // The max and min for an aggregation may be different to the grade_item. + if (!is_null($gradeval)) { + $grade_grade->grade_item->grademax = $grade_grade->rawgrademax; + $grade_grade->grade_item->grademin = $grade_grade->rawgrademin; + } } if ($this->showfeedback) { @@ -456,8 +495,13 @@ class grade_report_user extends grade_report { $data['weight']['content'] = '-'; $data['weight']['headers'] = "$header_cat $header_row weight"; // has a weight assigned, might be extra credit - if ($grade_object->aggregationcoef > 0 && $type <> 'courseitem') { - $data['weight']['content'] = number_format($grade_object->aggregationcoef,2); + + // This obliterates the weight because it provides a more informative description. + if (is_numeric($hint['weight'])) { + $data['weight']['content'] = format_float($hint['weight'] * 100.0, 2) . ' %'; + } + if ($hint['status'] != 'used' && $hint['status'] != 'unknown') { + $data['weight']['content'] .= '' . get_string('aggregationhint' . $hint['status'], 'grades'); } } @@ -586,6 +630,22 @@ class grade_report_user extends grade_report { } $data['feedback']['headers'] = "$header_cat $header_row feedback"; } + // Contribution to the course total column. + if ($this->showcontributiontocoursetotal) { + $data['contributiontocoursetotal']['class'] = $class; + $data['contributiontocoursetotal']['content'] = '-'; + $data['contributiontocoursetotal']['headers'] = "$header_cat $header_row contributiontocoursetotal"; + + $hint['grademax'] = $grade_grade->grade_item->grademax; + $hint['grademin'] = $grade_grade->grade_item->grademin; + $hint['grade'] = $gradeval; + $parent = $grade_object->load_parent_category(); + if ($grade_object->is_category_item()) { + $parent = $parent->load_parent_category(); + } + $hint['parent'] = $parent->load_grade_item()->id; + $this->aggregationhints[$grade_grade->itemid] = $hint; + } } } @@ -606,6 +666,9 @@ class grade_report_user extends grade_report { } /// Add this row to the overall system + foreach ($data as $key => $celldata) { + $data[$key]['class'] .= ' column-' . $key; + } $this->tabledata[] = $data; /// Recursively iterate through all child elements @@ -614,6 +677,83 @@ class grade_report_user extends grade_report { $this->fill_table_recursive($element['children'][$key]); } } + + // Check we are showing this column, and we are looking at the root of the table. + // This should be the very last thing this fill_table_recursive function does. + if ($this->showcontributiontocoursetotal && ($type == 'category' && $depth == 1)) { + // We should have collected all the hints by now - walk the tree again and build the contributions column. + + $this->fill_contributions_column($element); + } + } + + /** + * This function is called after the table has been built and the aggregationhints + * have been collected. We need this info to walk up the list of parents of each + * grade_item. + * + * @param $element - An array containing the table data for the current row. + */ + public function fill_contributions_column($element) { + + // Recursively iterate through all child elements. + if (isset($element['children'])) { + foreach ($element['children'] as $key=>$child) { + $this->fill_contributions_column($element['children'][$key]); + } + } else if ($element['type'] == 'item') { + // This is a grade item (We don't do this for categories or we would double count). + $grade_object = $element['object']; + $itemid = $grade_object->id; + + // Ignore anything with no hint - e.g. a hidden row. + if (isset($this->aggregationhints[$itemid])) { + + // Normalise the gradeval. + $gradecat = $grade_object->load_parent_category(); + if ($gradecat->aggregation == GRADE_AGGREGATE_SUM) { + // Natural aggregation/Sum of grades does not consider the mingrade. + $graderange = $this->aggregationhints[$itemid]['grademax']; + $gradeval = $this->aggregationhints[$itemid]['grade'] / $graderange; + } else { + $graderange = $this->aggregationhints[$itemid]['grademax'] - $this->aggregationhints[$itemid]['grademin']; + $gradeval = ($this->aggregationhints[$itemid]['grade'] - $this->aggregationhints[$itemid]['grademin']) / $graderange; + } + + // Multiply the normalised value by the weight + // of all the categories higher in the tree. + do { + if (!is_null($this->aggregationhints[$itemid]['weight'])) { + $gradeval *= $this->aggregationhints[$itemid]['weight']; + } + + // The second part of this if is to prevent infinite loops + // in case of crazy data. + if (isset($this->aggregationhints[$itemid]['parent']) && + $this->aggregationhints[$itemid]['parent'] != $itemid) { + $parent = $this->aggregationhints[$itemid]['parent']; + $itemid = $parent; + } else { + // We are at the top of the tree. + $parent = false; + } + } while ($parent); + // Finally multiply by the course grademax. + $gradeval *= $this->aggregationhints[$itemid]['grademax']; + + // Now we need to loop through the "built" table data and update the + // contributions column for the current row. + $header_row = "row_{$grade_object->id}_{$this->user->id}"; + foreach ($this->tabledata as $key => $row) { + if (isset($row['itemname']) && ($row['itemname']['id'] == $header_row)) { + // Found it - update the column. + $decimals = $grade_object->get_decimals(); + $this->tabledata[$key]['contributiontocoursetotal']['content'] = format_float($gradeval, $decimals, true); + break; + } + } + } + } } /** @@ -632,10 +772,10 @@ class grade_report_user extends grade_report { class='boxaligncenter generaltable user-grade'> - ".$this->tableheaders[0]."\n"; + tablecolumns[0]}\" colspan='$maxspan'>".$this->tableheaders[0]."\n"; for ($i = 1; $i < count($this->tableheaders); $i++) { - $html .= "".$this->tableheaders[$i]."\n"; + $html .= "tablecolumns[$i]}\">".$this->tableheaders[$i]."\n"; } $html .= " @@ -901,6 +1041,14 @@ function grade_report_user_settings_definition(&$mform) { } $mform->addElement('select', 'report_user_showlettergrade', get_string('showlettergrade', 'grades'), $options); + if (empty($CFG->grade_report_user_showcontributiontocoursetotal)) { + $options[-1] = get_string('defaultprev', 'grades', $options[0]); + } else { + $options[-1] = get_string('defaultprev', 'grades', $options[$CFG->grade_report_user_showcontributiontocoursetotal]); + } + + $mform->addElement('select', 'report_user_showcontributiontocoursetotal', get_string('showcontributiontocoursetotal', 'grades'), $options); + $mform->addHelpButton('report_user_showcontributiontocoursetotal', 'showcontributiontocoursetotal', 'grades'); if (empty($CFG->grade_report_user_showrange)) { $options[-1] = get_string('defaultprev', 'grades', $options[0]); @@ -944,6 +1092,7 @@ function grade_report_user_settings_definition(&$mform) { $mform->addElement('select', 'report_user_showtotalsifcontainhidden', get_string('hidetotalifhiddenitems', 'grades'), $options); $mform->addHelpButton('report_user_showtotalsifcontainhidden', 'hidetotalifhiddenitems', 'grades'); + } /** diff --git a/grade/report/user/settings.php b/grade/report/user/settings.php index d469f68f08a..c85f4c899ab 100644 --- a/grade/report/user/settings.php +++ b/grade/report/user/settings.php @@ -47,4 +47,5 @@ if ($ADMIN->fulltree) { array(GRADE_REPORT_HIDE_TOTAL_IF_CONTAINS_HIDDEN => get_string('hide'), GRADE_REPORT_SHOW_TOTAL_IF_CONTAINS_HIDDEN => get_string('hidetotalshowexhiddenitems', 'grades'), GRADE_REPORT_SHOW_REAL_TOTAL_IF_CONTAINS_HIDDEN => get_string('hidetotalshowinchiddenitems', 'grades')))); + $settings->add(new admin_setting_configcheckbox('grade_report_user_showcontributiontocoursetotal', get_string('showcontributiontocoursetotal', 'grades'), get_string('showcontributiontocoursetotal_help', 'grades'), 0)); } diff --git a/grade/report/user/styles.css b/grade/report/user/styles.css index b481be40fcb..e11851ce3e5 100644 --- a/grade/report/user/styles.css +++ b/grade/report/user/styles.css @@ -57,3 +57,6 @@ table.user-grade td.feedbacktext {text-align:left;width: 40%;font-size: 0.8em;white-space:normal;} table.user-grade td.itemcenter {text-align:center;} +.user-grade .gradeitemdescription { font-weight: normal; position: absolute; } +.user-grade .gradeitemdescriptionfiller { clear: left; height: 1em; } +.user-grade .gradeitemdescription { font-weight: normal; position: absolute;} diff --git a/grade/tests/behat/behat_grade.php b/grade/tests/behat/behat_grade.php index d410bd602ae..6272c8362b8 100644 --- a/grade/tests/behat/behat_grade.php +++ b/grade/tests/behat/behat_grade.php @@ -27,7 +27,8 @@ require_once(__DIR__ . '/../../../lib/behat/behat_base.php'); -use Behat\Behat\Context\Step\Given as Given; +use Behat\Behat\Context\Step\Given as Given, + Behat\Gherkin\Node\TableNode as TableNode; class behat_grade extends behat_base { @@ -46,4 +47,26 @@ class behat_grade extends behat_base { return new Given('I set the field "' . $this->escape($fieldstr) . '" to "' . $grade . '"'); } + + /** + * Changes the settings of a grade item or category or the course. + * + * Teacher must be either on the grade setup page or on the Grader report page with editing mode turned on. + * + * @Given /^I set the following settings for grade item "(?P(?:[^"]|\\")*)":$/ + * @param string $gradeitem + * @param TableNode $data + * @return Given[] + */ + public function i_set_the_following_settings_for_grade_item($gradeitem, TableNode $data) { + $savechanges = get_string('savechanges', 'grades'); + $edit = $this->getSession()->getSelectorsHandler()->xpathLiteral(get_string('edit') . ' '); + $gradeitem = $this->getSession()->getSelectorsHandler()->xpathLiteral($gradeitem); + $linkxpath = "//a[./img[starts-with(@title,$edit) and contains(@title,$gradeitem)]]"; + return array( + new Given('I click on "' . $this->escape($linkxpath) . '" "xpath_element"'), + new Given('I set the following fields to these values:', $data), + new Given('I press "' . $this->escape($savechanges) . '"'), + ); + } } diff --git a/grade/tests/behat/grade_aggregation.feature b/grade/tests/behat/grade_aggregation.feature index 42e60536645..1df72b7fd4a 100644 --- a/grade/tests/behat/grade_aggregation.feature +++ b/grade/tests/behat/grade_aggregation.feature @@ -18,8 +18,8 @@ Feature: We can use calculated grade totals | student1 | C1 | student | And the following "grade categories" exist: | fullname | course | - | Sub category 1 | C1| - | Sub category 2 | C1| + | Sub category 1 | C1 | + | Sub category 2 | C1 | And the following "activities" exist: | activity | course | idnumber | name | intro | grade | | assign | C1 | a1 | Test assignment one | Submit something! | 300 | @@ -28,14 +28,18 @@ Feature: We can use calculated grade totals | assign | C1 | a4 | Test assignment four | Submit nothing! | 150 | And the following "activities" exist: | activity | course | idnumber | name | intro | gradecategory | grade | - | assign | C1 | a5 | Test assignment five | Submit something! | Sub category 1 | 200 - | assign | C1 | a6 | Test assignment six | Submit something! | Sub category 1 | 100 - | assign | C1 | a7 | Test assignment seven | Submit nothing! | Sub category 1 | 150 + | assign | C1 | a5 | Test assignment five | Submit something! | Sub category 1 | 20 | + | assign | C1 | a6 | Test assignment six | Submit something! | Sub category 1 | 10 | + | assign | C1 | a7 | Test assignment seven | Submit nothing! | Sub category 1 | 15 | And the following "activities" exist: | activity | course | idnumber | name | intro | gradecategory | grade | - | assign | C1 | a8 | Test assignment eight | Submit something! | Sub category 2 | 200 - | assign | C1 | a9 | Test assignment nine | Submit something! | Sub category 2 | 100 - | assign | C1 | 10 | Test assignment ten | Submit nothing! | Sub category 2 | 150 + | assign | C1 | a8 | Test assignment eight | Submit something! | Sub category 2 | 20 | + | assign | C1 | a9 | Test assignment nine | Submit something! | Sub category 2 | 10 | + | assign | C1 | 10 | Test assignment ten | Submit nothing! | Sub category 2 | 15 | + And I log in as "admin" + And I set the following administration settings values: + | grade_aggregations_visible | Mean of grades,Weighted mean of grades,Simple weighted mean of grades,Mean of grades (with extra credits),Median of grades,Lowest grade,Highest grade,Mode of grades,Natural | + And I log out And I log in as "teacher1" And I follow "Course 1" And I follow "Grades" @@ -48,35 +52,28 @@ Feature: We can use calculated grade totals And I give the grade "10.00" to the user "Student 1" for the grade item "Test assignment eight" And I give the grade "5.00" to the user "Student 1" for the grade item "Test assignment nine" And I press "Save changes" - And I click on "Edit assign Test assignment two" "link" - And I click on "Hidden" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment five" "link" - And I click on "Hidden" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment eight" "link" - And I click on "Hidden" "checkbox" - And I press "Save changes" - And I follow "Course grade settings" + And I set the following settings for grade item "Test assignment two": + | Hidden | 1 | + And I set the following settings for grade item "Test assignment five": + | Hidden | 1 | + And I set the following settings for grade item "Test assignment eight": + | Hidden | 1 | + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Grade display type" to "Real (percentage)" And I press "Save changes" @javascript Scenario: Mean of grades aggregation - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Mean of grades" - And I press "Save changes" - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Mean of grades" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Mean of grades" - And I click on "Show more..." "link" - And I click on "Exclude empty grades" "checkbox" - And I press "Save changes" + And I set the following settings for grade item "Course 1": + | Aggregation | Mean of grades | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Mean of grades | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Mean of grades | + | Exclude empty grades | 0 | And I turn editing mode off Then I should see "30.00 (30.00 %)" in the ".course" "css_element" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" And I press "Save changes" And I log out @@ -88,27 +85,20 @@ Feature: We can use calculated grade totals @javascript Scenario: Weighted mean of grades aggregation - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Weighted mean of grades" - And I press "Save changes" - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Weighted mean of grades" - And I expand all fieldsets - And I set the field "Item weight" to "1" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Weighted mean of grades" - And I expand all fieldsets - And I set the field "Item weight" to "1" - And I click on "Exclude empty grades" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment one" "link" - And I expand all fieldsets - And I set the field "Item weight" to "3" - And I press "Save changes" + And I set the following settings for grade item "Course 1": + | Aggregation | Weighted mean of grades | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Weighted mean of grades | + | Item weight | 1 | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Weighted mean of grades | + | Item weight | 1 | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Test assignment one": + | Item weight | 3 | And I turn editing mode off Then I should see "27.14 (27.14 %)" in the ".course" "css_element" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" And I press "Save changes" And I log out @@ -120,24 +110,18 @@ Feature: We can use calculated grade totals @javascript Scenario: Simple weighted mean of grades aggregation - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Simple weighted mean of grades" - And I press "Save changes" - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Simple weighted mean of grades" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Simple weighted mean of grades" - And I click on "Show more..." "link" - And I click on "Exclude empty grades" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment one" "link" - And I expand all fieldsets - And I click on "Extra credit" "checkbox" - And I press "Save changes" + And I set the following settings for grade item "Course 1": + | Aggregation | Simple weighted mean of grades | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Simple weighted mean of grades | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Simple weighted mean of grades | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Test assignment one": + | Extra credit | 1 | And I turn editing mode off Then I should see "45.19 (45.19 %)" in the ".course" "css_element" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" And I press "Save changes" And I log out @@ -149,24 +133,18 @@ Feature: We can use calculated grade totals @javascript Scenario: Mean of grades (with extra credits) aggregation - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Mean of grades (with extra credits)" - And I press "Save changes" - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Mean of grades (with extra credits)" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Mean of grades (with extra credits)" - And I click on "Show more..." "link" - And I click on "Exclude empty grades" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment one" "link" - And I expand all fieldsets - And I set the field "Extra credit weight" to "2" - And I press "Save changes" + And I set the following settings for grade item "Course 1": + | Aggregation | Mean of grades (with extra credits) | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Mean of grades (with extra credits) | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Mean of grades (with extra credits) | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Test assignment one": + | Extra credit weight | 2 | And I turn editing mode off Then I should see "42.50 (42.50 %)" in the ".course" "css_element" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" And I press "Save changes" And I log out @@ -178,20 +156,16 @@ Feature: We can use calculated grade totals @javascript Scenario: Median of grades aggregation - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Median of grades" - And I press "Save changes" - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Median of grades" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Median of grades" - And I click on "Show more..." "link" - And I click on "Exclude empty grades" "checkbox" - And I press "Save changes" + And I set the following settings for grade item "Course 1": + | Aggregation | Median of grades | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Median of grades | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Median of grades | + | Exclude empty grades | 0 | And I turn editing mode off Then I should see "26.67 (26.67 %)" in the ".course" "css_element" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" And I press "Save changes" And I log out @@ -203,26 +177,20 @@ Feature: We can use calculated grade totals @javascript Scenario: Lowest grade aggregation - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Lowest grade" - And I press "Save changes" - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Lowest grade" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Lowest grade" - And I click on "Show more..." "link" - And I click on "Exclude empty grades" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment five" "link" - And I click on "Hidden" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment four" "link" - And I click on "Hidden" "checkbox" - And I press "Save changes" + And I set the following settings for grade item "Course 1": + | Aggregation | Lowest grade | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Lowest grade | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Lowest grade | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Test assignment five": + | Hidden | 1 | + And I set the following settings for grade item "Test assignment four": + | Hidden | 1 | And I turn editing mode off Then I should see "0.00 (0.00 %)" in the ".course" "css_element" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" And I press "Save changes" And I log out @@ -234,23 +202,18 @@ Feature: We can use calculated grade totals @javascript Scenario: Highest grade aggregation - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Highest grade" - And I press "Save changes" - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Highest grade" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Highest grade" - And I click on "Show more..." "link" - And I click on "Exclude empty grades" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment one" "link" - And I click on "Hidden" "checkbox" - And I press "Save changes" + And I set the following settings for grade item "Course 1": + | Aggregation | Highest grade | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Highest grade | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Highest grade | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Test assignment one": + | Hidden | 1 | And I turn editing mode off Then I should see "50.00 (50.00 %)" in the ".course" "css_element" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" And I press "Save changes" And I log out @@ -262,23 +225,18 @@ Feature: We can use calculated grade totals @javascript Scenario: Mode of grades aggregation - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Mode of grades" - And I press "Save changes" - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Mode of grades" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Mode of grades" - And I click on "Show more..." "link" - And I click on "Exclude empty grades" "checkbox" - And I press "Save changes" - And I click on "Edit assign Test assignment one" "link" - And I click on "Hidden" "checkbox" - And I press "Save changes" + And I set the following settings for grade item "Course 1": + | Aggregation | Mode of grades | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Mode of grades | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Mode of grades | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Test assignment one": + | Hidden | 1 | And I turn editing mode off Then I should see "50.00 (50.00 %)" in the ".course" "css_element" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" And I press "Save changes" And I log out @@ -289,24 +247,249 @@ Feature: We can use calculated grade totals And I should see "50.00 (50.00 %)" in the "overview-grade" "table" @javascript - Scenario: Sum of grades aggregation - And I follow "Edit Sub category 1" - And I set the field "Aggregation" to "Sum of grades" - And I press "Save changes" - And I follow "Edit Sub category 2" - And I set the field "Aggregation" to "Sum of grades" - And I press "Save changes" - And I follow "Edit Course 1" - And I set the field "Aggregation" to "Sum of grades" - And I press "Save changes" + Scenario: Natural aggregation + And I set the following settings for grade item "Sub category 1": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Natural | + | Exclude empty grades | 1 | + And I set the following settings for grade item "Course 1": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Test assignment six": + | Weight adjusted | 1 | + | aggregationcoef2 | 50 | + And I set the following settings for grade item "Test assignment three": + | Extra credit | 1 | And I turn editing mode off - Then I should see "150.00 (18.99 %)" in the ".course" "css_element" - And I follow "Course grade settings" - And I set the field "Hide totals if they contain hidden items" to "Show totals excluding hidden items" + Then I should see "152.68 (24.43 %)" in the ".course" "css_element" + And I navigate to "Course grade settings" node in "Grade administration > Settings" + And I set the field "report_overview_showtotalsifcontainhidden" to "Show totals excluding hidden items" + And I set the field "report_user_showtotalsifcontainhidden" to "Show totals excluding hidden items" + And I set the field "Show contribution to course total" to "Show" + And I set the field "Show weightings" to "Show" And I press "Save changes" + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + And the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Range | Contribution to course total | + | Test assignment five | 28.57 % | 10.00 (50.00 %) | 0–20 | 6.43 | + | Test assignment six | 50.00 % | 5.00 (50.00 %) | 0–10 | 11.25 | + | Test assignment seven | 21.43 % | - | 0–15 | 0.00 | + | Test assignment eight | 66.67 % | 10.00 (50.00 %) | 0–20 | 10.00 | + | Test assignment nine | 33.33 % | 5.00 (50.00 %) | 0–10 | 5.00 | + | Test assignment ten | -( Empty ) | - | 0–15 | 0.00 | + | Test assignment one | 48.00 % | 60.00 (20.00 %) | 0–300 | 60.00 | + | Test assignment two | 16.00 % | 20.00 (20.00 %) | 0–100 | 20.00 | + | Test assignment three | 24.00 %( Extra credit ) | 40.00 (26.67 %) | 0–150 | 40.00 | + | Test assignment four | 24.00 % | - | 0–150 | 0.00 | And I log out And I log in as "student1" And I follow "Course 1" And I follow "Grades" And I set the field "Grade report" to "Overview report" - And I should see "110.00 (16.92 %)" in the "overview-grade" "table" + And I should see "113.75 (23.45 %)" in the "overview-grade" "table" + And I set the field "Grade report" to "User report" + And the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Range | Contribution to course total | + | Test assignment six | 70.00 % | 5.00 (50.00 %) | 0–10 | 8.75 | + | Test assignment seven | 30.00 % | - | 0–15 | 0.00 | + | Test assignment nine | 100.00 % | 5.00 (50.00 %) | 0–10 | 5.00 | + | Test assignment ten | -( Empty ) | - | 0–15 | 0.00 | + | Test assignment one | 61.86 % | 60.00 (20.00 %) | 0–300 | 60.0 | + | Test assignment three | 30.93 %( Extra credit ) | 40.00 (26.67 %) | 0–150 | 40.0 | + | Test assignment four | 30.93 % | - | 0–150 | 0.00 | + + @javascript + Scenario: Natural aggregation with drop lowest + When I log out + And I log in as "admin" + And I follow "Course 1" + And I follow "Grades" + And I turn editing mode on + And I set the following settings for grade item "Sub category 1": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Course 1": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I navigate to "Set up grades layout" node in "Grade administration > Settings" + And I press "Add category" + And I click on "Show more" "link" + And I set the following fields to these values: + | Category name | Sub category 3 | + | Aggregation | Natural | + | Drop the lowest | 1 | + And I press "Save changes" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 1 | + | Grade category | Sub category 3 | + And I press "Save changes" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 2 | + | Grade category | Sub category 3 | + And I press "Save changes" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 3 | + | Grade category | Sub category 3 | + And I press "Save changes" + And I follow "Grader report" + And I give the grade "60.00" to the user "Student 1" for the grade item "Manual item 1" + And I give the grade "20.00" to the user "Student 1" for the grade item "Manual item 2" + And I give the grade "40.00" to the user "Student 1" for the grade item "Manual item 3" + And I press "Save changes" + And I turn editing mode off + Then I should see "250.00 (25.25 %)" in the ".course" "css_element" + And I turn editing mode on + And I set the following settings for grade item "Manual item 2": + | Extra credit | 1 | + And I turn editing mode off + And I should see "270.00 (27.27 %)" in the ".course" "css_element" + And I turn editing mode on + And I set the following settings for grade item "Manual item 2": + | Extra credit | 0 | + | Maximum grade | 200 | + And I give the grade "21.00" to the user "Student 1" for the grade item "Manual item 2" + And I press "Save changes" + And I give the grade "20.00" to the user "Student 1" for the grade item "Manual item 2" + And I press "Save changes" + And I turn editing mode off + And I should see "270.00 (22.69 %)" in the ".course" "css_element" + And I turn editing mode on + And I set the following settings for grade item "Manual item 2": + | Extra credit | 0 | + | Maximum grade | 100 | + And I give the grade "21.00" to the user "Student 1" for the grade item "Manual item 2" + And I press "Save changes" + And I give the grade "20.00" to the user "Student 1" for the grade item "Manual item 2" + And I press "Save changes" + And I turn editing mode off + And I should see "250.00 (25.25 %)" in the ".course" "css_element" + And I navigate to "Set up grades layout" node in "Grade administration > Settings" + And I press "Add category" + And I set the following fields to these values: + | Category name | Sub sub category 1 | + | Parent category | Sub category 3 | + And I press "Save changes" + And I follow "Grader report" + And I should see "270.00 (24.77 %)" in the ".course" "css_element" + + @javascript + Scenario: Natural aggregation from the setup screen + And I set the field "Grade report" to "Set up grades layout" + And I follow "Edit Course 1" + And I set the field "Aggregation" to "Natural" + And I press "Save changes" + And I follow "Edit Sub category 1" + And I set the field "Aggregation" to "Natural" + And I press "Save changes" + And I follow "Edit Sub category 2" + And I set the field "Aggregation" to "Natural" + And I press "Save changes" + + And I set the field "Override weight of Test assignment one" to "1" + And the field "Weight of Test assignment one" matches value "37.975" + And I set the field "Weight of Test assignment one" to "10" + + And I set the field "Override weight of Test assignment two" to "1" + And the field "Weight of Test assignment two" matches value "12.658" + And I set the field "Override weight of Test assignment two" to "0" + + And I set the field "Override weight of Test assignment six" to "1" + And the field "Weight of Test assignment six" matches value "22.222" + And I set the field "Weight of Test assignment six" to "50" + And I set the field "Override weight of Test assignment six" to "0" + + And I set the field "Override weight of Test assignment ten" to "1" + And the field "Weight of Test assignment ten" matches value "33.333" + And I set the field "Weight of Test assignment ten" to "50" + + And I set the field "Override weight of Sub category 1" to "1" + And the field "Weight of Sub category 1" matches value "5.696" + And I set the field "Weight of Sub category 1" to "15" + + When I press "Save changes" + And I set the field "Override weight of Test assignment two" to "1" + And I set the field "Override weight of Test assignment six" to "1" + + Then the field "Weight of Test assignment one" matches value "10.0" + And the field "Weight of Test assignment two" matches value "16.854" + And the field "Weight of Test assignment six" matches value "22.222" + And the field "Weight of Test assignment ten" matches value "50.0" + And the field "Weight of Sub category 1" matches value "15.0" + And I set the field "Override weight of Test assignment one" to "0" + And I set the field "Override weight of Test assignment two" to "0" + And I set the field "Override weight of Test assignment six" to "0" + And I set the field "Override weight of Sub category 1" to "0" + And I press "Save changes" + And I set the field "Override weight of Test assignment one" to "1" + And I set the field "Override weight of Sub category 1" to "1" + And the field "Weight of Test assignment one" matches value "37.975" + And the field "Weight of Sub category 1" matches value "5.696" + And I click on "Reset weights of Sub category 2" "link" + And the field "Weight of Test assignment ten" matches value "33.333" + + @javascript + Scenario: Natural aggregation with weights of zero + When I set the following settings for grade item "Course 1": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Sub category 1": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I turn editing mode off + And I set the field "Grade report" to "Set up grades layout" + And I set the field "Override weight of Test assignment one" to "1" + And I set the field "Weight of Test assignment one" to "0" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Weight of Test assignment six" to "0" + And I set the field "Override weight of Test assignment nine" to "1" + And I set the field "Weight of Test assignment nine" to "100" + And I press "Save changes" + And I navigate to "Course grade settings" node in "Grade administration > Settings" + And I set the field "report_overview_showtotalsifcontainhidden" to "Show totals excluding hidden items" + And I set the field "report_user_showtotalsifcontainhidden" to "Show totals excluding hidden items" + And I set the field "Show contribution to course total" to "Show" + And I set the field "Show weightings" to "Show" + And I press "Save changes" + Then I should see "75.00 (16.85 %)" in the ".course" "css_element" + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + And the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment five | 57.14 % | 10.00 (50.00 %) | 10.00 | + | Test assignment six | 0.00 % | 5.00 (50.00 %) | 0.00 | + | Test assignment seven | 42.86 % | - | 0.00 | + | Test assignment eight | 0.00 % | 10.00 (50.00 %) | 0.00 | + | Test assignment nine | 100.00 % | 5.00 (50.00 %) | 5.00 | + | Test assignment ten | 0.00 % | - | 0.00 | + | Test assignment one | 0.00 % | 60.00 (20.00 %) | 0.00 | + | Test assignment two | 22.47 % | 20.00 (20.00 %) | 20.00 | + | Test assignment three | 33.71 % | 40.00 (26.67 %) | 40.00 | + | Test assignment four | 33.71 % | - | 0.00 | + And I log out + And I log in as "student1" + And I follow "Course 1" + And I follow "Grades" + And I set the field "Grade report" to "Overview report" + And I should see "45.00 (13.85 %)" in the "overview-grade" "table" + And I set the field "Grade report" to "User report" + And the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment six | 0.00 % | 5.00 (50.00 %) | 0.00 | + | Test assignment seven | 100.00 % | - | 0.00 | + | Test assignment nine | 100.00 % | 5.00 (50.00 %) | 5.00 | + | Test assignment ten | 0.00 | - | 0.00 | + | Test assignment one | 0.00 % | 60.00 (20.00 %) | 0.00 | + | Test assignment three | 46.15 % | 40.00 (26.67 %) | 40.00 | + | Test assignment four | 46.15 % | - | 0.00 | diff --git a/grade/tests/behat/grade_calculated_weights.feature b/grade/tests/behat/grade_calculated_weights.feature new file mode 100644 index 00000000000..ccab3c0e780 --- /dev/null +++ b/grade/tests/behat/grade_calculated_weights.feature @@ -0,0 +1,248 @@ +@core @core_grades +Feature: We can understand the gradebook user report + In order to understand the gradebook user report + As an teacher + I need to see the calculated weights for each type of aggregation + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 1 | + And the following "users" exist: + | username | firstname | lastname | email | idnumber | + | teacher1 | Teacher | 1 | teacher1@asd.com | t1 | + | student1 | Student | 1 | student1@asd.com | s1 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + And the following "activities" exist: + | activity | course | idnumber | name | intro | + | assign | C1 | a1 | Test assignment one | Submit something! | + | assign | C1 | a2 | Test assignment two | Submit something! | + | assign | C1 | a3 | Test assignment three | Submit something! | + | assign | C1 | a4 | Test assignment four | Submit something! | + | assign | C1 | a5 | Test assignment five | Submit something! | + | assign | C1 | a6 | Test assignment six | Submit something! | + And I log in as "admin" + And I set the following administration settings values: + | grade_aggregations_visible | Mean of grades,Weighted mean of grades,Simple weighted mean of grades,Mean of grades (with extra credits),Median of grades,Lowest grade,Highest grade,Mode of grades,Natural | + And I log out + And I log in as "teacher1" + And I follow "Course 1" + And I follow "Grades" + And I turn editing mode on + And I give the grade "60.00" to the user "Student 1" for the grade item "Test assignment one" + And I give the grade "20.00" to the user "Student 1" for the grade item "Test assignment two" + And I give the grade "40.00" to the user "Student 1" for the grade item "Test assignment three" + And I give the grade "10.00" to the user "Student 1" for the grade item "Test assignment four" + And I give the grade "70.00" to the user "Student 1" for the grade item "Test assignment five" + And I give the grade "30.00" to the user "Student 1" for the grade item "Test assignment six" + And I press "Save changes" + And I navigate to "Course grade settings" node in "Grade administration > Settings" + And I set the field "Show weightings" to "Show" + And I set the field "Show contribution to course total" to "Show" + And I press "Save changes" + And I set the field "Grade report" to "Set up grades layout" + And I press "Add category" + And I set the field "Category name" to "Sub category" + And I press "Save changes" + And I click on "Move" "link" in the "Test assignment six" "table_row" + # This xpath finds the forth last row in the table. + And I click on "Move to here" "link" in the "//tbody//tr[position()=last()-3]" "xpath_element" + And I click on "Move" "link" in the "Test assignment five" "table_row" + And I click on "Move to here" "link" in the "//tbody//tr[position()=last()-3]" "xpath_element" + And I click on "Move" "link" in the "Test assignment four" "table_row" + And I click on "Move to here" "link" in the "//tbody//tr[position()=last()-3]" "xpath_element" + + @javascript + Scenario: Mean of grades aggregation + And I set the following settings for grade item "Course 1": + | Aggregation | Mean of grades | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 25.00 % | 60.00 | 15.00 | + | Test assignment two | 25.00 % | 20.00 | 5.00 | + | Test assignment three | 25.00 % | 40.00 | 10.00 | + | Test assignment four | 33.33 % | 10.00 | 0.83 | + | Test assignment five | 33.33 % | 70.00 | 5.83 | + | Test assignment six | 33.33 % | 30.00 | 2.50 | + + @javascript + Scenario: Weighted mean of grades aggregation + And I set the following settings for grade item "Course 1": + | Aggregation | Weighted mean of grades | + And I set the following settings for grade item "Test assignment one": + | Item weight | 2.0 | + And I set the following settings for grade item "Test assignment two": + | Item weight | 1.0 | + And I set the following settings for grade item "Test assignment three": + | Item weight | 1.0 | + And I set the following settings for grade item "Sub category": + | Item weight | 1.0 | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 40.00 % | 60.00 | 24.00 | + | Test assignment two | 20.00 % | 20.00 | 4.00 | + | Test assignment three | 20.00 % | 40.00 | 8.00 | + | Test assignment four | 33.33 % | 10.00 | 0.67 | + | Test assignment five | 33.33 % | 70.00 | 4.67 | + | Test assignment six | 33.33 % | 30.00 | 2.00 | + + @javascript + Scenario: Simple weighted mean of grades aggregation + And I set the following settings for grade item "Course 1": + | Aggregation | Simple weighted mean of grades | + And I set the following settings for grade item "Sub category": + | Aggregation | Simple weighted mean of grades | + And I set the following settings for grade item "Test assignment three": + | Extra credit | 1 | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 33.33 % | 60.00 | 20.00 | + | Test assignment two | 33.33 % | 20.00 | 6.67 | + | Test assignment three | 33.33 %( Extra credit ) | 40.00 | 13.33 | + | Test assignment four | 33.33 % | 10.00 | 1.11 | + | Test assignment five | 33.33 % | 70.00 | 7.78 | + | Test assignment six | 33.33 % | 30.00 | 3.33 | + + @javascript + Scenario: Mean of grades (with extra credits) aggregation + And I set the following settings for grade item "Course 1": + | Aggregation | Mean of grades (with extra credits) | + And I set the following settings for grade item "Test assignment three": + | Extra credit weight | 1.0 | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 33.33 % | 60.00 | 20.00 | + | Test assignment two | 33.33 % | 20.00 | 6.67 | + | Test assignment three | 33.33 %( Extra credit ) | 40.00 | 13.33 | + | Test assignment four | 33.33 % | 10.00 | 1.11 | + | Test assignment five | 33.33 % | 70.00 | 7.78 | + | Test assignment six | 33.33 % | 30.00 | 3.33 | + + @javascript + Scenario: Median of grades aggregation + And I set the following settings for grade item "Course 1": + | Aggregation | Median of grades | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 0.00 % | 60.00 | 0.00 | + | Test assignment two | 0.00 % | 20.00 | 0.00 | + | Test assignment three | 50.00 % | 40.00 | 20.00 | + | Test assignment four | 33.33 % | 10.00 | 1.67 | + | Test assignment five | 33.33 % | 70.00 | 11.67 | + | Test assignment six | 33.33 % | 30.00 | 5.00 | + + @javascript + Scenario: Lowest grade aggregation + And I set the following settings for grade item "Course 1": + | Aggregation | Lowest grade | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 0.00 % | 60.00 | 0.00 | + | Test assignment two | 100.00 % | 20.00 | 20.00 | + | Test assignment three | 0.00 % | 40.00 | 0.00 | + | Test assignment four | 33.33 % | 10.00 | 0.00 | + | Test assignment five | 33.33 % | 70.00 | 0.00 | + | Test assignment six | 33.33 % | 30.00 | 0.00 | + + @javascript + Scenario: Highest grade aggregation + And I set the following settings for grade item "Course 1": + | Aggregation | Highest grade | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 100.00 % | 60.00 | 60.00 | + | Test assignment two | 0.00 % | 20.00 | 0.00 | + | Test assignment three | 0.00 % | 40.00 | 0.00 | + | Test assignment four | 33.33 % | 10.00 | 0.00 | + | Test assignment five | 33.33 % | 70.00 | 0.00 | + | Test assignment six | 33.33 % | 30.00 | 0.00 | + + @javascript + Scenario: Mode of grades aggregation + And I set the following settings for grade item "Course 1": + | Aggregation | Mode of grades | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 100.00 % | 60.00 | 60.00 | + | Test assignment two | 0.00 % | 20.00 | 0.00 | + | Test assignment three | 0.00 % | 40.00 | 0.00 | + | Test assignment four | 33.33 % | 10.00 | 0.00 | + | Test assignment five | 33.33 % | 70.00 | 0.00 | + | Test assignment six | 33.33 % | 30.00 | 0.00 | + + @javascript + Scenario: View user report with mixed aggregation methods + And I set the following settings for grade item "Course 1": + | Aggregation | Natural | + And I set the following settings for grade item "Sub category": + | Aggregation | Weighted mean of grades | + And I set the following settings for grade item "Test assignment three": + | Extra credit | 1 | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 33.33 % | 60.00 | 60.00 | + | Test assignment two | 33.33 % | 20.00 | 20.00 | + | Test assignment three | 33.33 %( Extra credit ) | 40.00 | 40.00 | + | Test assignment four | 33.33 % | 10.00 | 3.33 | + | Test assignment five | 33.33 % | 70.00 | 23.33 | + | Test assignment six | 33.33 % | 30.00 | 10.00 | + | Category totalWeighted mean of grades. | 33.33 % | 36.67 | - | + | Course totalNatural. | - | 156.67 | - | + + @javascript + Scenario: View user report with natural aggregation + And I set the following settings for grade item "Test assignment three": + | Extra credit | 1 | + And I set the field "Grade report" to "User report" + And I set the field "Select all or one user" to "Student 1" + + # Check the values in the weights column. + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Test assignment one | 20.00 % | 60.00 | 60.00 | + | Test assignment two | 20.00 % | 20.00 | 20.00 | + | Test assignment three | 20.00 %( Extra credit ) | 40.00 | 40.00 | + | Test assignment four | 33.33 % | 10.00 | 10.00 | + | Test assignment five | 33.33 % | 70.00 | 70.00 | + | Test assignment six | 33.33 % | 30.00 | 30.00 | + | Category totalNatural. | 60.00 % | 110.00 | - | + | Course totalNatural. | - | 230.00 | - | diff --git a/grade/tests/behat/grade_mingrade.feature b/grade/tests/behat/grade_mingrade.feature new file mode 100644 index 00000000000..9be0f0ba7a8 --- /dev/null +++ b/grade/tests/behat/grade_mingrade.feature @@ -0,0 +1,122 @@ +@core @core_grades +Feature: We can use a minimum grade different than zero + In order to use a minimum grade different than zero + As an teacher + I need to set up a minimum grade different than zero + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 1 | + And the following "users" exist: + | username | firstname | lastname | email | idnumber | + | teacher1 | Teacher | 1 | teacher1@asd.com | t1 | + | student1 | Student | 1 | student1@asd.com | s1 | + | student2 | Student | 2 | student2@asd.com | s2 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + | student2 | C1 | student | + And the following "grade categories" exist: + | fullname | course | + | Sub category 1 | C1 | + | Sub category 2 | C1 | + And I log in as "admin" + And I set the following administration settings values: + | grade_aggregations_visible | Mean of grades,Weighted mean of grades,Simple weighted mean of grades,Mean of grades (with extra credits),Median of grades,Lowest grade,Highest grade,Mode of grades,Natural | + And I am on homepage + And I follow "Course 1" + And I follow "Grades" + And I navigate to "Set up grades layout" node in "Grade administration > Settings" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 1 | + | Minimum grade | -100 | + | Grade category | Course 1 | + And I press "Save changes" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 2 | + | Minimum grade | 50 | + | Grade category | Course 1 | + And I press "Save changes" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 3 | + | Maximum grade | 50 | + | Minimum grade | -100 | + | Grade category | Sub category 1 | + And I press "Save changes" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 4 | + | Minimum grade | -100 | + | Grade category | Sub category 1 | + And I press "Save changes" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 5 | + | Minimum grade | 50 | + | Grade category | Sub category 2 | + And I press "Save changes" + And I press "Add grade item" + And I set the following fields to these values: + | Item name | Manual item 6 | + | Minimum grade | 50 | + | Grade category | Sub category 2 | + And I press "Save changes" + And I navigate to "Course grade settings" node in "Grade administration > Settings" + And I set the field "Show weightings" to "Show" + And I set the field "Show contribution to course total" to "Show" + And I press "Save changes" + + @javascript + Scenario: Natural aggregation with negative and positive grade + And I navigate to "Set up grades layout" node in "Grade administration > Settings" + And I set the following settings for grade item "Sub category 1": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Sub category 2": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I set the following settings for grade item "Course 1": + | Aggregation | Natural | + | Exclude empty grades | 0 | + And I log out + And I log in as "teacher1" + And I follow "Course 1" + And I follow "Grades" + And I turn editing mode on + When I give the grade "-25.00" to the user "Student 1" for the grade item "Manual item 1" + And I give the grade "50.00" to the user "Student 1" for the grade item "Manual item 2" + And I give the grade "-80.00" to the user "Student 1" for the grade item "Manual item 3" + And I give the grade "-10.00" to the user "Student 1" for the grade item "Manual item 4" + And I give the grade "50.00" to the user "Student 1" for the grade item "Manual item 5" + And I give the grade "75.00" to the user "Student 1" for the grade item "Manual item 6" + And I give the grade "0.00" to the user "Student 2" for the grade item "Manual item 1" + And I give the grade "0.00" to the user "Student 2" for the grade item "Manual item 2" + And I give the grade "-10.00" to the user "Student 2" for the grade item "Manual item 3" + And I give the grade "50.00" to the user "Student 2" for the grade item "Manual item 4" + And I give the grade "0.00" to the user "Student 2" for the grade item "Manual item 5" + And I give the grade "0.00" to the user "Student 2" for the grade item "Manual item 6" + And I press "Save changes" + And I follow "User report" + And I set the field "Select all or one user" to "Student 1" + Then the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Manual item 1 | 18.18 % | -25.00 | -25.00 | + | Manual item 2 | 18.18 % | 50.00 | 50.00 | + | Manual item 3 | 33.33 % | -80.00 | -80.00 | + | Manual item 4 | 66.67 % | -10.00 | -10.00 | + | Manual item 5 | 50.00 % | 50.00 | 50.00 | + | Manual item 6 | 50.00 % | 75.00 | 75.00 | + And I set the field "Select all or one user" to "Student 2" + And the following should exist in the "user-grade" table: + | Grade item | Calculated weight | Grade | Contribution to course total | + | Manual item 1 | 18.18 % | 0.00 | 0.00 | + | Manual item 2 | 18.18 % | 50.00 | 50.00 | + | Manual item 3 | 33.33 % | -10.00 | -10.00 | + | Manual item 4 | 66.67 % | 50.00 | 50.00 | + | Manual item 5 | 50.00 % | 50.00 | 50.00 | + | Manual item 6 | 50.00 % | 50.00 | 50.00 | \ No newline at end of file diff --git a/grade/tests/behat/grade_natural_normalisation.feature b/grade/tests/behat/grade_natural_normalisation.feature new file mode 100644 index 00000000000..d806c4005f4 --- /dev/null +++ b/grade/tests/behat/grade_natural_normalisation.feature @@ -0,0 +1,252 @@ +@core @core_grades +Feature: We can use natural aggregation and weights will be normalised to a total of one hundred + In order to override weights + As a teacher + I need to add assessments to the gradebook. + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 1 | + And the following "users" exist: + | username | firstname | lastname | email | idnumber | + | teacher1 | Teacher | 1 | teacher1@asd.com | t1 | + | student1 | Student | 1 | student1@asd.com | s1 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + And the following "grade categories" exist: + | fullname | course | + | Sub category 1 | C1 | + And the following "activities" exist: + | activity | course | idnumber | name | intro | grade | + | assign | C1 | a1 | Test assignment one | Submit something! | 300 | + | assign | C1 | a2 | Test assignment two | Submit something! | 100 | + | assign | C1 | a3 | Test assignment three | Submit something! | 150 | + | assign | C1 | a4 | Test assignment four | Submit nothing! | 150 | + And the following "activities" exist: + | activity | course | idnumber | name | intro | gradecategory | grade | + | assign | C1 | a5 | Test assignment five | Submit something! | Sub category 1 | 20 | + | assign | C1 | a6 | Test assignment six | Submit something! | Sub category 1 | 10 | + | assign | C1 | a7 | Test assignment seven | Submit nothing! | Sub category 1 | 15 | + And I log in as "teacher1" + And I follow "Course 1" + And I follow "Grades" + And I set the field "Grade report" to "Set up grades layout" + + @javascript + Scenario: Setting all weights in a category to exactly one hundred in total. + + And the field "Weight of Test assignment five" matches value "44.444" + And the field "Weight of Test assignment six" matches value "22.222" + And the field "Weight of Test assignment seven" matches value "33.333" + When I set the field "Override weight of Test assignment five" to "1" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Override weight of Test assignment seven" to "1" + And I set the field "Weight of Test assignment five" to "30" + And I set the field "Weight of Test assignment six" to "50" + And I set the field "Weight of Test assignment seven" to "20" + And I press "Save changes" + + Then I should not see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "30.0" + And the field "Weight of Test assignment six" matches value "50.0" + And the field "Weight of Test assignment seven" matches value "20.0" + + @javascript + Scenario: Setting all weights in a category to less than one hundred is normalised. + + When I set the field "Override weight of Test assignment five" to "1" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Override weight of Test assignment seven" to "1" + And I set the field "Weight of Test assignment five" to "1" + And I set the field "Weight of Test assignment six" to "1" + And I set the field "Weight of Test assignment seven" to "2" + And I press "Save changes" + + Then I should see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "25.0" + And the field "Weight of Test assignment six" matches value "25.0" + And the field "Weight of Test assignment seven" matches value "50.0" + + @javascript + Scenario: Set one of the grade item weights to a figure over one hundred. + + When I set the field "Override weight of Test assignment five" to "1" + And I set the field "Weight of Test assignment five" to "120" + And I press "Save changes" + + Then I should see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "100.0" + And the field "Weight of Test assignment six" matches value "0.0" + And the field "Weight of Test assignment seven" matches value "0.0" + + @javascript + Scenario: Setting several but not all grade item weights to over one hundred each. + + When I set the field "Override weight of Test assignment five" to "1" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Weight of Test assignment five" to "150" + And I set the field "Weight of Test assignment six" to "150" + And I press "Save changes" + + Then I should see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "50.000" + And the field "Weight of Test assignment six" matches value "50.000" + And the field "Weight of Test assignment seven" matches value "0.0" + + @javascript + Scenario: Grade items weights are normalised when all grade item weights are overridden (sum exactly 100). Extra credit is set to zero. + + When I follow "Edit assign Test assignment seven" + And I set the field "Extra credit" to "1" + And I press "Save changes" + And the field "Weight of Test assignment five" matches value "66.667" + And the field "Weight of Test assignment six" matches value "33.333" + And the field "Weight of Test assignment seven" matches value "50.0" + And I set the field "Override weight of Test assignment five" to "1" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Weight of Test assignment five" to "60" + And I set the field "Weight of Test assignment six" to "40" + And I press "Save changes" + + Then I should see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "60.000" + And the field "Weight of Test assignment six" matches value "40.000" + And the field "Weight of Test assignment seven" matches value "0.0" + And I follow "Reset weights of Sub category 1" + And the field "Weight of Test assignment five" matches value "66.667" + And the field "Weight of Test assignment six" matches value "33.333" + And the field "Weight of Test assignment seven" matches value "50.0" + + @javascript + Scenario: Grade items weights are normalised when all grade item weights are overridden (sum over 100). Extra credit is set to zero. + + When I follow "Edit assign Test assignment seven" + And I set the field "Extra credit" to "1" + And I press "Save changes" + And I set the field "Override weight of Test assignment five" to "1" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Weight of Test assignment five" to "60" + And I set the field "Weight of Test assignment six" to "50" + And I press "Save changes" + + Then I should see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "54.545" + And the field "Weight of Test assignment six" matches value "45.455" + And the field "Weight of Test assignment seven" matches value "0.0" + And I follow "Reset weights of Sub category 1" + And the field "Weight of Test assignment five" matches value "66.667" + And the field "Weight of Test assignment six" matches value "33.333" + And the field "Weight of Test assignment seven" matches value "50.0" + + @javascript + Scenario: Grade items weights are normalised when all grade item weights are overridden (sum under 100). Extra credit is set to zero. + + When I follow "Edit assign Test assignment seven" + And I set the field "Extra credit" to "1" + And I press "Save changes" + And I set the field "Override weight of Test assignment five" to "1" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Weight of Test assignment five" to "40" + And I set the field "Weight of Test assignment six" to "30" + And I press "Save changes" + + Then I should see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "57.143" + And the field "Weight of Test assignment six" matches value "42.857" + And the field "Weight of Test assignment seven" matches value "0.0" + And I follow "Reset weights of Sub category 1" + And the field "Weight of Test assignment five" matches value "66.667" + And the field "Weight of Test assignment six" matches value "33.333" + And the field "Weight of Test assignment seven" matches value "50.0" + + @javascript + Scenario: Grade items weights are normalised when not all grade item weights are overridden. Extra credit is set respectful to non-overridden items. + + When I follow "Edit assign Test assignment seven" + And I set the field "Extra credit" to "1" + And I press "Save changes" + And I set the field "Override weight of Test assignment five" to "1" + And I set the field "Weight of Test assignment five" to "40" + And I press "Save changes" + + Then I should see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "40.00" + And the field "Weight of Test assignment six" matches value "60.000" + And the field "Weight of Test assignment seven" matches value "90.0" + And I follow "Reset weights of Sub category 1" + And the field "Weight of Test assignment five" matches value "66.667" + And the field "Weight of Test assignment six" matches value "33.333" + And the field "Weight of Test assignment seven" matches value "50.0" + + @javascript + Scenario: The extra credit grade item weight is overridden to a figure over one hundred and then + the grade item is set to normal. + + When I follow "Edit assign Test assignment seven" + And I set the field "Extra credit" to "1" + And I press "Save changes" + And I set the field "Override weight of Test assignment seven" to "1" + And I set the field "Weight of Test assignment seven" to "105" + And I press "Save changes" + Then I should not see "Your weights have been adjusted to total 100." + And the field "Weight of Test assignment five" matches value "66.667" + And the field "Weight of Test assignment six" matches value "33.333" + And the field "Weight of Test assignment seven" matches value "105.0" + And I follow "Edit assign Test assignment seven" + And I set the field "Extra credit" to "0" + And I press "Save changes" + And I should see "Your weights have been adjusted to total 100." + + And the field "Weight of Test assignment five" matches value "0.0" + And the field "Weight of Test assignment six" matches value "0.0" + And the field "Weight of Test assignment seven" matches value "100.0" + + @javascript + Scenario: The extra credit grade item weight is overridden to a figure over one hundred and then + the grade category is reset. + + When I follow "Edit assign Test assignment seven" + And I set the field "Extra credit" to "1" + And I press "Save changes" + And I set the field "Override weight of Test assignment seven" to "1" + And I set the field "Weight of Test assignment seven" to "105" + And I press "Save changes" + + And I follow "Reset weights of Sub category 1" + And the field "Weight of Test assignment five" matches value "66.667" + And the field "Weight of Test assignment six" matches value "33.333" + And the field "Weight of Test assignment seven" matches value "50.0" + + @javascript + Scenario: Two out of three grade items weights are overridden and one is not. + The overridden grade item weights total over one hundred. + + Given I set the field "Override weight of Test assignment six" to "1" + And I set the field "Override weight of Test assignment seven" to "1" + And I set the field "Weight of Test assignment six" to "55" + And I set the field "Weight of Test assignment seven" to "65" + And I press "Save changes" + And I should see "Your weights have been adjusted to total 100." + + Then the field "Weight of Test assignment five" matches value "0.0" + And the field "Weight of Test assignment six" matches value "45.833" + And the field "Weight of Test assignment seven" matches value "54.167" + + @javascript + Scenario: With one grade item set as extra credit, when I reset the weights for a category they return to the natural weights. + + When I follow "Edit assign Test assignment five" + And I set the field "Extra credit" to "1" + And I press "Save changes" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Override weight of Test assignment seven" to "1" + And I set the field "Weight of Test assignment six" to "55" + And I set the field "Weight of Test assignment seven" to "40" + And I press "Save changes" + And I follow "Reset weights of Sub category 1" + Then the field "Weight of Test assignment five" matches value "80.0" + And the field "Weight of Test assignment six" matches value "40.0" + And the field "Weight of Test assignment seven" matches value "60.0" diff --git a/grade/tests/behat/grade_scales.feature b/grade/tests/behat/grade_scales.feature new file mode 100644 index 00000000000..3c76991723f --- /dev/null +++ b/grade/tests/behat/grade_scales.feature @@ -0,0 +1,163 @@ +@core @core_grades +Feature: View gradebook when scales are used + In order to use scales to grade activities + As an teacher + I need to be able to view gradebook with scales + + Background: + Given I log in as "admin" + And I set the following administration settings values: + | grade_report_showranges | 1 | + | grade_aggregations_visible | Mean of grades,Weighted mean of grades,Simple weighted mean of grades,Mean of grades (with extra credits),Median of grades,Lowest grade,Highest grade,Mode of grades,Natural | + And I navigate to "Scales" node in "Site administration > Grades" + And I press "Add a new scale" + And I set the following fields to these values: + | Name | Letterscale | + | Scale | F,D,C,B,A | + And I press "Save changes" + And I log out + And the following "courses" exist: + | fullname | shortname | + | Course 1 | C1 | + And the following "users" exist: + | username | firstname | lastname | email | idnumber | + | teacher1 | Teacher | 1 | teacher1@asd.com | t1 | + | student1 | Student | 1 | student1@asd.com | s1 | + | student2 | Student | 2 | student2@asd.com | s2 | + | student3 | Student | 3 | student3@asd.com | s3 | + | student4 | Student | 4 | student4@asd.com | s4 | + | student5 | Student | 5 | student5@asd.com | s5 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + | student2 | C1 | student | + | student3 | C1 | student | + | student4 | C1 | student | + | student5 | C1 | student | + And the following "grade categories" exist: + | fullname | course | + | Sub category 1 | C1 | + And the following "activities" exist: + | activity | course | idnumber | name | intro | gradecategory | + | assign | C1 | a1 | Test assignment one | Submit something! | Sub category 1 | + And I log in as "teacher1" + And I follow "Course 1" + And I follow "Test assignment one" + And I follow "Edit settings" + And I expand all fieldsets + And I set the field "grade[modgrade_type]" to "Scale" + And I set the field "grade[modgrade_scale]" to "Letterscale" + And I press "Save and display" + And I follow "View/grade all submissions" + And I click on "Grade Student 1" "link" in the "Student 1" "table_row" + And I set the field "Grade" to "A" + And I press "Save and show next" + And I set the field "Grade" to "B" + And I press "Save and show next" + And I set the field "Grade" to "C" + And I press "Save and show next" + And I set the field "Grade" to "D" + And I press "Save and show next" + And I set the field "Grade" to "F" + And I press "Save changes" + And I follow "Course 1" + And I follow "Grades" + And I turn editing mode on + + @javascript + Scenario: Test displaying scales in gradebook in aggregation method Natural + When I turn editing mode off + Then the following should exist in the "user-grades" table: + | -1- | -4- | -5- | -6- | + | Student 1 | A | 5.00 | 5.00 | + | Student 2 | B | 4.00 | 4.00 | + | Student 3 | C | 3.00 | 3.00 | + | Student 4 | D | 2.00 | 2.00 | + | Student 5 | F | 1.00 | 1.00 | + And the following should exist in the "user-grades" table: + | -1- | -2- | -3- | -4- | + | Range | F–A | 0.00–5.00 | 0.00–5.00 | + | Overall average | C | 3.00 | 3.00 | + And I follow "User report" + And I set the field "Select all or one user" to "Student 3" + And I click on "Select all or one user" "select" + And the following should exist in the "user-grade" table: + | Grade item | Grade | Range | Percentage | + | Test assignment one | C | F–A | 50.00 % | + | Category totalNatural. | 3.00 | 0–5 | 60.00 % | + | Course totalNatural. | 3.00 | 0–5 | 60.00 % | + And I set the field "jump" to "Set up grades layout" + And the following should exist in the "grade_edit_tree_table" table: + | Name | Max grade | + | Test assignment one | 5.00 | + | Category total | 5.00 | + | Course total | 5.00 | + And I log out + And I log in as "student2" + And I follow "Course 1" + And I follow "Grades" + And the following should exist in the "user-grade" table: + | Grade item | Grade | Range | Percentage | + | Test assignment one | B | F–A | 75.00 % | + | Category totalNatural. | 4.00 | 0–5 | 80.00 % | + | Course totalNatural. | 4.00 | 0–5 | 80.00 % | + + @javascript + Scenario Outline: Test displaying scales in gradebook in all other aggregation methods + When I follow "Edit Course 1" + And I set the field "Aggregation" to "" + And I press "Save changes" + And I follow "Edit Sub category 1" + And I expand all fieldsets + And I set the field "Aggregation" to "" + And I set the field "Category name" to "Sub category ()" + And I set the field "Maximum grade" to "5" + And I set the field "Minimum grade" to "1" + And I press "Save changes" + And I turn editing mode off + Then the following should exist in the "user-grades" table: + | -1- | -4- | -5- | -6- | + | Student 1 | A | 5.00 | | + | Student 2 | B | 4.00 | | + | Student 3 | C | 3.00 | | + | Student 4 | D | 2.00 | | + | Student 5 | F | 1.00 | | + And the following should exist in the "user-grades" table: + | -1- | -2- | -3- | -4- | + | Range | F–A | 1.00–5.00 | 0.00–100.00 | + | Overall average | C | 3.00 | | + And I follow "User report" + And I set the field "Select all or one user" to "Student 3" + And I click on "Select all or one user" "select" + And the following should exist in the "user-grade" table: + | Grade item | Grade | Range | Percentage | + | Test assignment one | C | F–A | 50.00 % | + | Category total. | 3.00 | 1–5 | 50.00 % | + | Course total. | | 0–100 | | + And I set the field "jump" to "Set up grades layout" + And the following should exist in the "grade_edit_tree_table" table: + | Name | Max grade | + | Test assignment one | A (5) | + | Category total | | + | Course total | | + And I log out + And I log in as "student2" + And I follow "Course 1" + And I follow "Grades" + And the following should exist in the "user-grade" table: + | Grade item | Grade | Range | Percentage | + | Test assignment one | B | F–A | 75.00 % | + | Category total. | 4.00 | 1–5 | 75.00 % | + | Course total. | | 0–100 | | + + Examples: + | aggregation | coursetotal1 | coursetotal2 | coursetotal3 | coursetotal4 | coursetotal5 |overallavg | courseperc2 | courseperc3 | + | Mean of grades | 100.00 | 75.00 | 50.00 | 25.00 | 0.00 | 50.00 | 75.00 % | 50.00 % | + | Weighted mean of grades | - | - | - | - | - | - | - | - | + | Simple weighted mean of grades | 100.00 | 75.00 | 50.00 | 25.00 | 0.00 | 50.00 | 75.00 % | 50.00 % | + | Mean of grades (with extra credits) | 100.00 | 75.00 | 50.00 | 25.00 | 0.00 | 50.00 | 75.00 % | 50.00 % | + | Median of grades | 100.00 | 75.00 | 50.00 | 25.00 | 0.00 | 50.00 | 75.00 % | 50.00 % | + | Lowest grade | 100.00 | 75.00 | 50.00 | 25.00 | 0.00 | 50.00 | 75.00 % | 50.00 % | + | Highest grade | 100.00 | 75.00 | 50.00 | 25.00 | 0.00 | 50.00 | 75.00 % | 50.00 % | + | Mode of grades | 100.00 | 75.00 | 50.00 | 25.00 | 0.00 | 50.00 | 75.00 % | 50.00 % | diff --git a/grade/tests/behat/grade_view.feature b/grade/tests/behat/grade_view.feature index 8f14b2b9bf0..cece51a1aac 100644 --- a/grade/tests/behat/grade_view.feature +++ b/grade/tests/behat/grade_view.feature @@ -17,6 +17,10 @@ Feature: We can enter in grades and view reports from the gradebook | user | course | role | | teacher1 | C1 | editingteacher | | student1 | C1 | student | + And I log in as "admin" + And I set the following administration settings values: + | grade_aggregations_visible | Mean of grades,Weighted mean of grades,Simple weighted mean of grades,Mean of grades (with extra credits),Median of grades,Lowest grade,Highest grade,Mode of grades,Natural | + And I log out And I log in as "teacher1" And I follow "Course 1" And I turn editing mode on @@ -68,23 +72,23 @@ Feature: We can enter in grades and view reports from the gradebook | Grade item | Grade | Range | Percentage | | Test assignment name 1 | 80.00 | 0–100 | 80.00 % | | Test assignment name 2 | 90.00 | 0–100 | 90.00 % | - | Course total | 85.00 | 0–100 | 85.00 % | + | Course totalNatural. | 170.00 | 0–200 | 85.00 % | And the following should not exist in the "user-grade" table: | Grade item | Grade | Range | Percentage | - | Course total | 90.00 | 0–110 | 90.00 % | + | Course totalNatural. | 90.00 | 0–100 | 90.00 % | And I set the field "Grade report" to "Overview report" - And "C1" row "Grade" column of "overview-grade" table should contain "85.00" + And "C1" row "Grade" column of "overview-grade" table should contain "170.00" And "C1" row "Grade" column of "overview-grade" table should not contain "90.00" @javascript Scenario: We can add a weighting to a grade item and it is displayed properly in the user report - When I set the field "Grade report" to "Full view" - And I set the field "Aggregation" to "Weighted mean of grades" - And I set the following fields to these values: - | Extra credit value for Test assignment name | 0.72 | + When I set the field "Grade report" to "Set up grades layout" + And I set the following settings for grade item "Course 1": + | Aggregation | Weighted mean of grades | + And I set the field "Extra credit value for Test assignment name" to "0.72" And I press "Save changes" And I set the field "Grade report" to "User report" - And I follow "Course grade settings" + And I navigate to "Course grade settings" node in "Grade administration > Settings" And I set the following fields to these values: | Show weightings | Show | And I press "Save changes" @@ -93,12 +97,12 @@ Feature: We can enter in grades and view reports from the gradebook And I follow "Course 1" And I follow "Grades" Then the following should exist in the "user-grade" table: - | Grade item | Weight | Grade | Range | Percentage | - | Test assignment name 1 | 0.72 | 80.00 | 0–100 | 80.00 % | - | Test assignment name 2 | 1.00 | 90.00 | 0–100 | 90.00 % | - | Course total | - | 85.81 | 0–100 | 85.81 % | + | Grade item | Calculated weight | Grade | Range | Percentage | + | Test assignment name 1 | 41.86 % | 80.00 | 0–100 | 80.00 % | + | Test assignment name 2 | 58.14 % | 90.00 | 0–100 | 90.00 % | + | Course totalWeighted mean of grades. | - | 85.81 | 0–100 | 85.81 % | And the following should not exist in the "user-grade" table: - | Grade item | Weight | Percentage | + | Grade item | Calculated weight | Percentage | | Test assignment name 1 | 0.72% | 0.72% | | Test assignment name 2 | 1.00% | 1.00% | | Course total | 1.00% | 1.00% | diff --git a/grade/tests/edittreelib_test.php b/grade/tests/edittreelib_test.php index 051c15559da..aa51b279c59 100644 --- a/grade/tests/edittreelib_test.php +++ b/grade/tests/edittreelib_test.php @@ -93,7 +93,10 @@ class core_grade_edittreelib_testcase extends advanced_testcase { // Make the expected scale text. $scaleitems = null; $scaleitems = explode(',', $scale->scale); - $scalestring = end($scaleitems) . ' (' . count($scaleitems) . ')'; + // Make sure that we expect grademax (displayed in parenthesis) be the same + // as number of items in the scale. + $scalestring = end($scaleitems) . ' (' . + format_float(count($scaleitems), 2) . ')'; $this->assertEquals(GRADE_TYPE_SCALE, $gradeitem->gradetype); $this->assertEquals($scale->id, $gradeitem->scaleid); diff --git a/grade/tests/report_graderlib_test.php b/grade/tests/report_graderlib_test.php index 9faf37eab03..8c390661cdb 100644 --- a/grade/tests/report_graderlib_test.php +++ b/grade/tests/report_graderlib_test.php @@ -121,17 +121,17 @@ class core_grade_report_graderlib_testcase extends advanced_testcase { $this->assertEquals($emptypreferences, $report->collapsed); // Validating preferences set/get for one course. - $report->process_action('c13', 'switch_minus'); + $report->process_action('cg13', 'switch_minus'); $report = $this->create_report($course1); $this->assertEquals(array(13), $report->collapsed['aggregatesonly']); $this->assertEmpty($report->collapsed['gradesonly']); - $report->process_action('c13', 'switch_plus'); + $report->process_action('cg13', 'switch_plus'); $report = $this->create_report($course1); $this->assertEmpty($report->collapsed['aggregatesonly']); $this->assertEquals(array(13), $report->collapsed['gradesonly']); - $report->process_action('c13', 'switch_whole'); + $report->process_action('cg13', 'switch_whole'); $report = $this->create_report($course1); $this->assertEquals($emptypreferences, $report->collapsed); @@ -146,18 +146,18 @@ class core_grade_report_graderlib_testcase extends advanced_testcase { $report1 = $this->create_report($course1); foreach ($course1cats as $catid) { - $report1->process_action('c'.$catid, 'switch_minus'); + $report1->process_action('cg'.$catid, 'switch_minus'); } $report2 = $this->create_report($course2); foreach ($course2cats as $catid) { - $report2->process_action('c'.$catid, 'switch_minus'); - $report2->process_action('c'.$catid, 'switch_plus'); + $report2->process_action('cg'.$catid, 'switch_minus'); + $report2->process_action('cg'.$catid, 'switch_plus'); } $report3 = $this->create_report($course3); foreach ($course3cats as $catid) { - $report3->process_action('c'.$catid, 'switch_minus'); + $report3->process_action('cg'.$catid, 'switch_minus'); if (($i++)%2) { - $report3->process_action('c'.$catid, 'switch_plus'); + $report3->process_action('cg'.$catid, 'switch_plus'); } } @@ -201,7 +201,7 @@ class core_grade_report_graderlib_testcase extends advanced_testcase { set_user_preference('grade_report_grader_collapsed_categories'.$course1->id, json_encode($toobigvalue)); $report1 = $this->create_report($course1); - $report1->process_action('c'.$lastvalue, 'switch_minus'); + $report1->process_action('cg'.$lastvalue, 'switch_minus'); $report1 = $this->create_report($course1); $this->assertEquals($expectedvalue, $report1->collapsed); @@ -218,7 +218,7 @@ class core_grade_report_graderlib_testcase extends advanced_testcase { $toobigvalue['aggregatesonly'][] = $lastcatid; $report1 = $this->create_report($course1); - $report1->process_action('c'.$lastcatid, 'switch_minus'); + $report1->process_action('cg'.$lastcatid, 'switch_minus'); // One last value should be removed from both arrays. $report1 = $this->create_report($course1); diff --git a/grade/tests/reportlib_test.php b/grade/tests/reportlib_test.php index 4ff5240a79d..bade609e25a 100644 --- a/grade/tests/reportlib_test.php +++ b/grade/tests/reportlib_test.php @@ -124,21 +124,26 @@ class core_grade_reportlib_testcase extends advanced_testcase { $result = $report->blank_hidden_total_and_adjust_bounds($course->id, $coursegradeitem, $datagrade + $forumgrade); $this->assertEquals(array('grade' => $datagrade + $forumgrade, 'grademax' => $coursegradeitem->grademax, - 'grademin' => $coursegradeitem->grademin), $result); - + 'grademin' => $coursegradeitem->grademin, + 'aggregationstatus' => 'unknown', + 'aggregationweight' => null), $result); // Should blank the student total as course grade depends on a hidden item. $report->showtotalsifcontainhidden = array($course->id => GRADE_REPORT_HIDE_TOTAL_IF_CONTAINS_HIDDEN); $result = $report->blank_hidden_total_and_adjust_bounds($course->id, $coursegradeitem, $datagrade + $forumgrade); $this->assertEquals(array('grade' => null, 'grademax' => $coursegradeitem->grademax, - 'grademin' => $coursegradeitem->grademin), $result); + 'grademin' => $coursegradeitem->grademin, + 'aggregationstatus' => 'unknown', + 'aggregationweight' => null), $result); // Should return the course total minus the hidden database activity grade. $report->showtotalsifcontainhidden = array($course->id => GRADE_REPORT_SHOW_TOTAL_IF_CONTAINS_HIDDEN); $result = $report->blank_hidden_total_and_adjust_bounds($course->id, $coursegradeitem, $datagrade + $forumgrade); - $this->assertEquals(array('grade' => $forumgrade, + $this->assertEquals(array('grade' => floatval($forumgrade), 'grademax' => $coursegradeitem->grademax, - 'grademin' => $coursegradeitem->grademin), $result); + 'grademin' => $coursegradeitem->grademin, + 'aggregationstatus' => 'unknown', + 'aggregationweight' => null), $result); // Note: we cannot simply hide modules and call $report->blank_hidden_total() again. // It stores grades in a static variable so $report->blank_hidden_total() will return incorrect totals @@ -195,14 +200,18 @@ class core_grade_reportlib_testcase extends advanced_testcase { $result = $report->blank_hidden_total_and_adjust_bounds($course->id, $coursegradeitem, $datagrade + $forumgrade); $this->assertEquals(array('grade' => $datagrade + $forumgrade, 'grademax' => $coursegradeitem->grademax, - 'grademin' => $coursegradeitem->grademin), $result); + 'grademin' => $coursegradeitem->grademin, + 'aggregationstatus' => 'unknown', + 'aggregationweight' => null), $result); // Should blank the student total as course grade depends on a hidden item. $report->showtotalsifcontainhidden = array($course->id => GRADE_REPORT_HIDE_TOTAL_IF_CONTAINS_HIDDEN); $result = $report->blank_hidden_total_and_adjust_bounds($course->id, $coursegradeitem, $datagrade + $forumgrade); $this->assertEquals(array('grade' => null, 'grademax' => $coursegradeitem->grademax, - 'grademin' => $coursegradeitem->grademin), $result); + 'grademin' => $coursegradeitem->grademin, + 'aggregationstatus' => 'unknown', + 'aggregationweight' => null), $result); // Should return the course total minus the hidden activity grades. // They are both hidden so should return null. @@ -210,6 +219,8 @@ class core_grade_reportlib_testcase extends advanced_testcase { $result = $report->blank_hidden_total_and_adjust_bounds($course->id, $coursegradeitem, $datagrade + $forumgrade); $this->assertEquals(array('grade' => null, 'grademax' => $coursegradeitem->grademax, - 'grademin' => $coursegradeitem->grademin), $result); + 'grademin' => $coursegradeitem->grademin, + 'aggregationstatus' => 'unknown', + 'aggregationweight' => null), $result); } } diff --git a/lang/en/deprecated.txt b/lang/en/deprecated.txt index 36f1dd33dd9..c2b5e6a09d2 100644 --- a/lang/en/deprecated.txt +++ b/lang/en/deprecated.txt @@ -4,3 +4,8 @@ hidden,core_portfolio hidden,core_question hidden,core_repository hidden,core_role +categoriesanditems,core_grades +simpleview,core_grades +fullview,core_grades +categoriesedit,core_grades +edittree,core_grades diff --git a/lang/en/grades.php b/lang/en/grades.php index 702e2787eb1..fa0726395a0 100644 --- a/lang/en/grades.php +++ b/lang/en/grades.php @@ -34,12 +34,14 @@ $string['additem'] = 'Add grade item'; $string['addoutcome'] = 'Add an outcome'; $string['addoutcomeitem'] = 'Add outcome item'; $string['addscale'] = 'Add a scale'; +$string['adjustedweight'] = 'Weight adjusted'; $string['aggregateextracreditmean'] = 'Mean of grades (with extra credits)'; $string['aggregatemax'] = 'Highest grade'; $string['aggregatemean'] = 'Mean of grades'; $string['aggregatemedian'] = 'Median of grades'; $string['aggregatemin'] = 'Lowest grade'; $string['aggregatemode'] = 'Mode of grades'; +$string['aggregatenotonlygraded'] = 'Include empty grades'; $string['aggregateonlygraded'] = 'Exclude empty grades'; $string['aggregateonlygraded_help'] = 'An empty grade is a grade which is missing from the gradebook. It may be from an assignment submission which has not yet been graded or from a quiz which has not yet been attempted etc. @@ -48,8 +50,9 @@ $string['aggregateoutcomes'] = 'Include outcomes in aggregation'; $string['aggregateoutcomes_help'] = 'If enabled, outcomes are included in the aggregation. This may result in an unexpected category total.'; $string['aggregatesonly'] = 'Aggregates only'; $string['aggregatesubcats'] = 'Aggregate including subcategories'; +$string['aggregatesubcatsshort'] = 'Include subcategories'; $string['aggregatesubcats_help'] = 'This setting determines whether grades in subcategories are included in the aggregation.'; -$string['aggregatesum'] = 'Sum of grades'; +$string['aggregatesum'] = 'Natural'; $string['aggregateweightedmean'] = 'Weighted mean of grades'; $string['aggregateweightedmean2'] = 'Simple weighted mean of grades'; $string['aggregation'] = 'Aggregation'; @@ -60,15 +63,20 @@ $string['aggregation_help'] = 'The aggregation determines how grades in a catego * Lowest grade * Highest grade * Mode of grades - The grade that occurs the most frequently -* Sum of grades - The sum of all grade values, with scale grades being ignored'; +* Natural - The sum of all grade values scaled by weight'; +$string['aggregationhintnovalue'] = '( Empty )'; +$string['aggregationhintdropped'] = '( Dropped )'; +$string['aggregationhintexcluded'] = '( Excluded )'; +$string['aggregationhintextra'] = '( Extra credit )'; $string['aggregation_link'] = 'grade/aggregation'; $string['aggregationcoef'] = 'Aggregation coefficient'; $string['aggregationcoefextra'] = 'Extra credit'; // for the header of the table at Edit categories and items page -$string['aggregationcoefextra_help'] = 'If the aggregation is Sum of grades or Simple weighted mean and the extra credit checkbox is ticked, the grade item\'s maximum grade is not added to the category\'s maximum grade, resulting in the possibility of achieving the maximum grade (or grades over the maximum if enabled by the site administrator) in the category without having the maximum grade in all the grade items. +$string['aggregationcoefextra_help'] = 'If the aggregation is Natural or Simple weighted mean and the extra credit checkbox is ticked, the grade item\'s maximum grade is not added to the category\'s maximum grade, resulting in the possibility of achieving the maximum grade (or grades over the maximum if enabled by the site administrator) in the category without having the maximum grade in all the grade items. If the aggregation is Mean of grades (with extra credits) and the extra credit is set to a value greater than zero, the extra credit is the factor by which the grade is multiplied before adding it to the total after the computation of the mean.'; $string['aggregationcoefextra_link'] = 'grade/aggregation'; -$string['aggregationcoefextrasum'] = 'Extra credit'; // for the form with checkboxes: Sum of grades or Simple weighted mean +$string['aggregationcoefextrasum'] = 'Extra credit'; // for the form with checkboxes: Natural or Simple weighted mean +$string['aggregationcoefextrasumabbr'] = '+'; $string['aggregationcoefextrasum_help'] = 'If the extra credit checkbox is ticked, the grade item\'s maximum grade is not added to the category\'s maximum grade, resulting in the possibility of achieving the maximum grade (or grades over the maximum if enabled by the site administrator) in the category without having the maximum grade in all the grade items.'; $string['aggregationcoefextrasum_link'] = 'grade/aggregation'; $string['aggregationcoefextraweight'] = 'Extra credit weight'; // for the form with input: Mean of grades (with extra credits) only @@ -77,6 +85,7 @@ $string['aggregationcoefextraweight_link'] = 'grade/aggregation'; $string['aggregationcoefweight'] = 'Item weight'; $string['aggregationcoefweight_help'] = 'The item weight is used in the category aggregation to influence the importance of the item compared with other grade items in the same category.'; $string['aggregationcoefweight_link'] = 'grade/aggregation'; +$string['aggregationofa'] = 'Aggregation of {$a}'; $string['aggregationposition'] = 'Aggregation position'; $string['aggregationposition_help'] = 'This setting determines whether the category and course total columns are displayed first or last in the gradebook reports.'; $string['aggregationsvisible'] = 'Available aggregation types'; @@ -107,8 +116,6 @@ $string['calculationsaved'] = 'Calculation saved'; $string['calculationview'] = 'View calculation'; $string['cannotaccessgroup'] = 'Can not access grades of selected group, sorry.'; $string['categories'] = 'Categories'; -$string['categoriesanditems'] = 'Setup'; -$string['categoriesedit'] = 'Edit setup'; $string['category'] = 'Category'; $string['categoryedit'] = 'Edit category'; $string['categoryname'] = 'Category name'; @@ -119,6 +126,7 @@ $string['combo'] = 'Tabs and Dropdown menu'; $string['compact'] = 'Compact'; $string['componentcontrolsvisibility'] = 'Whether this grade item is hidden is controlled by the activity settings.'; $string['contract'] = 'Contract category'; +$string['contributiontocoursetotal'] = 'Contribution to course total'; $string['controls'] = 'Controls'; $string['courseavg'] = 'Course average'; $string['coursegradecategory'] = 'Course grade category'; @@ -152,6 +160,7 @@ $string['droplow'] = 'Drop the lowest'; $string['droplow_help'] = 'This setting enables a specified number of the lowest grades to be excluded from the aggregation.'; $string['droplowestvalue'] = 'Set drop lowest grade value'; $string['dropped'] = 'Dropped'; +$string['droplowestvalues'] = 'Drop {$a} lowest values'; $string['dropxlowest'] = 'Drop X lowest'; $string['dropxlowestwarning'] = 'Note: If you use drop x lowest the grading assumes that all items in the category have the same point value. If point values differ results will be unpredictable'; $string['duplicatescale'] = 'Duplicate scale'; @@ -164,7 +173,6 @@ $string['editgradeletters'] = 'Edit grade letters'; $string['editoutcome'] = 'Edit outcome'; $string['editoutcomes'] = 'Edit outcomes'; $string['editscale'] = 'Edit scale'; -$string['edittree'] = 'Setup'; $string['editverbose'] = 'Edit {$a->category} {$a->itemmodule} {$a->itemname}'; $string['enableajax'] = 'Enable AJAX'; $string['enableajax_help'] = 'Adds a layer of AJAX functionality to the grader report, simplifying and speeding up common operations. Depends on Javascript being switched on at the user\'s browser level.'; @@ -220,7 +228,6 @@ $string['forelementtypes'] = 'for the selected {$a}'; $string['forstudents'] = 'For students'; $string['full'] = 'Full'; $string['fullmode'] = 'Full view'; -$string['fullview'] = 'Full view'; $string['generalsettings'] = 'General settings'; $string['grade'] = 'Grade'; $string['gradeadministration'] = 'Grade administration'; @@ -388,6 +395,7 @@ $string['itemnamehelp'] = 'The name of this item, pushed in by the module.'; $string['items'] = 'Items'; $string['itemsedit'] = 'Edit grade item'; $string['keephigh'] = 'Keep the highest'; +$string['keephighestvalues'] = 'Keep the {$a} highest values'; $string['keephigh_help'] = 'If set, this option will only keep the X highest grades, X being the selected value for this option.'; $string['keymanager'] = 'Key manager'; $string['lessthanmin'] = 'The grade entered for {$a->itemname} for {$a->username} is less than the minimum allowed'; @@ -462,6 +470,7 @@ $string['nonunlockableverbose'] = 'This grade cannot be unlocked until {$a->item $string['nonweightedpct'] = 'non-weighted %'; $string['nooutcome'] = 'No outcome'; $string['nooutcomes'] = 'Outcome items must be linked to a course outcome, but there are no outcomes for this course. Would you like to add one?'; +$string['nopermissiontoresetweights'] = 'No permission to reset the weights'; $string['nopublish'] = 'Do not publish'; $string['norolesdefined'] = 'No roles defined in Administration > Grades > General settings > Graded roles'; $string['noscales'] = 'Outcomes must be linked to a course scale or global scale, but there are none. Would you like to add one?'; @@ -507,6 +516,7 @@ When a grade is edited in the grader report, the overridden checkbox is ticked a $string['overriddennotice'] = 'Your final grade from this activity was manually adjusted.'; $string['overridesitedefaultgradedisplaytype'] = 'Override site defaults'; $string['overridesitedefaultgradedisplaytype_help'] = 'If ticked, grade letters and boundaries for the course may be set, rather than using the site defaults.'; +$string['overrideweightofa'] = 'Override weight of {$a}'; $string['parentcategory'] = 'Parent category'; $string['pctoftotalgrade'] = '% of total grade'; $string['percent'] = 'Percent'; @@ -560,6 +570,7 @@ $string['reportdefault'] = 'Report default ({$a})'; $string['reportplugins'] = 'Report plugins'; $string['reportsettings'] = 'Report settings'; $string['reprintheaders'] = 'Reprint headers'; +$string['resetweights'] = 'Reset weights of {$a->itemname}'; $string['respectingcurrentdata'] = 'leaving current configuration unmodified'; $string['rowpreviewnum'] = 'Preview rows'; $string['savechanges'] = 'Save changes'; @@ -582,12 +593,15 @@ $string['setgradeletters'] = 'Set grade letters'; $string['setpreferences'] = 'Set preferences'; $string['setting'] = 'Setting'; $string['settings'] = 'Settings'; +$string['setupgradeslayout'] = 'Set up grades layout'; $string['setweights'] = 'Set weights'; $string['showanalysisicon'] = 'Show grade analysis icon'; $string['showanalysisicon_desc'] = 'Whether to show grade analysis icon by default. If the activity module supports it, the grade analysis icon links to a page with more detailed explanation of the grade and how it was obtained.'; $string['showanalysisicon_help'] = 'If the activity module supports it, the grade analysis icon links to a page with more detailed explanation of the grade and how it was obtained.'; $string['showaverage'] = 'Show average'; $string['showaverage_help'] = 'Show the average column? Students may be able to estimate other student\'s grades if the average is calculated from a small number of grades. For performance reasons the average is approximate if it is dependent on any hidden items.'; +$string['showcontributiontocoursetotal'] = 'Show contribution to course total'; +$string['showcontributiontocoursetotal_help'] = 'Show an additional column containing the calculated contribution to the course total?'; $string['showfeedback'] = 'Show feedback'; $string['showfeedback_help'] = 'Show the feedback column?'; $string['showgrade'] = 'Show grades'; @@ -639,7 +653,6 @@ $string['showrank_help'] = 'Show the position of the student in relation to the $string['showuserimage'] = 'Show user profile images'; $string['showuserimage_help'] = 'Whether to show the user\'s profile image next to the name in the grader report.'; $string['showverbose'] = 'Show {$a->category} {$a->itemmodule} {$a->itemname}'; -$string['simpleview'] = 'Simple view'; $string['sitewide'] = 'Site-wide'; $string['sort'] = 'sort'; $string['sortasc'] = 'Sort in ascending order'; @@ -656,6 +669,8 @@ $string['studentsperpagereduced'] = 'Reduced maximum students per page from {$a- $string['subcategory'] = 'Normal category'; $string['submissions'] = 'Submissions'; $string['submittedon'] = 'Submitted: {$a}'; +$string['sumofgradesupgradedgrades'] = 'A recent upgrade has changed the aggregation method "Sum of grades" to "Natural". Please review the grades in this course as it was previously using "Sum of grades".'; +$string['sumofgradesupgradedgradeshidemessage'] = 'Got it'; $string['switchtofullview'] = 'Switch to full view'; $string['switchtosimpleview'] = 'Switch to simple view'; $string['tabs'] = 'Tabs'; @@ -701,18 +716,31 @@ $string['useweighted'] = 'Use weighted'; $string['verbosescales'] = 'Verbose scales'; $string['viewbygroup'] = 'Group'; $string['viewgrades'] = 'View grades'; -$string['warningexcludedsum'] = 'Warning: excluding of grades is not compatible with sum aggregation.'; $string['weight'] = 'weight'; +$string['weight_help'] = 'A value used to determine the relative value of multiple grade items in a category or course.'; $string['weightcourse'] = 'Use weighted grades for course'; $string['weightedascending'] = 'Sort by weighted percent ascending'; $string['weighteddescending'] = 'Sort by weighted percent descending'; +$string['weightoverride'] = 'weight adjustment'; +$string['weightoverride_help'] = 'Uncheck this to reset a grade item weight to its automatically calculated value. Checking this will prevent the weight being automatically adjusted.'; $string['weightedpct'] = 'weighted %'; $string['weightedpctcontribution'] = 'weighted % contribution'; +$string['weightofa'] = 'Weight of {$a}'; $string['weightorextracredit'] = 'Weight or extra credit'; +$string['weight'] = 'Weight'; $string['weights'] = 'Weights'; +$string['weightsadjusted'] = 'Your weights have been adjusted to total 100.'; $string['weightsedit'] = 'Edit weights and extra credits'; -$string['weightuc'] = 'Weight'; +$string['weightuc'] = 'Calculated weight'; $string['writinggradebookinfo'] = 'Writing gradebook settings'; $string['xml'] = 'XML'; $string['yes'] = 'Yes'; $string['yourgrade'] = 'Your grade'; + +// Deprecated since Moodle 2.8 + +$string['categoriesanditems'] = 'Setup'; +$string['categoriesedit'] = 'Edit setup'; +$string['edittree'] = 'Setup'; +$string['fullview'] = 'Full view'; +$string['simpleview'] = 'Simple view'; diff --git a/lib/db/install.xml b/lib/db/install.xml old mode 100644 new mode 100755 index 5716152abef..cb964b687fa --- a/lib/db/install.xml +++ b/lib/db/install.xml @@ -1,5 +1,5 @@ - @@ -1717,6 +1717,7 @@ + @@ -1724,6 +1725,7 @@ + @@ -1764,6 +1766,8 @@ + + @@ -1862,6 +1866,7 @@ + @@ -1869,6 +1874,7 @@ + diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 2ae31fab754..3f6430c041e 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -3837,5 +3837,92 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2014100100.00); } + if ($oldversion < 2014100600.01) { + // Define field aggregationstatus to be added to grade_grades. + $table = new xmldb_table('grade_grades'); + $field = new xmldb_field('aggregationstatus', XMLDB_TYPE_CHAR, '10', null, XMLDB_NOTNULL, null, 'unknown', 'timemodified'); + + // Conditionally launch add field aggregationstatus. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + $field = new xmldb_field('aggregationweight', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, 'aggregationstatus'); + + // Conditionally launch add field aggregationweight. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Define field aggregationcoef2 to be added to grade_items. + $table = new xmldb_table('grade_items'); + $field = new xmldb_field('aggregationcoef2', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'aggregationcoef'); + + // Conditionally launch add field aggregationcoef2. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + $field = new xmldb_field('weightoverride', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'needsupdate'); + + // Conditionally launch add field weightoverride. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Main savepoint reached. + upgrade_main_savepoint(true, 2014100600.01); + } + + if ($oldversion < 2014100600.02) { + + // Define field aggregationcoef2 to be added to grade_items_history. + $table = new xmldb_table('grade_items_history'); + $field = new xmldb_field('aggregationcoef2', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'aggregationcoef'); + + // Conditionally launch add field aggregationcoef2. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Main savepoint reached. + upgrade_main_savepoint(true, 2014100600.02); + } + + if ($oldversion < 2014100600.03) { + + // Define field weightoverride to be added to grade_items_history. + $table = new xmldb_table('grade_items_history'); + $field = new xmldb_field('weightoverride', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'decimals'); + + // Conditionally launch add field weightoverride. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Main savepoint reached. + upgrade_main_savepoint(true, 2014100600.03); + } + if ($oldversion < 2014100600.04) { + // Set flags so we can display a notice on all courses that might + // be affected by the uprade to natural aggregation. + if (!get_config('grades_sumofgrades_upgrade_flagged', 'core')) { + // 13 == SUM_OF_GRADES. + $sql = 'SELECT DISTINCT courseid + FROM {grade_categories} + WHERE aggregation = ?'; + $courses = $DB->get_records_sql($sql, array(13)); + + foreach ($courses as $course) { + set_config('show_sumofgrades_upgrade_' . $course->courseid, 1); + } + + set_config('grades_sumofgrades_upgrade_flagged', 1); + } + + // Main savepoint reached. + upgrade_main_savepoint(true, 2014100600.04); + } + return true; } diff --git a/lib/grade/constants.php b/lib/grade/constants.php index ba9fd82b1fd..64d108c9791 100644 --- a/lib/grade/constants.php +++ b/lib/grade/constants.php @@ -68,7 +68,7 @@ define('GRADE_AGGREGATE_WEIGHTED_MEAN2', 11); define('GRADE_AGGREGATE_EXTRACREDIT_MEAN', 12); /** - * GRADE_AGGREGATE_WEIGHTED_MEAN2 - Use the sum of grades in the category for grade aggregation. + * GRADE_AGGREGATE_WEIGHTED_MEAN2 - Use Natural in the category for grade aggregation. */ define('GRADE_AGGREGATE_SUM', 13); diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index 36dfb760789..f26f8212d01 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -160,6 +160,12 @@ class grade_category extends grade_object { */ public $coefstring = null; + /** + * Static variable storing the result from {@link self::can_apply_limit_rules}. + * @var bool + */ + protected $canapplylimitrules; + /** * Builds this category's path string based on its parents (if any) and its own id number. * This is typically done just before inserting this object in the DB for the first time, @@ -417,6 +423,16 @@ class grade_category extends grade_object { $grade_item->force_regrading(); } + /** + * Something that should be called before we start regrading the whole course. + * + * @return void + */ + public function pre_regrade_final_grades() { + $this->auto_update_weights(); + $this->auto_update_max(); + } + /** * Generates and saves final grades in associated category grade item. * These immediate children must already have their own final grades. @@ -458,9 +474,6 @@ class grade_category extends grade_object { $items = $DB->get_records_sql($sql, $params); } - // needed mostly for SUM agg type - $this->auto_update_max($items); - $grade_inst = new grade_grade(); $fields = 'g.'.implode(',g.', $grade_inst->required_fields); @@ -488,17 +501,29 @@ class grade_category extends grade_object { $grade_values = array(); $excluded = array(); $oldgrade = null; + $grademaxoverrides = array(); + $grademinoverrides = array(); foreach ($rs as $used) { if ($used->userid != $prevuser) { - $this->aggregate_grades($prevuser, $items, $grade_values, $oldgrade, $excluded); + $this->aggregate_grades($prevuser, + $items, + $grade_values, + $oldgrade, + $excluded, + $grademinoverrides, + $grademaxoverrides); $prevuser = $used->userid; $grade_values = array(); $excluded = array(); $oldgrade = null; + $grademaxoverrides = array(); + $grademinoverrides = array(); } $grade_values[$used->itemid] = $used->finalgrade; + $grademaxoverrides[$used->itemid] = $used->rawgrademax; + $grademinoverrides[$used->itemid] = $used->rawgrademin; if ($used->excluded) { $excluded[] = $used->itemid; @@ -508,7 +533,13 @@ class grade_category extends grade_object { $oldgrade = $used; } } - $this->aggregate_grades($prevuser, $items, $grade_values, $oldgrade, $excluded);//the last one + $this->aggregate_grades($prevuser, + $items, + $grade_values, + $oldgrade, + $excluded, + $grademinoverrides, + $grademaxoverrides);//the last one } $rs->close(); @@ -523,9 +554,24 @@ class grade_category extends grade_object { * @param array $grade_values Array of grade values * @param object $oldgrade Old grade * @param array $excluded Excluded + * @param array $grademinoverrides User specific grademin values if different to the grade_item grademin (key is itemid) + * @param array $grademaxoverrides User specific grademax values if different to the grade_item grademax (key is itemid) */ - private function aggregate_grades($userid, $items, $grade_values, $oldgrade, $excluded) { - global $CFG; + private function aggregate_grades($userid, + $items, + $grade_values, + $oldgrade, + $excluded, + $grademinoverrides, + $grademaxoverrides) { + global $CFG, $DB; + + // Remember these so we can set flags on them to describe how they were used in the aggregation. + $novalue = array(); + $dropped = array(); + $extracredit = array(); + $usedweights = array(); + if (empty($userid)) { //ignore first call return; @@ -552,11 +598,29 @@ class grade_category extends grade_object { // can not use own final category grade in calculation unset($grade_values[$this->grade_item->id]); + // Make sure a grade_grade exists for every grade_item. + // We need to do this so we can set the aggregationstatus + // with a set_field call instead of checking if each one exists and creating/updating. + if (!empty($items)) { + list($ggsql, $params) = $DB->get_in_or_equal(array_keys($items), SQL_PARAMS_NAMED, 'g'); - // sum is a special aggregation types - it adjusts the min max, does not use relative values - if ($this->aggregation == GRADE_AGGREGATE_SUM) { - $this->sum_grades($grade, $oldfinalgrade, $items, $grade_values, $excluded); - return; + + $params['userid'] = $userid; + $sql = "SELECT itemid + FROM {grade_grades} + WHERE itemid $ggsql AND userid = :userid"; + $existingitems = $DB->get_records_sql($sql, $params); + + $notexisting = array_diff(array_keys($items), array_keys($existingitems)); + foreach ($notexisting as $itemid) { + $gradeitem = $items[$itemid]; + $gradegrade = new grade_grade(array('itemid' => $itemid, + 'userid' => $userid, + 'rawgrademin' => $gradeitem->grademin, + 'rawgrademax' => $gradeitem->grademax), false); + $gradegrade->grade_item = $gradeitem; + $gradegrade->insert('system'); + } } // if no grades calculation possible or grading not allowed clear final grade @@ -566,44 +630,75 @@ class grade_category extends grade_object { if (!is_null($oldfinalgrade)) { $grade->update('aggregation'); } + $dropped = $grade_values; + $this->set_usedinaggregation($userid, $usedweights, $novalue, $dropped, $extracredit); return; } - $minvisible = (bool) get_config('moodle', 'grade_report_showmin'); - - // normalize the grades first - all will have value 0...1 - // ungraded items are not used in aggregation + // Normalize the grades first - all will have value 0...1 + // ungraded items are not used in aggregation. foreach ($grade_values as $itemid=>$v) { - if (is_null($v)) { - // null means no grade + // If null, it means no grade. + if ($this->aggregateonlygraded) { + unset($grade_values[$itemid]); + // Mark this item as "excluded empty" because it has no grade. + $novalue[$itemid] = 0; + continue; + } + } + if (in_array($itemid, $excluded)) { unset($grade_values[$itemid]); + $dropped[$itemid] = 0; continue; + } + // Check for user specific grade min/max overrides. + $usergrademin = $items[$itemid]->grademin; + $usergrademax = $items[$itemid]->grademax; + if (isset($grademinoverrides[$itemid])) { + $usergrademin = $grademinoverrides[$itemid]; + } + if (isset($grademaxoverrides[$itemid])) { + $usergrademax = $grademaxoverrides[$itemid]; + } + if ($this->aggregation == GRADE_AGGREGATE_SUM) { + // Assume that the grademin is 0 when standardising the score, to preserve negative grades. + $grade_values[$itemid] = grade_grade::standardise_score($v, 0, $usergrademax, 0, 1); + } else { + $grade_values[$itemid] = grade_grade::standardise_score($v, $usergrademin, $usergrademax, 0, 1); + } - } else if (in_array($itemid, $excluded)) { - unset($grade_values[$itemid]); - continue; - } - // If grademin is hidden, set it to 0. - if (!$minvisible and $items[$itemid]->gradetype != GRADE_TYPE_SCALE) { - $items[$itemid]->grademin = 0; - } - $grade_values[$itemid] = grade_grade::standardise_score($v, $items[$itemid]->grademin, $items[$itemid]->grademax, 0, 1); } - // use min grade if grade missing for these types - if (!$this->aggregateonlygraded) { - - foreach ($items as $itemid=>$value) { - - if (!isset($grade_values[$itemid]) and !in_array($itemid, $excluded)) { + // For items with no value, and not excluded - either set their grade to 0 or exclude them. + foreach ($items as $itemid=>$value) { + if (!isset($grade_values[$itemid]) and !in_array($itemid, $excluded)) { + if (!$this->aggregateonlygraded) { $grade_values[$itemid] = 0; + } else { + // We are specifically marking these items as "excluded empty". + $novalue[$itemid] = 0; } } } // limit and sort - $this->apply_limit_rules($grade_values, $items); + $allvalues = $grade_values; + if ($this->can_apply_limit_rules()) { + $this->apply_limit_rules($grade_values, $items); + } + + $moredropped = array_diff($allvalues, $grade_values); + foreach ($moredropped as $drop => $unused) { + $dropped[$drop] = 0; + } + + foreach ($grade_values as $itemid => $val) { + if (self::is_extracredit_used() && ($items[$itemid]->aggregationcoef > 0)) { + $extracredit[$itemid] = 0; + } + } + asort($grade_values, SORT_NUMERIC); // let's see we have still enough grades to do any statistics @@ -614,30 +709,126 @@ class grade_category extends grade_object { if (!is_null($oldfinalgrade)) { $grade->update('aggregation'); } + $this->set_usedinaggregation($userid, $usedweights, $novalue, $dropped, $extracredit); return; } // do the maths - $result = $this->aggregate_values_and_adjust_bounds($grade_values, $items); + $result = $this->aggregate_values_and_adjust_bounds($grade_values, + $items, + $usedweights, + $grademinoverrides, + $grademaxoverrides); $agg_grade = $result['grade']; - if (!$minvisible and $this->grade_item->gradetype != GRADE_TYPE_SCALE) { - $this->grade_item->grademin = 0; + // Set the actual grademin and max to bind the grade properly. + $this->grade_item->grademin = $result['grademin']; + $this->grade_item->grademax = $result['grademax']; + + if ($this->aggregation == GRADE_AGGREGATE_SUM) { + // The natural aggregation always displays the range as coming from 0 for categories. + // However, when we bind the grade we allow for negative values. + $result['grademin'] = 0; } - // recalculate the grade back to requested range + // Recalculate the grade back to requested range. $finalgrade = grade_grade::standardise_score($agg_grade, 0, 1, $result['grademin'], $result['grademax']); - $grade->finalgrade = $this->grade_item->bounded_grade($finalgrade); - // update in db if changed - if (grade_floats_different($grade->finalgrade, $oldfinalgrade)) { + $oldrawgrademin = $grade->rawgrademin; + $oldrawgrademax = $grade->rawgrademax; + $grade->rawgrademin = $result['grademin']; + $grade->rawgrademax = $result['grademax']; + + // Update in db if changed. + if (grade_floats_different($grade->finalgrade, $oldfinalgrade) || + grade_floats_different($grade->rawgrademax, $oldrawgrademax) || + grade_floats_different($grade->rawgrademin, $oldrawgrademin)) { $grade->update('aggregation'); } + $this->set_usedinaggregation($userid, $usedweights, $novalue, $dropped, $extracredit); + return; } + /** + * Set the flags on the grade_grade items to indicate how individual grades are used + * in the aggregation. + * + * @param int $userid The user we have aggregated the grades for. + * @param array $usedweights An array with keys for each of the grade_item columns included in the aggregation. The value are the relative weight. + * @param array $novalue An array with keys for each of the grade_item columns skipped because + * they had no value in the aggregation. + * @param array $dropped An array with keys for each of the grade_item columns dropped + * because of any drop lowest/highest settings in the aggregation. + * @param array $extracredit An array with keys for each of the grade_item columns + * considered extra credit by the aggregation. + */ + private function set_usedinaggregation($userid, $usedweights, $novalue, $dropped, $extracredit) { + global $DB; + + // Included. + if (!empty($usedweights)) { + // The usedweights items are updated individually to record the weights. + foreach ($usedweights as $gradeitemid => $contribution) { + $DB->set_field_select('grade_grades', + 'aggregationweight', + $contribution, + "itemid = :itemid AND userid = :userid", + array('itemid'=>$gradeitemid, 'userid'=>$userid)); + } + + // Now set the status flag for all these weights. + list($itemsql, $itemlist) = $DB->get_in_or_equal(array_keys($usedweights), SQL_PARAMS_NAMED, 'g'); + $itemlist['userid'] = $userid; + + $DB->set_field_select('grade_grades', + 'aggregationstatus', + 'used', + "itemid $itemsql AND userid = :userid", + $itemlist); + } + + // No value. + if (!empty($novalue)) { + list($itemsql, $itemlist) = $DB->get_in_or_equal(array_keys($novalue), SQL_PARAMS_NAMED, 'g'); + + $itemlist['userid'] = $userid; + + $DB->set_field_select('grade_grades', + 'aggregationstatus', + 'novalue', + "itemid $itemsql AND userid = :userid", + $itemlist); + } + + // Dropped. + if (!empty($dropped)) { + list($itemsql, $itemlist) = $DB->get_in_or_equal(array_keys($dropped), SQL_PARAMS_NAMED, 'g'); + + $itemlist['userid'] = $userid; + + $DB->set_field_select('grade_grades', + 'aggregationstatus', + 'dropped', + "itemid $itemsql AND userid = :userid", + $itemlist); + } + // Extra credit. + if (!empty($extracredit)) { + list($itemsql, $itemlist) = $DB->get_in_or_equal(array_keys($extracredit), SQL_PARAMS_NAMED, 'g'); + + $itemlist['userid'] = $userid; + + $DB->set_field_select('grade_grades', + 'aggregationstatus', + 'extra', + "itemid $itemsql AND userid = :userid", + $itemlist); + } + } + /** * Internal function that calculates the aggregated grade and new min/max for this grade category * @@ -646,12 +837,24 @@ class grade_category extends grade_object { * @param array $grade_values An array of values to be aggregated * @param array $items The array of grade_items * @since Moodle 2.6.5, 2.7.2 + * @param array & $weights If provided, will be filled with the normalized weights + * for each grade_item as used in the aggregation. + * Some rules for the weights are: + * 1. The weights must add up to 1 (unless there are extra credit) + * 2. The contributed points column must add up to the course + * final grade and this column is calculated from these weights. + * @param array $grademinoverrides User specific grademin values if different to the grade_item grademin (key is itemid) + * @param array $grademaxoverrides User specific grademax values if different to the grade_item grademax (key is itemid) * @return array containing values for: * 'grade' => the new calculated grade * 'grademin' => the new calculated min grade for the category * 'grademax' => the new calculated max grade for the category */ - public function aggregate_values_and_adjust_bounds($grade_values, $items) { + public function aggregate_values_and_adjust_bounds($grade_values, + $items, + & $weights = null, + $grademinoverrides = array(), + $grademaxoverrides = array()) { $category_item = $this->get_grade_item(); $grademin = $category_item->grademin; $grademax = $category_item->grademax; @@ -662,23 +865,55 @@ class grade_category extends grade_object { $num = count($grade_values); $grades = array_values($grade_values); + // The median gets 100% - others get 0. + if ($weights !== null && $num > 0) { + $count = 0; + foreach ($grade_values as $itemid=>$grade_value) { + if (($num % 2 == 0) && ($count == intval($num/2)-1 || $count == intval($num/2))) { + $weights[$itemid] = 0.5; + } else if (($num % 2 != 0) && ($count == intval(($num/2)-0.5))) { + $weights[$itemid] = 1.0; + } else { + $weights[$itemid] = 0; + } + $count++; + } + } if ($num % 2 == 0) { $agg_grade = ($grades[intval($num/2)-1] + $grades[intval($num/2)]) / 2; - } else { $agg_grade = $grades[intval(($num/2)-0.5)]; } + break; case GRADE_AGGREGATE_MIN: $agg_grade = reset($grade_values); + // Record the weights as used. + if ($weights !== null) { + foreach ($grade_values as $itemid=>$grade_value) { + $weights[$itemid] = 0; + } + } + // Set the first item to 1. + $itemids = array_keys($grade_values); + $weights[reset($itemids)] = 1; break; case GRADE_AGGREGATE_MAX: - $agg_grade = array_pop($grade_values); + // Record the weights as used. + if ($weights !== null) { + foreach ($grade_values as $itemid=>$grade_value) { + $weights[$itemid] = 0; + } + } + // Set the last item to 1. + $itemids = array_keys($grade_values); + $weights[end($itemids)] = 1; + $agg_grade = end($grade_values); break; - case GRADE_AGGREGATE_MODE: // the most common value, average used if multimode + case GRADE_AGGREGATE_MODE: // the most common value // array_count_values only counts INT and STRING, so if grades are floats we must convert them to string $converted_grade_values = array(); @@ -690,6 +925,9 @@ class grade_category extends grade_object { } else { $converted_grade_values[$k] = $gv; } + if ($weights !== null) { + $weights[$k] = 0; + } } $freq = array_count_values($converted_grade_values); @@ -698,6 +936,14 @@ class grade_category extends grade_object { $modes = array_keys($freq, $top); // search for all modes (have the same highest count) rsort($modes, SORT_NUMERIC); // get highest mode $agg_grade = reset($modes); + // Record the weights as used. + if ($weights !== null && $top > 0) { + foreach ($grade_values as $k => $gv) { + if ($gv == $agg_grade) { + $weights[$k] = 1.0 / $top; + } + } + } break; case GRADE_AGGREGATE_WEIGHTED_MEAN: // Weighted average of all existing final grades, weight specified in coef @@ -711,13 +957,22 @@ class grade_category extends grade_object { } $weightsum += $items[$itemid]->aggregationcoef; $sum += $items[$itemid]->aggregationcoef * $grade_value; + if ($weights !== null) { + $weights[$itemid] = $items[$itemid]->aggregationcoef; + } } - if ($weightsum == 0) { $agg_grade = null; } else { $agg_grade = $sum / $weightsum; + if ($weights !== null) { + // Normalise the weights. + foreach ($weights as $itemid => $weight) { + $weights[$itemid] = $weight / $weightsum; + } + } + } break; @@ -739,13 +994,23 @@ class grade_category extends grade_object { } $sum += $weight * $grade_value; } - if ($weightsum == 0) { $agg_grade = $sum; // only extra credits } else { $agg_grade = $sum / $weightsum; } + // Record the weights as used. + if ($weights !== null) { + foreach ($grade_values as $itemid=>$grade_value) { + if ($weightsum > 0) { + $weight = $items[$itemid]->grademax - $items[$itemid]->grademin; + $weights[$itemid] = $weight / $weightsum; + } else { + $weights[$itemid] = 0; + } + } + } break; case GRADE_AGGREGATE_EXTRACREDIT_MEAN: // special average @@ -757,9 +1022,22 @@ class grade_category extends grade_object { if ($items[$itemid]->aggregationcoef == 0) { $num += 1; $sum += $grade_value; + if ($weights !== null) { + $weights[$itemid] = 1; + } } else if ($items[$itemid]->aggregationcoef > 0) { $sum += $items[$itemid]->aggregationcoef * $grade_value; + if ($weights !== null) { + $weights[$itemid] = 1; + } + } + } + if ($weights !== null && $num > 0) { + foreach ($grade_values as $itemid=>$grade_value) { + if ($weights[$itemid]) { + $weights[$itemid] = 1.0 / $num; + } } } @@ -773,17 +1051,86 @@ class grade_category extends grade_object { case GRADE_AGGREGATE_SUM: // Add up all the items. $num = count($grade_values); - // Excluded items can affect the grademax for this grade_item. + $sum = 0; + $sumweights = 0; $grademin = 0; $grademax = 0; - $sum = 0; - foreach ($grade_values as $itemid => $grade_value) { - $sum += $grade_value * ($items[$itemid]->grademax - $items[$itemid]->grademin); - $grademin += $items[$itemid]->grademin; - $grademax += $items[$itemid]->grademax; + foreach ($grade_values as $itemid => $gradevalue) { + // We need to check if the grademax/min was adjusted per user because of excluded items. + $usergrademin = $items[$itemid]->grademin; + $usergrademax = $items[$itemid]->grademax; + if (isset($grademinoverrides[$itemid])) { + $usergrademin = $grademinoverrides[$itemid]; + } + if (isset($grademaxoverrides[$itemid])) { + $usergrademax = $grademaxoverrides[$itemid]; + } + + // Ignore extra credit and items with a weight of 0. + if ($items[$itemid]->aggregationcoef <= 0 && $items[$itemid]->aggregationcoef2 > 0) { + $grademin += $usergrademin; + $grademax += $usergrademax; + $sumweights += $items[$itemid]->aggregationcoef2; + } + } + $userweights = array(); + $totaloverriddenweight = 0; + $totaloverriddengrademax = 0; + // We first need to rescale all manually assigned weights down by the + // percentage of weights missing from the category. + foreach ($grade_values as $itemid => $gradevalue) { + if ($items[$itemid]->weightoverride) { + if ($items[$itemid]->aggregationcoef2 <= 0) { + // Records the weight of 0 and continue. + $userweights[$itemid] = 0; + continue; + } + $userweights[$itemid] = $items[$itemid]->aggregationcoef2 / $sumweights; + $totaloverriddenweight += $userweights[$itemid]; + $usergrademax = $items[$itemid]->grademax; + if (isset($grademaxoverrides[$itemid])) { + $usergrademax = $grademaxoverrides[$itemid]; + } + $totaloverriddengrademax += $usergrademax; + } + } + $nonoverriddenpoints = $grademax - $totaloverriddengrademax; + + // Then we need to recalculate the automatic weights. + foreach ($grade_values as $itemid => $gradevalue) { + if (!$items[$itemid]->weightoverride) { + $usergrademax = $items[$itemid]->grademax; + if (isset($grademaxoverrides[$itemid])) { + $usergrademax = $grademaxoverrides[$itemid]; + } + if ($nonoverriddenpoints > 0) { + $userweights[$itemid] = ($usergrademax/$nonoverriddenpoints) * (1 - $totaloverriddenweight); + } else { + $userweights[$itemid] = 0; + if ($items[$itemid]->aggregationcoef2 > 0) { + // Items with a weight of 0 should not count for the grade max, + // though this only applies if the weight was changed to 0. + $grademax -= $usergrademax; + } + } + } + } + + // We can use our freshly corrected weights below. + foreach ($grade_values as $itemid => $gradevalue) { + $sum += $gradevalue * $userweights[$itemid] * $grademax; + if ($weights !== null) { + $weights[$itemid] = $userweights[$itemid]; + } + } + if ($grademax > 0) { + $agg_grade = $sum / $grademax; // Re-normalize score. + } else { + // Every item in the category is extra credit. + $agg_grade = $sum; + $grademax = $sum; } - $agg_grade = $sum / ($grademax - $grademin); break; case GRADE_AGGREGATE_MEAN: // Arithmetic average of all grade items (if ungraded aggregated, NULL counted as minimum) @@ -791,6 +1138,12 @@ class grade_category extends grade_object { $num = count($grade_values); $sum = array_sum($grade_values); $agg_grade = $sum / $num; + // Record the weights evenly. + if ($weights !== null && $num > 0) { + foreach ($grade_values as $itemid=>$grade_value) { + $weights[$itemid] = 1.0 / $num; + } + } break; } @@ -815,16 +1168,32 @@ class grade_category extends grade_object { } /** - * Some aggregation types may automatically update max grade + * Some aggregation types may need to update their max grade. * - * @param array $items sub items + * This must be executed after updating the weights as it relies on them. + * + * @return void */ - private function auto_update_max($items) { + private function auto_update_max() { + global $DB; if ($this->aggregation != GRADE_AGGREGATE_SUM) { // not needed at all return; } + // Find grade items of immediate children (category or grade items) and force site settings. + $this->load_grade_item(); + $depends_on = $this->grade_item->depends_on(); + + $items = false; + if (!empty($depends_on)) { + list($usql, $params) = $DB->get_in_or_equal($depends_on); + $sql = "SELECT * + FROM {grade_items} + WHERE id $usql"; + $items = $DB->get_records_sql($sql, $params); + } + if (!$items) { if ($this->grade_item->grademax != 0 or $this->grade_item->gradetype != GRADE_TYPE_VALUE) { @@ -844,6 +1213,9 @@ class grade_category extends grade_object { if ($item->aggregationcoef > 0) { // extra credit from this activity - does not affect total continue; + } else if ($item->aggregationcoef2 <= 0) { + // Items with a weight of 0 do not affect the total. + continue; } if ($item->gradetype == GRADE_TYPE_VALUE) { @@ -853,8 +1225,11 @@ class grade_category extends grade_object { $maxes[$item->id] = $item->grademax; // 0 = nograde, 1 = first scale item, 2 = second scale item } } - // apply droplow and keephigh - $this->apply_limit_rules($maxes, $items); + + if ($this->can_apply_limit_rules()) { + // Apply droplow and keephigh. + $this->apply_limit_rules($maxes, $items); + } $max = array_sum($maxes); // update db if anything changed @@ -867,52 +1242,134 @@ class grade_category extends grade_object { } /** - * Internal function for category grades summing + * Recalculate the weights of the grade items in this category. * - * @param grade_grade $grade The grade item - * @param float $oldfinalgrade Old Final grade - * @param array $items Grade items - * @param array $grade_values Grade values - * @param array $excluded Excluded + * The category total is not updated here, a further call to + * {@link self::auto_update_max()} is required. + * + * @return void */ - private function sum_grades(&$grade, $oldfinalgrade, $items, $grade_values, $excluded) { - if (empty($items)) { - return null; + private function auto_update_weights() { + if ($this->aggregation != GRADE_AGGREGATE_SUM) { + // This is only required if we are using natural weights. + return; } + $children = $this->get_children(); - // ungraded and excluded items are not used in aggregation - foreach ($grade_values as $itemid=>$v) { + $gradeitem = null; - if (is_null($v)) { - unset($grade_values[$itemid]); + // Calculate the sum of the grademax's of all the items within this category. + $totalnonoverriddengrademax = 0; + $totalgrademax = 0; - } else if (in_array($itemid, $excluded)) { - unset($grade_values[$itemid]); + // Out of 1, how much weight has been manually overriden by a user? + $totaloverriddenweight = 0; + $totaloverriddengrademax = 0; + + // Has every assessment in this category been overridden? + $automaticgradeitemspresent = false; + // Does the grade item require normalising? + $requiresnormalising = false; + + // This array keeps track of the id and weight of every grade item that has been overridden. + $overridearray = array(); + foreach ($children as $sortorder => $child) { + $gradeitem = null; + + if ($child['type'] == 'item') { + $gradeitem = $child['object']; + } else if ($child['type'] == 'category') { + $gradeitem = $child['object']->load_grade_item(); + } + + // Record the ID and the weight for this grade item. + $overridearray[$gradeitem->id] = array(); + $overridearray[$gradeitem->id]['extracredit'] = intval($gradeitem->aggregationcoef); + $overridearray[$gradeitem->id]['weight'] = $gradeitem->aggregationcoef2; + $overridearray[$gradeitem->id]['weightoverride'] = intval($gradeitem->weightoverride); + // If this item has had its weight overridden then set the flag to true, but + // only if all previous items were also overridden. Note that extra credit items + // are counted as overridden grade items. + if (!$gradeitem->weightoverride && $gradeitem->aggregationcoef == 0) { + $automaticgradeitemspresent = true; + } + + if ($gradeitem->aggregationcoef > 0) { + // An extra credit grade item doesn't contribute to $totaloverriddengrademax. + continue; + } else if ($gradeitem->weightoverride > 0 && $gradeitem->aggregationcoef2 <= 0) { + // An overriden item that defines a weight of 0 does not contribute to $totaloverriddengrademax. + continue; + } + + $totalgrademax += $gradeitem->grademax; + if ($gradeitem->weightoverride > 0) { + $totaloverriddenweight += $gradeitem->aggregationcoef2; + $totaloverriddengrademax += $gradeitem->grademax; } } - // use 0 if grade missing, droplow used and aggregating all items - if (!$this->aggregateonlygraded and !empty($this->droplow)) { + // Initialise this variable (used to keep track of the weight override total). + $normalisetotal = 0; + // Keep a record of how much the override total is to see if it is above 100. It it is then we need to set the + // other weights to zero and normalise the others. + $overriddentotal = 0; + // If the overridden weight total is higher than 1 then set the other untouched weights to zero. + $setotherweightstozero = false; + // Total up all of the weights. + foreach ($overridearray as $gradeitemdetail) { + // If the grade item has extra credit, then don't add it to the normalisetotal. + if (!$gradeitemdetail['extracredit']) { + $normalisetotal += $gradeitemdetail['weight']; + } + if ($gradeitemdetail['weightoverride'] && !$gradeitemdetail['extracredit']) { + // Add overriden weights up to see if they are greater than 1. + $overriddentotal += $gradeitemdetail['weight']; + } + } + if ($overriddentotal > 1) { + // Make sure that this catergory of weights gets normalised. + $requiresnormalising = true; + // The normalised weights are only the overridden weights, so we just use the total of those. + $normalisetotal = $overriddentotal; + } - foreach ($items as $itemid=>$value) { + $totalnonoverriddengrademax = $totalgrademax - $totaloverriddengrademax; - if (!isset($grade_values[$itemid]) and !in_array($itemid, $excluded)) { - $grade_values[$itemid] = 0; + reset($children); + foreach ($children as $sortorder => $child) { + $gradeitem = null; + + if ($child['type'] == 'item') { + $gradeitem = $child['object']; + } else if ($child['type'] == 'category') { + $gradeitem = $child['object']->load_grade_item(); + } + + if (!$gradeitem->weightoverride) { + // Calculations with a grade maximum of zero will cause problems. Just set the weight to zero. + if ($totaloverriddenweight >= 1 || $totalnonoverriddengrademax == 0 || $gradeitem->grademax == 0) { + // There is no more weight to distribute. + $gradeitem->aggregationcoef2 = 0; + } else { + // Calculate this item's weight as a percentage of the non-overridden total grade maxes + // then convert it to a proportion of the available non-overriden weight. + $gradeitem->aggregationcoef2 = ($gradeitem->grademax/$totalnonoverriddengrademax) * + (1 - $totaloverriddenweight); } + $gradeitem->update(); + } else if ((!$automaticgradeitemspresent && $normalisetotal != 1) || ($requiresnormalising)) { + // Just divide the overriden weight for this item against the total weight override of all + // items in this category. + if ($normalisetotal == 0) { + $gradeitem->aggregationcoef2 = 0; + } else { + $gradeitem->aggregationcoef2 = $overridearray[$gradeitem->id]['weight'] / $normalisetotal; + } + // Update the grade item to reflect these changes. + $gradeitem->update(); } } - - $this->apply_limit_rules($grade_values, $items); - - $sum = array_sum($grade_values); - $grade->finalgrade = $this->grade_item->bounded_grade($sum); - - // update in db if changed - if (grade_floats_different($grade->finalgrade, $oldfinalgrade)) { - $grade->update('aggregation'); - } - - return; } /** @@ -1013,6 +1470,70 @@ class grade_category extends grade_object { } } + /** + * Returns whether or not we can apply the limit rules. + * + * There are cases where drop lowest or keep highest should not be used + * at all. This method will determine whether or not this logic can be + * applied considering the current setup of the category. + * + * @return bool + */ + public function can_apply_limit_rules() { + if ($this->canapplylimitrules !== null) { + return $this->canapplylimitrules; + } + + // Set it to be supported by default. + $this->canapplylimitrules = true; + + // Natural aggregation. + if ($this->aggregation == GRADE_AGGREGATE_SUM) { + $canapply = true; + + // Check until one child breaks the rules. + $gradeitems = $this->get_children(); + $validitems = 0; + $lastweight = null; + $lastmaxgrade = null; + foreach ($gradeitems as $gradeitem) { + $gi = $gradeitem['object']; + + if ($gradeitem['type'] == 'category') { + // Sub categories are not allowed because they can have dynamic weights/maxgrades. + $canapply = false; + break; + } + + if ($gi->aggregationcoef > 0) { + // Extra credit items are not allowed. + $canapply = false; + break; + } + + if ($lastweight !== null && $lastweight != $gi->aggregationcoef2) { + // One of the weight differs from another item. + $canapply = false; + break; + } + + if ($lastmaxgrade !== null && $lastmaxgrade != $gi->grademax) { + // One of the max grade differ from another item. This is not allowed for now + // because we could be end up with different max grade between users for this category. + $canapply = false; + break; + } + + $lastweight = $gi->aggregationcoef2; + $lastmaxgrade = $gi->grademax; + } + + $this->canapplylimitrules = $canapply; + } + + return $this->canapplylimitrules; + } + /** * Returns true if category uses extra credit of any kind * @@ -1109,7 +1630,7 @@ class grade_category extends grade_object { $this->coefstring = 'aggregationcoefextraweight'; } else if ($this->aggregation == GRADE_AGGREGATE_SUM) { - $this->coefstring = 'aggregationcoefextrasum'; + $this->coefstring = 'aggregationcoefextraweightsum'; } else { $this->coefstring = 'aggregationcoef'; @@ -1437,6 +1958,31 @@ class grade_category extends grade_object { } } + /** + * Describe the aggregation settings for this category so the reports make more sense. + * + * @return string description + */ + public function get_description() { + $allhelp = array(); + $aggrstrings = grade_helper::get_aggregation_strings(); + $allhelp[] = $aggrstrings[$this->aggregation]; + + if ($this->droplow && $this->can_apply_limit_rules()) { + $allhelp[] = get_string('droplowestvalues', 'grades', $this->droplow); + } + if ($this->keephigh && $this->can_apply_limit_rules()) { + $allhelp[] = get_string('keephighestvalues', 'grades', $this->keephigh); + } + if (!$this->aggregateonlygraded) { + $allhelp[] = get_string('aggregatenotonlygraded', 'grades'); + } + if ($this->aggregatesubcats) { + $allhelp[] = get_string('aggregatesubcatsshort', 'grades'); + } + return implode('. ', $allhelp) . '.'; + } + /** * Sets this category's parent id * diff --git a/lib/grade/grade_grade.php b/lib/grade/grade_grade.php index 279af7ce830..be9ee405b1c 100644 --- a/lib/grade/grade_grade.php +++ b/lib/grade/grade_grade.php @@ -49,7 +49,8 @@ class grade_grade extends grade_object { */ public $required_fields = array('id', 'itemid', 'userid', 'rawgrade', 'rawgrademax', 'rawgrademin', 'rawscaleid', 'usermodified', 'finalgrade', 'hidden', 'locked', - 'locktime', 'exported', 'overridden', 'excluded', 'timecreated', 'timemodified'); + 'locktime', 'exported', 'overridden', 'excluded', 'timecreated', + 'timemodified', 'aggregationstatus', 'aggregationweight'); /** * Array of optional fields with default values (these should match db defaults) @@ -159,6 +160,17 @@ class grade_grade extends grade_object { */ public $timemodified = null; + /** + * Aggregation status flag. Can be one of 'unknown', 'dropped', 'novalue' or 'used'. + * @var string $aggregationstatus + */ + public $aggregationstatus = 'unknown'; + + /** + * Aggregation weight is the specific weight used in the aggregation calculation for this grade. + * @var float $aggregationweight + */ + public $aggregationweight = null; /** * Returns array of grades for given grade_item+users @@ -285,6 +297,46 @@ class grade_grade extends grade_object { return $this->timecreated; } + /** + * Returns the weight this grade contributed to the aggregated grade + * + * @return float|null + */ + public function get_aggregationweight() { + return $this->aggregationweight; + } + + /** + * Set aggregationweight. + * + * @param float $aggregationweight + * @return void + */ + public function set_aggregationweight($aggregationweight) { + $this->aggregationweight = $aggregationweight; + $this->update(); + } + + /** + * Returns the info on how this value was used in the aggregated grade + * + * @return string One of 'dropped', 'excluded', 'novalue', 'used' or 'extra' + */ + public function get_aggregationstatus() { + return $this->aggregationstatus; + } + + /** + * Set aggregationstatus flag + * + * @param string $aggregationstatus + * @return void + */ + public function set_aggregationstatus($aggregationstatus) { + $this->aggregationstatus = $aggregationstatus; + $this->update(); + } + /** * Returns timestamp when last graded, null if no grade present * @@ -620,6 +672,9 @@ class grade_grade extends grade_object { * unknown => list of item ids that may be affected by hiding (with the calculated grade as the value) * altered => list of item ids that are definitely affected by hiding (with the calculated grade as the value) * alteredgrademax => for each item in altered or unknown, the new value of the grademax + * alteredgrademin => for each item in altered or unknown, the new value of the grademin + * alteredgradestatus => for each item with a modified status - the value of the new status + * alteredgradeweight => for each item with a modified weight - the value of the new weight */ public static function get_hiding_affected(&$grade_grades, &$grade_items) { global $CFG; @@ -634,6 +689,8 @@ class grade_grade extends grade_object { $altered = array(); // altered grades $alteredgrademax = array(); // Altered grade max values. $alteredgrademin = array(); // Altered grade min values. + $alteredaggregationstatus = array(); // Altered aggregation status. + $alteredaggregationweight = array(); // Altered aggregation weight. $dependencydepth = array(); $hiddenfound = false; @@ -663,8 +720,12 @@ class grade_grade extends grade_object { return array('unknown' => array(), 'altered' => array(), 'alteredgrademax' => array(), - 'alteredgrademin' => array()); + 'alteredgrademin' => array(), + 'alteredaggregationstatus' => array(), + 'alteredaggregationweight' => array()); } + // This line ensures that $dependencydepth has the same number of items as $todo. + $dependencydepth = array_intersect_key($dependencydepth, array_flip($todo)); // We need to resort the todo list by the dependency depth. This guarantees we process the leaves, then the branches. array_multisort($dependencydepth, $todo); @@ -724,6 +785,8 @@ class grade_grade extends grade_object { foreach ($values as $itemid=>$value) { if ($grade_grades[$itemid]->is_excluded()) { unset($values[$itemid]); + $alteredaggregationstatus[$itemid] = 'excluded'; + $alteredaggregationweight[$itemid] = null; continue; } // The grade min/max may have been altered by hiding. @@ -742,6 +805,8 @@ class grade_grade extends grade_object { foreach ($values as $itemid=>$value) { if (is_null($value)) { unset($values[$itemid]); + $alteredaggregationstatus[$itemid] = 'novalue'; + $alteredaggregationweight[$itemid] = null; } } } else { @@ -753,7 +818,21 @@ class grade_grade extends grade_object { } // limit and sort + $allvalues = $values; $grade_category->apply_limit_rules($values, $grade_items); + + $moredropped = array_diff($allvalues, $values); + foreach ($moredropped as $drop => $unused) { + $alteredaggregationstatus[$drop] = 'dropped'; + $alteredaggregationweight[$drop] = null; + } + + foreach ($values as $itemid => $val) { + if ($grade_category->is_extracredit_used() && ($grade_items[$itemid]->aggregationcoef > 0)) { + $alteredaggregationstatus[$itemid] = 'extra'; + } + } + asort($values, SORT_NUMERIC); // let's see we have still enough grades to do any statistics @@ -765,7 +844,8 @@ class grade_grade extends grade_object { continue; } - $adjustedgrade = $grade_category->aggregate_values_and_adjust_bounds($values, $grade_items); + $usedweights = array(); + $adjustedgrade = $grade_category->aggregate_values_and_adjust_bounds($values, $grade_items, $usedweights); // recalculate the rawgrade back to requested range $finalgrade = grade_grade::standardise_score($adjustedgrade['grade'], @@ -774,6 +854,13 @@ class grade_grade extends grade_object { $adjustedgrade['grademin'], $adjustedgrade['grademax']); + foreach ($usedweights as $itemid => $weight) { + if (!isset($alteredaggregationstatus[$itemid])) { + $alteredaggregationstatus[$itemid] = 'used'; + } + $alteredaggregationweight[$itemid] = $weight; + } + $finalgrade = $grade_items[$do]->bounded_grade($finalgrade); $alteredgrademin[$do] = $adjustedgrade['grademin']; $alteredgrademax[$do] = $adjustedgrade['grademax']; @@ -798,7 +885,9 @@ class grade_grade extends grade_object { return array('unknown' => $unknown, 'altered' => $altered, 'alteredgrademax' => $alteredgrademax, - 'alteredgrademin' => $alteredgrademin); + 'alteredgrademin' => $alteredgrademin, + 'alteredaggregationstatus' => $alteredaggregationstatus, + 'alteredaggregationweight' => $alteredaggregationweight); } /** @@ -923,5 +1012,17 @@ class grade_grade extends grade_object { // Pass information on to completion system $completion->inform_grade_changed($cm, $this->grade_item, $this, $deleted); - } + } + + /** + * Get some useful information about how this grade_grade is reflected in the aggregation + * for the grade_category. For example this could be an extra credit item, and it could be + * dropped because it's in the X lowest or highest. + * + * @return array(status, weight) - A keyword and a numerical weight that represents how this grade was included in the aggregation. + */ + function get_aggregation_hint() { + return array('status' => $this->get_aggregationstatus(), + 'weight' => $this->get_aggregationweight()); + } } diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index 26791469c40..6fc05cfe434 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -50,8 +50,8 @@ class grade_item extends grade_object { public $required_fields = array('id', 'courseid', 'categoryid', 'itemname', 'itemtype', 'itemmodule', 'iteminstance', 'itemnumber', 'iteminfo', 'idnumber', 'calculation', 'gradetype', 'grademax', 'grademin', 'scaleid', 'outcomeid', 'gradepass', 'multfactor', 'plusfactor', 'aggregationcoef', - 'sortorder', 'display', 'decimals', 'hidden', 'locked', 'locktime', 'needsupdate', 'timecreated', - 'timemodified'); + 'aggregationcoef2', 'sortorder', 'display', 'decimals', 'hidden', 'locked', 'locktime', + 'needsupdate', 'weightoverride', 'timecreated', 'timemodified'); /** * The course this grade_item belongs to. @@ -199,11 +199,17 @@ class grade_item extends grade_object { public $plusfactor = 0; /** - * Aggregation coeficient used for weighted averages + * Aggregation coeficient used for weighted averages or extra credit * @var float $aggregationcoef */ public $aggregationcoef = 0; + /** + * Aggregation coeficient used for weighted averages only + * @var float $aggregationcoef2 + */ + public $aggregationcoef2 = 0; + /** * Sorting order of the columns. * @var int $sortorder @@ -240,6 +246,11 @@ class grade_item extends grade_object { */ public $needsupdate = 1; + /** + * If set, the grade item's weight has been overridden by a user and should not be automatically adjusted. + */ + public $weightoverride = 0; + /** * Cached dependson array * @var array An array of cached grade item dependencies. @@ -277,6 +288,7 @@ class grade_item extends grade_object { $this->multfactor = grade_floatval($this->multfactor); $this->plusfactor = grade_floatval($this->plusfactor); $this->aggregationcoef = grade_floatval($this->aggregationcoef); + $this->aggregationcoef2 = grade_floatval($this->aggregationcoef2); return parent::update($source); } @@ -306,13 +318,15 @@ class grade_item extends grade_object { $multfactordiff = grade_floats_different($db_item->multfactor, $this->multfactor); $plusfactordiff = grade_floats_different($db_item->plusfactor, $this->plusfactor); $acoefdiff = grade_floats_different($db_item->aggregationcoef, $this->aggregationcoef); + $acoefdiff2 = grade_floats_different($db_item->aggregationcoef2, $this->aggregationcoef2); + $weightoverride = grade_floats_different($db_item->weightoverride, $this->weightoverride); $needsupdatediff = !$db_item->needsupdate && $this->needsupdate; // force regrading only if setting the flag first time $lockeddiff = !empty($db_item->locked) && empty($this->locked); // force regrading only when unlocking return ($calculationdiff || $categorydiff || $gradetypediff || $grademaxdiff || $grademindiff || $scaleiddiff || $outcomeiddiff || $multfactordiff || $plusfactordiff || $needsupdatediff - || $lockeddiff || $acoefdiff || $locktimediff); + || $lockeddiff || $acoefdiff || $acoefdiff2 || $weightoverride || $locktimediff); } /** @@ -1282,6 +1296,19 @@ class grade_item extends grade_object { } } + /** + * A grade item can return a more detailed description which will be added to the header of the column/row in some reports. + * + * @return string description + */ + public function get_description() { + if ($this->is_course_item() || $this->is_category_item()) { + $categoryitem = $this->load_item_category(); + return $categoryitem->get_description(); + } + return ''; + } + /** * Sets this item's categoryid. A generic method shared by objects that have a parent id of some kind. * diff --git a/lib/gradelib.php b/lib/gradelib.php index 75a6f20df17..f7e4b5c0f70 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -1044,6 +1044,25 @@ function grade_regrade_final_grades($courseid, $userid=null, $updated_item=null) } } + // Categories might have to run some processing before we fetch the grade items. + // This gives them a final opportunity to update and mark their children to be updated. + // We need to work on the children categories up to the parent ones, so that, for instance, + // if a category total is updated it will be reflected in the parent category. + $cats = grade_category::fetch_all(array('courseid' => $courseid)); + $flatcattree = array(); + foreach ($cats as $cat) { + if (!isset($flatcattree[$cat->depth])) { + $flatcattree[$cat->depth] = array(); + } + $flatcattree[$cat->depth][] = $cat; + } + krsort($flatcattree); + foreach ($flatcattree as $depth => $cats) { + foreach ($cats as $cat) { + $cat->pre_regrade_final_grades(); + } + } + $grade_items = grade_item::fetch_all(array('courseid'=>$courseid)); $depends_on = array(); diff --git a/lib/tests/behat/behat_general.php b/lib/tests/behat/behat_general.php index 9f8dc9392c6..a4ef1c82133 100644 --- a/lib/tests/behat/behat_general.php +++ b/lib/tests/behat/behat_general.php @@ -992,7 +992,7 @@ class behat_general extends behat_base { * @Then /^"(?P[^"]*)" row "(?P[^"]*)" column of "(?P[^"]*)" table should contain "(?P[^"]*)"$/ * @throws ElementNotFoundException * @param string $row row text which will be looked in. - * @param string $column column text to search + * @param string $column column text to search (or numeric value for the column position) * @param string $table table id/class/caption * @param string $value text to check. */ @@ -1004,42 +1004,41 @@ class behat_general extends behat_base { $valueliteral = $this->getSession()->getSelectorsHandler()->xpathLiteral($value); $columnliteral = $this->getSession()->getSelectorsHandler()->xpathLiteral($column); - // Header can be in thead or tbody (first row), following xpath should work. - $theadheaderxpath = "thead/tr[1]/th[(normalize-space(.)=" . $columnliteral . " or a[normalize-space(text())=" . - $columnliteral . "])]"; - $tbodyheaderxpath = "tbody/tr[1]/td[(normalize-space(.)=" . $columnliteral . " or a[normalize-space(text())=" . - $columnliteral . "])]"; + if (preg_match('/^-?(\d+)-?$/', $column, $columnasnumber)) { + // Column indicated as a number, just use it as position of the column. + $columnpositionxpath = "/child::*[position() = {$columnasnumber[1]}]"; + } else { + // Header can be in thead or tbody (first row), following xpath should work. + $theadheaderxpath = "thead/tr[1]/th[(normalize-space(.)=" . $columnliteral . " or a[normalize-space(text())=" . + $columnliteral . "])]"; + $tbodyheaderxpath = "tbody/tr[1]/td[(normalize-space(.)=" . $columnliteral . " or a[normalize-space(text())=" . + $columnliteral . "])]"; - // Check if column exists. - $columnheaderxpath = $tablexpath . "[" . $theadheaderxpath . " | " . $tbodyheaderxpath . "]"; - $columnheader = $this->getSession()->getDriver()->find($columnheaderxpath); - if (empty($columnheader)) { - $columnexceptionmsg = $column . '" in table "' . $table . '"'; - throw new ElementNotFoundException($this->getSession(), 'Column', null, $columnexceptionmsg); + // Check if column exists. + $columnheaderxpath = $tablexpath . "[" . $theadheaderxpath . " | " . $tbodyheaderxpath . "]"; + $columnheader = $this->getSession()->getDriver()->find($columnheaderxpath); + if (empty($columnheader)) { + $columnexceptionmsg = $column . '" in table "' . $table . '"'; + throw new ElementNotFoundException($this->getSession(), "\n$columnheaderxpath\n\n".'Column', null, $columnexceptionmsg); + } + // Following conditions were considered before finding column count. + // 1. Table header can be in thead/tr/th or tbody/tr/td[1]. + // 2. First column can have th (Gradebook -> user report), so having lenient sibling check. + $columnpositionxpath = "/child::*[position() = count(" . $tablexpath . "/" . $theadheaderxpath . + "/preceding-sibling::*) + 1]"; } // Check if value exists in specific row/column. // Get row xpath. $rowxpath = $tablexpath."/tbody/tr[th[normalize-space(.)=" . $rowliteral . "] | td[normalize-space(.)=" . $rowliteral . "]]"; - // Following conditions were considered before finding column count. - // 1. Table header can be in thead/tr/th or tbody/tr/td[1]. - // 2. First column can have th (Gradebook -> user report), so having lenient sibling check. - $columnpositionxpath = "/child::*[position() = count(" . $tablexpath . "/" . $theadheaderxpath . - "/preceding-sibling::*) + 1]"; $columnvaluexpath = $rowxpath . $columnpositionxpath . "[contains(normalize-space(.)," . $valueliteral . ")]"; + // Looks for the requested node inside the container node. $coumnnode = $this->getSession()->getDriver()->find($columnvaluexpath); if (empty($coumnnode)) { - // Check if tbody/tr[1] contains header selector. - $columnpositionxpath = "/child::*[position() = count(" . $tablexpath . "/" . $tbodyheaderxpath . - "/preceding-sibling::*) + 1]"; - $columnvaluexpath = $rowxpath . $columnpositionxpath . "[contains(normalize-space(.)," . $valueliteral . ")]"; - $coumnnode = $this->getSession()->getDriver()->find($columnvaluexpath); - if (empty($coumnnode)) { - $locatorexceptionmsg = $value . '" in "' . $row . '" row with column "' . $column; - throw new ElementNotFoundException($this->getSession(), 'Column value', null, $locatorexceptionmsg); - } + $locatorexceptionmsg = $value . '" in "' . $row . '" row with column "' . $column; + throw new ElementNotFoundException($this->getSession(), "\n$columnvaluexpath\n\n".'Column value', null, $locatorexceptionmsg); } } @@ -1071,6 +1070,10 @@ class behat_general extends behat_base { * Checks that the provided value exist in table. * More info in http://docs.moodle.org/dev/Acceptance_testing#Providing_values_to_steps. * + * First row may contain column headers or numeric indexes of the columns + * (syntax -1- is also considered to be column index). Column indexes are + * useful in case of multirow headers and/or presence of cells with colspan. + * * @Then /^the following should exist in the "(?P[^"]*)" table:$/ * @throws ExpectationException * @param string $table name of table @@ -1081,10 +1084,14 @@ class behat_general extends behat_base { public function following_should_exist_in_the_table($table, TableNode $data) { $datahash = $data->getHash(); - foreach ($datahash as $value) { - $row = array_shift($value); - foreach ($value as $column => $value) { - $this->row_column_of_table_should_contain($row, $column, $table, $value); + foreach ($datahash as $row) { + $firstcell = null; + foreach ($row as $column => $value) { + if ($firstcell === null) { + $firstcell = $value; + } else { + $this->row_column_of_table_should_contain($firstcell, $column, $table, $value); + } } } } diff --git a/lib/upgrade.txt b/lib/upgrade.txt index 339eebe13f6..ce1cbf5e3f8 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -16,6 +16,9 @@ information provided here is intended especially for developers. * Scheduled tasks have gained support for syntax to introduce variability when a task will run across installs. When a when hour or minute are defined as 'R' they will be installed with a random hour/minute value. +* Several classes grade_edit_tree_column_xxx were removed since grades setup page + has been significantly changed. These classes should not be used outside of + gradebook or developers can copy them into their plugins from 2.7 branch. DEPRECATIONS: * completion_info->get_incomplete_criteria() is deprecated and will be removed in Moodle 3.0. diff --git a/mod/quiz/tests/behat/completion_condition_attempts_used.feature b/mod/quiz/tests/behat/completion_condition_attempts_used.feature index d1684dd6404..8befe227c1a 100644 --- a/mod/quiz/tests/behat/completion_condition_attempts_used.feature +++ b/mod/quiz/tests/behat/completion_condition_attempts_used.feature @@ -49,12 +49,12 @@ Feature: Set a quiz to be marked complete when the student uses all attempts all | Feedback for the response 'False'. | So you think it is false | And I follow "Course 1" And I follow "Grades" - And I follow "Simple view" + And I navigate to "Set up grades layout" node in "Grade administration > Settings" And I follow "Edit quiz Test quiz name" Then I should see "Edit grade item" And I set the field "gradepass" to "5" And I press "Save changes" - And I should see "Simple view" + And I should see "Set up grades layout" Then I log out And I log in as "student1" diff --git a/mod/quiz/tests/behat/completion_condition_passing_grade.feature b/mod/quiz/tests/behat/completion_condition_passing_grade.feature index 90c18c63171..aeee71ab2c0 100644 --- a/mod/quiz/tests/behat/completion_condition_passing_grade.feature +++ b/mod/quiz/tests/behat/completion_condition_passing_grade.feature @@ -48,13 +48,13 @@ Feature: Set a quiz to be marked complete when the student passes | Feedback for the response 'False'. | So you think it is false | And I follow "Course 1" And I follow "Grades" - And I set the field "jump" to "Simple view" + And I set the field "jump" to "Set up grades layout" And I press "Go" And I follow "Edit quiz Test quiz name" Then I should see "Edit grade item" And I set the field "gradepass" to "5" And I press "Save changes" - Then I should see "Simple view" + Then I should see "Set up grades layout" And I log out And I log in as "student1" diff --git a/pix/t/reset.png b/pix/t/reset.png new file mode 100644 index 00000000000..c9fe4acef75 Binary files /dev/null and b/pix/t/reset.png differ diff --git a/pix/t/reset.svg b/pix/t/reset.svg new file mode 100644 index 00000000000..981a9323821 --- /dev/null +++ b/pix/t/reset.svg @@ -0,0 +1,15 @@ + + + +]> + + + + + diff --git a/theme/base/style/grade.css b/theme/base/style/grade.css index d5f096cd445..f94424e7c48 100644 --- a/theme/base/style/grade.css +++ b/theme/base/style/grade.css @@ -72,3 +72,7 @@ #page-grade-edit-outcome-course .courseoutcomes td { text-align:center; } + +.path-grade-edit-tree table.setup-grades .column-select { + text-align: center; +} diff --git a/theme/bootstrapbase/less/moodle/grade.less b/theme/bootstrapbase/less/moodle/grade.less index 859d95eff25..1c0cd479cbd 100644 --- a/theme/bootstrapbase/less/moodle/grade.less +++ b/theme/bootstrapbase/less/moodle/grade.less @@ -230,3 +230,7 @@ } } } + +.path-grade-edit-tree table.setup-grades .column-select { + text-align: center; +} diff --git a/theme/bootstrapbase/style/moodle.css b/theme/bootstrapbase/style/moodle.css index 4dcdf97c34c..65d953d6449 100644 --- a/theme/bootstrapbase/style/moodle.css +++ b/theme/bootstrapbase/style/moodle.css @@ -6,4 +6,4 @@ * 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;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}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{width:auto\9;height:auto;max-width:100%;-ms-interpolation-mode:bicubic}img{vertical-align:middle;border:0}#map_canvas img,.google-maps 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,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}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}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#0070a8;text-decoration:none}a:hover,a:focus{color:#003d5c;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:180px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:200px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;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;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-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 .control-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 .control-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 .control-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:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.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;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{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:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 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 input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:180px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:200px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:200px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:200px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th: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,.table-bordered tbody:first-child tr:first-child>th: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 tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-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 tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.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-topright: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 td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("[[pix:theme|glyphicons-halflings]]");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.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:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("[[pix:theme|glyphicons-halflings-white]]")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#00699e;background-image:-moz-linear-gradient(top,#0070a8,#005f8f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0070a8),to(#005f8f));background-image:-webkit-linear-gradient(top,#0070a8,#005f8f);background-image:-o-linear-gradient(top,#0070a8,#005f8f);background-image:linear-gradient(to bottom,#0070a8,#005f8f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0070a8',endColorstr='#ff005f8f',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#00699e;background-image:-moz-linear-gradient(top,#0070a8,#005f8f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0070a8),to(#005f8f));background-image:-webkit-linear-gradient(top,#0070a8,#005f8f);background-image:-o-linear-gradient(top,#0070a8,#005f8f);background-image:linear-gradient(to bottom,#0070a8,#005f8f);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0070a8',endColorstr='#ff005f8f',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-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-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#005aa8;*background-color:#0038a8;background-image:-moz-linear-gradient(top,#0070a8,#0038a8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0070a8),to(#0038a8));background-image:-webkit-linear-gradient(top,#0070a8,#0038a8);background-image:-o-linear-gradient(top,#0070a8,#0038a8);background-image:linear-gradient(to bottom,#0070a8,#0038a8);background-repeat:repeat-x;border-color:#0038a8 #0038a8 #001e5c;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0070a8',endColorstr='#ff0038a8',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#0038a8;*background-color:#002f8f}.btn-primary:active,.btn-primary.active{background-color:#002775 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;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;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-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;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-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;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-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;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#0070a8;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#003d5c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.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,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#0038a8}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#0070a8}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a{background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs>.active>a:not([href]),.nav-tabs>.active>a:not([href]):hover,.nav-tabs>.active>a:not([href]):focus{color:#555;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,.nav-pills>.active>a:focus{color:#fff;background-color:#0070a8}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#0070a8;border-bottom-color:#0070a8}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#003d5c;border-bottom-color:#003d5c}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{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,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-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;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-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;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>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 li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.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{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#0070a8;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}h1{font-size:32px}h2{font-size:28px}h3{font-size:24px}h4{font-size:20px}h5{font-size:16px}h6{font-size:12px}h1 small{font-size:24px}h2 small{font-size:20px}h3 small{font-size:16px}h4 small{font-size:12px}@media print{a[href]:after{content:""}}legend{color:#333;border-bottom-color:#ddd}.breadcrumb{background-color:#f5f5f5}.well{border-color:#e3e3e3}sup{vertical-align:super}sub{vertical-align:sub}li.activity.label,.file-picker td.label{display:block;padding:8px;font-size:inherit;line-height:inherit;color:inherit;text-shadow:none;white-space:normal;background:inherit;border:inherit}.file-picker td.label{display:table-cell;text-align:right}.choosercontainer #chooseform .option label{font-size:12px}li.section.hidden,.block.hidden,.block.invisible{display:block;visibility:visible}#turnitintool_style .row,.forumpost .row{margin-left:0!important}#turnitintool_style .row:before,#turnitintool_style .row:after,.forumpost .row:before,.forumpost .row:after{content:none}fieldset.hidden{display:inherit;visibility:inherit}div.c1.btn{display:block;padding:0;margin-bottom:0;font-size:inherit;line-height:inherit;color:inherit;text-align:inherit;text-shadow:inherit;vertical-align:inherit;cursor:default;background-color:inherit;background-image:none;background-repeat:none;border:0;border-radius:none;box-shadow:none}#questionbank+.container{width:auto}img.hide{display:inherit}.icon-bar,img.icon-post,img.icon-info,img.icon-warn,img.icon-pre{background-image:none}.loginbox.twocolumns .signuppanel,.loginbox.twocolumns .signuppanel,.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .loginpanel{padding:0;margin:0}.tooltip{display:inline;opacity:1;filter:alpha(opacity=100)}body:not(.jsenabled) .dropdown:hover>.dropdown-menu{display:block;margin-top:-6px}body:not(.jsenabled) .langmenu:hover>.dropdown-menu,.langmenu.open>.dropdown-menu{display:block;max-height:150px;overflow-y:auto}body{padding-top:60px}.block{min-height:20px;padding:19px;padding:8px 0;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-color:#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)}.block blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.block .header h2{display:block;padding:3px 15px;margin:0;font-size:11px;font-size:1.1em;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase;word-wrap:break-word}.block .header .block_action{float:right;padding:3px 15px}.block .header .block_action>*{margin-left:3px}.block .header .block_action .block-hider-show,.block .header .block_action .block-hider-hide{cursor:pointer}.block .header .block_action .block-hider-show{display:none}.block .header .commands{display:block;padding:3px 15px;clear:both;text-align:right}.block .header .commands>a{margin:0 3px}.block .header .commands .icon img{width:12px;height:12px}.block .header .commands img.actionmenu{width:auto}.block .content{padding:4px 14px;word-wrap:break-word}.block .content h3{display:block;padding:3px 15px;font-size:11px;font-size:1.1em;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.block .content hr{margin:5px 0}.block .content .userpicture{width:16px;height:16px;margin-right:6px}.block .content .list li.listentry{clear:both}.block .content .list .c0{display:inline}.block .content .list .c1{display:inline;margin-left:5px}.block .footer{display:block;padding:3px 5px;margin-bottom:4px}.block.beingmoved{border-style:dashed;border-width:2px}.block.invisible{opacity:.5;filter:alpha(opacity=50)}.block.hidden .header .block_action .block-hider-hide{display:none}.block.hidden .header .block_action .block-hider-show{display:inline}.block.list_block .unlist>li>.column{display:inline-block;*display:inline;*zoom:1}.jsenabled .block.hidden .content{display:none}.blockmovetarget{display:block;height:1em;margin-bottom:20px;border-style:dashed;border-width:2px}.blockannotation{position:relative;top:-10px;margin-bottom:10px}.block_blog_menu #blogsearchquery{max-width:92%}.block_settings #adminsearchquery{max-width:92%}.block_search_forums #searchform_search{width:auto;max-width:92%}.block_calendar_upcoming .content .date{padding-left:22px}.block_calendar_upcoming .content .footer{padding-top:10px;padding-left:0;margin-top:.5em}.block_rss_client .content li{padding:5px;margin-bottom:10px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.block_rss_client .content li .link{font-weight:inherit}.block_rss_client .list li:first-child{border-top-width:1px}.block_news_items .content .newlink{padding-bottom:10px}.block_news_items .content ul li{display:table;width:100%;padding:2px;border-top:1px rgba(0,0,0,0.05) solid}.block_news_items .content ul li .info{display:table-header-group}.block_news_items .content ul li .date{display:inline;font-size:11.9px}.block_news_items .content ul li .name{display:inline;padding-left:1ex;font-size:11.9px}.block_news_items .content .footer{padding-top:10px;padding-left:0}.block_login input#login_username,.block_login input#login_password{width:95%}.block_login .content{max-width:280px;margin-right:auto;margin-left:auto}.block_login input[type="submit"]{margin:10px 0}.block_adminblock .content{display:block;padding:3px 5px}.block_adminblock select{max-width:92%}.dir-rtl .block .header{text-align:right}.dir-rtl .block .header h2{text-align:right}.dir-rtl .block .header .commands{text-align:left}.dir-rtl .block .header .commands>*{margin-right:3px;margin-left:0}.dir-rtl .block .header .block_action{float:left}.dir-rtl .block_calendar_upcoming .content .date{padding-right:22px}.dir-rtl .block_calendar_upcoming .content .footer{padding-right:0}.dir-rtl .block_news_items .content ul li .name{padding-right:1ex}.dir-rtl .block_news_items .content .footer{padding-left:0}form{margin:0}.mform fieldset .advancedbutton{text-align:right}.jsenabled .mform .containsadvancedelements .advanced{display:none}.mform .containsadvancedelements .advanced.show{display:block}.mform fieldset.group{margin-bottom:0}.mform fieldset.error{border:1px solid #b94a48}.mform span.error{display:inline-block;padding:4px;margin-bottom:4px;background-color:#f2dede;border:1px solid #eed3d7;border-radius:4px}.mform fieldset.collapsible legend a.fheader{padding:0 5px 0 20px;margin-left:-20px;background:url([[pix:t/expanded]]) 2px center no-repeat}.dir-rtl .mform fieldset.collapsible legend a.fheader{padding:0 20px 0 5px;margin-right:-20px;margin-left:0;background-position:right center}.mform fieldset.collapsed legend a.fheader{background-image:url([[pix:t/collapsed]])}.dir-rtl .mform fieldset.collapsed legend a.fheader{background-image:url([[pix:t/collapsed_rtl]])}.jsenabled .mform .collapsed .fcontainer{display:none}.mform .fitem .fitemtitle div{display:inline}.loginpanel .error,.mform .error{color:#b94a48}.mform .fdescription.required{margin-left:200px}.mform .fpassword .unmask{display:inline-block;margin-left:.5em}.mform .fpassword .unmask>input{margin:0}.mform .fpassword .unmask>label{display:inline-block}.mform label{display:inline-block}.mform .iconhelp{margin-left:4px}.dir-rtl .mform .iconhelp{margin-right:4px}.mform .ftextarea #id_alltext{width:100%}.mform ul.file-list{padding:0;margin:0;list-style:none}.mform label .req,.mform label .adv{cursor:help}.mform .fcheckbox input{margin-top:5px;margin-left:0}.mform .fitem fieldset.fgroup label,.mform fieldset.fdate_selector label{display:inline;float:none;width:auto}.mform .ftags label.accesshide{position:static;display:block}.mform .ftags select{min-width:22em;margin-bottom:.7em}.mform .helplink img{padding:0;margin:0 .45em}.mform legend .helplink img{margin:0 .2em}.singleselect label{margin-right:.3em}.dir-rtl .singleselect label{margin-right:0;margin-left:.3em}input#id_externalurl{direction:ltr}#portfolio-add-button{display:inline}.form-item,.mform .fitem{margin-bottom:20px;margin-bottom:10px;*zoom:1}.form-item:before,.mform .fitem:before,.form-item:after,.mform .fitem:after{display:table;line-height:0;content:""}.form-item:after,.mform .fitem:after{clear:both}.form-item .form-label,.mform .fitem div.fitemtitle{float:left;width:180px;padding-top:5px;text-align:right}.dir-rtl .form-item .form-label,.dir-rtl .mform .fitem div.fitemtitle{float:right;text-align:left}.form-defaultinfo,.form-label .form-shortname{color:#999}.form-label .form-shortname{display:block;font-size:10.5px}.dir-rtl .form-label .form-shortname{text-align:left}.form-item .form-setting,.form-item .form-description,.mform .fitem .felement,#page-mod-forum-search .c1{*display:inline-block;*padding-left:20px;margin-left:200px;*margin-left:0}.form-item .form-setting:first-child,.form-item .form-description:first-child,.mform .fitem .felement:first-child,#page-mod-forum-search .c1:first-child{*padding-left:200px}.formsettingheading{margin-bottom:0}.form-item .form-description,.felement.fstatic{display:block;padding-top:5px;margin-bottom:10px;color:#595959}.form-item .form-description{padding-top:0}table#form td.submit,.form-buttons,.path-admin .buttons,#fitem_id_submitbutton,.fp-content-center form+div,div.backup-section+form,#fgroup_id_buttonar{padding:19px 20px 20px;padding-left:0;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}table#form td.submit:before,.form-buttons:before,.path-admin .buttons:before,#fitem_id_submitbutton:before,.fp-content-center form+div:before,div.backup-section+form:before,#fgroup_id_buttonar:before,table#form td.submit:after,.form-buttons:after,.path-admin .buttons:after,#fitem_id_submitbutton:after,.fp-content-center form+div:after,div.backup-section+form:after,#fgroup_id_buttonar:after{display:table;line-height:0;content:""}table#form td.submit:after,.form-buttons:after,.path-admin .buttons:after,#fitem_id_submitbutton:after,.fp-content-center form+div:after,div.backup-section+form:after,#fgroup_id_buttonar:after{clear:both}.path-admin .buttons,.form-buttons{padding-left:200px}.dir-rtl table#form td.submit,.dir-rtl .form-buttons,.dir-rtl .path-admin .buttons,.dir-rtl #fitem_id_submitbutton,.dir-rtl .fp-content-center form+div,.dir-rtl div.backup-section+form,.dir-rtl #fgroup_id_buttonar{padding:19px 20px 20px;padding-right:0;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.dir-rtl table#form td.submit:before,.dir-rtl .form-buttons:before,.dir-rtl .path-admin .buttons:before,.dir-rtl #fitem_id_submitbutton:before,.dir-rtl .fp-content-center form+div:before,.dir-rtl div.backup-section+form:before,.dir-rtl #fgroup_id_buttonar:before,.dir-rtl table#form td.submit:after,.dir-rtl .form-buttons:after,.dir-rtl .path-admin .buttons:after,.dir-rtl #fitem_id_submitbutton:after,.dir-rtl .fp-content-center form+div:after,.dir-rtl div.backup-section+form:after,.dir-rtl #fgroup_id_buttonar:after{display:table;line-height:0;content:""}.dir-rtl table#form td.submit:after,.dir-rtl .form-buttons:after,.dir-rtl .path-admin .buttons:after,.dir-rtl #fitem_id_submitbutton:after,.dir-rtl .fp-content-center form+div:after,.dir-rtl div.backup-section+form:after,.dir-rtl #fgroup_id_buttonar:after{clear:both}.dir-rtl .path-admin .buttons,.dir-rtl .form-buttons{padding-right:200px}.form-item .form-setting .form-checkbox.defaultsnext{display:inline-block;margin-top:5px}#adminsettings h3{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}.mform legend a,.mform legend a:hover{color:#333;text-decoration:none}.dir-rtl .mform .fitem .felement{margin-right:30%;margin-left:auto;text-align:right}.dir-rtl .mform .fitem .felement input[name=email],.dir-rtl .mform .fitem .felement input[name=email2],.dir-rtl .mform .fitem .felement input[name=url],.dir-rtl .mform .fitem .felement input[name=idnumber],.dir-rtl .mform .fitem .felement input[name=phone1],.dir-rtl .mform .fitem .felement input[name=phone2]{text-align:left;direction:ltr}.dir-rtl #id_s__pathtodu,.dir-rtl #id_s__aspellpath,.dir-rtl #id_s__pathtodot,.dir-rtl #id_s__supportemail,.dir-rtl #id_s__supportpage,.dir-rtl #id_s__sessioncookie,.dir-rtl #id_s__sessioncookiepath,.dir-rtl #id_s__sessioncookiedomain,.dir-rtl #id_s__proxyhost,.dir-rtl #id_s__proxyuser,.dir-rtl #id_s__proxypassword,.dir-rtl #id_s__proxybypass,.dir-rtl #id_s__jabberhost,.dir-rtl #id_s__jabberserver,.dir-rtl #id_s__jabberusername,.dir-rtl #id_s__jabberpassword,.dir-rtl #id_s__additionalhtmlhead,.dir-rtl #id_s__additionalhtmltopofbody,.dir-rtl #id_s__additionalhtmlfooter,.dir-rtl #id_s__docroot,.dir-rtl #id_s__filter_tex_latexpreamble,.dir-rtl #id_s__filter_tex_latexbackground,.dir-rtl #id_s__filter_tex_pathlatex,.dir-rtl #id_s__filter_tex_pathdvips,.dir-rtl #id_s__filter_tex_pathconvert,.dir-rtl #id_s__blockedip,.dir-rtl #id_s__pathtoclam,.dir-rtl #id_s__quarantinedir,.dir-rtl #id_s__sitepolicy,.dir-rtl #id_s__sitepolicyguest,.dir-rtl #id_s__cronremotepassword,.dir-rtl #id_s__allowedip,.dir-rtl #id_s__blockedip,.dir-rtl #id_s_enrol_meta_nosyncroleids,.dir-rtl #id_s_enrol_ldap_host_url,.dir-rtl #id_s_enrol_ldap_ldapencoding,.dir-rtl #id_s_enrol_ldap_bind_dn,.dir-rtl #id_s_enrol_ldap_bind_pw,.dir-rtl #admin-emoticons .form-text,.dir-rtl #admin-role_mapping input[type=text],.dir-rtl #id_s_enrol_paypal_paypalbusiness,.dir-rtl #id_s_enrol_flatfile_location,#page-admin-setting-enrolsettingsflatfile.dir-rtl input[type=text],#page-admin-setting-enrolsettingsdatabase.dir-rtl input[type=text],#page-admin-auth-db.dir-rtl input[type=text]{direction:ltr}#page-admin-setting-enrolsettingsflatfile.dir-rtl .informationbox{text-align:left;direction:ltr}#page-admin-grade-edit-scale-edit.dir-rtl .error input#id_name{margin-right:170px}#page-grade-edit-outcome-course .courseoutcomes{width:100%;margin-right:auto;margin-left:auto}#page-grade-edit-outcome-course .courseoutcomes td{text-align:center}#installform #id_wwwroot,#installform #id_dirroot,#installform #id_dataroot,#installform #id_dbhost,#installform #id_dbname,#installform #id_dbuser,#installform #id_dbpass,#installform #id_prefix{direction:ltr}.mdl-right>label{display:inline-block}input[type="radio"]+label,input[type="checkbox"]+label{display:inline;padding-left:.2em}input[type="radio"],input[type="checkbox"]{margin-top:-4px;margin-right:7px}.dir-rtl input[type="radio"],.dir-rtl input[type="checkbox"]{margin-right:auto;margin-left:7px}.singleselect{display:inline-block}.singleselect form,.singleselect select{margin:0}.form-item .form-label label{margin-bottom:0}.dir-rtl .form-item .form-label label{text-align:left}.felement.ffilepicker{margin-top:5px}div#dateselector-calendar-panel{z-index:3100}fieldset.coursesearchbox label{display:inline}#region-main .mform:not(.unresponsive) .fitem .fitemtitle label{font-weight:bold}@media(max-width:1199px){body #region-main .mform:not(.unresponsive) .fitem .fitemtitle{display:block;width:100%;margin-top:4px;margin-bottom:4px;text-align:left}body #region-main .mform:not(.unresponsive) .fitem .felement{float:left;width:100%;padding-right:0;padding-left:0;margin-left:0}body #region-main .mform:not(.unresponsive) .fitem .fstatic:empty{display:none}body #region-main .mform:not(.unresponsive) .femptylabel .fitemtitle{display:inline-block;width:auto;margin-right:8px}body #region-main .mform:not(.unresponsive) .femptylabel .felement{display:inline-block;width:auto;padding-top:5px;margin-top:4px}body #region-main .mform:not(.unresponsive) .fitem_fcheckbox .fitemtitle,body #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{display:inline-block;width:auto}body #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{padding:6px}body.dir-rtl #region-main .mform:not(.unresponsive) .femptylabel .fitemtitle{margin-right:0;margin-left:8px}body.dir-rtl #region-main .mform:not(.unresponsive) .fitem .fitemtitle{text-align:right}body.dir-rtl #region-main .mform:not(.unresponsive) .fitem .felement{float:right;padding-right:0;padding-left:0;margin-right:0}body.dir-rtl #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{float:right}}@media(max-width:1474px){.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem .fitemtitle{display:block;width:100%;margin-top:4px;margin-bottom:4px;text-align:left}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem .felement{float:left;width:100%;padding-right:0;padding-left:0;margin-left:0}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem .fstatic:empty{display:none}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .femptylabel .fitemtitle{display:inline-block;width:auto;margin-right:8px}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .femptylabel .felement{display:inline-block;width:auto;padding-top:5px;margin-top:4px}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem_fcheckbox .fitemtitle,.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{display:inline-block;width:auto}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{padding:6px}.used-region-side-pre.used-region-side-post.dir-rtl #region-main .mform:not(.unresponsive) .femptylabel .fitemtitle{margin-right:0;margin-left:8px}.used-region-side-pre.used-region-side-post.dir-rtl #region-main .mform:not(.unresponsive) .fitem .fitemtitle{text-align:right}.used-region-side-pre.used-region-side-post.dir-rtl #region-main .mform:not(.unresponsive) .fitem .felement{float:right;padding-right:0;padding-left:0;margin-right:0}.used-region-side-pre.used-region-side-post.dir-rtl #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{float:right}}#fitem_id_availabilityconditionsjson *[aria-hidden=true]{display:none}#fitem_id_availabilityconditionsjson select,#fitem_id_availabilityconditionsjson input[type=text]{position:relative;top:4px}#fitem_id_availabilityconditionsjson label{display:inline}#fitem_id_availabilityconditionsjson .availability-group{margin-right:8px}#fitem_id_availabilityconditionsjson .availability-item{margin-bottom:6px}#fitem_id_availabilityconditionsjson .availability-none{margin-bottom:4px;margin-left:20px}#fitem_id_availabilityconditionsjson .availability-plugincontrols{display:inline-block;padding:2px 0 0 4px;margin-right:8px;background:none repeat scroll 0 0 #f5f5f5;border:1px solid #eee;border-radius:4px}#fitem_id_availabilityconditionsjson .availability-eye,#fitem_id_availabilityconditionsjson .availability-delete{margin-right:8px}#fitem_id_availabilityconditionsjson .availability-eye[aria-hidden=true]{display:inline;visibility:hidden}#fitem_id_availabilityconditionsjson .availability-list>.availability-eye img{margin-top:12px;vertical-align:top}#fitem_id_availabilityconditionsjson .availability-button{margin-left:15px}#fitem_id_availabilityconditionsjson .availability-childlist>.availability-inner{display:inline-block;padding:6px;margin-bottom:6px;background:#f5f5f5;border:1px solid #eee;border-radius:4px}#fitem_id_availabilityconditionsjson .availability-childlist .availability-childlist>.availability-inner{background:white}#fitem_id_availabilityconditionsjson .availability-connector{margin-bottom:6px;margin-left:20px}.dir-rtl #fitem_id_availabilityconditionsjson .availability-group{margin-right:0;margin-left:8px}.dir-rtl #fitem_id_availabilityconditionsjson .availability-none{margin-right:20px;margin-left:0}.dir-rtl #fitem_id_availabilityconditionsjson .availability-plugincontrols{padding-right:4px;padding-left:0;margin-right:0;margin-left:8px}.dir-rtl #fitem_id_availabilityconditionsjson .availability-eye,.dir-rtl #fitem_id_availabilityconditionsjson .availability-delete{margin-right:0;margin-left:8px}.dir-rtl #fitem_id_availabilityconditionsjson .availability-button{margin-right:15px;margin-left:0}.dir-rtl #fitem_id_availabilityconditionsjson .availability-connector{margin-right:20px;margin-left:0}.mform .error .availability-field{color:#333}.availability-dialogue .moodle-dialogue .moodle-dialogue-bd{padding-right:0;padding-bottom:2px;padding-left:0}.availability-dialogue ul{display:block;margin:0}.availability-dialogue li{display:block;padding:0 0 4px;margin-bottom:4px;clear:both;list-style-type:none;border-bottom:1px solid #eee}.availability-dialogue ul button{float:left;min-width:140px;margin-top:4px;margin-left:1em}.availability-dialogue label{margin-right:1em;margin-bottom:0;margin-left:170px}.availability-dialogue .availability-buttons button{margin-top:4px;margin-right:1em;margin-left:1em}.dir-rtl .availability-dialogue ul button{float:right;margin-right:1em;margin-left:0}.dir-rtl .availability-dialogue label{margin-right:170px;margin-left:1em}textarea[cols],input[size]{width:auto}select{width:auto}.path-mod-forum .forumsearch input,.path-mod-forum .forumsearch .helptooltip{margin:0 3px}.path-mod-forum .forumheaderlist,.path-mod-forum .forumheaderlist td{border:0}.path-mod-forum .forumheaderlist thead .header,.path-mod-forum .forumheaderlist tbody .discussion td{padding-right:.5em;padding-left:.5em;white-space:normal;vertical-align:top}.path-mod-forum .forumheaderlist thead .header{white-space:normal;vertical-align:top}.path-mod-forum .forumheaderlist thead .header.replies{text-align:center}.path-mod-forum .forumheaderlist thead .header.lastpost{text-align:right}.path-mod-forum .forumheaderlist thead .header th.discussionsubscription,.path-mod-forum .forumheaderlist tbody .discussion td.discussionsubscription{width:16px;padding-right:.5em;padding-left:.5em}.path-mod-forum .forumheaderlist .discussion .author,.path-mod-forum .forumheaderlist .discussion .replies,.path-mod-forum .forumheaderlist .discussion .lastpost{white-space:normal}.path-mod-forum .forumheaderlist .discussion .discussionsubscription,.path-mod-forum .forumheaderlist .discussion .replies{text-align:center}.path-mod-forum .forumheaderlist .discussion .topic,.path-mod-forum .forumheaderlist .discussion .discussionsubscription,.path-mod-forum .forumheaderlist .discussion .topic.starter,.path-mod-forum .forumheaderlist .discussion .picture,.path-mod-forum .forumheaderlist .discussion .author,.path-mod-forum .forumheaderlist .discussion .replies,.path-mod-forum .forumheaderlist .discussion .lastpost{vertical-align:top}.path-mod-feedback .feedback_bar_image{height:5px}.forumpost{min-height:20px;padding:19px;padding:6px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-color:#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)}.forumpost blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.forumpost .header{margin-bottom:3px}.forumpost .picture img{margin:3px}.forumpost .picture img.userpicture{margin-right:10px;margin-left:3px}.forumpost .content .posting.fullpost{margin-top:8px}.forumpost .row .topic,.forumpost .row .content-mask,.forumpost .row .options{margin-left:48px}.forumpost .row.side{clear:both}.dir-rtl .forumpost .picture img.userpicture{margin-right:3px;margin-left:10px}.dir-rtl .forumpost .row .topic,.dir-rtl .forumpost .row .content-mask,.dir-rtl .forumpost .row .options{margin-right:48px;margin-left:0}.forumpost .row .left{width:48px}.forumpost .options .commands{margin-left:0}.forumpost .subject{font-weight:bold}.forumsearch input[type=text]{margin-bottom:0!important}#page-mod-forum-discuss .discussioncontrols{width:auto;margin:0}#page-footer{padding:1em 0;margin-top:1em;border-top:2px solid #ddd}.maincalendar .calendarmonth td,.maincalendar .calendarmonth th{border:1px dotted #ddd}.path-grade-report-grader h1{text-align:inherit}#page-mod-chat-gui_basic input#message{max-width:100%}#page-mod-data-view #singleimage{width:auto}.path-mod-data form{margin-top:10px}.template_heading{margin-top:10px}.breadcrumb-button{float:right;margin-top:4px}.breadcrumb-button .singlebutton{float:left;margin-left:4px}.dir-rtl .nav-tabs>li,.dir-rtl .nav-pills>li{float:right}.dir-rtl .navbar .brand{float:right}.navbar-inverse .logininfo a{color:#999}.navbar-inverse .logininfo a:hover{color:#fff;background-color:transparent}.navbar-fixed-top,.navbar-fixed-bottom{z-index:4030}.dir-rtl .breadcrumb-button,.dir-rtl .navbar .btn-navbar{float:left}.dir-rtl .breadcrumb-button .singlebutton{float:right;margin-right:4px}.ie .row-fluid .desktop-first-column{margin-left:0}.langmenu form{margin:0}.container-fluid{max-width:1680px;margin:0 auto}canvas{-ms-touch-action:auto}div#dock{display:none}.path-mod-choice .horizontal .choices{margin:0}.path-mod-choice .horizontal .choices .option{display:inline-block;padding:10px}.path-mod-choice .results .data{white-space:normal}.path-mod-lesson .firstpageoptions{width:60%;min-width:280px;margin:auto}.path-mod-lesson .centerpadded{padding:5px;text-align:center}.path-mod-wiki .wiki_headingtitle,.path-mod-wiki .midpad,.path-mod-wiki .wiki_headingtime{text-align:inherit}.path-mod-wiki .wiki_contentbox{width:100%}.dropdown-menu>li>a{padding:3px 20px 3px 8px}.dir-rtl .dropdown-menu>li>a{padding:3px 8px 3px 20px}.dir-rtl .dropdown-submenu>.dropdown-menu{-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.path-mod-survey .surveytable>tbody>tr:nth-of-type(odd){background-color:transparent}.path-mod-survey .surveytable>tbody>tr:nth-of-type(even){background-color:#f9f9f9}.path-mod-survey .surveytable .rblock label{text-align:center}.path-mod-survey .resultgraph,.path-mod-survey .reportsummary,.path-mod-survey .studentreport,.path-mod-survey .reportbuttons,.path-mod-survey .centerpara{text-align:center}.dir-rtl.path-mod-forum .forumheaderlist thead .header.lastpost{text-align:left}.dir-rtl.path-mod-forum .forumheaderlist .discussion .lastpost{text-align:left}.nav .caret{margin-left:4px}.dir-rtl .nav .caret{margin-right:4px}.nav .divider{width:0;height:40px;overflow:hidden;border-right:1px solid #fff;border-left:1px solid #e5e5e5}.dropdown-menu .divider{width:auto;height:1px;border-right:0 none;border-left:0 none}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax{background-color:#fff}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd-nohd,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd-noft,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-right,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-bottom{border:0}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-right,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-bottom{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-color:#e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-radius:0;-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)}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-right blockquote,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-bottom blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd{background-color:transparent}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell{padding:3px 15px;white-space:nowrap;border:0}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable input,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell input{margin:0 10px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable input#input-message,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell input#input-message{width:45%;margin:auto}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable a,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell a{margin:0 5px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist{padding:10px 5px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list{border-top:1px solid #ddd;border-bottom:1px solid #fff}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list li{padding:5px 10px;border-top:1px solid #fff;border-bottom:1px solid #ddd}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list img{max-width:none;margin-right:8px;border:1px solid #ccc;border-radius:4px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages{margin:20px 25px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-event.course-theme{margin:10px 0;font-size:11.9px;color:#777;text-align:center}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-message.course-theme{padding:4px 10px;margin:10px 0;background-color:#fff;border:1px dotted #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-message.course-theme .time{float:right;font-size:11px;color:#777}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .mdl-chat-my-entry .chat-message.course-theme{background-color:#f6f6f6}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .mdl-chat-my-entry .chat-message.course-theme .user{font-weight:bold}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl .yui-layout-unit-right{padding:0}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl .yui-layout-unit div.yui-layout-bd{text-align:right}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-userlist #users-list img{margin-left:8px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-messages .chat-message.course-theme .time{float:left}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-messages .chat-message.course-theme .user{float:right}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-messages .chat-message.course-theme .chat-message-meta{height:20px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-messages .chat-message.course-theme .text{text-align:right}#page-report-participation-index .participationselectform div label{display:inline;margin:0 5px}#page-report-participation-index.dir-ltr .participationselectform div label[for=menuinstanceid]{margin-left:0}#page-report-participation-index.dir-rtl .participationselectform div label[for=menuinstanceid]{margin-right:0}.path-backup .mform .grouped_settings.section_level{min-height:20px;padding:19px;padding:10px 0 0 0;margin-bottom:20px;clear:both;background-color:#f5f5f5;border:1px solid #e3e3e3;border-color:#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)}.path-backup .mform .grouped_settings.section_level blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.path-backup .mform .grouped_settings{overflow:hidden;clear:both}.path-backup .include_setting,.path-backup .grouped_settings .normal_setting{display:inline-block}.path-backup .include_setting.section_level label{font-weight:bold}.path-backup .mform .fitem .fitemtitle{width:260px}.path-backup .mform .fitem .felement{margin-left:280px}.path-backup .notification.dependencies_enforced{font-weight:bold;color:#b94a48;text-align:center}.path-backup .backup_progress{text-align:center}.path-backup .backup_progress .backup_stage{color:#999}.path-backup .backup_progress .backup_stage.backup_stage_current{font-weight:bold;color:inherit}.path-backup .backup_progress span.backup_stage.backup_stage_complete{color:inherit}#page-backup-restore .filealiasesfailures{background-color:#f2dede}#page-backup-restore .filealiasesfailures .aliaseslist{width:90%;margin:.8em auto;background-color:#fff;border:1px dotted #666}.path-backup .fitem .smallicon{vertical-align:text-bottom}.backup-restore .backup-section>h2.header,.backup-restore .backup-section .backup-sub-section h3{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}.backup-restore .backup-section .noticebox{width:60%;margin:1em auto;text-align:center}.backup-restore .backup-section.settings-section .detail-pair{display:inline-block;*display:inline;width:50%;*zoom:1}.backup-restore .backup-section.settings-section .detail-pair-label{width:65%}.backup-restore .backup-section.settings-section .detail-pair-value{width:25%}.backup-restore .activitytable{min-width:500px}.backup-restore .activitytable .modulename{width:100px}.backup-restore .activitytable .moduleincluded{width:50px}.backup-restore .activitytable .userinfoincluded{width:50px}.backup-restore .detail-pair-label{display:inline-block;*display:inline;width:25%;padding:8px;margin:0;font-weight:bold;text-align:right;vertical-align:top;*zoom:1}.backup-restore .detail-pair-value{display:inline-block;*display:inline;width:65%;padding:8px;margin:0;*zoom:1}.backup-restore .detail-pair-value>.sub-detail{display:block;font-size:11.9px;color:#999}.backup-restore>.singlebutton{text-align:right}.path-backup .mform .fgroup .proceedbutton{float:right;margin-right:5%}.restore-course-search .rcs-results{width:70%;min-width:400px}.restore-course-search .rcs-results table{width:100%;margin:0;border-width:0}.restore-course-search .rcs-results table .no-overflow{max-width:600px}.restore-course-search .rcs-results .paging{padding:3px;margin:0;text-align:left;background-color:#eee}.restore-course-category .rcs-results{width:70%;min-width:400px;margin:5px 0;border:1px solid #ddd}.restore-course-category .rcs-results table{width:100%;margin:0;border-width:0}.restore-course-category .rcs-results table .no-overflow{max-width:600px}.restore-course-category .rcs-results .paging{padding:3px;margin:0;text-align:left;background-color:#eee}.path-backup .wibbler{position:relative;width:500px;min-height:4px;margin:0 auto 10px;border-right:1px solid black;border-bottom:1px solid black;border-left:1px solid black}.path-backup .wibbler .wibble{position:absolute;top:0;right:0;left:0;height:4px}.path-backup .wibbler .state0{background:#eee}.path-backup .wibbler .state1{background:#ddd}.path-backup .wibbler .state2{background:#ccc}.path-backup .wibbler .state3{background:#bbb}.path-backup .wibbler .state4{background:#aaa}.path-backup .wibbler .state5{background:#999}.path-backup .wibbler .state6{background:#888}.path-backup .wibbler .state7{background:#777}.path-backup .wibbler .state8{background:#666}.path-backup .wibbler .state9{background:#555}.path-backup .wibbler .state10{background:#444}.path-backup .wibbler .state11{background:#333}.path-backup .wibbler .state12{background:#222}.path-backup .backup_log{margin-top:2em}.path-backup .backup_log h2{font-size:1em}.path-backup .backup_log_contents{height:300px;padding:10px;overflow-y:scroll;border:1px solid #ddd}table.flexible,.generaltable{width:100%;margin-bottom:20px}table.flexible th,.generaltable th,table.flexible td,.generaltable td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}table.flexible th,.generaltable th{font-weight:bold}table.flexible thead th,.generaltable thead th{vertical-align:bottom}table.flexible caption+thead tr:first-child th,.generaltable caption+thead tr:first-child th,table.flexible caption+thead tr:first-child td,.generaltable caption+thead tr:first-child td,table.flexible colgroup+thead tr:first-child th,.generaltable colgroup+thead tr:first-child th,table.flexible colgroup+thead tr:first-child td,.generaltable colgroup+thead tr:first-child td,table.flexible thead:first-child tr:first-child th,.generaltable thead:first-child tr:first-child th,table.flexible thead:first-child tr:first-child td,.generaltable thead:first-child tr:first-child td{border-top:0}table.flexible tbody+tbody,.generaltable tbody+tbody{border-top:2px solid #ddd}table.flexible .table,.generaltable .table{background-color:#fff}.singlebutton div{display:inline-block;margin-right:5px;margin-bottom:5px;margin-left:5px}#notice .buttons .singlebutton{display:inline-block}.continuebutton{text-align:center}.btn-lineup{margin:0 0 10px 5px}input[name="searchwikicontent"]+input[type="submit"],select+input[type="submit"],input[type="text"]+input[type="button"],input[type="password"]+input[type="submit"],input[type="text"]+button,input[type="text"]+input[type="submit"]{margin:0 0 10px 5px}p.arrow_button{margin-top:5em;text-align:center}p.arrow_button #remove{margin:3em auto 5em}p.arrow_button input{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#addcontrols{margin-top:30px;margin-bottom:3em;text-align:center}#addcontrols label{display:inline}#addcontrols input,#removecontrols input{display:block;width:100%;padding-right:0;padding-left:0;margin-right:auto;margin-left:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}button,input.form-submit,input[type="button"],input[type="submit"],input[type="reset"]{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}button:hover,input.form-submit:hover,input[type="button"]:hover,input[type="submit"]:hover,input[type="reset"]:hover,button:focus,input.form-submit:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus,button:active,input.form-submit:active,input[type="button"]:active,input[type="submit"]:active,input[type="reset"]:active,button.active,input.form-submit.active,input[type="button"].active,input[type="submit"].active,input[type="reset"].active,button.disabled,input.form-submit.disabled,input[type="button"].disabled,input[type="submit"].disabled,input[type="reset"].disabled,button[disabled],input.form-submit[disabled],input[type="button"][disabled],input[type="submit"][disabled],input[type="reset"][disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}button:active,input.form-submit:active,input[type="button"]:active,input[type="submit"]:active,input[type="reset"]:active,button.active,input.form-submit.active,input[type="button"].active,input[type="submit"].active,input[type="reset"].active{background-color:#ccc \9}button:first-child,input.form-submit:first-child,input[type="button"]:first-child,input[type="submit"]:first-child,input[type="reset"]:first-child{*margin-left:0}button:hover,input.form-submit:hover,input[type="button"]:hover,input[type="submit"]:hover,input[type="reset"]:hover,button:focus,input.form-submit:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}button:focus,input.form-submit:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}button.active,input.form-submit.active,input[type="button"].active,input[type="submit"].active,input[type="reset"].active,button:active,input.form-submit:active,input[type="button"]:active,input[type="submit"]:active,input[type="reset"]:active{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)}button.disabled,input.form-submit.disabled,input[type="button"].disabled,input[type="submit"].disabled,input[type="reset"].disabled,button[disabled],input.form-submit[disabled],input[type="button"][disabled],input[type="submit"][disabled],input[type="reset"][disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}button .label,input.form-submit .label,input[type="button"] .label,input[type="submit"] .label,input[type="reset"] .label,button .badge,input.form-submit .badge,input[type="button"] .badge,input[type="submit"] .badge,input[type="reset"] .badge{position:relative;top:-1px}button,input.form-submit,input[type="button"],input[type="submit"],input[type="reset"]{margin:0 0 10px 5px}button.yui3-button.closebutton,button.yui3-button.closebutton:hover{background-position:0 0}input.fp-btn-choose{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.user-enroller-panel .uep-search-results .user .options .enrol{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.user-enroller-panel .uep-search-results .user .options .enrol .label,.user-enroller-panel .uep-search-results .user .options .enrol .badge{top:0}.gradetreebox h4{font-size:14px}.gradetreebox th.cell,.gradetreebox input[type=text]{width:auto}.gradetreebox input[type=text],.gradetreebox select{margin-bottom:0}#page-grade-grading-manage #activemethodselector label{display:inline-block}#page-grade-grading-manage #activemethodselector .helptooltip{margin-right:.5em}#page-grade-grading-manage .actions{display:block;margin-bottom:1em;text-align:center}#page-grade-grading-manage .actions .action{position:relative;display:inline-block;*display:inline;width:150px;padding:4px 12px;padding:11px 19px;padding:1em;margin:.5em;margin-bottom:0;*margin-left:.3em;overflow:hidden;font-size:14px;font-size:17.5px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;vertical-align:top;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border:1px solid #aaa;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-webkit-border-radius:6px;-moz-border-radius:4px;-moz-border-radius:6px;border-radius:4px;border-radius:6px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#page-grade-grading-manage .actions .action:hover,#page-grade-grading-manage .actions .action:focus,#page-grade-grading-manage .actions .action:active,#page-grade-grading-manage .actions .action.active,#page-grade-grading-manage .actions .action.disabled,#page-grade-grading-manage .actions .action[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#page-grade-grading-manage .actions .action:active,#page-grade-grading-manage .actions .action.active{background-color:#ccc \9}#page-grade-grading-manage .actions .action:first-child{*margin-left:0}#page-grade-grading-manage .actions .action:hover,#page-grade-grading-manage .actions .action:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#page-grade-grading-manage .actions .action:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#page-grade-grading-manage .actions .action.active,#page-grade-grading-manage .actions .action:active{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)}#page-grade-grading-manage .actions .action.disabled,#page-grade-grading-manage .actions .action[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#page-grade-grading-manage .actions .action .label,#page-grade-grading-manage .actions .action .badge{position:relative;top:-1px}#page-grade-grading-manage .actions .action .action-icon{position:relative;display:inline-block;width:64px;height:64px}#page-grade-grading-manage .actions .action .action-text{position:relative;top:.4em;font-size:14px}#page-grade-grading-form-rubric-edit .gradingform_rubric_editform .status{font-size:70%}.gradingform_rubric.editor .addlevel input,.gradingform_rubric.editor .addcriterion input{background:#fff none no-repeat top left}.dir-rtl #rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .score{float:right;margin-right:0;margin-left:28px;text-align:right}.dir-rtl #rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete{float:left}.dir-rtl #rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete input{right:auto;left:0}.dir-rtl #rubric-rubric.gradingform_rubric .addcriterion{margin-right:5px;margin-left:0}.dir-rtl #rubric-rubric.gradingform_rubric .addcriterion input{padding-right:26px;padding-left:10px;background-position:right 8px top 8px}.dir-rtl #rubric-rubric.gradingform_rubric .options .option .value{margin-right:5px;margin-left:0}.dir-rtl #rubric-rubric.gradingform_rubric .options .option input{margin-right:5px;margin-left:12px}#rubric-rubric.gradingform_rubric #rubric-criteria{margin-bottom:1em}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .description{padding:6px;vertical-align:top}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .description textarea{height:115px;margin-bottom:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .definition textarea{width:80%;margin-bottom:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .score{position:relative;float:left;margin-right:28px}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .score input{margin-bottom:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level{padding:6px;vertical-align:top}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete{position:relative;float:right;width:32px;height:32px;margin-top:-32px;clear:both}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete input{position:absolute;right:0;bottom:0;display:block;width:24px;height:24px;margin:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete input:hover{background-color:#ddd}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .scorevalue input{float:none;width:2em}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .scorevalue input.hiddenelement,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .scorevalue input.pseudotablink{width:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel{vertical-align:middle}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input{display:inline-block;*display:inline;height:30px;padding:4px 12px;margin-right:5px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-position:0 0;background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:hover,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:focus,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:active,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.active,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.disabled,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:active,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.active{background-color:#ccc \9}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:first-child{*margin-left:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:hover,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.active,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:active{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)}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.disabled,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input .label,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input .badge{position:relative;top:-1px}#rubric-rubric.gradingform_rubric .addcriterion{display:inline-block;*display:inline;padding:4px 12px;padding:0;margin-bottom:0;margin-bottom:1em;margin-left:5px;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#rubric-rubric.gradingform_rubric .addcriterion:hover,#rubric-rubric.gradingform_rubric .addcriterion:focus,#rubric-rubric.gradingform_rubric .addcriterion:active,#rubric-rubric.gradingform_rubric .addcriterion.active,#rubric-rubric.gradingform_rubric .addcriterion.disabled,#rubric-rubric.gradingform_rubric .addcriterion[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#rubric-rubric.gradingform_rubric .addcriterion:active,#rubric-rubric.gradingform_rubric .addcriterion.active{background-color:#ccc \9}#rubric-rubric.gradingform_rubric .addcriterion:first-child{*margin-left:0}#rubric-rubric.gradingform_rubric .addcriterion:hover,#rubric-rubric.gradingform_rubric .addcriterion:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#rubric-rubric.gradingform_rubric .addcriterion:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#rubric-rubric.gradingform_rubric .addcriterion.active,#rubric-rubric.gradingform_rubric .addcriterion:active{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)}#rubric-rubric.gradingform_rubric .addcriterion.disabled,#rubric-rubric.gradingform_rubric .addcriterion[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#rubric-rubric.gradingform_rubric .addcriterion .label,#rubric-rubric.gradingform_rubric .addcriterion .badge{position:relative;top:-1px}#rubric-rubric.gradingform_rubric .addcriterion input{padding-left:26px;margin:0;line-height:inherit;color:inherit;text-shadow:inherit;background:transparent url([[pix:t/add]]) no-repeat 7px 8px;border:0 none}#rubric-rubric.gradingform_rubric .options{clear:both}#rubric-rubric.gradingform_rubric .options .option label{padding:0;margin:0;font-size:inherit;font-weight:normal;line-height:2em;color:inherit;text-shadow:none;background-color:transparent}#rubric-rubric.gradingform_rubric .options .option input{margin-right:12px;margin-left:5px}.transform-test-heading{padding:0;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:11px;font-weight:bold;line-height:36px;text-align:center}body.has_dock #page{padding-left:45px}body.has_dock div#dock{display:inline}#dock{position:fixed;top:0;left:0;width:42px;height:100%;background-color:transparent;border-right:0 none}#dock .nothingdocked{display:none;visibility:hidden}#dock .dockeditem_container{margin-top:68px}#dock .dockeditem .firstdockitem{margin-top:1em}#dock .dockedtitle{display:inline-block;display:block;*display:inline;width:36px;padding:4px 12px;padding:0;margin:3px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#dock .dockedtitle:hover,#dock .dockedtitle:focus,#dock .dockedtitle:active,#dock .dockedtitle.active,#dock .dockedtitle.disabled,#dock .dockedtitle[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#dock .dockedtitle:active,#dock .dockedtitle.active{background-color:#ccc \9}#dock .dockedtitle:first-child{*margin-left:0}#dock .dockedtitle:hover,#dock .dockedtitle:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#dock .dockedtitle:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#dock .dockedtitle.active,#dock .dockedtitle:active{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)}#dock .dockedtitle.disabled,#dock .dockedtitle[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#dock .dockedtitle .label,#dock .dockedtitle .badge{position:relative;top:-1px}#dock .dockedtitle h2{padding:0;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:11px;font-weight:bold;line-height:36px;text-align:center}#dock .dockedtitle .filterrotate{margin-left:8px}#dock .controls{position:absolute;bottom:1em;width:100%;text-align:center}#dock .controls img{cursor:pointer}#dock .editing_move,#dock .moodle-core-dragdrop-draghandle{display:none}#dockeditempanel{position:relative;left:100%;z-index:12000;min-width:200px;padding-left:5px}#dockeditempanel.dockitempanel_hidden{display:none}#dockeditempanel .dockeditempanel_content{width:384px;background-color:#f5f5f5;border:1px solid #d5d5d5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:2px 4px 4px 2px #eee;-moz-box-shadow:2px 4px 4px 2px #eee;box-shadow:2px 4px 4px 2px #eee}#dockeditempanel .dockeditempanel_bd{overflow:auto}#dockeditempanel .dockeditempanel_bd>*{margin:1em}#dockeditempanel .dockeditempanel_bd .block_navigation .block_tree li{overflow:visible}#dockeditempanel .dockeditempanel_hd{padding:.5em 1em;border-bottom:1px solid #fff}#dockeditempanel .dockeditempanel_hd h2{display:block;padding:3px 15px;padding:0;margin:0;font-size:11px;font-size:1.1em;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}#dockeditempanel .dockeditempanel_hd .commands{display:block;text-align:right}#dockeditempanel .dockeditempanel_hd .commands>a,#dockeditempanel .dockeditempanel_hd .commands>span{margin-left:3px;cursor:pointer}#dockeditempanel .dockeditempanel_hd .commands img,#dockeditempanel .dockeditempanel_hd .commands input{margin-right:1px;vertical-align:middle}#dockeditempanel .dockeditempanel_hd .commands .hidepanemicon img{cursor:pointer}.dir-rtl.has_dock #page{padding-right:45px;padding-left:0}.dir-rtl #dock{right:0;left:auto}.dir-rtl #dock .dockedtitle h2{line-height:25px}.dir-rtl #dockeditempanel{right:100%}.dir-rtl #dockeditempanel .dockeditempanel_hd .commands{text-align:left}@-ms-viewport{width:device-width}.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}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}@media(min-width:980px){.dir-rtl .navbar .nav.pull-right,.dir-rtl .navbar .logininfo{float:left}.dir-rtl .navbar .nav{float:right}.dir-rtl .navbar .nav>li{float:right}}@media(min-width:980px) and (max-width:1199px){.form-item .form-label,.mform .fitem div.fitemtitle,.userprofile dl.list dt,.form-horizontal .control-label{width:200px}.form-item .form-setting,.form-item .form-description,.mform .fitem .felement,#page-mod-forum-search .c1,.mform .fdescription.required,.userprofile dl.list dd,.form-horizontal .controls{margin-left:220px}.dir-rtl .form-item .form-setting,.dir-rtl .form-item .form-description,.dir-rtl .mform .fitem .felement,.dir-rtl .mform .fdescription.required,.dir-rtl .userprofile dl.list dd,.dir-rtl .form-horizontal .controls{margin-right:220px}#page-mod-forum-search.dir-lrt .c1{margin-right:220px}.path-admin .buttons,.form-buttons{padding-left:220px}}@media(max-width:873px){.file-picker .fp-repo-area{float:none;width:100%;height:auto;max-height:220px;border:0;y-scroll:auto}.file-picker .fp-repo-items{float:none;width:100%}.file-picker .fp-login-form .fp-login-input label{text-align:left}.dir-rtl .file-picker .fp-login-form .fp-login-input label{text-align:right}.file-picker .fp-content form td{display:block;width:100%;text-align:left}.dir-rtl .file-picker .fp-content form td{text-align:right}.fp-content .mdl-right{text-align:left}.dir-rtl .fp-content .mdl-right{text-align:right}.fp-repo-items .fp-navbar{border-top:1px solid #bbb}.dir-rtl .userprofile dl.list dt,.dir-rtl .userprofile dl.list dd{float:none;margin-right:0;text-align:right}.fp-formset div{height:auto}}@media(min-width:1200px){.path-question #id_answerhdr div.fitem_feditor{padding-right:6px}.loginbox.twocolumns .loginpanel{margin-left:0}.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .signuppanel{width:48.717948717948715%;*width:48.664757228587014%}.form-item .form-label,.mform .fitem div.fitemtitle,.userprofile dl.list dt,.form-horizontal .control-label{width:245px}.form-item .form-setting,.form-item .form-description,.mform .fitem .felement,#page-mod-forum-search .c1,.mform .fdescription.required,.userprofile dl.list dd,.form-horizontal .controls{margin-left:265px}.dir-rtl .form-item .form-setting,.dir-rtl .form-item .form-description,.dir-rtl .mform .fitem .felement,.dir-rtl .mform .fdescription.required,.dir-rtl .userprofile dl.list dd,.dir-rtl .form-horizontal .controls{margin-right:165px}.dir-rtl #page-mod-forum-search .c1{margin-right:265px}.dir-rtl .form-item .form-label,.dir-rtl .mform .fitem div.fitemtitle,.dir-rtl .userprofile dl.list dt,.dir-rtl .form-horizontal .control-label{width:145px}.path-admin .buttons,.form-buttons{padding-left:265px}.dir-rtl .path-admin .buttons,.dir-rtl .form-buttons{padding-right:265px}.empty-region-side-post.used-region-side-pre #region-main.span8,.jsenabled.docked-region-side-post.used-region-side-pre #region-main.span8{width:74.35897435897436%;*width:74.30578286961266%}.empty-region-side-post.used-region-side-pre #block-region-side-pre.span4,.jsenabled.docked-region-side-post.used-region-side-pre #block-region-side-pre.span4{width:23.076923076923077%;*width:23.023731587561375%}}@media(min-width:980px){.loginbox.twocolumns .loginpanel{margin-left:0}.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .signuppanel{width:48.617948717948715%;*width:48.664757228587014%}}@media(min-width:768px) and (max-width:979px){.loginbox.twocolumns .loginpanel{margin-left:0}.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .signuppanel{width:48.61878453038674%;*width:48.56559304102504%}.empty-region-side-post.used-region-side-pre #region-main.span8,.jsenabled.docked-region-side-post.used-region-side-pre #region-main.span8{width:74.30939226519337%;*width:74.25620077583166%}.empty-region-side-post.used-region-side-pre #block-region-side-pre.span4,.jsenabled.docked-region-side-post.used-region-side-pre #block-region-side-pre.span4{width:22.92817679558011%;*width:22.87498530621841%}}@media(max-width:767px){.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .signuppanel{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#page-mod-quiz-edit div.quizcontents,.questionbankwindow.block{float:none;width:100%}#page-mod-quiz-edit #block-region-side-pre,#page-mod-quiz-edit #block-region-side-post{clear:both}}@media(max-width:480px){{}.nav-tabs>li{float:none}.nav-tabs>li>a{margin-right:0}.nav-tabs{border-bottom:0}.nav-tabs>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{border:1px solid #ddd}.nav-tabs>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{z-index:2;border-color:#ddd}.fp-content-center{display:block;vertical-align:top}.course-content ul.topics li.section,.course-content ul.topics li.section .content,.course-content ul.weeks li.section .content,.course-content ul.weeks li.section,.course-content ul.section{padding:0;margin-right:0;margin-left:0}.activityinstance{display:block}.editing .course-content .section .activity{padding-bottom:.2em;margin-bottom:.2em;border-bottom:thin solid #eee}.course-content .section .activity .commands{text-align:right}.jsenabled .choosercontainer #chooseform .alloptions{max-width:100%}.jsenabled .choosercontainer #chooseform .instruction,.jsenabled .choosercontainer #chooseform .typesummary{position:static}.que .info{float:none;width:auto}.que .content{margin:0}.path-mod-choice .horizontal .choices .option{display:block}.path-mod-forum .forumsearch #search{width:120px}.path-mod-forum .forumheaderlist .picture{display:none}}@media(min-width:768px){.row-fluid .desktop-first-column{margin-left:0}#page-navbar .breadcrumb-button{display:inline}}@media(max-width:767px){.row-fluid .desktop-first-column{clear:right}}@media(max-width:767px){.form-item .form-label,.mform .fitem div.fitemtitle{float:none;width:auto;padding-top:0;text-align:left}.form-item .form-label label{display:inline-block;margin-right:.5em}.form-item .form-setting .form-checkbox{margin-top:0}.form-label span.form-shortname{display:inline-block}.form-item .form-setting,.mform .fitem .felement,.path-backup .mform .fitem .felement,.mform .fdescription.required,.form-item .form-description{margin-left:0}table#form td.submit,.form-buttons,#fitem_id_submitbutton,.fp-content-center form+div,#fgroup_id_buttonar,.form-horizontal .form-actions,.fitem_fsubmit .felement.fsubmit{padding-right:10px;padding-left:10px}#helppopupbox{left:0!important;width:auto!important}}@media(min-width:768px) and (max-width:979px){.block_calendar_month .content,.block .minicalendar td{padding-right:0;padding-left:0}}.dir-rtl .dropdown-menu{right:0;left:auto;margin-right:0}.dir-rtl .navbar .nav>li>.dropdown-menu:before{right:9px;left:auto}.dir-rtl .navbar .nav>li>.dropdown-menu:after{right:10px;left:auto}.dir-rtl .dropdown-submenu>a:after{float:left;margin-right:0;margin-left:-10px;border-right-color:#ccc;border-left-color:transparent;border-width:5px 5px 5px 0}.dir-rtl .dropdown-submenu>.dropdown-menu{right:100%;left:auto}@media(max-width:979px){.nav-collapse{height:0}.nav-collapse .nav>li>a{color:#333}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus,.nav-collapse .dropdown-submenu a:focus,.nav-collapse .dropdown-submenu a:hover,.nav-collapse .dropdown-submenu a:active,.nav-collapse .dropdown-menu>li>a:hover,.nav-collapse .dropdown-menu>li>a:focus{color:#333;background-image:none}.nav-collapse.active{height:auto}.path-mod-data .box>table>tbody>tr>td{display:block}.path-mod-forum .forumheaderlist thead .header{font-size:12px;font-weight:normal}.path-mod-forum .forumheaderlist .discussion .author,.path-mod-forum .forumheaderlist .discussion .replies,.path-mod-forum .forumheaderlist .discussion .lastpost{font-size:12px}.path-mod-forum .forumheaderlist .discussion .replies .unread a{padding:0}.navbar .nav-collapse.active{border-top:1px solid #d4d4d4}.navbar .nav-collapse.active.pull-left,.navbar .nav-collapse.active.pull-right{float:none}.navbar .nav-collapse.active>.nav{margin:0}.navbar .nav-collapse.active>.nav>li>a{padding-left:20px;border-radius:0}.navbar .nav-collapse.active>.nav .dropdown-menu{margin:0 0 0 15px}.navbar .nav-collapse.active>.nav .dropdown-menu li>a{border-radius:0}.navbar .nav-collapse.active .nav .dropdown-submenu .dropdown-toggle:after,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu .dropdown-toggle:after{display:inline-block;float:none;width:0;height:0;margin-top:8px;margin-left:4px;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-top-color:#d4d4d4;content:""}.navbar .nav-collapse.active .nav .dropdown-submenu.open>a,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu.open>a{background-color:#f2f2f2}.navbar .nav-collapse.active .nav .dropdown-submenu:hover .dropdown-menu,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover .dropdown-menu{display:none}.navbar .nav-collapse.active .nav .dropdown-submenu:hover.open>a,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover.open>a{background:#f2f2f2}.navbar .nav-collapse.active .nav .dropdown-submenu:hover.open>.dropdown-menu,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover.open>.dropdown-menu,.navbar .nav-collapse.active .nav .dropdown-submenu:hover.open .open>.dropdown-menu,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover.open .open>.dropdown-menu{display:block}.navbar .nav-collapse.active .nav .divider,.navbar .nav-collapse.active .nav .dropdown-menu .divider{display:block;width:auto;height:0;margin:4px 1px;border-top:1px solid #d4d4d4;border-right:0 none;border-bottom:1px solid #fff;border-left:0 none}.navbar.navbar-inverse .nav-collapse.active{border-top-color:#252525}.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-submenu .dropdown-toggle:after,.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-menu .dropdown-submenu .dropdown-toggle:after{border-top-color:#252525}.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-submenu.open>a,.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-menu .dropdown-submenu.open>a{background-color:#111}.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-submenu:hover.open>a,.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover.open>a{background:#111}.dir-rtl .navbar .nav-collapse.active>.nav{margin:0}.dir-rtl .navbar .nav-collapse.active>.nav>li>a{padding-right:20px;padding-left:0}.dir-rtl .navbar .nav-collapse.active>.nav .dropdown-menu{margin:0 15px 0 0}.dir-rtl .navbar .nav-collapse.active .dropdown-menu>li>a{padding:9px 15px}.dir-rtl .navbar .nav-collapse.active .nav .dropdown-submenu .dropdown-toggle:after,.dir-rtl .navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu .dropdown-toggle:after{margin-right:4px;margin-left:0}}@media(max-width:767px){#filesskin .yui3-panel,#filesskin .file-picker.fp-generallayout{left:0;width:100%}.userprofile dl.list dt{float:none;width:auto;clear:none;text-align:left}.userprofile dl.list dd{margin-left:0}#page-mod-wiki-create .mform .fitem div.fitemtitle{float:left}.container{width:auto}.row-fluid{width:100%}.row-fluid .span8.pull-right,.row-fluid .span9.pull-right{float:none}.row{margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.empty-region-side-post.used-region-side-pre #block-region-side-pre.span4,.jsenabled.docked-region-side-post.used-region-side-pre #block-region-side-pre.span4,.empty-region-side-post.used-region-side-pre #region-main.span8,.jsenabled.docked-region-side-post.used-region-side-pre #region-main.span8{width:100%;*width:99.94680851063829%}.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}div[role=main]{margin-bottom:1em}.coursebox .info .name a{background-position:0 13px}.category-browse .coursebox .info .name a{background-position:0 13px}}@media(min-width:1200px) and (max-width:1600px){#course-category-listings.columns-3{background-color:transparent;border:0}#course-category-listings.columns-3 #category-listing,#course-category-listings.columns-3 #course-listing{width:48.717948717948715%;*width:48.664757228587014%;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%}#course-category-listings.columns-3 #category-listing:first-child,#course-category-listings.columns-3 #course-listing:first-child{margin-left:0}#course-category-listings.columns-3 #course-detail{width:100%;*width:99.94680851063829%;margin:1em 0 0}}@media(max-width:1199px){.path-question #id_answerhdr div.fitem{padding-right:6px;padding-left:4px}#course-category-listings.columns-3{background-color:transparent;border:0}#course-category-listings.columns-3 #category-listing,#course-category-listings.columns-3 #course-listing,#course-category-listings.columns-3 #course-detail{width:100%;*width:99.94680851063829%;margin:0 0 1em 0}#page-mod-forum-discuss .discussioncontrols{text-align:right}#page-mod-forum-discuss .discussioncontrols .discussioncontrol{display:inline-block;float:none;width:auto;margin:0 3px .5em}#page-mod-forum-discuss .discussioncontrols .discussioncontrol select,#page-mod-forum-discuss .discussioncontrols .discussioncontrol input{margin-bottom:0}#page-mod-forum-discuss .discussioncontrols .discussioncontrol.movediscussion{padding-right:0;margin-right:0}#page-mod-forum-discuss.dir-rtl .discussioncontrols{text-align:left}}@media(max-width:768px){.fp-forminset .control-group .controls{margin-left:0}.dir-rtl .fp-formset .control-group label.control-label{float:none;text-align:right}.dir-rtl .fp-forminset .control-group label.control-label{float:none;text-align:right}.dir-rtl .fp-forminset .control-group .controls{margin-right:0}}.phpinfo table,.phpinfo th,.phpinfo h2{margin:auto;text-align:left}.phpinfo h2{width:600px}.phpinfo .e,.phpinfo .v,.phpinfo .h{font-size:.8em;color:#000;vertical-align:baseline;background-color:#ccc;border:1px solid #000}.phpinfo .e{font-weight:bold;background-color:#ccf}.phpinfo .h{font-weight:bold;background-color:#99c}#page-footer .performanceinfo{margin:10px 20%}#page-footer .performanceinfo span{display:block}#page-footer .validators{padding-top:5px;margin-top:40px;border-top:1px dotted gray}#page-footer .validators ul{padding:0;margin:0;list-style-type:none}#page-footer .validators ul li{display:inline;margin-right:10px;margin-left:10px}.performanceinfo .cachesused{margin-top:1em}.performanceinfo .cachesused .cache-stats-heading,.performanceinfo .cachesused .cache-total-stats{margin-top:.3em;font-size:110%;font-weight:bold}#page-footer .performanceinfo .cachesused .cache-definition-stats{display:inline-block;margin:.3em;vertical-align:top;background-color:#f5f5f5}.cache-store-stats{padding:0 1.3em}.cache-store-stats.nohits{background-color:#f2dede}.cache-store-stats.lowhits{background-color:#fcf8e3}.cache-store-stats.hihits{background-color:#dff0d8}#page-footer,#page-footer .validators,#page-footer .purgecaches,#page-footer .performanceinfo{text-align:center}table#explaincaps tbody>tr:nth-child(odd)>td,table#defineroletable tbody>tr:nth-child(odd)>td,table.grading-report tbody>tr:nth-child(odd)>td,table#listdirectories tbody>tr:nth-child(odd)>td,table.rolecaps tbody>tr:nth-child(odd)>td,table.userenrolment tbody>tr:nth-child(odd)>td,table#form tbody>tr:nth-child(odd)>td,form#movecourses table tbody>tr:nth-child(odd)>td,#page-admin-course-index .editcourse tbody>tr:nth-child(odd)>td,.forumheaderlist tbody>tr:nth-child(odd)>td,table.flexible tbody>tr:nth-child(odd)>td,.generaltable tbody>tr:nth-child(odd)>td,table#explaincaps tbody>tr:nth-child(odd)>th,table#defineroletable tbody>tr:nth-child(odd)>th,table.grading-report tbody>tr:nth-child(odd)>th,table#listdirectories tbody>tr:nth-child(odd)>th,table.rolecaps tbody>tr:nth-child(odd)>th,table.userenrolment tbody>tr:nth-child(odd)>th,table#form tbody>tr:nth-child(odd)>th,form#movecourses table tbody>tr:nth-child(odd)>th,#page-admin-course-index .editcourse tbody>tr:nth-child(odd)>th,.forumheaderlist tbody>tr:nth-child(odd)>th,table.flexible tbody>tr:nth-child(odd)>th,.generaltable tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.dir-rtl table#explaincaps td,.dir-rtl table#defineroletable td,.dir-rtl table.grading-report td,.dir-rtl table#listdirectories td,.dir-rtl table.rolecaps td,.dir-rtl table.userenrolment td,.dir-rtl table#form td,.dir-rtl form#movecourses table td,.dir-rtl .forumheaderlist td,.dir-rtl table.flexible td,.dir-rtl .generaltable td,.dir-rtl .generaltable thead:first-child tr:first-child td,.dir-rtl table#explaincaps th,.dir-rtl table#defineroletable th,.dir-rtl table.grading-report th,.dir-rtl table#listdirectories th,.dir-rtl table.rolecaps th,.dir-rtl table.userenrolment th,.dir-rtl table#form th,.dir-rtl form#movecourses table th,.dir-rtl .forumheaderlist th,.dir-rtl table.flexible th,.dir-rtl .generaltable th,.dir-rtl .generaltable thead:first-child tr:first-child th{text-align:right}#page-admin-course-index.dir-rtl .editcourse td,#page-admin-course-index.dir-rtl .editcourse th{text-align:right}#page-report-loglive-index .generaltable th,#page-admin-report-log-index .generaltable th,#page-report-log-user .generaltable th,#page-admin-user table th,.environmenttable th,.category_subcategories th,.rcs-results th,table#listdirectories th,#page-report-loglive-index .generaltable td,#page-admin-report-log-index .generaltable td,#page-report-log-user .generaltable td,#page-admin-user table td,.environmenttable td,.category_subcategories td,.rcs-results td,table#listdirectories td{padding:4px 5px}.user-enroller-panel .uep-search-results .users tbody tr:hover>td,table.grading-report tbody tr:hover>td,.forumheaderlist tbody tr:hover>td,.generaltable tbody tr:hover>td,table.flexible tbody tr:hover>td,.category_subcategories tbody tr:hover>td,table#modules tbody tr:hover>td,table#permissions tbody tr:hover>td,.user-enroller-panel .uep-search-results .users tbody tr:hover>th,table.grading-report tbody tr:hover>th,.forumheaderlist tbody tr:hover>th,.generaltable tbody tr:hover>th,table.flexible tbody tr:hover>th,.category_subcategories tbody tr:hover>th,table#modules tbody tr:hover>th,table#permissions tbody tr:hover>th{background-color:#f5f5f5}div[id^="bar_pbar_"]{height:20px!important;margin-bottom:20px!important;overflow:hidden!important;background-color:#f7f7f7!important;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9)!important;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9))!important;background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9)!important;background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9)!important;background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9)!important;background-repeat:repeat-x!important;border:none!important;-webkit-border-radius:4px!important;-moz-border-radius:4px!important;border-radius:4px!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0)!important;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)!important;-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)!important;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)!important}div[id^="progress_pbar_"]{float:left!important;height:100%!important;padding-top:0!important;font-size:12px!important;color:#fff!important;text-align:center!important;text-shadow:0 -1px 0 rgba(0,0,0,0.25)!important;background-color:#0e90d2!important;background-image:-moz-linear-gradient(top,#149bdf,#0480be)!important;background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be))!important;background-image:-webkit-linear-gradient(top,#149bdf,#0480be)!important;background-image:-o-linear-gradient(top,#149bdf,#0480be)!important;background-image:linear-gradient(to bottom,#149bdf,#0480be)!important;background-repeat:repeat-x!important;border:none!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0)!important;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15)!important;-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15)!important;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15)!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important;-webkit-transition:width .6s ease!important;-moz-transition:width .6s ease!important;-o-transition:width .6s ease!important;transition:width .6s ease!important}input.form-submit,input#id_submitbutton,input#id_submitbutton2,.path-admin .buttons input[type="submit"],td.submit input{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#005aa8;*background-color:#0038a8;background-image:-moz-linear-gradient(top,#0070a8,#0038a8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0070a8),to(#0038a8));background-image:-webkit-linear-gradient(top,#0070a8,#0038a8);background-image:-o-linear-gradient(top,#0070a8,#0038a8);background-image:linear-gradient(to bottom,#0070a8,#0038a8);background-repeat:repeat-x;border-color:#0038a8 #0038a8 #001e5c;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0070a8',endColorstr='#ff0038a8',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}input.form-submit:hover,input#id_submitbutton:hover,input#id_submitbutton2:hover,.path-admin .buttons input[type="submit"]:hover,td.submit input:hover,input.form-submit:focus,input#id_submitbutton:focus,input#id_submitbutton2:focus,.path-admin .buttons input[type="submit"]:focus,td.submit input:focus,input.form-submit:active,input#id_submitbutton:active,input#id_submitbutton2:active,.path-admin .buttons input[type="submit"]:active,td.submit input:active,input.form-submit.active,input#id_submitbutton.active,input#id_submitbutton2.active,.path-admin .buttons input[type="submit"].active,td.submit input.active,input.form-submit.disabled,input#id_submitbutton.disabled,input#id_submitbutton2.disabled,.path-admin .buttons input[type="submit"].disabled,td.submit input.disabled,input.form-submit[disabled],input#id_submitbutton[disabled],input#id_submitbutton2[disabled],.path-admin .buttons input[type="submit"][disabled],td.submit input[disabled]{color:#fff;background-color:#0038a8;*background-color:#002f8f}input.form-submit:active,input#id_submitbutton:active,input#id_submitbutton2:active,.path-admin .buttons input[type="submit"]:active,td.submit input:active,input.form-submit.active,input#id_submitbutton.active,input#id_submitbutton2.active,.path-admin .buttons input[type="submit"].active,td.submit input.active{background-color:#002775 \9}input.form-submit .caret,input#id_submitbutton .caret,input#id_submitbutton2 .caret,.path-admin .buttons input[type="submit"] .caret,td.submit input .caret{border-top-color:#fff;border-bottom-color:#fff}#notice .singlebutton+.singlebutton input,.submit.buttons input[name="cancel"]{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#notice .singlebutton+.singlebutton input:hover,.submit.buttons input[name="cancel"]:hover,#notice .singlebutton+.singlebutton input:focus,.submit.buttons input[name="cancel"]:focus,#notice .singlebutton+.singlebutton input:active,.submit.buttons input[name="cancel"]:active,#notice .singlebutton+.singlebutton input.active,.submit.buttons input[name="cancel"].active,#notice .singlebutton+.singlebutton input.disabled,.submit.buttons input[name="cancel"].disabled,#notice .singlebutton+.singlebutton input[disabled],.submit.buttons input[name="cancel"][disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#notice .singlebutton+.singlebutton input:active,.submit.buttons input[name="cancel"]:active,#notice .singlebutton+.singlebutton input.active,.submit.buttons input[name="cancel"].active{background-color:#ccc \9}#notice .singlebutton+.singlebutton input:first-child,.submit.buttons input[name="cancel"]:first-child{*margin-left:0}#notice .singlebutton+.singlebutton input:hover,.submit.buttons input[name="cancel"]:hover,#notice .singlebutton+.singlebutton input:focus,.submit.buttons input[name="cancel"]:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#notice .singlebutton+.singlebutton input:focus,.submit.buttons input[name="cancel"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#notice .singlebutton+.singlebutton input.active,.submit.buttons input[name="cancel"].active,#notice .singlebutton+.singlebutton input:active,.submit.buttons input[name="cancel"]:active{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)}#notice .singlebutton+.singlebutton input.disabled,.submit.buttons input[name="cancel"].disabled,#notice .singlebutton+.singlebutton input[disabled],.submit.buttons input[name="cancel"][disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#notice .singlebutton+.singlebutton input .label,.submit.buttons input[name="cancel"] .label,#notice .singlebutton+.singlebutton input .badge,.submit.buttons input[name="cancel"] .badge{position:relative;top:-1px}#notice .singlebutton+.singlebutton input,.submit.buttons input[name="cancel"]{margin:0 0 10px 5px}input[id$="_clearbutton"],input[type="reset"]{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;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;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}input[id$="_clearbutton"]:hover,input[type="reset"]:hover,input[id$="_clearbutton"]:focus,input[type="reset"]:focus,input[id$="_clearbutton"]:active,input[type="reset"]:active,input[id$="_clearbutton"].active,input[type="reset"].active,input[id$="_clearbutton"].disabled,input[type="reset"].disabled,input[id$="_clearbutton"][disabled],input[type="reset"][disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}input[id$="_clearbutton"]:active,input[type="reset"]:active,input[id$="_clearbutton"].active,input[type="reset"].active{background-color:#c67605 \9}input[id$="_clearbutton"] .caret,input[type="reset"] .caret{border-top-color:#fff;border-bottom-color:#fff} + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}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{width:auto\9;height:auto;max-width:100%;-ms-interpolation-mode:bicubic}img{vertical-align:middle;border:0}#map_canvas img,.google-maps 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,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}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}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#0070a8;text-decoration:none}a:hover,a:focus{color:#003d5c;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:180px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:200px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;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;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-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 .control-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 .control-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 .control-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:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.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;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{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:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 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 input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:180px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:200px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:200px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:200px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th: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,.table-bordered tbody:first-child tr:first-child>th: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 tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-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 tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.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-topright: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 td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("[[pix:theme|glyphicons-halflings]]");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.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:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("[[pix:theme|glyphicons-halflings-white]]")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#00699e;background-image:-moz-linear-gradient(top,#0070a8,#005f8f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0070a8),to(#005f8f));background-image:-webkit-linear-gradient(top,#0070a8,#005f8f);background-image:-o-linear-gradient(top,#0070a8,#005f8f);background-image:linear-gradient(to bottom,#0070a8,#005f8f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0070a8',endColorstr='#ff005f8f',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#00699e;background-image:-moz-linear-gradient(top,#0070a8,#005f8f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0070a8),to(#005f8f));background-image:-webkit-linear-gradient(top,#0070a8,#005f8f);background-image:-o-linear-gradient(top,#0070a8,#005f8f);background-image:linear-gradient(to bottom,#0070a8,#005f8f);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0070a8',endColorstr='#ff005f8f',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-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-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#005aa8;*background-color:#0038a8;background-image:-moz-linear-gradient(top,#0070a8,#0038a8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0070a8),to(#0038a8));background-image:-webkit-linear-gradient(top,#0070a8,#0038a8);background-image:-o-linear-gradient(top,#0070a8,#0038a8);background-image:linear-gradient(to bottom,#0070a8,#0038a8);background-repeat:repeat-x;border-color:#0038a8 #0038a8 #001e5c;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0070a8',endColorstr='#ff0038a8',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#0038a8;*background-color:#002f8f}.btn-primary:active,.btn-primary.active{background-color:#002775 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;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;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-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;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-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;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-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;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#0070a8;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#003d5c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.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,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#0038a8}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#0070a8}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a{background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs>.active>a:not([href]),.nav-tabs>.active>a:not([href]):hover,.nav-tabs>.active>a:not([href]):focus{color:#555;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,.nav-pills>.active>a:focus{color:#fff;background-color:#0070a8}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#0070a8;border-bottom-color:#0070a8}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#003d5c;border-bottom-color:#003d5c}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{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,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-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;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-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;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>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 li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.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{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#0070a8;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}h1{font-size:32px}h2{font-size:28px}h3{font-size:24px}h4{font-size:20px}h5{font-size:16px}h6{font-size:12px}h1 small{font-size:24px}h2 small{font-size:20px}h3 small{font-size:16px}h4 small{font-size:12px}@media print{a[href]:after{content:""}}legend{color:#333;border-bottom-color:#ddd}.breadcrumb{background-color:#f5f5f5}.well{border-color:#e3e3e3}sup{vertical-align:super}sub{vertical-align:sub}li.activity.label,.file-picker td.label{display:block;padding:8px;font-size:inherit;line-height:inherit;color:inherit;text-shadow:none;white-space:normal;background:inherit;border:inherit}.file-picker td.label{display:table-cell;text-align:right}.choosercontainer #chooseform .option label{font-size:12px}li.section.hidden,.block.hidden,.block.invisible{display:block;visibility:visible}#turnitintool_style .row,.forumpost .row{margin-left:0!important}#turnitintool_style .row:before,#turnitintool_style .row:after,.forumpost .row:before,.forumpost .row:after{content:none}fieldset.hidden{display:inherit;visibility:inherit}div.c1.btn{display:block;padding:0;margin-bottom:0;font-size:inherit;line-height:inherit;color:inherit;text-align:inherit;text-shadow:inherit;vertical-align:inherit;cursor:default;background-color:inherit;background-image:none;background-repeat:none;border:0;border-radius:none;box-shadow:none}#questionbank+.container{width:auto}img.hide{display:inherit}.icon-bar,img.icon-post,img.icon-info,img.icon-warn,img.icon-pre{background-image:none}.loginbox.twocolumns .signuppanel,.loginbox.twocolumns .signuppanel,.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .loginpanel{padding:0;margin:0}.tooltip{display:inline;opacity:1;filter:alpha(opacity=100)}body:not(.jsenabled) .dropdown:hover>.dropdown-menu{display:block;margin-top:-6px}body:not(.jsenabled) .langmenu:hover>.dropdown-menu,.langmenu.open>.dropdown-menu{display:block;max-height:150px;overflow-y:auto}body{padding-top:60px}.block{min-height:20px;padding:19px;padding:8px 0;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-color:#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)}.block blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.block .header h2{display:block;padding:3px 15px;margin:0;font-size:11px;font-size:1.1em;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase;word-wrap:break-word}.block .header .block_action{float:right;padding:3px 15px}.block .header .block_action>*{margin-left:3px}.block .header .block_action .block-hider-show,.block .header .block_action .block-hider-hide{cursor:pointer}.block .header .block_action .block-hider-show{display:none}.block .header .commands{display:block;padding:3px 15px;clear:both;text-align:right}.block .header .commands>a{margin:0 3px}.block .header .commands .icon img{width:12px;height:12px}.block .header .commands img.actionmenu{width:auto}.block .content{padding:4px 14px;word-wrap:break-word}.block .content h3{display:block;padding:3px 15px;font-size:11px;font-size:1.1em;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.block .content hr{margin:5px 0}.block .content .userpicture{width:16px;height:16px;margin-right:6px}.block .content .list li.listentry{clear:both}.block .content .list .c0{display:inline}.block .content .list .c1{display:inline;margin-left:5px}.block .footer{display:block;padding:3px 5px;margin-bottom:4px}.block.beingmoved{border-style:dashed;border-width:2px}.block.invisible{opacity:.5;filter:alpha(opacity=50)}.block.hidden .header .block_action .block-hider-hide{display:none}.block.hidden .header .block_action .block-hider-show{display:inline}.block.list_block .unlist>li>.column{display:inline-block;*display:inline;*zoom:1}.jsenabled .block.hidden .content{display:none}.blockmovetarget{display:block;height:1em;margin-bottom:20px;border-style:dashed;border-width:2px}.blockannotation{position:relative;top:-10px;margin-bottom:10px}.block_blog_menu #blogsearchquery{max-width:92%}.block_settings #adminsearchquery{max-width:92%}.block_search_forums #searchform_search{width:auto;max-width:92%}.block_calendar_upcoming .content .date{padding-left:22px}.block_calendar_upcoming .content .footer{padding-top:10px;padding-left:0;margin-top:.5em}.block_rss_client .content li{padding:5px;margin-bottom:10px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.block_rss_client .content li .link{font-weight:inherit}.block_rss_client .list li:first-child{border-top-width:1px}.block_news_items .content .newlink{padding-bottom:10px}.block_news_items .content ul li{display:table;width:100%;padding:2px;border-top:1px rgba(0,0,0,0.05) solid}.block_news_items .content ul li .info{display:table-header-group}.block_news_items .content ul li .date{display:inline;font-size:11.9px}.block_news_items .content ul li .name{display:inline;padding-left:1ex;font-size:11.9px}.block_news_items .content .footer{padding-top:10px;padding-left:0}.block_login input#login_username,.block_login input#login_password{width:95%}.block_login .content{max-width:280px;margin-right:auto;margin-left:auto}.block_login input[type="submit"]{margin:10px 0}.block_adminblock .content{display:block;padding:3px 5px}.block_adminblock select{max-width:92%}.dir-rtl .block .header{text-align:right}.dir-rtl .block .header h2{text-align:right}.dir-rtl .block .header .commands{text-align:left}.dir-rtl .block .header .commands>*{margin-right:3px;margin-left:0}.dir-rtl .block .header .block_action{float:left}.dir-rtl .block_calendar_upcoming .content .date{padding-right:22px}.dir-rtl .block_calendar_upcoming .content .footer{padding-right:0}.dir-rtl .block_news_items .content ul li .name{padding-right:1ex}.dir-rtl .block_news_items .content .footer{padding-left:0}form{margin:0}.mform fieldset .advancedbutton{text-align:right}.jsenabled .mform .containsadvancedelements .advanced{display:none}.mform .containsadvancedelements .advanced.show{display:block}.mform fieldset.group{margin-bottom:0}.mform fieldset.error{border:1px solid #b94a48}.mform span.error{display:inline-block;padding:4px;margin-bottom:4px;background-color:#f2dede;border:1px solid #eed3d7;border-radius:4px}.mform fieldset.collapsible legend a.fheader{padding:0 5px 0 20px;margin-left:-20px;background:url([[pix:t/expanded]]) 2px center no-repeat}.dir-rtl .mform fieldset.collapsible legend a.fheader{padding:0 20px 0 5px;margin-right:-20px;margin-left:0;background-position:right center}.mform fieldset.collapsed legend a.fheader{background-image:url([[pix:t/collapsed]])}.dir-rtl .mform fieldset.collapsed legend a.fheader{background-image:url([[pix:t/collapsed_rtl]])}.jsenabled .mform .collapsed .fcontainer{display:none}.mform .fitem .fitemtitle div{display:inline}.loginpanel .error,.mform .error{color:#b94a48}.mform .fdescription.required{margin-left:200px}.mform .fpassword .unmask{display:inline-block;margin-left:.5em}.mform .fpassword .unmask>input{margin:0}.mform .fpassword .unmask>label{display:inline-block}.mform label{display:inline-block}.mform .iconhelp{margin-left:4px}.dir-rtl .mform .iconhelp{margin-right:4px}.mform .ftextarea #id_alltext{width:100%}.mform ul.file-list{padding:0;margin:0;list-style:none}.mform label .req,.mform label .adv{cursor:help}.mform .fcheckbox input{margin-top:5px;margin-left:0}.mform .fitem fieldset.fgroup label,.mform fieldset.fdate_selector label{display:inline;float:none;width:auto}.mform .ftags label.accesshide{position:static;display:block}.mform .ftags select{min-width:22em;margin-bottom:.7em}.mform .helplink img{padding:0;margin:0 .45em}.mform legend .helplink img{margin:0 .2em}.singleselect label{margin-right:.3em}.dir-rtl .singleselect label{margin-right:0;margin-left:.3em}input#id_externalurl{direction:ltr}#portfolio-add-button{display:inline}.form-item,.mform .fitem{margin-bottom:20px;margin-bottom:10px;*zoom:1}.form-item:before,.mform .fitem:before,.form-item:after,.mform .fitem:after{display:table;line-height:0;content:""}.form-item:after,.mform .fitem:after{clear:both}.form-item .form-label,.mform .fitem div.fitemtitle{float:left;width:180px;padding-top:5px;text-align:right}.dir-rtl .form-item .form-label,.dir-rtl .mform .fitem div.fitemtitle{float:right;text-align:left}.form-defaultinfo,.form-label .form-shortname{color:#999}.form-label .form-shortname{display:block;font-size:10.5px}.dir-rtl .form-label .form-shortname{text-align:left}.form-item .form-setting,.form-item .form-description,.mform .fitem .felement,#page-mod-forum-search .c1{*display:inline-block;*padding-left:20px;margin-left:200px;*margin-left:0}.form-item .form-setting:first-child,.form-item .form-description:first-child,.mform .fitem .felement:first-child,#page-mod-forum-search .c1:first-child{*padding-left:200px}.formsettingheading{margin-bottom:0}.form-item .form-description,.felement.fstatic{display:block;padding-top:5px;margin-bottom:10px;color:#595959}.form-item .form-description{padding-top:0}table#form td.submit,.form-buttons,.path-admin .buttons,#fitem_id_submitbutton,.fp-content-center form+div,div.backup-section+form,#fgroup_id_buttonar{padding:19px 20px 20px;padding-left:0;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}table#form td.submit:before,.form-buttons:before,.path-admin .buttons:before,#fitem_id_submitbutton:before,.fp-content-center form+div:before,div.backup-section+form:before,#fgroup_id_buttonar:before,table#form td.submit:after,.form-buttons:after,.path-admin .buttons:after,#fitem_id_submitbutton:after,.fp-content-center form+div:after,div.backup-section+form:after,#fgroup_id_buttonar:after{display:table;line-height:0;content:""}table#form td.submit:after,.form-buttons:after,.path-admin .buttons:after,#fitem_id_submitbutton:after,.fp-content-center form+div:after,div.backup-section+form:after,#fgroup_id_buttonar:after{clear:both}.path-admin .buttons,.form-buttons{padding-left:200px}.dir-rtl table#form td.submit,.dir-rtl .form-buttons,.dir-rtl .path-admin .buttons,.dir-rtl #fitem_id_submitbutton,.dir-rtl .fp-content-center form+div,.dir-rtl div.backup-section+form,.dir-rtl #fgroup_id_buttonar{padding:19px 20px 20px;padding-right:0;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.dir-rtl table#form td.submit:before,.dir-rtl .form-buttons:before,.dir-rtl .path-admin .buttons:before,.dir-rtl #fitem_id_submitbutton:before,.dir-rtl .fp-content-center form+div:before,.dir-rtl div.backup-section+form:before,.dir-rtl #fgroup_id_buttonar:before,.dir-rtl table#form td.submit:after,.dir-rtl .form-buttons:after,.dir-rtl .path-admin .buttons:after,.dir-rtl #fitem_id_submitbutton:after,.dir-rtl .fp-content-center form+div:after,.dir-rtl div.backup-section+form:after,.dir-rtl #fgroup_id_buttonar:after{display:table;line-height:0;content:""}.dir-rtl table#form td.submit:after,.dir-rtl .form-buttons:after,.dir-rtl .path-admin .buttons:after,.dir-rtl #fitem_id_submitbutton:after,.dir-rtl .fp-content-center form+div:after,.dir-rtl div.backup-section+form:after,.dir-rtl #fgroup_id_buttonar:after{clear:both}.dir-rtl .path-admin .buttons,.dir-rtl .form-buttons{padding-right:200px}.form-item .form-setting .form-checkbox.defaultsnext{display:inline-block;margin-top:5px}#adminsettings h3{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}.mform legend a,.mform legend a:hover{color:#333;text-decoration:none}.dir-rtl .mform .fitem .felement{margin-right:30%;margin-left:auto;text-align:right}.dir-rtl .mform .fitem .felement input[name=email],.dir-rtl .mform .fitem .felement input[name=email2],.dir-rtl .mform .fitem .felement input[name=url],.dir-rtl .mform .fitem .felement input[name=idnumber],.dir-rtl .mform .fitem .felement input[name=phone1],.dir-rtl .mform .fitem .felement input[name=phone2]{text-align:left;direction:ltr}.dir-rtl #id_s__pathtodu,.dir-rtl #id_s__aspellpath,.dir-rtl #id_s__pathtodot,.dir-rtl #id_s__supportemail,.dir-rtl #id_s__supportpage,.dir-rtl #id_s__sessioncookie,.dir-rtl #id_s__sessioncookiepath,.dir-rtl #id_s__sessioncookiedomain,.dir-rtl #id_s__proxyhost,.dir-rtl #id_s__proxyuser,.dir-rtl #id_s__proxypassword,.dir-rtl #id_s__proxybypass,.dir-rtl #id_s__jabberhost,.dir-rtl #id_s__jabberserver,.dir-rtl #id_s__jabberusername,.dir-rtl #id_s__jabberpassword,.dir-rtl #id_s__additionalhtmlhead,.dir-rtl #id_s__additionalhtmltopofbody,.dir-rtl #id_s__additionalhtmlfooter,.dir-rtl #id_s__docroot,.dir-rtl #id_s__filter_tex_latexpreamble,.dir-rtl #id_s__filter_tex_latexbackground,.dir-rtl #id_s__filter_tex_pathlatex,.dir-rtl #id_s__filter_tex_pathdvips,.dir-rtl #id_s__filter_tex_pathconvert,.dir-rtl #id_s__blockedip,.dir-rtl #id_s__pathtoclam,.dir-rtl #id_s__quarantinedir,.dir-rtl #id_s__sitepolicy,.dir-rtl #id_s__sitepolicyguest,.dir-rtl #id_s__cronremotepassword,.dir-rtl #id_s__allowedip,.dir-rtl #id_s__blockedip,.dir-rtl #id_s_enrol_meta_nosyncroleids,.dir-rtl #id_s_enrol_ldap_host_url,.dir-rtl #id_s_enrol_ldap_ldapencoding,.dir-rtl #id_s_enrol_ldap_bind_dn,.dir-rtl #id_s_enrol_ldap_bind_pw,.dir-rtl #admin-emoticons .form-text,.dir-rtl #admin-role_mapping input[type=text],.dir-rtl #id_s_enrol_paypal_paypalbusiness,.dir-rtl #id_s_enrol_flatfile_location,#page-admin-setting-enrolsettingsflatfile.dir-rtl input[type=text],#page-admin-setting-enrolsettingsdatabase.dir-rtl input[type=text],#page-admin-auth-db.dir-rtl input[type=text]{direction:ltr}#page-admin-setting-enrolsettingsflatfile.dir-rtl .informationbox{text-align:left;direction:ltr}#page-admin-grade-edit-scale-edit.dir-rtl .error input#id_name{margin-right:170px}#page-grade-edit-outcome-course .courseoutcomes{width:100%;margin-right:auto;margin-left:auto}#page-grade-edit-outcome-course .courseoutcomes td{text-align:center}#installform #id_wwwroot,#installform #id_dirroot,#installform #id_dataroot,#installform #id_dbhost,#installform #id_dbname,#installform #id_dbuser,#installform #id_dbpass,#installform #id_prefix{direction:ltr}.mdl-right>label{display:inline-block}input[type="radio"]+label,input[type="checkbox"]+label{display:inline;padding-left:.2em}input[type="radio"],input[type="checkbox"]{margin-top:-4px;margin-right:7px}.dir-rtl input[type="radio"],.dir-rtl input[type="checkbox"]{margin-right:auto;margin-left:7px}.singleselect{display:inline-block}.singleselect form,.singleselect select{margin:0}.form-item .form-label label{margin-bottom:0}.dir-rtl .form-item .form-label label{text-align:left}.felement.ffilepicker{margin-top:5px}div#dateselector-calendar-panel{z-index:3100}fieldset.coursesearchbox label{display:inline}#region-main .mform:not(.unresponsive) .fitem .fitemtitle label{font-weight:bold}@media(max-width:1199px){body #region-main .mform:not(.unresponsive) .fitem .fitemtitle{display:block;width:100%;margin-top:4px;margin-bottom:4px;text-align:left}body #region-main .mform:not(.unresponsive) .fitem .felement{float:left;width:100%;padding-right:0;padding-left:0;margin-left:0}body #region-main .mform:not(.unresponsive) .fitem .fstatic:empty{display:none}body #region-main .mform:not(.unresponsive) .femptylabel .fitemtitle{display:inline-block;width:auto;margin-right:8px}body #region-main .mform:not(.unresponsive) .femptylabel .felement{display:inline-block;width:auto;padding-top:5px;margin-top:4px}body #region-main .mform:not(.unresponsive) .fitem_fcheckbox .fitemtitle,body #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{display:inline-block;width:auto}body #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{padding:6px}body.dir-rtl #region-main .mform:not(.unresponsive) .femptylabel .fitemtitle{margin-right:0;margin-left:8px}body.dir-rtl #region-main .mform:not(.unresponsive) .fitem .fitemtitle{text-align:right}body.dir-rtl #region-main .mform:not(.unresponsive) .fitem .felement{float:right;padding-right:0;padding-left:0;margin-right:0}body.dir-rtl #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{float:right}}@media(max-width:1474px){.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem .fitemtitle{display:block;width:100%;margin-top:4px;margin-bottom:4px;text-align:left}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem .felement{float:left;width:100%;padding-right:0;padding-left:0;margin-left:0}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem .fstatic:empty{display:none}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .femptylabel .fitemtitle{display:inline-block;width:auto;margin-right:8px}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .femptylabel .felement{display:inline-block;width:auto;padding-top:5px;margin-top:4px}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem_fcheckbox .fitemtitle,.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{display:inline-block;width:auto}.used-region-side-pre.used-region-side-post #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{padding:6px}.used-region-side-pre.used-region-side-post.dir-rtl #region-main .mform:not(.unresponsive) .femptylabel .fitemtitle{margin-right:0;margin-left:8px}.used-region-side-pre.used-region-side-post.dir-rtl #region-main .mform:not(.unresponsive) .fitem .fitemtitle{text-align:right}.used-region-side-pre.used-region-side-post.dir-rtl #region-main .mform:not(.unresponsive) .fitem .felement{float:right;padding-right:0;padding-left:0;margin-right:0}.used-region-side-pre.used-region-side-post.dir-rtl #region-main .mform:not(.unresponsive) .fitem_fcheckbox .felement{float:right}}#fitem_id_availabilityconditionsjson *[aria-hidden=true]{display:none}#fitem_id_availabilityconditionsjson select,#fitem_id_availabilityconditionsjson input[type=text]{position:relative;top:4px}#fitem_id_availabilityconditionsjson label{display:inline}#fitem_id_availabilityconditionsjson .availability-group{margin-right:8px}#fitem_id_availabilityconditionsjson .availability-item{margin-bottom:6px}#fitem_id_availabilityconditionsjson .availability-none{margin-bottom:4px;margin-left:20px}#fitem_id_availabilityconditionsjson .availability-plugincontrols{display:inline-block;padding:2px 0 0 4px;margin-right:8px;background:none repeat scroll 0 0 #f5f5f5;border:1px solid #eee;border-radius:4px}#fitem_id_availabilityconditionsjson .availability-eye,#fitem_id_availabilityconditionsjson .availability-delete{margin-right:8px}#fitem_id_availabilityconditionsjson .availability-eye[aria-hidden=true]{display:inline;visibility:hidden}#fitem_id_availabilityconditionsjson .availability-list>.availability-eye img{margin-top:12px;vertical-align:top}#fitem_id_availabilityconditionsjson .availability-button{margin-left:15px}#fitem_id_availabilityconditionsjson .availability-childlist>.availability-inner{display:inline-block;padding:6px;margin-bottom:6px;background:#f5f5f5;border:1px solid #eee;border-radius:4px}#fitem_id_availabilityconditionsjson .availability-childlist .availability-childlist>.availability-inner{background:white}#fitem_id_availabilityconditionsjson .availability-connector{margin-bottom:6px;margin-left:20px}.dir-rtl #fitem_id_availabilityconditionsjson .availability-group{margin-right:0;margin-left:8px}.dir-rtl #fitem_id_availabilityconditionsjson .availability-none{margin-right:20px;margin-left:0}.dir-rtl #fitem_id_availabilityconditionsjson .availability-plugincontrols{padding-right:4px;padding-left:0;margin-right:0;margin-left:8px}.dir-rtl #fitem_id_availabilityconditionsjson .availability-eye,.dir-rtl #fitem_id_availabilityconditionsjson .availability-delete{margin-right:0;margin-left:8px}.dir-rtl #fitem_id_availabilityconditionsjson .availability-button{margin-right:15px;margin-left:0}.dir-rtl #fitem_id_availabilityconditionsjson .availability-connector{margin-right:20px;margin-left:0}.mform .error .availability-field{color:#333}.availability-dialogue .moodle-dialogue .moodle-dialogue-bd{padding-right:0;padding-bottom:2px;padding-left:0}.availability-dialogue ul{display:block;margin:0}.availability-dialogue li{display:block;padding:0 0 4px;margin-bottom:4px;clear:both;list-style-type:none;border-bottom:1px solid #eee}.availability-dialogue ul button{float:left;min-width:140px;margin-top:4px;margin-left:1em}.availability-dialogue label{margin-right:1em;margin-bottom:0;margin-left:170px}.availability-dialogue .availability-buttons button{margin-top:4px;margin-right:1em;margin-left:1em}.dir-rtl .availability-dialogue ul button{float:right;margin-right:1em;margin-left:0}.dir-rtl .availability-dialogue label{margin-right:170px;margin-left:1em}textarea[cols],input[size]{width:auto}select{width:auto}.path-mod-forum .forumsearch input,.path-mod-forum .forumsearch .helptooltip{margin:0 3px}.path-mod-forum .forumheaderlist,.path-mod-forum .forumheaderlist td{border:0}.path-mod-forum .forumheaderlist thead .header,.path-mod-forum .forumheaderlist tbody .discussion td{padding-right:.5em;padding-left:.5em;white-space:normal;vertical-align:top}.path-mod-forum .forumheaderlist thead .header{white-space:normal;vertical-align:top}.path-mod-forum .forumheaderlist thead .header.replies{text-align:center}.path-mod-forum .forumheaderlist thead .header.lastpost{text-align:right}.path-mod-forum .forumheaderlist thead .header th.discussionsubscription,.path-mod-forum .forumheaderlist tbody .discussion td.discussionsubscription{width:16px;padding-right:.5em;padding-left:.5em}.path-mod-forum .forumheaderlist .discussion .author,.path-mod-forum .forumheaderlist .discussion .replies,.path-mod-forum .forumheaderlist .discussion .lastpost{white-space:normal}.path-mod-forum .forumheaderlist .discussion .discussionsubscription,.path-mod-forum .forumheaderlist .discussion .replies{text-align:center}.path-mod-forum .forumheaderlist .discussion .topic,.path-mod-forum .forumheaderlist .discussion .discussionsubscription,.path-mod-forum .forumheaderlist .discussion .topic.starter,.path-mod-forum .forumheaderlist .discussion .picture,.path-mod-forum .forumheaderlist .discussion .author,.path-mod-forum .forumheaderlist .discussion .replies,.path-mod-forum .forumheaderlist .discussion .lastpost{vertical-align:top}.path-mod-feedback .feedback_bar_image{height:5px}.forumpost{min-height:20px;padding:19px;padding:6px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-color:#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)}.forumpost blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.forumpost .header{margin-bottom:3px}.forumpost .picture img{margin:3px}.forumpost .picture img.userpicture{margin-right:10px;margin-left:3px}.forumpost .content .posting.fullpost{margin-top:8px}.forumpost .row .topic,.forumpost .row .content-mask,.forumpost .row .options{margin-left:48px}.forumpost .row.side{clear:both}.dir-rtl .forumpost .picture img.userpicture{margin-right:3px;margin-left:10px}.dir-rtl .forumpost .row .topic,.dir-rtl .forumpost .row .content-mask,.dir-rtl .forumpost .row .options{margin-right:48px;margin-left:0}.forumpost .row .left{width:48px}.forumpost .options .commands{margin-left:0}.forumpost .subject{font-weight:bold}.forumsearch input[type=text]{margin-bottom:0!important}#page-mod-forum-discuss .discussioncontrols{width:auto;margin:0}#page-footer{padding:1em 0;margin-top:1em;border-top:2px solid #ddd}.maincalendar .calendarmonth td,.maincalendar .calendarmonth th{border:1px dotted #ddd}.path-grade-report-grader h1{text-align:inherit}#page-mod-chat-gui_basic input#message{max-width:100%}#page-mod-data-view #singleimage{width:auto}.path-mod-data form{margin-top:10px}.template_heading{margin-top:10px}.breadcrumb-button{float:right;margin-top:4px}.breadcrumb-button .singlebutton{float:left;margin-left:4px}.dir-rtl .nav-tabs>li,.dir-rtl .nav-pills>li{float:right}.dir-rtl .navbar .brand{float:right}.navbar-inverse .logininfo a{color:#999}.navbar-inverse .logininfo a:hover{color:#fff;background-color:transparent}.navbar-fixed-top,.navbar-fixed-bottom{z-index:4030}.dir-rtl .breadcrumb-button,.dir-rtl .navbar .btn-navbar{float:left}.dir-rtl .breadcrumb-button .singlebutton{float:right;margin-right:4px}.ie .row-fluid .desktop-first-column{margin-left:0}.langmenu form{margin:0}.container-fluid{max-width:1680px;margin:0 auto}canvas{-ms-touch-action:auto}div#dock{display:none}.path-mod-choice .horizontal .choices{margin:0}.path-mod-choice .horizontal .choices .option{display:inline-block;padding:10px}.path-mod-choice .results .data{white-space:normal}.path-mod-lesson .firstpageoptions{width:60%;min-width:280px;margin:auto}.path-mod-lesson .centerpadded{padding:5px;text-align:center}.path-mod-wiki .wiki_headingtitle,.path-mod-wiki .midpad,.path-mod-wiki .wiki_headingtime{text-align:inherit}.path-mod-wiki .wiki_contentbox{width:100%}.dropdown-menu>li>a{padding:3px 20px 3px 8px}.dir-rtl .dropdown-menu>li>a{padding:3px 8px 3px 20px}.dir-rtl .dropdown-submenu>.dropdown-menu{-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.path-mod-survey .surveytable>tbody>tr:nth-of-type(odd){background-color:transparent}.path-mod-survey .surveytable>tbody>tr:nth-of-type(even){background-color:#f9f9f9}.path-mod-survey .surveytable .rblock label{text-align:center}.path-mod-survey .resultgraph,.path-mod-survey .reportsummary,.path-mod-survey .studentreport,.path-mod-survey .reportbuttons,.path-mod-survey .centerpara{text-align:center}.dir-rtl.path-mod-forum .forumheaderlist thead .header.lastpost{text-align:left}.dir-rtl.path-mod-forum .forumheaderlist .discussion .lastpost{text-align:left}.nav .caret{margin-left:4px}.dir-rtl .nav .caret{margin-right:4px}.nav .divider{width:0;height:40px;overflow:hidden;border-right:1px solid #fff;border-left:1px solid #e5e5e5}.dropdown-menu .divider{width:auto;height:1px;border-right:0 none;border-left:0 none}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax{background-color:#fff}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd-nohd,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd-noft,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-right,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-bottom{border:0}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-right,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-bottom{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-color:#e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-radius:0;-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)}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-right blockquote,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-bottom blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd{background-color:transparent}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell{padding:3px 15px;white-space:nowrap;border:0}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable input,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell input{margin:0 10px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable input#input-message,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell input#input-message{width:45%;margin:auto}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable a,.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell a{margin:0 5px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist{padding:10px 5px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list{border-top:1px solid #ddd;border-bottom:1px solid #fff}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list li{padding:5px 10px;border-top:1px solid #fff;border-bottom:1px solid #ddd}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list img{max-width:none;margin-right:8px;border:1px solid #ccc;border-radius:4px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages{margin:20px 25px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-event.course-theme{margin:10px 0;font-size:11.9px;color:#777;text-align:center}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-message.course-theme{padding:4px 10px;margin:10px 0;background-color:#fff;border:1px dotted #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-message.course-theme .time{float:right;font-size:11px;color:#777}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .mdl-chat-my-entry .chat-message.course-theme{background-color:#f6f6f6}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .mdl-chat-my-entry .chat-message.course-theme .user{font-weight:bold}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl .yui-layout-unit-right{padding:0}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl .yui-layout-unit div.yui-layout-bd{text-align:right}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-userlist #users-list img{margin-left:8px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-messages .chat-message.course-theme .time{float:left}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-messages .chat-message.course-theme .user{float:right}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-messages .chat-message.course-theme .chat-message-meta{height:20px}.yui-skin-sam .yui-layout.path-mod-chat-gui_ajax.dir-rtl #chat-messages .chat-message.course-theme .text{text-align:right}#page-report-participation-index .participationselectform div label{display:inline;margin:0 5px}#page-report-participation-index.dir-ltr .participationselectform div label[for=menuinstanceid]{margin-left:0}#page-report-participation-index.dir-rtl .participationselectform div label[for=menuinstanceid]{margin-right:0}.path-backup .mform .grouped_settings.section_level{min-height:20px;padding:19px;padding:10px 0 0 0;margin-bottom:20px;clear:both;background-color:#f5f5f5;border:1px solid #e3e3e3;border-color:#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)}.path-backup .mform .grouped_settings.section_level blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.path-backup .mform .grouped_settings{overflow:hidden;clear:both}.path-backup .include_setting,.path-backup .grouped_settings .normal_setting{display:inline-block}.path-backup .include_setting.section_level label{font-weight:bold}.path-backup .mform .fitem .fitemtitle{width:260px}.path-backup .mform .fitem .felement{margin-left:280px}.path-backup .notification.dependencies_enforced{font-weight:bold;color:#b94a48;text-align:center}.path-backup .backup_progress{text-align:center}.path-backup .backup_progress .backup_stage{color:#999}.path-backup .backup_progress .backup_stage.backup_stage_current{font-weight:bold;color:inherit}.path-backup .backup_progress span.backup_stage.backup_stage_complete{color:inherit}#page-backup-restore .filealiasesfailures{background-color:#f2dede}#page-backup-restore .filealiasesfailures .aliaseslist{width:90%;margin:.8em auto;background-color:#fff;border:1px dotted #666}.path-backup .fitem .smallicon{vertical-align:text-bottom}.backup-restore .backup-section>h2.header,.backup-restore .backup-section .backup-sub-section h3{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}.backup-restore .backup-section .noticebox{width:60%;margin:1em auto;text-align:center}.backup-restore .backup-section.settings-section .detail-pair{display:inline-block;*display:inline;width:50%;*zoom:1}.backup-restore .backup-section.settings-section .detail-pair-label{width:65%}.backup-restore .backup-section.settings-section .detail-pair-value{width:25%}.backup-restore .activitytable{min-width:500px}.backup-restore .activitytable .modulename{width:100px}.backup-restore .activitytable .moduleincluded{width:50px}.backup-restore .activitytable .userinfoincluded{width:50px}.backup-restore .detail-pair-label{display:inline-block;*display:inline;width:25%;padding:8px;margin:0;font-weight:bold;text-align:right;vertical-align:top;*zoom:1}.backup-restore .detail-pair-value{display:inline-block;*display:inline;width:65%;padding:8px;margin:0;*zoom:1}.backup-restore .detail-pair-value>.sub-detail{display:block;font-size:11.9px;color:#999}.backup-restore>.singlebutton{text-align:right}.path-backup .mform .fgroup .proceedbutton{float:right;margin-right:5%}.restore-course-search .rcs-results{width:70%;min-width:400px}.restore-course-search .rcs-results table{width:100%;margin:0;border-width:0}.restore-course-search .rcs-results table .no-overflow{max-width:600px}.restore-course-search .rcs-results .paging{padding:3px;margin:0;text-align:left;background-color:#eee}.restore-course-category .rcs-results{width:70%;min-width:400px;margin:5px 0;border:1px solid #ddd}.restore-course-category .rcs-results table{width:100%;margin:0;border-width:0}.restore-course-category .rcs-results table .no-overflow{max-width:600px}.restore-course-category .rcs-results .paging{padding:3px;margin:0;text-align:left;background-color:#eee}.path-backup .wibbler{position:relative;width:500px;min-height:4px;margin:0 auto 10px;border-right:1px solid black;border-bottom:1px solid black;border-left:1px solid black}.path-backup .wibbler .wibble{position:absolute;top:0;right:0;left:0;height:4px}.path-backup .wibbler .state0{background:#eee}.path-backup .wibbler .state1{background:#ddd}.path-backup .wibbler .state2{background:#ccc}.path-backup .wibbler .state3{background:#bbb}.path-backup .wibbler .state4{background:#aaa}.path-backup .wibbler .state5{background:#999}.path-backup .wibbler .state6{background:#888}.path-backup .wibbler .state7{background:#777}.path-backup .wibbler .state8{background:#666}.path-backup .wibbler .state9{background:#555}.path-backup .wibbler .state10{background:#444}.path-backup .wibbler .state11{background:#333}.path-backup .wibbler .state12{background:#222}.path-backup .backup_log{margin-top:2em}.path-backup .backup_log h2{font-size:1em}.path-backup .backup_log_contents{height:300px;padding:10px;overflow-y:scroll;border:1px solid #ddd}table.flexible,.generaltable{width:100%;margin-bottom:20px}table.flexible th,.generaltable th,table.flexible td,.generaltable td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}table.flexible th,.generaltable th{font-weight:bold}table.flexible thead th,.generaltable thead th{vertical-align:bottom}table.flexible caption+thead tr:first-child th,.generaltable caption+thead tr:first-child th,table.flexible caption+thead tr:first-child td,.generaltable caption+thead tr:first-child td,table.flexible colgroup+thead tr:first-child th,.generaltable colgroup+thead tr:first-child th,table.flexible colgroup+thead tr:first-child td,.generaltable colgroup+thead tr:first-child td,table.flexible thead:first-child tr:first-child th,.generaltable thead:first-child tr:first-child th,table.flexible thead:first-child tr:first-child td,.generaltable thead:first-child tr:first-child td{border-top:0}table.flexible tbody+tbody,.generaltable tbody+tbody{border-top:2px solid #ddd}table.flexible .table,.generaltable .table{background-color:#fff}.singlebutton div{display:inline-block;margin-right:5px;margin-bottom:5px;margin-left:5px}#notice .buttons .singlebutton{display:inline-block}.continuebutton{text-align:center}.btn-lineup{margin:0 0 10px 5px}input[name="searchwikicontent"]+input[type="submit"],select+input[type="submit"],input[type="text"]+input[type="button"],input[type="password"]+input[type="submit"],input[type="text"]+button,input[type="text"]+input[type="submit"]{margin:0 0 10px 5px}p.arrow_button{margin-top:5em;text-align:center}p.arrow_button #remove{margin:3em auto 5em}p.arrow_button input{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#addcontrols{margin-top:30px;margin-bottom:3em;text-align:center}#addcontrols label{display:inline}#addcontrols input,#removecontrols input{display:block;width:100%;padding-right:0;padding-left:0;margin-right:auto;margin-left:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}button,input.form-submit,input[type="button"],input[type="submit"],input[type="reset"]{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}button:hover,input.form-submit:hover,input[type="button"]:hover,input[type="submit"]:hover,input[type="reset"]:hover,button:focus,input.form-submit:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus,button:active,input.form-submit:active,input[type="button"]:active,input[type="submit"]:active,input[type="reset"]:active,button.active,input.form-submit.active,input[type="button"].active,input[type="submit"].active,input[type="reset"].active,button.disabled,input.form-submit.disabled,input[type="button"].disabled,input[type="submit"].disabled,input[type="reset"].disabled,button[disabled],input.form-submit[disabled],input[type="button"][disabled],input[type="submit"][disabled],input[type="reset"][disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}button:active,input.form-submit:active,input[type="button"]:active,input[type="submit"]:active,input[type="reset"]:active,button.active,input.form-submit.active,input[type="button"].active,input[type="submit"].active,input[type="reset"].active{background-color:#ccc \9}button:first-child,input.form-submit:first-child,input[type="button"]:first-child,input[type="submit"]:first-child,input[type="reset"]:first-child{*margin-left:0}button:hover,input.form-submit:hover,input[type="button"]:hover,input[type="submit"]:hover,input[type="reset"]:hover,button:focus,input.form-submit:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}button:focus,input.form-submit:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}button.active,input.form-submit.active,input[type="button"].active,input[type="submit"].active,input[type="reset"].active,button:active,input.form-submit:active,input[type="button"]:active,input[type="submit"]:active,input[type="reset"]:active{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)}button.disabled,input.form-submit.disabled,input[type="button"].disabled,input[type="submit"].disabled,input[type="reset"].disabled,button[disabled],input.form-submit[disabled],input[type="button"][disabled],input[type="submit"][disabled],input[type="reset"][disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}button .label,input.form-submit .label,input[type="button"] .label,input[type="submit"] .label,input[type="reset"] .label,button .badge,input.form-submit .badge,input[type="button"] .badge,input[type="submit"] .badge,input[type="reset"] .badge{position:relative;top:-1px}button,input.form-submit,input[type="button"],input[type="submit"],input[type="reset"]{margin:0 0 10px 5px}button.yui3-button.closebutton,button.yui3-button.closebutton:hover{background-position:0 0}input.fp-btn-choose{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.user-enroller-panel .uep-search-results .user .options .enrol{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.user-enroller-panel .uep-search-results .user .options .enrol .label,.user-enroller-panel .uep-search-results .user .options .enrol .badge{top:0}.gradetreebox h4{font-size:14px}.gradetreebox th.cell,.gradetreebox input[type=text]{width:auto}.gradetreebox input[type=text],.gradetreebox select{margin-bottom:0}#page-grade-grading-manage #activemethodselector label{display:inline-block}#page-grade-grading-manage #activemethodselector .helptooltip{margin-right:.5em}#page-grade-grading-manage .actions{display:block;margin-bottom:1em;text-align:center}#page-grade-grading-manage .actions .action{position:relative;display:inline-block;*display:inline;width:150px;padding:4px 12px;padding:11px 19px;padding:1em;margin:.5em;margin-bottom:0;*margin-left:.3em;overflow:hidden;font-size:14px;font-size:17.5px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;vertical-align:top;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border:1px solid #aaa;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-webkit-border-radius:6px;-moz-border-radius:4px;-moz-border-radius:6px;border-radius:4px;border-radius:6px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#page-grade-grading-manage .actions .action:hover,#page-grade-grading-manage .actions .action:focus,#page-grade-grading-manage .actions .action:active,#page-grade-grading-manage .actions .action.active,#page-grade-grading-manage .actions .action.disabled,#page-grade-grading-manage .actions .action[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#page-grade-grading-manage .actions .action:active,#page-grade-grading-manage .actions .action.active{background-color:#ccc \9}#page-grade-grading-manage .actions .action:first-child{*margin-left:0}#page-grade-grading-manage .actions .action:hover,#page-grade-grading-manage .actions .action:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#page-grade-grading-manage .actions .action:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#page-grade-grading-manage .actions .action.active,#page-grade-grading-manage .actions .action:active{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)}#page-grade-grading-manage .actions .action.disabled,#page-grade-grading-manage .actions .action[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#page-grade-grading-manage .actions .action .label,#page-grade-grading-manage .actions .action .badge{position:relative;top:-1px}#page-grade-grading-manage .actions .action .action-icon{position:relative;display:inline-block;width:64px;height:64px}#page-grade-grading-manage .actions .action .action-text{position:relative;top:.4em;font-size:14px}#page-grade-grading-form-rubric-edit .gradingform_rubric_editform .status{font-size:70%}.gradingform_rubric.editor .addlevel input,.gradingform_rubric.editor .addcriterion input{background:#fff none no-repeat top left}.dir-rtl #rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .score{float:right;margin-right:0;margin-left:28px;text-align:right}.dir-rtl #rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete{float:left}.dir-rtl #rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete input{right:auto;left:0}.dir-rtl #rubric-rubric.gradingform_rubric .addcriterion{margin-right:5px;margin-left:0}.dir-rtl #rubric-rubric.gradingform_rubric .addcriterion input{padding-right:26px;padding-left:10px;background-position:right 8px top 8px}.dir-rtl #rubric-rubric.gradingform_rubric .options .option .value{margin-right:5px;margin-left:0}.dir-rtl #rubric-rubric.gradingform_rubric .options .option input{margin-right:5px;margin-left:12px}#rubric-rubric.gradingform_rubric #rubric-criteria{margin-bottom:1em}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .description{padding:6px;vertical-align:top}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .description textarea{height:115px;margin-bottom:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .definition textarea{width:80%;margin-bottom:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .score{position:relative;float:left;margin-right:28px}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .score input{margin-bottom:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level{padding:6px;vertical-align:top}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete{position:relative;float:right;width:32px;height:32px;margin-top:-32px;clear:both}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete input{position:absolute;right:0;bottom:0;display:block;width:24px;height:24px;margin:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .level .delete input:hover{background-color:#ddd}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .scorevalue input{float:none;width:2em}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .scorevalue input.hiddenelement,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .scorevalue input.pseudotablink{width:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel{vertical-align:middle}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input{display:inline-block;*display:inline;height:30px;padding:4px 12px;margin-right:5px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-position:0 0;background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:hover,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:focus,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:active,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.active,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.disabled,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:active,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.active{background-color:#ccc \9}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:first-child{*margin-left:0}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:hover,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.active,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input:active{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)}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input.disabled,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input .label,#rubric-rubric.gradingform_rubric #rubric-criteria .criterion .addlevel input .badge{position:relative;top:-1px}#rubric-rubric.gradingform_rubric .addcriterion{display:inline-block;*display:inline;padding:4px 12px;padding:0;margin-bottom:0;margin-bottom:1em;margin-left:5px;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#rubric-rubric.gradingform_rubric .addcriterion:hover,#rubric-rubric.gradingform_rubric .addcriterion:focus,#rubric-rubric.gradingform_rubric .addcriterion:active,#rubric-rubric.gradingform_rubric .addcriterion.active,#rubric-rubric.gradingform_rubric .addcriterion.disabled,#rubric-rubric.gradingform_rubric .addcriterion[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#rubric-rubric.gradingform_rubric .addcriterion:active,#rubric-rubric.gradingform_rubric .addcriterion.active{background-color:#ccc \9}#rubric-rubric.gradingform_rubric .addcriterion:first-child{*margin-left:0}#rubric-rubric.gradingform_rubric .addcriterion:hover,#rubric-rubric.gradingform_rubric .addcriterion:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#rubric-rubric.gradingform_rubric .addcriterion:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#rubric-rubric.gradingform_rubric .addcriterion.active,#rubric-rubric.gradingform_rubric .addcriterion:active{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)}#rubric-rubric.gradingform_rubric .addcriterion.disabled,#rubric-rubric.gradingform_rubric .addcriterion[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#rubric-rubric.gradingform_rubric .addcriterion .label,#rubric-rubric.gradingform_rubric .addcriterion .badge{position:relative;top:-1px}#rubric-rubric.gradingform_rubric .addcriterion input{padding-left:26px;margin:0;line-height:inherit;color:inherit;text-shadow:inherit;background:transparent url([[pix:t/add]]) no-repeat 7px 8px;border:0 none}#rubric-rubric.gradingform_rubric .options{clear:both}#rubric-rubric.gradingform_rubric .options .option label{padding:0;margin:0;font-size:inherit;font-weight:normal;line-height:2em;color:inherit;text-shadow:none;background-color:transparent}#rubric-rubric.gradingform_rubric .options .option input{margin-right:12px;margin-left:5px}.path-grade-edit-tree table.setup-grades .column-select{text-align:center}.transform-test-heading{padding:0;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:11px;font-weight:bold;line-height:36px;text-align:center}body.has_dock #page{padding-left:45px}body.has_dock div#dock{display:inline}#dock{position:fixed;top:0;left:0;width:42px;height:100%;background-color:transparent;border-right:0 none}#dock .nothingdocked{display:none;visibility:hidden}#dock .dockeditem_container{margin-top:68px}#dock .dockeditem .firstdockitem{margin-top:1em}#dock .dockedtitle{display:inline-block;display:block;*display:inline;width:36px;padding:4px 12px;padding:0;margin:3px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#dock .dockedtitle:hover,#dock .dockedtitle:focus,#dock .dockedtitle:active,#dock .dockedtitle.active,#dock .dockedtitle.disabled,#dock .dockedtitle[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#dock .dockedtitle:active,#dock .dockedtitle.active{background-color:#ccc \9}#dock .dockedtitle:first-child{*margin-left:0}#dock .dockedtitle:hover,#dock .dockedtitle:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#dock .dockedtitle:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#dock .dockedtitle.active,#dock .dockedtitle:active{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)}#dock .dockedtitle.disabled,#dock .dockedtitle[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#dock .dockedtitle .label,#dock .dockedtitle .badge{position:relative;top:-1px}#dock .dockedtitle h2{padding:0;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:11px;font-weight:bold;line-height:36px;text-align:center}#dock .dockedtitle .filterrotate{margin-left:8px}#dock .controls{position:absolute;bottom:1em;width:100%;text-align:center}#dock .controls img{cursor:pointer}#dock .editing_move,#dock .moodle-core-dragdrop-draghandle{display:none}#dockeditempanel{position:relative;left:100%;z-index:12000;min-width:200px;padding-left:5px}#dockeditempanel.dockitempanel_hidden{display:none}#dockeditempanel .dockeditempanel_content{width:384px;background-color:#f5f5f5;border:1px solid #d5d5d5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:2px 4px 4px 2px #eee;-moz-box-shadow:2px 4px 4px 2px #eee;box-shadow:2px 4px 4px 2px #eee}#dockeditempanel .dockeditempanel_bd{overflow:auto}#dockeditempanel .dockeditempanel_bd>*{margin:1em}#dockeditempanel .dockeditempanel_bd .block_navigation .block_tree li{overflow:visible}#dockeditempanel .dockeditempanel_hd{padding:.5em 1em;border-bottom:1px solid #fff}#dockeditempanel .dockeditempanel_hd h2{display:block;padding:3px 15px;padding:0;margin:0;font-size:11px;font-size:1.1em;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}#dockeditempanel .dockeditempanel_hd .commands{display:block;text-align:right}#dockeditempanel .dockeditempanel_hd .commands>a,#dockeditempanel .dockeditempanel_hd .commands>span{margin-left:3px;cursor:pointer}#dockeditempanel .dockeditempanel_hd .commands img,#dockeditempanel .dockeditempanel_hd .commands input{margin-right:1px;vertical-align:middle}#dockeditempanel .dockeditempanel_hd .commands .hidepanemicon img{cursor:pointer}.dir-rtl.has_dock #page{padding-right:45px;padding-left:0}.dir-rtl #dock{right:0;left:auto}.dir-rtl #dock .dockedtitle h2{line-height:25px}.dir-rtl #dockeditempanel{right:100%}.dir-rtl #dockeditempanel .dockeditempanel_hd .commands{text-align:left}@-ms-viewport{width:device-width}.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}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}@media(min-width:980px){.dir-rtl .navbar .nav.pull-right,.dir-rtl .navbar .logininfo{float:left}.dir-rtl .navbar .nav{float:right}.dir-rtl .navbar .nav>li{float:right}}@media(min-width:980px) and (max-width:1199px){.form-item .form-label,.mform .fitem div.fitemtitle,.userprofile dl.list dt,.form-horizontal .control-label{width:200px}.form-item .form-setting,.form-item .form-description,.mform .fitem .felement,#page-mod-forum-search .c1,.mform .fdescription.required,.userprofile dl.list dd,.form-horizontal .controls{margin-left:220px}.dir-rtl .form-item .form-setting,.dir-rtl .form-item .form-description,.dir-rtl .mform .fitem .felement,.dir-rtl .mform .fdescription.required,.dir-rtl .userprofile dl.list dd,.dir-rtl .form-horizontal .controls{margin-right:220px}#page-mod-forum-search.dir-lrt .c1{margin-right:220px}.path-admin .buttons,.form-buttons{padding-left:220px}}@media(max-width:873px){.file-picker .fp-repo-area{float:none;width:100%;height:auto;max-height:220px;border:0;y-scroll:auto}.file-picker .fp-repo-items{float:none;width:100%}.file-picker .fp-login-form .fp-login-input label{text-align:left}.dir-rtl .file-picker .fp-login-form .fp-login-input label{text-align:right}.file-picker .fp-content form td{display:block;width:100%;text-align:left}.dir-rtl .file-picker .fp-content form td{text-align:right}.fp-content .mdl-right{text-align:left}.dir-rtl .fp-content .mdl-right{text-align:right}.fp-repo-items .fp-navbar{border-top:1px solid #bbb}.dir-rtl .userprofile dl.list dt,.dir-rtl .userprofile dl.list dd{float:none;margin-right:0;text-align:right}.fp-formset div{height:auto}}@media(min-width:1200px){.path-question #id_answerhdr div.fitem_feditor{padding-right:6px}.loginbox.twocolumns .loginpanel{margin-left:0}.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .signuppanel{width:48.717948717948715%;*width:48.664757228587014%}.form-item .form-label,.mform .fitem div.fitemtitle,.userprofile dl.list dt,.form-horizontal .control-label{width:245px}.form-item .form-setting,.form-item .form-description,.mform .fitem .felement,#page-mod-forum-search .c1,.mform .fdescription.required,.userprofile dl.list dd,.form-horizontal .controls{margin-left:265px}.dir-rtl .form-item .form-setting,.dir-rtl .form-item .form-description,.dir-rtl .mform .fitem .felement,.dir-rtl .mform .fdescription.required,.dir-rtl .userprofile dl.list dd,.dir-rtl .form-horizontal .controls{margin-right:165px}.dir-rtl #page-mod-forum-search .c1{margin-right:265px}.dir-rtl .form-item .form-label,.dir-rtl .mform .fitem div.fitemtitle,.dir-rtl .userprofile dl.list dt,.dir-rtl .form-horizontal .control-label{width:145px}.path-admin .buttons,.form-buttons{padding-left:265px}.dir-rtl .path-admin .buttons,.dir-rtl .form-buttons{padding-right:265px}.empty-region-side-post.used-region-side-pre #region-main.span8,.jsenabled.docked-region-side-post.used-region-side-pre #region-main.span8{width:74.35897435897436%;*width:74.30578286961266%}.empty-region-side-post.used-region-side-pre #block-region-side-pre.span4,.jsenabled.docked-region-side-post.used-region-side-pre #block-region-side-pre.span4{width:23.076923076923077%;*width:23.023731587561375%}}@media(min-width:980px){.loginbox.twocolumns .loginpanel{margin-left:0}.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .signuppanel{width:48.617948717948715%;*width:48.664757228587014%}}@media(min-width:768px) and (max-width:979px){.loginbox.twocolumns .loginpanel{margin-left:0}.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .signuppanel{width:48.61878453038674%;*width:48.56559304102504%}.empty-region-side-post.used-region-side-pre #region-main.span8,.jsenabled.docked-region-side-post.used-region-side-pre #region-main.span8{width:74.30939226519337%;*width:74.25620077583166%}.empty-region-side-post.used-region-side-pre #block-region-side-pre.span4,.jsenabled.docked-region-side-post.used-region-side-pre #block-region-side-pre.span4{width:22.92817679558011%;*width:22.87498530621841%}}@media(max-width:767px){.loginbox.twocolumns .loginpanel,.loginbox.twocolumns .signuppanel{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#page-mod-quiz-edit div.quizcontents,.questionbankwindow.block{float:none;width:100%}#page-mod-quiz-edit #block-region-side-pre,#page-mod-quiz-edit #block-region-side-post{clear:both}}@media(max-width:480px){{}.nav-tabs>li{float:none}.nav-tabs>li>a{margin-right:0}.nav-tabs{border-bottom:0}.nav-tabs>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{border:1px solid #ddd}.nav-tabs>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{z-index:2;border-color:#ddd}.fp-content-center{display:block;vertical-align:top}.course-content ul.topics li.section,.course-content ul.topics li.section .content,.course-content ul.weeks li.section .content,.course-content ul.weeks li.section,.course-content ul.section{padding:0;margin-right:0;margin-left:0}.activityinstance{display:block}.editing .course-content .section .activity{padding-bottom:.2em;margin-bottom:.2em;border-bottom:thin solid #eee}.course-content .section .activity .commands{text-align:right}.jsenabled .choosercontainer #chooseform .alloptions{max-width:100%}.jsenabled .choosercontainer #chooseform .instruction,.jsenabled .choosercontainer #chooseform .typesummary{position:static}.que .info{float:none;width:auto}.que .content{margin:0}.path-mod-choice .horizontal .choices .option{display:block}.path-mod-forum .forumsearch #search{width:120px}.path-mod-forum .forumheaderlist .picture{display:none}}@media(min-width:768px){.row-fluid .desktop-first-column{margin-left:0}#page-navbar .breadcrumb-button{display:inline}}@media(max-width:767px){.row-fluid .desktop-first-column{clear:right}}@media(max-width:767px){.form-item .form-label,.mform .fitem div.fitemtitle{float:none;width:auto;padding-top:0;text-align:left}.form-item .form-label label{display:inline-block;margin-right:.5em}.form-item .form-setting .form-checkbox{margin-top:0}.form-label span.form-shortname{display:inline-block}.form-item .form-setting,.mform .fitem .felement,.path-backup .mform .fitem .felement,.mform .fdescription.required,.form-item .form-description{margin-left:0}table#form td.submit,.form-buttons,#fitem_id_submitbutton,.fp-content-center form+div,#fgroup_id_buttonar,.form-horizontal .form-actions,.fitem_fsubmit .felement.fsubmit{padding-right:10px;padding-left:10px}#helppopupbox{left:0!important;width:auto!important}}@media(min-width:768px) and (max-width:979px){.block_calendar_month .content,.block .minicalendar td{padding-right:0;padding-left:0}}.dir-rtl .dropdown-menu{right:0;left:auto;margin-right:0}.dir-rtl .navbar .nav>li>.dropdown-menu:before{right:9px;left:auto}.dir-rtl .navbar .nav>li>.dropdown-menu:after{right:10px;left:auto}.dir-rtl .dropdown-submenu>a:after{float:left;margin-right:0;margin-left:-10px;border-right-color:#ccc;border-left-color:transparent;border-width:5px 5px 5px 0}.dir-rtl .dropdown-submenu>.dropdown-menu{right:100%;left:auto}@media(max-width:979px){.nav-collapse{height:0}.nav-collapse .nav>li>a{color:#333}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus,.nav-collapse .dropdown-submenu a:focus,.nav-collapse .dropdown-submenu a:hover,.nav-collapse .dropdown-submenu a:active,.nav-collapse .dropdown-menu>li>a:hover,.nav-collapse .dropdown-menu>li>a:focus{color:#333;background-image:none}.nav-collapse.active{height:auto}.path-mod-data .box>table>tbody>tr>td{display:block}.path-mod-forum .forumheaderlist thead .header{font-size:12px;font-weight:normal}.path-mod-forum .forumheaderlist .discussion .author,.path-mod-forum .forumheaderlist .discussion .replies,.path-mod-forum .forumheaderlist .discussion .lastpost{font-size:12px}.path-mod-forum .forumheaderlist .discussion .replies .unread a{padding:0}.navbar .nav-collapse.active{border-top:1px solid #d4d4d4}.navbar .nav-collapse.active.pull-left,.navbar .nav-collapse.active.pull-right{float:none}.navbar .nav-collapse.active>.nav{margin:0}.navbar .nav-collapse.active>.nav>li>a{padding-left:20px;border-radius:0}.navbar .nav-collapse.active>.nav .dropdown-menu{margin:0 0 0 15px}.navbar .nav-collapse.active>.nav .dropdown-menu li>a{border-radius:0}.navbar .nav-collapse.active .nav .dropdown-submenu .dropdown-toggle:after,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu .dropdown-toggle:after{display:inline-block;float:none;width:0;height:0;margin-top:8px;margin-left:4px;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-top-color:#d4d4d4;content:""}.navbar .nav-collapse.active .nav .dropdown-submenu.open>a,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu.open>a{background-color:#f2f2f2}.navbar .nav-collapse.active .nav .dropdown-submenu:hover .dropdown-menu,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover .dropdown-menu{display:none}.navbar .nav-collapse.active .nav .dropdown-submenu:hover.open>a,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover.open>a{background:#f2f2f2}.navbar .nav-collapse.active .nav .dropdown-submenu:hover.open>.dropdown-menu,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover.open>.dropdown-menu,.navbar .nav-collapse.active .nav .dropdown-submenu:hover.open .open>.dropdown-menu,.navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover.open .open>.dropdown-menu{display:block}.navbar .nav-collapse.active .nav .divider,.navbar .nav-collapse.active .nav .dropdown-menu .divider{display:block;width:auto;height:0;margin:4px 1px;border-top:1px solid #d4d4d4;border-right:0 none;border-bottom:1px solid #fff;border-left:0 none}.navbar.navbar-inverse .nav-collapse.active{border-top-color:#252525}.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-submenu .dropdown-toggle:after,.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-menu .dropdown-submenu .dropdown-toggle:after{border-top-color:#252525}.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-submenu.open>a,.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-menu .dropdown-submenu.open>a{background-color:#111}.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-submenu:hover.open>a,.navbar.navbar-inverse .nav-collapse.active .nav .dropdown-menu .dropdown-submenu:hover.open>a{background:#111}.dir-rtl .navbar .nav-collapse.active>.nav{margin:0}.dir-rtl .navbar .nav-collapse.active>.nav>li>a{padding-right:20px;padding-left:0}.dir-rtl .navbar .nav-collapse.active>.nav .dropdown-menu{margin:0 15px 0 0}.dir-rtl .navbar .nav-collapse.active .dropdown-menu>li>a{padding:9px 15px}.dir-rtl .navbar .nav-collapse.active .nav .dropdown-submenu .dropdown-toggle:after,.dir-rtl .navbar .nav-collapse.active .nav .dropdown-menu .dropdown-submenu .dropdown-toggle:after{margin-right:4px;margin-left:0}}@media(max-width:767px){#filesskin .yui3-panel,#filesskin .file-picker.fp-generallayout{left:0;width:100%}.userprofile dl.list dt{float:none;width:auto;clear:none;text-align:left}.userprofile dl.list dd{margin-left:0}#page-mod-wiki-create .mform .fitem div.fitemtitle{float:left}.container{width:auto}.row-fluid{width:100%}.row-fluid .span8.pull-right,.row-fluid .span9.pull-right{float:none}.row{margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.empty-region-side-post.used-region-side-pre #block-region-side-pre.span4,.jsenabled.docked-region-side-post.used-region-side-pre #block-region-side-pre.span4,.empty-region-side-post.used-region-side-pre #region-main.span8,.jsenabled.docked-region-side-post.used-region-side-pre #region-main.span8{width:100%;*width:99.94680851063829%}.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}div[role=main]{margin-bottom:1em}.coursebox .info .name a{background-position:0 13px}.category-browse .coursebox .info .name a{background-position:0 13px}}@media(min-width:1200px) and (max-width:1600px){#course-category-listings.columns-3{background-color:transparent;border:0}#course-category-listings.columns-3 #category-listing,#course-category-listings.columns-3 #course-listing{width:48.717948717948715%;*width:48.664757228587014%;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%}#course-category-listings.columns-3 #category-listing:first-child,#course-category-listings.columns-3 #course-listing:first-child{margin-left:0}#course-category-listings.columns-3 #course-detail{width:100%;*width:99.94680851063829%;margin:1em 0 0}}@media(max-width:1199px){.path-question #id_answerhdr div.fitem{padding-right:6px;padding-left:4px}#course-category-listings.columns-3{background-color:transparent;border:0}#course-category-listings.columns-3 #category-listing,#course-category-listings.columns-3 #course-listing,#course-category-listings.columns-3 #course-detail{width:100%;*width:99.94680851063829%;margin:0 0 1em 0}#page-mod-forum-discuss .discussioncontrols{text-align:right}#page-mod-forum-discuss .discussioncontrols .discussioncontrol{display:inline-block;float:none;width:auto;margin:0 3px .5em}#page-mod-forum-discuss .discussioncontrols .discussioncontrol select,#page-mod-forum-discuss .discussioncontrols .discussioncontrol input{margin-bottom:0}#page-mod-forum-discuss .discussioncontrols .discussioncontrol.movediscussion{padding-right:0;margin-right:0}#page-mod-forum-discuss.dir-rtl .discussioncontrols{text-align:left}}@media(max-width:768px){.fp-forminset .control-group .controls{margin-left:0}.dir-rtl .fp-formset .control-group label.control-label{float:none;text-align:right}.dir-rtl .fp-forminset .control-group label.control-label{float:none;text-align:right}.dir-rtl .fp-forminset .control-group .controls{margin-right:0}}.phpinfo table,.phpinfo th,.phpinfo h2{margin:auto;text-align:left}.phpinfo h2{width:600px}.phpinfo .e,.phpinfo .v,.phpinfo .h{font-size:.8em;color:#000;vertical-align:baseline;background-color:#ccc;border:1px solid #000}.phpinfo .e{font-weight:bold;background-color:#ccf}.phpinfo .h{font-weight:bold;background-color:#99c}#page-footer .performanceinfo{margin:10px 20%}#page-footer .performanceinfo span{display:block}#page-footer .validators{padding-top:5px;margin-top:40px;border-top:1px dotted gray}#page-footer .validators ul{padding:0;margin:0;list-style-type:none}#page-footer .validators ul li{display:inline;margin-right:10px;margin-left:10px}.performanceinfo .cachesused{margin-top:1em}.performanceinfo .cachesused .cache-stats-heading,.performanceinfo .cachesused .cache-total-stats{margin-top:.3em;font-size:110%;font-weight:bold}#page-footer .performanceinfo .cachesused .cache-definition-stats{display:inline-block;margin:.3em;vertical-align:top;background-color:#f5f5f5}.cache-store-stats{padding:0 1.3em}.cache-store-stats.nohits{background-color:#f2dede}.cache-store-stats.lowhits{background-color:#fcf8e3}.cache-store-stats.hihits{background-color:#dff0d8}#page-footer,#page-footer .validators,#page-footer .purgecaches,#page-footer .performanceinfo{text-align:center}table#explaincaps tbody>tr:nth-child(odd)>td,table#defineroletable tbody>tr:nth-child(odd)>td,table.grading-report tbody>tr:nth-child(odd)>td,table#listdirectories tbody>tr:nth-child(odd)>td,table.rolecaps tbody>tr:nth-child(odd)>td,table.userenrolment tbody>tr:nth-child(odd)>td,table#form tbody>tr:nth-child(odd)>td,form#movecourses table tbody>tr:nth-child(odd)>td,#page-admin-course-index .editcourse tbody>tr:nth-child(odd)>td,.forumheaderlist tbody>tr:nth-child(odd)>td,table.flexible tbody>tr:nth-child(odd)>td,.generaltable tbody>tr:nth-child(odd)>td,table#explaincaps tbody>tr:nth-child(odd)>th,table#defineroletable tbody>tr:nth-child(odd)>th,table.grading-report tbody>tr:nth-child(odd)>th,table#listdirectories tbody>tr:nth-child(odd)>th,table.rolecaps tbody>tr:nth-child(odd)>th,table.userenrolment tbody>tr:nth-child(odd)>th,table#form tbody>tr:nth-child(odd)>th,form#movecourses table tbody>tr:nth-child(odd)>th,#page-admin-course-index .editcourse tbody>tr:nth-child(odd)>th,.forumheaderlist tbody>tr:nth-child(odd)>th,table.flexible tbody>tr:nth-child(odd)>th,.generaltable tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.dir-rtl table#explaincaps td,.dir-rtl table#defineroletable td,.dir-rtl table.grading-report td,.dir-rtl table#listdirectories td,.dir-rtl table.rolecaps td,.dir-rtl table.userenrolment td,.dir-rtl table#form td,.dir-rtl form#movecourses table td,.dir-rtl .forumheaderlist td,.dir-rtl table.flexible td,.dir-rtl .generaltable td,.dir-rtl .generaltable thead:first-child tr:first-child td,.dir-rtl table#explaincaps th,.dir-rtl table#defineroletable th,.dir-rtl table.grading-report th,.dir-rtl table#listdirectories th,.dir-rtl table.rolecaps th,.dir-rtl table.userenrolment th,.dir-rtl table#form th,.dir-rtl form#movecourses table th,.dir-rtl .forumheaderlist th,.dir-rtl table.flexible th,.dir-rtl .generaltable th,.dir-rtl .generaltable thead:first-child tr:first-child th{text-align:right}#page-admin-course-index.dir-rtl .editcourse td,#page-admin-course-index.dir-rtl .editcourse th{text-align:right}#page-report-loglive-index .generaltable th,#page-admin-report-log-index .generaltable th,#page-report-log-user .generaltable th,#page-admin-user table th,.environmenttable th,.category_subcategories th,.rcs-results th,table#listdirectories th,#page-report-loglive-index .generaltable td,#page-admin-report-log-index .generaltable td,#page-report-log-user .generaltable td,#page-admin-user table td,.environmenttable td,.category_subcategories td,.rcs-results td,table#listdirectories td{padding:4px 5px}.user-enroller-panel .uep-search-results .users tbody tr:hover>td,table.grading-report tbody tr:hover>td,.forumheaderlist tbody tr:hover>td,.generaltable tbody tr:hover>td,table.flexible tbody tr:hover>td,.category_subcategories tbody tr:hover>td,table#modules tbody tr:hover>td,table#permissions tbody tr:hover>td,.user-enroller-panel .uep-search-results .users tbody tr:hover>th,table.grading-report tbody tr:hover>th,.forumheaderlist tbody tr:hover>th,.generaltable tbody tr:hover>th,table.flexible tbody tr:hover>th,.category_subcategories tbody tr:hover>th,table#modules tbody tr:hover>th,table#permissions tbody tr:hover>th{background-color:#f5f5f5}div[id^="bar_pbar_"]{height:20px!important;margin-bottom:20px!important;overflow:hidden!important;background-color:#f7f7f7!important;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9)!important;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9))!important;background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9)!important;background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9)!important;background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9)!important;background-repeat:repeat-x!important;border:none!important;-webkit-border-radius:4px!important;-moz-border-radius:4px!important;border-radius:4px!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0)!important;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)!important;-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)!important;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)!important}div[id^="progress_pbar_"]{float:left!important;height:100%!important;padding-top:0!important;font-size:12px!important;color:#fff!important;text-align:center!important;text-shadow:0 -1px 0 rgba(0,0,0,0.25)!important;background-color:#0e90d2!important;background-image:-moz-linear-gradient(top,#149bdf,#0480be)!important;background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be))!important;background-image:-webkit-linear-gradient(top,#149bdf,#0480be)!important;background-image:-o-linear-gradient(top,#149bdf,#0480be)!important;background-image:linear-gradient(to bottom,#149bdf,#0480be)!important;background-repeat:repeat-x!important;border:none!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0)!important;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15)!important;-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15)!important;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15)!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important;-webkit-transition:width .6s ease!important;-moz-transition:width .6s ease!important;-o-transition:width .6s ease!important;transition:width .6s ease!important}input.form-submit,input#id_submitbutton,input#id_submitbutton2,.path-admin .buttons input[type="submit"],td.submit input{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#005aa8;*background-color:#0038a8;background-image:-moz-linear-gradient(top,#0070a8,#0038a8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0070a8),to(#0038a8));background-image:-webkit-linear-gradient(top,#0070a8,#0038a8);background-image:-o-linear-gradient(top,#0070a8,#0038a8);background-image:linear-gradient(to bottom,#0070a8,#0038a8);background-repeat:repeat-x;border-color:#0038a8 #0038a8 #001e5c;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0070a8',endColorstr='#ff0038a8',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}input.form-submit:hover,input#id_submitbutton:hover,input#id_submitbutton2:hover,.path-admin .buttons input[type="submit"]:hover,td.submit input:hover,input.form-submit:focus,input#id_submitbutton:focus,input#id_submitbutton2:focus,.path-admin .buttons input[type="submit"]:focus,td.submit input:focus,input.form-submit:active,input#id_submitbutton:active,input#id_submitbutton2:active,.path-admin .buttons input[type="submit"]:active,td.submit input:active,input.form-submit.active,input#id_submitbutton.active,input#id_submitbutton2.active,.path-admin .buttons input[type="submit"].active,td.submit input.active,input.form-submit.disabled,input#id_submitbutton.disabled,input#id_submitbutton2.disabled,.path-admin .buttons input[type="submit"].disabled,td.submit input.disabled,input.form-submit[disabled],input#id_submitbutton[disabled],input#id_submitbutton2[disabled],.path-admin .buttons input[type="submit"][disabled],td.submit input[disabled]{color:#fff;background-color:#0038a8;*background-color:#002f8f}input.form-submit:active,input#id_submitbutton:active,input#id_submitbutton2:active,.path-admin .buttons input[type="submit"]:active,td.submit input:active,input.form-submit.active,input#id_submitbutton.active,input#id_submitbutton2.active,.path-admin .buttons input[type="submit"].active,td.submit input.active{background-color:#002775 \9}input.form-submit .caret,input#id_submitbutton .caret,input#id_submitbutton2 .caret,.path-admin .buttons input[type="submit"] .caret,td.submit input .caret{border-top-color:#fff;border-bottom-color:#fff}#notice .singlebutton+.singlebutton input,.submit.buttons input[name="cancel"]{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}#notice .singlebutton+.singlebutton input:hover,.submit.buttons input[name="cancel"]:hover,#notice .singlebutton+.singlebutton input:focus,.submit.buttons input[name="cancel"]:focus,#notice .singlebutton+.singlebutton input:active,.submit.buttons input[name="cancel"]:active,#notice .singlebutton+.singlebutton input.active,.submit.buttons input[name="cancel"].active,#notice .singlebutton+.singlebutton input.disabled,.submit.buttons input[name="cancel"].disabled,#notice .singlebutton+.singlebutton input[disabled],.submit.buttons input[name="cancel"][disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}#notice .singlebutton+.singlebutton input:active,.submit.buttons input[name="cancel"]:active,#notice .singlebutton+.singlebutton input.active,.submit.buttons input[name="cancel"].active{background-color:#ccc \9}#notice .singlebutton+.singlebutton input:first-child,.submit.buttons input[name="cancel"]:first-child{*margin-left:0}#notice .singlebutton+.singlebutton input:hover,.submit.buttons input[name="cancel"]:hover,#notice .singlebutton+.singlebutton input:focus,.submit.buttons input[name="cancel"]:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}#notice .singlebutton+.singlebutton input:focus,.submit.buttons input[name="cancel"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}#notice .singlebutton+.singlebutton input.active,.submit.buttons input[name="cancel"].active,#notice .singlebutton+.singlebutton input:active,.submit.buttons input[name="cancel"]:active{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)}#notice .singlebutton+.singlebutton input.disabled,.submit.buttons input[name="cancel"].disabled,#notice .singlebutton+.singlebutton input[disabled],.submit.buttons input[name="cancel"][disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#notice .singlebutton+.singlebutton input .label,.submit.buttons input[name="cancel"] .label,#notice .singlebutton+.singlebutton input .badge,.submit.buttons input[name="cancel"] .badge{position:relative;top:-1px}#notice .singlebutton+.singlebutton input,.submit.buttons input[name="cancel"]{margin:0 0 10px 5px}input[id$="_clearbutton"],input[type="reset"]{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;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;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}input[id$="_clearbutton"]:hover,input[type="reset"]:hover,input[id$="_clearbutton"]:focus,input[type="reset"]:focus,input[id$="_clearbutton"]:active,input[type="reset"]:active,input[id$="_clearbutton"].active,input[type="reset"].active,input[id$="_clearbutton"].disabled,input[type="reset"].disabled,input[id$="_clearbutton"][disabled],input[type="reset"][disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}input[id$="_clearbutton"]:active,input[type="reset"]:active,input[id$="_clearbutton"].active,input[type="reset"].active{background-color:#c67605 \9}input[id$="_clearbutton"] .caret,input[type="reset"] .caret{border-top-color:#fff;border-bottom-color:#fff} diff --git a/version.php b/version.php index ac061cf0288..5a9112154ba 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2014100200.01; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2014100600.04; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes.