[LON-CAPA-cvs] cvs: loncom /interface loncommon.pm lonpopulate.pm lonuserutils.pm

raeburn raeburn at source.lon-capa.org
Thu Jan 8 21:22:38 EST 2026


raeburn		Fri Jan  9 02:22:38 2026 EDT

  Modified files:              
    /loncom/interface	lonpopulate.pm loncommon.pm lonuserutils.pm 
  Log:
  - WCAG compliance for Automated Enrollment interface.
    - Include landmark for page's main content to support "Skip to main content"
    - Replace use of <table> with <div> for layout
    - Include labels for form elements
    - Replace <td> ... </td> with <th> ... </th> for navigation menu on left side.
    - Replace <font color= with <p style="color: etc.
  
  
-------------- next part --------------
Index: loncom/interface/lonpopulate.pm
diff -u loncom/interface/lonpopulate.pm:1.93 loncom/interface/lonpopulate.pm:1.94
--- loncom/interface/lonpopulate.pm:1.93	Fri Jan  9 01:49:34 2026
+++ loncom/interface/lonpopulate.pm	Fri Jan  9 02:22:38 2026
@@ -1,5 +1,5 @@
 # automated enrollment configuration handler
-# $Id: lonpopulate.pm,v 1.93 2026/01/09 01:49:34 raeburn Exp $
+# $Id: lonpopulate.pm,v 1.94 2026/01/09 02:22:38 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -243,7 +243,7 @@
             if (form.elements[radioname][i].checked) {
                 if ((form.elements[radioname][i].value == 'zero') || (form.elements[radioname][i].value == 'any') || ((form.elements[radioname][i].value == 'dom') && (includedom == 1))) {
                     if (document.getElementById(divid)) {
-                        document.getElementById(divid).style.display = 'inline-block';
+                        document.getElementById(divid).style.display = 'inline';
                     }
                     setvis = 1;
                 }
@@ -307,29 +307,25 @@
     <br />
     <table width="100%" border="0" cellpadding="0" cellspacing="0" class="LC_pick_box">
     <tr class="LC_pick_box_row">
-      <td valign="top" class="LC_pick_box_title">
+      <th valign="top" class="LC_pick_box_title">
 ');
     foreach my $task (@{$tasksref}) {
         if (($task eq $action) && ($state eq 'choose')) {
             $r->print(' 
-   <p>
-   <font color="#999999">
+   <p style="color: #A32E59;">
     <b>'.$tasklongref->{$task}.'</b><br/>
-   </font>
    </p>'); 
         } else {
             $r->print('
-   <p>
-   <font color="#004263">
-    <b><a href="/adm/populate?action='.$task.'">'.$tasklongref->{$task}.'</a></b><br/>
-   </font> 
+   <p style="color: #004263">
+    <a href="/adm/populate?action='.$task.'"><b>'.$tasklongref->{$task}.'</b></a><br/>
    </p>');
 
         }
     }
     $r->print('
   <p> </p>
-  </td>
+  </th>
   <td valign="top" class="LC_pick_box_value">');
 }
 
@@ -359,183 +355,139 @@
   }
 
   if ($action eq 'information') {
-      $r->print('
-          <br /><table border="0" width="100%">
-            <tr>
-              <td> </td>
-              <td><b>'.&mt('Use the menu on the left to choose an enrollment management task.').'</b><br /><br /></td>
-            </tr>');
+      $r->print('<br />
+          <div class="LC_autoenroll_heading">
+            <h2 class="LC_heading_3">'.&mt('Use the menu on the left to choose an enrollment management task.').'</h2>
+          </div>');
       if ($permref->{'edit'}) {
           $r->print(' 
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Automated adds/drops[_2] to enable or disable automatic nightly adds or drops in your LON-CAPA course based on institutional enrollment information.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Change enrollment dates[_2] to change the date of first automated enrollment and/or the date of last automated enrollment for registered students.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Change access dates[_2] to change the default start and/or end dates for student roles created by automated enrollment.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Notification of changes[_2] to enable or disable notification of enrollment changes and to add or remove course coordinators from the recipient list.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Change crosslisting[_2] to include or exclude enrollment from crosslisted classes.',
-                        '<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Section settings[_2] to make changes to the choice of sections included for enrollment in your LON-CAPA course.',
-                        '<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Student photo settings[_2] to enable or disable automatic import of photos for registered students in your course.',
-                        '<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Update roster now[_2] to add and/or drop students from your course based on the [_3]most current[_4] institutional classlist information.','<i>"','"</i>','<b>','</b>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt("Use [_1]Update student photos[_2] to import your institution's [_3]most current[_4] digital photos for registered students in your course.",'<i>"','"</i>','<b>','</b>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]View students and change type[_2] to display the current course roster, and (optionally) change enrollment type for selected students from "auto" to "manual" and vice versa.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-             <td> </td>
-             <td>'.&mt('Use [_1]View/change enrollment failsafe[_2] to (a) set number of drops from existing enrollments in an institutional section above which no automated drops will occur (e.g., when section enrollment retrieved from institutional data is incomplete) and (b) set whether this only applies when retrieved data contains zero records for the institutional section.','<i>"','"</i>').'</td>
-            </tr>');
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]Automated adds/drops[_2] to enable or disable automatic nightly adds or drops in your LON-CAPA course based on institutional enrollment information.','<i>"','"</i>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]Change enrollment dates[_2] to change the date of first automated enrollment and/or the date of last automated enrollment for registered students.','<i>"','"</i>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]Change access dates[_2] to change the default start and/or end dates for student roles created by automated enrollment.','<i>"','"</i>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]Notification of changes[_2] to enable or disable notification of enrollment changes and to add or remove course coordinators from the recipient list.','<i>"','"</i>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]Change crosslisting[_2] to include or exclude enrollment from crosslisted classes.',
+                  '<i>"','"</i>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]Section settings[_2] to make changes to the choice of sections included for enrollment in your LON-CAPA course.',
+                  '<i>"','"</i>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]Student photo settings[_2] to enable or disable automatic import of photos for registered students in your course.',
+                  '<i>"','"</i>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]Update roster now[_2] to add and/or drop students from your course based on the [_3]most current[_4] institutional classlist information.','<i>"','"</i>','<b>','</b>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt("Use [_1]Update student photos[_2] to import your institution's [_3]most current[_4] digital photos for registered students in your course.",'<i>"','"</i>','<b>','</b>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]View students and change type[_2] to display the current course roster, and (optionally) change enrollment type for selected students from "auto" to "manual" and vice versa.','<i>"','"</i>').'
+          </div>
+          <div class="LC_autoenroll">
+            '.&mt('Use [_1]View/change enrollment failsafe[_2] to (a) set number of drops from existing enrollments in an institutional section above which no automated drops will occur (e.g., when section enrollment retrieved from institutional data is incomplete) and (b) set whether this only applies when retrieved data contains zero records for the institutional section.','<i>"','"</i>').'
+          </div>');
       } else {
           if (($permref->{'view'}) || ($permref->{'view_section'} ne '')) {
               $r->print('
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Automated adds/drops[_2] to display status of automatic nightly adds or drops based on institutional enrollment information.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Enrollment dates[_2] to display the date of first automated enrollment and last automated enrollment for registered students.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Access dates[_2] to display the default start and/or end dates for student roles created by automated enrollment.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Notification of changes[_2] to display which course coordinators (if any) receive notification of enrollment changes.','<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Crosslisting[_2] to display enrollment settings for crosslisted classes.',
-                        '<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Section settings[_2] to display sections included for enrollment.',
-                        '<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]Student photo settings[_2] to display settings for automatic import of photos for registered students.',
-                        '<i>"','"</i>').'</td>
-            </tr>
-            <tr>
-             <td> </td>
-             <td>'.&mt('Use [_1]Enrollment failsafe[_2] to display (a) number of drops from existing enrollments in an institutional section above which no automated drops occur (e.g., when section enrollment retrieved from institutional data is incomplete), and (b) whether this only applies when retrieved data contains zero records for the institutional section.','<i>"','"</i>').'</td>
-            </tr>');
+            <div class="LC_autoenroll">
+              '.&mt('Use [_1]Automated adds/drops[_2] to display status of automatic nightly adds or drops based on institutional enrollment information.','<i>"','"</i>').'
+            </div>
+            <div class="LC_autoenroll">
+              '.&mt('Use [_1]Enrollment dates[_2] to display the date of first automated enrollment and last automated enrollment for registered students.','<i>"','"</i>').'
+            </div>
+            <div class="LC_autoenroll">
+              '.&mt('Use [_1]Access dates[_2] to display the default start and/or end dates for student roles created by automated enrollment.','<i>"','"</i>').'
+            </div>
+            <div class="LC_autoenroll">
+              '.&mt('Use [_1]Notification of changes[_2] to display which course coordinators (if any) receive notification of enrollment changes.','<i>"','"</i>').'
+            </div>
+            <div class="LC_autoenroll">
+              '.&mt('Use [_1]Crosslisting[_2] to display enrollment settings for crosslisted classes.',
+                    '<i>"','"</i>').'
+            </div>
+            <div class="LC_autoenroll">
+              '.&mt('Use [_1]Section settings[_2] to display sections included for enrollment.',
+                    '<i>"','"</i>').'
+            </div>
+            <div class="LC_autoenroll">
+              '.&mt('Use [_1]Student photo settings[_2] to display settings for automatic import of photos for registered students.',
+                    '<i>"','"</i>').'
+            </div>
+            <div class="LC_autoenroll">
+             '.&mt('Use [_1]Enrollment failsafe[_2] to display (a) number of drops from existing enrollments in an institutional section above which no automated drops occur (e.g., when section enrollment retrieved from institutional data is incomplete), and (b) whether this only applies when retrieved data contains zero records for the institutional section.','<i>"','"</i>').'
+            </div>');
           }
           if (($permref->{'show'}) || ($permref->{'show_section'} ne '')) {
               $r->print('
-            <tr>
-              <td> </td>
-              <td>'.&mt('Use [_1]View students and enrollment type[_2] to display the current course roster and enrollment type ("auto" or "manual").','<i>"','"</i>').'</td>
-            </tr>');
+            <div class="LC_autoenroll">
+              '.&mt('Use [_1]View students and enrollment type[_2] to display the current course roster and enrollment type ("auto" or "manual").','<i>"','"</i>').'
+            </>div');
           }
           $r->print('
-            <tr>
-             <td colspan="2"> </td>
-            </tr>
-            <tr>
-             <td> </td>
-             <td><b>'.&mt('Note: if automated adds and/or drops are enabled, the nightly enrollment update will ONLY occur once the first enrollment date has been reached.').'</b></td>
-            </tr>
-          </table>');
+            <div class="LC_autoenroll">
+              <p>
+              <b>'.&mt('Note: if automated adds and/or drops are enabled, the nightly enrollment update will ONLY occur once the first enrollment date has been reached.').'</b>
+              </p>
+            </div>');
       }
   } elsif ($action eq 'chgsettings') {
       my @autosets = (&mt('OFF'),&mt('ON'));
       $r->print('
                   <form name="enter" method="post" action=""><br />
-		  <table width="100%" border="0" cellpadding="2" cellspacing="2">
-		   <tr>
-		    <td align="left"><b>'.$$tasktitleref{$action}.'</b><br />
+                  <div class="LC_autoenroll_heading">
+		   <h2 class="LC_heading_3">'.$$tasktitleref{$action}.'</h2>
 		       '.&mt('Currently: Nightly adds: [_1], Nightly drops: [_2]',"<i>$autosets[$enrollvar{autoadds}]</i>","<i>$autosets[$enrollvar{autodrops}]</i>").'
-		    </td>
-                   </tr>
-		  </table>
-		  <table width="100%" border="0" cellpadding="3" cellspacing="3">
-		    <tr>
-		     <td>
-		        '.&mt('Additions based on classlist changes:').'  ');
+		  </div>');
+      my ($addscheckedon,$addscheckedoff,$dropscheckedon,$dropscheckedoff);
       if ($enrollvar{autoadds}) {
-          $r->print('
-			    <label><input type="radio" name="autoadds" value="1" checked="checked"'.$disabled.' /> '.
-                            &mt('Enable').'   </label>
-			    <label><input type="radio" name="autoadds" value="0"'.$disabled.' /> '.
-                            &mt('Disable').'</label>');
+          $addscheckedon = ' checked="checked"';
       } else {
-          $r->print('
-                            <label><input type="radio" name="autoadds" value="1"'.$disabled.' /> '.
-                            &mt('Enable').'   </label>
-                            <label><input type="radio" name="autoadds" value="0" checked="checked"'.$disabled.' /> '.
-                            &mt('Disable').'</label>');
+          $addscheckedoff = ' checked="checked"';
       }
-      $r->print('
-              </td>
-             </tr>
-             <tr>
-              <td>
- 	       '.&mt('Removals based on classlist changes:').'  ');
       if ($enrollvar{autodrops}) {
-          $r->print('
-                <label><input type="radio" name="autodrops" value="1" checked="checked"'.$disabled.' /> '.
-                &mt('Enable').'   </label>
-                <label><input type="radio" name="autodrops" value="0"'.$disabled.' /> '.
-                &mt('Disable').'</label>');
+          $dropscheckedon = ' checked="checked"';        
       } else {
-          $r->print('
-                <label><input type="radio" name="autodrops" value="1"'.$disabled.' /> '.
-                &mt('Enable').'   </label>
-                <label><input type="radio" name="autodrops" value="0" checked="checked"'.$disabled,' /> '.
-                &mt('Disable').'</label>');
+          $dropscheckedoff = ' checked="checked"';
       }
-      $r->print('
-              </td>
-             </tr>
-             <tr>
-              <td>
-               <span style="color: #888888">'.
-&mt('Note: Any students added manually by course coordinators using the User Manager will be unaffected by the nightly removal process if you choose to enable it.').'
-               </span>
-              </td>
-             </tr>
-             <tr>
-              <td align="right">
-               <input type="button" name="chgsettings" value="'.&mt('Go').'" onclick="process('."'chgsettings'".')"'.$disabled.' />
-	      </td>
-             </tr>
-	    </table>
-            <input type="hidden" name="action" value="'.$action.'" />
-            <input type="hidden" name="state" value="process" />
-            </form>'."\n");
+      $r->print('<div class="LC_autoenroll">
+	         <div class="LC_floatleft" style="margin-top:0;"><fieldset class="LC_autoaddsdrops"><legend>'
+               .&mt('Additions based on classlist changes').'</legend>
+<label><input type="radio" name="autoadds" value="1"'.$addscheckedon.$disabled.' /> 
+'.&mt('Enable').'   </label>
+<label><input type="radio" name="autoadds" value="0"'.$addscheckedoff.$disabled.' /> 
+'.&mt('Disable').'</label>
+</fieldset>
+</div>
+<div class="LC_floatleft" style="margin-top:0;">
+<fieldset class="LC_autoaddsdrops"><legend>'.&mt('Removals based on classlist changes').'</legend>
+<label><input type="radio" name="autodrops" value="1"'.$dropscheckedon.$disabled.' /> 
+'.&mt('Enable').'   </label>
+<label><input type="radio" name="autodrops" value="0"'.$dropscheckedoff.$disabled.' /> 
+'.&mt('Disable').'</label>
+</fieldset>
+</div>
+<div style="padding:0;clear:both;margin:0;border:0"></div>
+</div>
+<div class="LC_autoenroll" style="color: #888888"> 
+'.&mt('Note: Any students added manually by course coordinators using the User Manager will be unaffected by the nightly removal process if you choose to enable it.').'
+</div>
+<div style="text-align: right;">
+<input type="button" name="chgsettings" value="'.&mt('Go').'" onclick="process('."'chgsettings'".')"'.$disabled.' />
+</div>
+<input type="hidden" name="action" value="'.$action.'" />
+<input type="hidden" name="state" value="process" />
+</form>'."\n");
   } elsif ($action eq 'chgfailsafe') {
       my ($autofailsafe,$failsafetype,$failsafesty,%failsafechecked);
       $failsafesty = 'inline-block';
@@ -583,19 +535,17 @@
       }
       $r->print('
           <form name="enter" method="post" action=""><br />
-           <table width="100%" border="0" cellpadding="2" cellspacing="2">
-            <tr>
-             <td align="left"><b>'.$$tasktitleref{$action}.'</b><br /><p>'.
+           <div class="LC_autoenroll_heading">
+             <h2 class="LC_heading_3">'.$$tasktitleref{$action}.'</h2><p>'.
              &mt('The "failsafe" mechanism for automated enrollment can prevent unwanted expiration of student roles for registered students in an institutional section, in the case where either no enrollment, or only partial enrollment, is returned for that particular section because of a temporary institutional data retrieval problem external to LON-CAPA.').'</p>'.
             '<p>'.&mt('For example if the threshold is set to 10, and the current LON-CAPA enrollment count is 11 or more for a particular course section, no role expiration will occur if the latest retrieved enrollment count is zero for that institutional section (or cross-listing).').'</p>');
       if ($enrollvar{'autodropfailsafe'} eq '') {
-          $r->print('<p>'.&mt('Currently no course-specific failsafe threshold is set.').' ');
+          $r->print(&mt('Currently no course-specific failsafe threshold is set.').' ');
           if ($autofailsafe eq '') {
               $r->print(&mt('Currently no domain default failsafe is set either.'));
           } else {
               $r->print(&mt('The current domain default of [_1] will apply unless a value is set here specific to this course.','<b>'.$autofailsafe.'</b>'));
           }
-          $r->print('</p>');
       } else {
           unless (($enrollvar{'autodropfailsafetype'} eq 'off') || 
                   (($enrollvar{'autodropfailsafetype'} eq '') && ($failsafetype eq 'off'))) {
@@ -625,42 +575,31 @@
           }
       }
       $r->print('
-             </td>
-            </tr>
-           </table>
-           <table width="100%" border="0" cellpadding="3" cellspacing="3">
-             <tr>
-             <td><b>'.&mt('Condition for use of failsafe in this course').'</b><br />
+           </div>
+           <div class="LC_autoenroll">
+             <fieldset style="display: inline;"><legend>'.&mt('Condition for use of failsafe in this course').'</legend>
              <span class="LC_nobreak"><label><input type="radio" name="autodropfailsafetype" value="dom" onclick="toggleFailsafe(this.form);"'.$failsafechecked{'dom'}.$disabled.' />'.&mt('Use domain default').'</label></span> -- '.$domdefault.'<br />
              <span class="LC_nobreak"><label><input type="radio" name="autodropfailsafetype" value="zero" onclick="toggleFailsafe(this.form);"'.$failsafechecked{'zero'}.$disabled.' />'.&mt('Failsafe will apply if retrieved institutional section enrollment is zero.').'</label></span><br />
              <span class="LC_nobreak"><label><input type="radio" name="autodropfailsafetype" value="any" onclick="toggleFailsafe(this.form);"'.$failsafechecked{'any'}.$disabled.' />'.&mt('Failsafe will apply if retrieved institutional section enrollment is zero or greater.').'</label></span><br />
              <span class="LC_nobreak"><label><input type="radio" name="autodropfailsafetype" value="off" onclick="toggleFailsafe(this.form);"'.$failsafechecked{'off'}.$disabled.' />'.&mt('Failsafe will not be in use in this course.').'</label></span><br />
-             <div class="LC_floatleft" style="display:'.$failsafesty.';" id="autodropfailsafe">
-             <span class="LC_nobreak"><b>'.
-             &mt('Failsafe threshold (enter an integer)').'</b>  
-             <input type="text" name="autodropfailsafe" value="'.$enrollvar{'autodropfailsafe'}.'" size="4"'.$disabled.' /></span><br />');
+             </fieldset>
+             <fieldset style="display:'.$failsafesty.';" id="autodropfailsafe">
+             <legend>'.&mt('Failsafe threshold').'</legend>
+             <span class="LC_nobreak"><label>'.
+             &mt('Enter an integer').':
+             <input type="text" name="autodropfailsafe" value="'.$enrollvar{'autodropfailsafe'}.'" size="4"'.$disabled.' /></label></span><br />');
        if ($autofailsafe) {
            $r->print(&mt('Leave blank to use domain default of [_1].','<b>'.$autofailsafe.'</b>'));
        } else {
            $r->print(&mt('As no domain default is set, failsafe will not be used if blank.'));
        }
-       $r->print('</div>
-             </td>
-            </tr>
-            <tr>
-              <td> </td>
-            </tr>
-            <tr>
-              <td>'.&mt('Push "Go" to save your changes').'
-            <tr>
-              <td> </td>
-            </tr>
-            <tr>
-             <td align="right">
+       $r->print('</fieldset></div>
+            <div class="LC_autoenroll">
+              '.&mt('Push "Go" to save your changes').'
+            </div>
+            <div class="LC_autoenroll" style="text-align: right;">
               <input type="button" name="updatefailsafe" value="'.&mt('Go').'" onclick="'."process('chgfailsafe')".'"'.$disabled.' />
-             </td>
-            </tr>
-           </table>
+            </div>
            <input type="hidden" name="action" value="'.$action.'" />
            <input type="hidden" name="state" value="process" />
            </form>'."\n");
@@ -686,60 +625,36 @@
                          " -- <b><i>$oldstartshow</i></b>"," -- <b><i>$oldendshow</i></b>")."\n";
       }
       $r->print('
-                  <form name="enter" method="post" action=""><br />              
-                  <table width="100%" border="0" cellpadding="2" cellspacing="2">
-	           <tr>
-	            <td align="left"><b>'.$$tasktitleref{$action}.'</b><br /><br />
-                     '.$dateshow.'
-	            </td>
-                   </tr>
-	          </table>
-                  <table width="100%" border="0" cellpadding="3" cellspacing="3">
-                   <tr>
-                    <td align="left" colspan="2">
-                     <table border="0" cellspacing="0" cellpadding="2">
-                      <tr>
-                       <td colspan="3">
-                        <i>'.&mt('Set date of first automated enrollment for registered students').'</i>
-                       </td>
-                      </tr>
-                      <tr>
-                       <td>'.$start_table.'
-                       </td>
-                      </tr>
-                     </table>
-                    </td>
-                   </tr>
-                   <tr>
-                    <td colspan="2"><span style="color: #888888">'.
-                    &mt('If automated adds and/or drops are enabled, then your class roster will be automatically updated nightly, once the first enrollment date has been reached. Prior to this date, the class roster will only contain students you have added directly using the standard LON-CAPA enrollment tools.').'</span></td>
-                   </tr>
-                   <tr>
-                    <td align="left" colspan="2">
-                     <table border="0" cellspacing="0" cellpadding="2">
-                      <tr>
-                       <td colspan="3">
-                        <i>'.&mt('Set date of last automated enrollment for registered students').'</i>
-                       </td>
-                      </tr>
-                      <tr>
-                       <td>'.$end_table.'
-                       </td>
-                      </tr>
-                     </table>
-                    </td>
-                   </tr>
-                   <tr>
-                    <td colspan="2"><span style="color: #888888">'.&mt('If automated adds and/or drops are enabled, then your class roster will be automatically updated nightly, until the last enrollment date has been reached.').'</span></td>
-                   </tr>
-                  </table>
-                  <table width="100%">
-                   <tr>
-                    <td align="right">
-                      <input type="button" name="setdates" value="'.&mt('Go').'" onclick="process('."'setdates'".')"'.$disabled.' />
-                    </td>
-	           </tr>
-                  </table>
+                  <form name="enter" method="post" action=""><br />
+                  <div class="LC_autoenroll_heading">
+	            <h2 class="LC_heading_3">'.$$tasktitleref{$action}.'</h2>
+                  </div>
+                  <div class="LC_autoenroll">
+                    '.$dateshow.'
+                  </div>
+                  <div class="LC_autoenroll">
+                    <br />
+                    <i>'.&mt('Set date of first automated enrollment for registered students').'</i>
+                  </div> 
+                  <div class="LC_autoenroll">
+                    '.$start_table.'
+                  </div>
+                  <div class="LC_autoenroll" style="color: #888888">
+                    '.&mt('If automated adds and/or drops are enabled, then your class roster will be automatically updated nightly, once the first enrollment date has been reached. Prior to this date, the class roster will only contain students you have added directly using the standard LON-CAPA enrollment tools.').'
+                  </div>
+                  <div class="LC_autoenroll">
+                    <br />
+                    <i>'.&mt('Set date of last automated enrollment for registered students').'</i>
+                  </div>
+                  <div class="LC_autoenroll">
+		     '.$end_table.'
+                  </div>
+                  <div class="LC_autoenroll" style="color: #888888">
+                    '.&mt('If automated adds and/or drops are enabled, then your class roster will be automatically updated nightly, until the last enrollment date has been reached.').'
+                  </div>
+                  <div style="text-align: right;">
+                    <input type="button" name="setdates" value="'.&mt('Go').'" onclick="process('."'setdates'".')"'.$disabled.' />
+                  </div>
                   <input type="hidden" name="action" value="'.$action.'" />
                   <input type="hidden" name="state" value="process" />
                   </form>
@@ -747,13 +662,9 @@
   } elsif ($action eq 'setaccess') {
       &print_accessdate_table($r,\%enrollvar,$tasktitleref,$action,$readonly);
       $r->print('
-                  <table width="100%">
-                   <tr>
-                    <td align="right">
-                      <input type="button" name="'.$action.'" value="'.&mt('Go').'" onclick="'."process('$action')".'"'.$disabled.' />
-                    </td>
-                   </tr>
-                  </table>
+                  <div style="text-align: right;">
+                    <input type="button" name="'.$action.'" value="'.&mt('Go').'" onclick="'."process('$action')".'"'.$disabled.' />
+                  </div>
                   <input type="hidden" name="action" value="'.$action.'" />
                   <input type="hidden" name="state" value="process" />
                   </form>
@@ -797,34 +708,26 @@
               }
           }
       }
-      $r->print('
-                  <form name="enter" method="post" action=""><br />
-                   <table width="100%" border="0" cellpadding="6" cellspacing="0">
-                    <tr>
-                     <td align="left"><b>'.$tasktitleref->{$action}.'</b><br />'.
-                      &mt('Currently -- Notification:').' '.$noteset.'
-                     </td>
-                    </tr>
-                   </table>
-                   <table width="100%" border="0" cellpadding="3" cellspacing="3">
-                    <tr>
-                     <td>'.
-                     &mt('Notification of LON-CAPA course roster changes resulting from nightly automated enrollment process?')
-      );
+      my ($notifyonchecked,$notifyoffchecked);
+      my $notifyonchecked = ' checked="checked"';
       if ($notifycount) {
-          $r->print('
-                        <label><input type="radio" name="notify" value="1" checked="checked"'.$disabled.' /> '.&mt('Yes').'   </label>
-                        <label><input type="radio" name="notify" value="0"'.$disabled.' /> '.&mt('No').'</label>
-          ');
+          $notifyonchecked = ' checked="checked"';
       } else {
-          $r->print('
-                        <label><input type="radio" name="notify" value="1"'.$disabled.' /> '.&mt('Yes').'   </label>
-                        <label><input type="radio" name="notify" value="0" checked="checked"'.$disabled.' /> '.&mt('No').'</label>
-          ');
+          $notifyoffchecked = ' checked="checked"';
       }
       $r->print('
-              </td>
-             </tr>
+                  <form name="enter" method="post" action=""><br />
+                   <div class="LC_autoenroll_heading">
+                     <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>'.
+                       &mt('Currently -- Notification:').' '.$noteset.'
+                   </div>
+                   <div class="LC_autoenroll">
+                     '.&mt('Notification of LON-CAPA course roster changes resulting from nightly automated enrollment process?').'
+                    <fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.&mt('Receive roster change notification').'</legend>
+                      <label><input type="radio" name="notify" value="1"'.$notifyonchecked.$disabled.' /> '.&mt('Yes').'   </label>
+                      <label><input type="radio" name="notify" value="0"'.$notifyoffchecked.$disabled.' /> '.&mt('No').'</label>
+                    </fieldset>
+                   </div>
       ');
       my %coursepersonnel = &Apache::lonnet::dump('nohist_userroles',$dom,$crs);
       my @ccs;
@@ -874,24 +777,25 @@
       if (@ccs > 0) {
           @ccs = sort @ccs;
           $r->print('
-             <tr>
-               <td>'.&mt('The table below contains a list of [_1]s in this course.',&Apache::lonnet::plaintext('cc')).'
-              </td>
-             </tr>
-             <tr>
-              <td>
+             <br />
+             <div class="LC_autoenroll">
+               '.&mt('The table below contains a list of [_1]s in this course.',&Apache::lonnet::plaintext('cc')).'
+             </div>
+             <div class="LC_autoenroll">
           ');
           $r->print(&notifier_tables('cc',\%lt,\@ccs,\%status,\%notifystate,
                                      \%pname,\$notifyshow,undef,undef,$disabled));
-          $r->print('</td></tr>');
+          $r->print('
+             </div>
+          ');
       } else {
           $r->print('
-             <tr>
-              <td>'.
-             &mt('No [_1]s found.',
-                 &Apache::lonnet::plaintext('cc')).'
-            </td>
-           </tr>
+             <br />
+             <br />
+             <div class="LC_autoenroll">
+             '.&mt('No [_1]s found.',
+                   &Apache::lonnet::plaintext('cc')).'
+             </div>
           ');
       }
       my $viewer = $env{'user.name'}.':'.$env{'user.domain'};
@@ -927,49 +831,43 @@
       my $showdomnum = scalar(@showdom);
       if ($showdomnum) {
           $r->print('
-             <tr>
-              <td> </td>
-             </tr><tr>
-              <td>');
+             <br />
+             <div class="LC_autoenroll">
+          ');
           if ($showalldc) {
               $r->print(&mt("The table below contains a list of [_1]s from this course's domain who are not also [_2]s.",&Apache::lonnet::plaintext('dc'),&Apache::lonnet::plaintext('cc')));
           } else {
               $r->print(&mt("The table below contains a list of [_1]s from this course's domain who currently receive notification, and are not also [_2]s.",&Apache::lonnet::plaintext('dc'),&Apache::lonnet::plaintext('cc')));
           }
           $r->print('
-              </td>
-             </tr>
-             <tr>
-              <td>');
+             <br />
+             </div>
+             <div class="LC_autoenroll">
+          ');
           $r->print(&notifier_tables('dc',\%lt,\@showdom,\%status,\%notifystate,\%pname,
                                      \$notifyshow,\@olddomcoord,\@futuredomcoord,$disabled));
           $r->print('
-             </td>
-          </tr>');
+             </div>
+          ');
       }
       if (@ccs > 0 || @showdom > 0) {
-          $r->print('<tr><td> </td></tr><tr><td>');
-          if ($notifycount) {
+         $r->print('<div class="LC_autoenroll">
+                    <br />
+         ');
+         if ($notifycount) {
               $r->print(&mt('Uncheck the checkbox(es) to terminate notification for people currently informed of roster changes from the nightly enrollment update.').'<br />');
          }
          if ((@ccs + @showdom) > $notifycount) {
              $r->print(&mt('Check the checkbox(es) to initiate notification for people not currently informed of roster changes from the nightly enrollment update.').'<br />');
          }
          $r->print(&mt("Click 'Go' to save your changes.").'
-           <br />
-           <table width="100%" border="0" cellpadding="2" cellspacing="2">
-            <tr>
-             <td align="right">
-              <input type="button" name="notifyset" value="'.&mt('Go').'" onclick="'."process('notify')".'"'.$disabled.' />
-             </td>
-            </tr>
-           </table>
-          </td>
-         </tr>
-      ');
+                   <br />
+                   <div style="text-align: right;">
+                     <input type="button" name="notifyset" value="'.&mt('Go').'" onclick="'."process('notify')".'"'.$disabled.' />
+                   </div>
+         ');
       }
       $r->print('
-      </table>
       <input type="hidden" name="notifyshow" value="'.$notifyshow.'" />
       <input type="hidden" name="action" value="'.$action.'" />
       <input type="hidden" name="state" value="process" />
@@ -983,9 +881,8 @@
       my $cross_str = @xlists;
       $r->print('
             <form name="enter" method="post" action=""><br />
-            <table width="100%" border="0" cellpadding="2" cellspacing="2">
-             <tr>
-              <td align="left"><b>'.$tasktitleref->{$action}.'</b><br />
+            <div class="LC_autoenroll_heading">
+              <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>
       ');
       if ($cross_str > 0) {
           $r->print(
@@ -997,64 +894,64 @@
               &mt('If you wish to add new crosslisted courses, enter the number of new courses to add in the textbox at the bottom of the page.').' '.
               &mt('You will provide information about each of the new crosslistings on a subsequent page.').' '.
               &mt("Click 'Go' to save your changes.").'
-              </td>
-             </tr>
-            </table>
-            <br />
+            </div>
+            <div class="LC_autoenroll">
           ');
           $r->print(&Apache::loncommon::start_data_table());
-          $r->print(&Apache::loncommon::start_data_table_row());
+          $r->print(&Apache::loncommon::start_data_table_header_row());
           $r->print('
                  <th>'.&mt('Enrollment?').'</th>
                  <th>'.&mt('Crosslisted course').'</th>
                  <th>'.&mt('LON-CAPA section ID').'</th>
           ');
-          $r->print(&Apache::loncommon::end_data_table_row());
+          $r->print(&Apache::loncommon::end_data_table_header_row());
           my @showable;
           &reformat_xlists($dom,$crs,$enrollvar{'coursecode'},\@xlists,\@showable);
           for (my $i=0; $i<@showable; $i++) {
               my $xl = ' ';
               my $lc_sec = ' ';
+              my ($showxl,$shownum,$total,$chktext,$sectext);
               if ($showable[$i] =~ /^([^:]+):?(.*)$/) {
                   $xl = $1;
+                  $showxl = $xl;
                   $lc_sec = $2;
-              }               
+              }
+              $shownum = $i+1;
+              $total = scalar(@showable);
+              if ($showxl) {
+                  $chktext = &mt('Enrollment active for crosslisting: [_1]',$showxl);
+                  $sectext = &mt('Optional section ID for crosslisting: [_1]',$showxl);
+              } else {
+                  $chktext = &mt('Enrollment active for existing crosslisting ([_1] of [_2])',
+                                 $shownum,$total);
+                  $sectext = &mt('Optional section ID for existing crosslisting ([_1] of [_2])',
+                                 $shownum,$total); 
+              }
               $r->print(&Apache::loncommon::start_data_table_row());
               $r->print('
-                 <td><input type="checkbox" name="cross_'.$i.'" checked="checked"'.$disabled.' /></td>
+                 <td><input type="checkbox" name="cross_'.$i.'" checked="checked"'.$disabled.' aria-label="'.$chktext.'" /></td>
                  <td>'.$xl.'</td>
-                 <td><input type="text" size="10" name="lcsec_'.$i.'" value="'.$lc_sec.'"'.$disabled.' /></td>
+                 <td><input type="text" size="10" name="lcsec_'.$i.'" value="'.$lc_sec.'"'.$disabled.' aria-label="'.$sectext.'"/></td>
               ');
               $r->print(&Apache::loncommon::end_data_table_row());
           }
-          $r->print(&Apache::loncommon::end_data_table());
-      }
-      else {
-          $r->print(
-                &mt('Currently no crosslisted courses are recorded for [_1].',$enrollvar{coursecode}).'
-              </td>
-             </tr>
-            </table>
+          $r->print(&Apache::loncommon::end_data_table().
+                    '</div>');
+      } else {
+          $r->print('
+                '.&mt('Currently no crosslisted courses are recorded for [_1].',$enrollvar{coursecode}).'
+               </div>
           ');
       }
       $r->print('   
             <br />
-            <table width="100%" border="0" cellpadding="3" cellspacing="3">
-             <tr>
-              <td align="left">
+            <div class="LC_autoenroll">
                <b>'.&mt('Add new crosslistings.').'</b><br />'.
-               &mt('Number of new crosslistings to add:[_1]','  <input type="text" size="2" name="numcross" value="0"'.$disabled.' />').'
-              </td>
-             </tr>
-            </table>
-            <br />
-            <table width="100%" border="0" cellpadding="2" cellspacing="2">
-             <tr>
-              <td align="right">
+               '<label>'.&mt('Number of new crosslistings to add:[_1]','  <input type="text" size="2" name="numcross" value="0"'.$disabled.' /></label>').'
+            </div>
+            <div style="text-align: right;"> 
                <input type="button" name="crosslist" value="',&mt('Go').'" onclick="'."process('crosslist')".'"'.$disabled.' />
-              </td>
-             </tr>
-            </table>
+            </div>
             <input type="hidden" name="action" value="$action" />
             <input type="hidden" name="state" value="process" />
             </form> 
@@ -1075,22 +972,18 @@
           my $secshow = @sections;
           $r->print('
             <form name="enter" method="post" action=""><br />
-            <table width="100%" border="0" cellpadding="3" cellspacing="3">
-             <tr>
-              <td align="left">
-               <b>'.$tasktitleref->{$action}.'</b><br />'.
-               &mt("Your institution's course catalog includes [quant,_1,section] for course code: [_2].",$secshow,$enrollvar{coursecode}).'
-              </td>
-             </tr>
-             <tr>
-              <td>'.&mt('For each section, check the checkbox if you want registered students in that section to be included in the student roster for LON-CAPA course: [_1]; otherwise uncheck it.',"<b>$realm ($enrollvar{coursecode})</b>").' '.
-                   &mt('If you want to change the section ID designation used for this section in LON-CAPA, delete the current value in the LON-CAPA section ID textbox and enter the new value.').' '.
-                   &mt('The LON-CAPA section ID can be left (or set to) empty, if you do not wish to tie a section ID to this section.').' '.
-                   &mt("To add a new section, check the 'Enrollment in this course?' checkbox, and enter the desired LON-CAPA section ID in the appropriate textbox.").' '.
-                   &mt("Click 'Go' to save your changes.").'</td>
-             </tr>
-            </table>
-            <br />
+            <div class="LC_autoenroll_heading">
+              <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>
+              '.&mt("Your institution's course catalog includes [quant,_1,section] for course code: [_2].",$secshow,$enrollvar{coursecode}).'
+            </div>
+            <div class="LC_autoenroll">
+              '.&mt('For each section, check the checkbox if you want registered students in that section to be included in the student roster for LON-CAPA course: [_1]; otherwise uncheck it.',"<b>$realm ($enrollvar{coursecode})</b>").' '.
+                &mt('If you want to change the section ID designation used for this section in LON-CAPA, delete the current value in the LON-CAPA section ID textbox and enter the new value.').' '.
+                &mt('The LON-CAPA section ID can be left (or set to) empty, if you do not wish to tie a section ID to this section.').' '.
+                &mt("To add a new section, check the 'Enrollment in this course?' checkbox, and enter the desired LON-CAPA section ID in the appropriate textbox.").' '.
+                &mt("Click 'Go' to save your changes.").
+             '</div>
+              <div class="LC_autoenroll">
           ');
           $r->print(&Apache::loncommon::start_data_table());
           $r->print(&Apache::loncommon::start_data_table_row());
@@ -1105,23 +998,32 @@
               if (grep/^\Q$sections[$i]\E$/, at currsections) {
                   $checked = ' checked="checked"';
               }
+              my ($shownum,$chktext,$sectext,$total);
+              $shownum = $i+1;
+              $total = scalar(@sections);
+              if ($checked) {
+                  $chktext = &mt('Enrollment active for section [_1]',$sections[$i]);
+                  $sectext = &mt('Optional section ID for section: [_1]',$sections[$i]);
+              } else {
+                  $chktext = &mt('Enrollment active for existing section ([_1] of [_2])',
+                                 $shownum,$total);
+                  $sectext = &mt('Optional section ID for existing section ([_1] of [_2])',
+                                 $shownum,$total);
+              }
               $r->print(&Apache::loncommon::start_data_table_row().'
-                  <td><input type="checkbox" name="sec_'.$i.'"'.$checked.$disabled.' /></td>
+                  <td><input type="checkbox" name="sec_'.$i.'"'.$checked.$disabled.' aria-label="'.$chktext.'" /></td>
                   <td>'.$sections[$i].'<input type="hidden" name="secnum_'.$i.'" value="'.$sections[$i].'" /></td>
-                  <td><input type="text" size="10" name="loncapasec_'.$i.'" value="'.$sec_id{$sections[$i]}.'"'.$disabled.' /></td>'.
+                  <td><input type="text" size="10" name="loncapasec_'.$i.'" value="'.$sec_id{$sections[$i]}.'"'.$disabled.' aria-label="'.$sectext.'" /></td>'.
                   &Apache::loncommon::end_data_table_row());
           }
           $r->print(&Apache::loncommon::end_data_table());
           $r->print('
+            </div>
             <br />
-            <table width="100%" border="0" cellspacing="3" cellpadding="3">
-             <tr> 
-              <td align="right">
+            <div style="text-align: right">
                <input type="hidden" name="secshow" value="'.$secshow.'" />
                <input type="button" name="sections" value="'.&mt('Go').'" onclick="'."process('sections')".'"'.$disabled.' />
-              </td>
-             </tr>
-            </table>
+            </div>
             <input type="hidden" name="action" value="'.$action.'" />
             <input type="hidden" name="state" value="process" />
             </form>
@@ -1129,9 +1031,8 @@
       } else {
           $r->print('
             <form name="enter" method="post" action=""><br />
-            <table width="100%" border="0" cellpadding="2" cellspacing="2">
-             <tr>
-              <td align="left"><b>'.$tasktitleref->{$action}.'</b><br />
+            <div class="LC_autoenroll_heading">
+              <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>
           ');
           if (@currsections) {
               my $secshow = @currsections;
@@ -1143,10 +1044,8 @@
                   &mt('If you wish to add new course section, enter the number of new sections to add in the textbox at the bottom of the page.').' '.
                   &mt('You will provide information about each of the new sections on a subsequent page.').' '.
                   &mt("Click 'Go' to save your changes.").'
-              </td>
-             </tr>
-            </table>
-            <br />
+            </div>
+            <div class="LC_autoenroll">
               ');
               $r->print(&Apache::loncommon::start_data_table().
                         &Apache::loncommon::start_data_table_row().'
@@ -1156,40 +1055,34 @@
               ');
               $r->print(&Apache::loncommon::end_data_table_row());
               for (my $j=0; $j<@currsections; $j++) {
+                  my ($chktext,$sectext);
+                  $chktext = &mt('Enrollment active for section [_1]',$currsections[$j]);
+                  $sectext = &mt('Optional section ID for section: [_1]',$currsections[$j]);
                   $r->print(
                  &Apache::loncommon::start_data_table_row().
-                 '<td><input type="checkbox" name="sec_'.$j.'" checked="checked"'.$disabled.' /></td>
+                 '<td><input type="checkbox" name="sec_'.$j.'" checked="checked"'.$disabled.' aria-label="'.$chktext.'" /></td>
                  <td>'.$currsections[$j].'</td>
-                 <td><input type="text" name="lcsec_'.$j.'" size="10" value="'.$sec_id{$currsections[$j]}.'"'.$disabled.' /></td>
+                 <td><input type="text" name="lcsec_'.$j.'" size="10" value="'.$sec_id{$currsections[$j]}.'"'.$disabled.' aria-label="'.$sectext.'" /></td>
                  '.&Apache::loncommon::end_data_table_row());
               }
-              $r->print(&Apache::loncommon::end_data_table());
+              $r->print(&Apache::loncommon::end_data_table().
+                        '</div>');
           } else {
               $r->print(
                   &mt('Currently no sections of [_1] are contributing enrollment to the LON-CAPA class roster.',"$realm ($enrollvar{coursecode})").'
-              </td>
-             </tr>
-            </table>
+            </div>
               ');
           }
           $r->print('
             <br />
-            <table width="100%" border="0" cellpadding="3" cellspacing="3">
-             <tr>
-              <td align="left">
-               <b>'.&mt('Add enrollment from additional sections.').'</b><br />'.
-               &mt('Number of new sections to add:').'  <input type="text" size="2" name="numsec" value="0"'.$disabled.' />
-              </td>
-             </tr>
-            </table>
+            <div class="LC_autoenroll">
+               <b>'.&mt('Add enrollment from additional sections.').'</b><br />
+               <label>'.&mt('Number of new sections to add:').'  <input type="text" size="2" name="numsec" value="0"'.$disabled.' /></label>
+            </div>
             <br />
-            <table width="100%" border="0" cellpadding="2" cellspacing="2">
-             <tr>
-              <td align="right">
+            <div style="text-align: right;">
                <input type="button" name="sections" value="'.&mt('Go').'" onclick="'."process('sections')".'"'.$disabled.' />
-              </td>
-             </tr>
-            </table>
+            </div>
             <input type="hidden" name="action" value="'.$action.'" />
             <input type="hidden" name="state" value="process" />
             </form> 
@@ -1199,31 +1092,27 @@
       my @photosets = (&mt('OFF'),&mt('ON'));
       $r->print('
                   <form name="enter" method="post" action=""><br />
-                  <table width="100%" border="0" cellpadding="2" cellspacing="2">
-                   <tr>
-                    <td align="left"><b>'.$tasktitleref->{$action}.'</b><br />'.
+                  <div class="LC_autoenroll_heading">
+                    <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>'.
                        &mt('Currently -- Student photo import:').' <i>'.$photosets[$enrollvar{showphoto}].'</i>
-                    </td>
-                   </tr>
-                  </table>
-                  <table width="100%" border="0" cellpadding="3" cellspacing="3">
-                    <tr>
-                     <td>
-                         '.&mt('Automatic import of student photos from institutional data repository:').'  ');
+                  </div>
+                  <div class="LC_autoenroll">
+                     '.&mt('Automatic import of student photos from institutional data repository:').'  ');
+      my $photocheckon;
+      my $photocheckoff;
       if ($enrollvar{showphoto}) {
-          $r->print('
-                        <label><input type="radio" name="showphotos" value="1" checked="checked"'.$disabled.' /> '.&mt('Yes').'   </label>
-                        <label><input type="radio" name="showphotos" value="0"'.$disabled.' /> '.&mt('No').'</label>
-          ');
+          $photocheckon = ' checked="checked"';
       } else {
-          $r->print('
-                        <label><input type="radio" name="showphotos" value="1"'.$disabled.' /> '.&mt('Yes').'   </label>
-                        <label><input type="radio" name="showphotos" value="0" checked="checked"'.$disabled.' /> '.&mt('No').'</label>
-          ');
+          $photocheckoff = ' checked="checked"';
       }
       $r->print('
-                     </td>
-                    </tr>
+                    <fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.&mt('Import student photos?').'</legend>
+                    <label><input type="radio" name="showphotos" value="1"'.$photocheckon.$disabled.' /> '.&mt('Yes').'   </label>
+                    <label><input type="radio" name="showphotos" value="0"'.$photocheckoff.$disabled.' /> '.&mt('No').'</label>
+                    </fieldset>
+      ');
+      $r->print('
+                    </div>
       ');
       my ($result,$perm_reqd)=&Apache::lonnet::auto_photo_permission($crs,$dom);
       my $can_enable = 1;
@@ -1235,50 +1124,40 @@
               } else {
                   if (&user_is_courseowner($enrollvar{'courseowner'})) {
                       $r->print('
-                    <tr>
-                     <td>'.
+                    <div class="LC_autoenroll">'.
 &mt('Previously the owner of this course agreed to the conditions of use of digital student photos required by [_1].', $institution).'<br />'.
 &mt('As a result [_1]s can choose to automatically import student photos into this course.',&Apache::lonnet::plaintext('cc')).
 '<br /><span class="LC_nobreak"><label>'.
 &mt('[_1]Cancel[_2] owner acceptance of these conditions of use?','<b>','</b>').' <input type="checkbox" name="cancel_agreement" value="1"'.$disabled.' /></label></span>
-                     </td>
-                    </tr>
+                    </div>
                       ');
                   }
               }
           }
       } else {
           $r->print('
-                    <tr>
-                     <td>'.
+                    <div class="LC_autoenroll">'.
 &mt('There was a problem determining whether course owner permission is required in order for a course coordinator to have access to student photos in this domain.').' '.
 &mt('As a result you will not be able to configure access to student photos at this time').
 '<br /><br /><input type="button" name="mainmenu" value="'.&mt('Go back').'" onclick="javascript:history.go(-1);" />
-                    </td>
-                   </tr>
+                   </div>
                   </form>
           ');
           return;
       }
       if ($can_enable) {
-          $r->print('
-                    <tr>
-                     <td>
-                      <span style="color: #888888">'.
+          $r->print('<br />
+                    <div class="LC_autoenroll" style="color: #888888">'.
 &mt('Note: if you enable automatic import of student photos, your course will automatically have access to photos saved by your institution for officially registered students, via a conduit established by your LON-CAPA domain coordinator.').'
-                      </span>
-                     </td>
-                    </tr>
+                    </div>
           ');
       } else {
           if (&user_is_courseowner($enrollvar{'courseowner'})) {
               $r->print('
-                    <tr>
-                     <td>'.
+                    <div class="LC_autoenroll">'.
 &mt('[_1] requires a course owner to indicate acceptance of conditions of use of digital student photos before enabling automatic import into a course.',$institution).' '.
 &mt('If you choose to enable import of photos you will be prompted for your agreement on the next page.').'
-                     </td>
-                    </tr>
+                    </div>
               ');
           } else {
               my ($ownername,$owneremail) = &get_ownerinfo($dom,
@@ -1288,29 +1167,21 @@
                   $emailstr = "(e-mail: $owneremail)";
               }
               $r->print('
-                    <tr>
-                     <td>'
+                    <div class="LC_autoenroll">'
                       .&mt('The policies of your institution ([_1]) require that the course owner ([_2]) must indicate acceptance of the conditions of use of digital photos of registered students, before they may be made available for use in a course.',$institution,$ownername)
                       .'<br /><br />'
                       .&mt('Please direct the course owner [_1] to visit the "Student photos" page in the Automated Enrollment Manager to indicate acceptance of these conditions of use.',$emailstr)
                       .'<br /><br /><input type="button" name="mainmenu" value="'.&mt('Go back').'" onclick="javascript:history.go(-1);" />
-                    </td>
-                   </tr>
+                   </div>
                   </form>
              ');
              return;
           }
       }
       $r->print('
-                    <tr>
-                     <td> </td>
-                    </tr>
-                    <tr>
-                     <td align="right">
+                    <div style="text-align: right">
                       <input type="button" name="showphotos" value="'.&mt('Go').'" onclick="process('."'photos'".')"'.$disabled.' />
-                     </td>
-                    </tr>
-                   </table>
+                    </div>
                    <input type="hidden" name="action" value="'.$action.'" />
                    <input type="hidden" name="state" value="process" />
                    </form>
@@ -1318,57 +1189,41 @@
   } elsif ($action eq "updatenow") {
       $r->print('
                    <form name="enter" method="post" action=""><br />
-		   <table width="100%" border="0" cellpadding="2" cellspacing="2">
-		    <tr>
-		     <td align="left"><b>'.$tasktitleref->{$action}.'</b>
-		     </td>
-                    </tr>
-		   </table>
-		   <table width="100%" border="0" cellpadding="3" cellspacing="3">
-		    <tr>
-		     <td>'.
-	             &mt('Add any students currently included in institutional classlist(s) but not enrolled in your LON-CAPA course.').'<br />  
+		   <div class="LC_autoenroll_heading">
+		     <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>
+		   </div>
+		   <div class="LC_autoenroll">'.
+	             &mt('Add any students currently included in institutional classlist(s) but not enrolled in your LON-CAPA course.').'<br />
+                      <fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.&mt('Add enrolled students').'</legend>
 		      <label><input type="radio" name="updateadds" value="1"'.$disabled.' /> '.&mt('Yes').' </label>
                       <label><input type="radio" name="updateadds" value="0"'.$disabled.' /> '.&mt('No').' </label>
-                     </td>
-                    </tr>
-                    <tr>
-                     <td>'.
+                      </fieldset>
+                    </div>
+                    <div class="LC_autoenroll">'.
  	             &mt('Expire students previously added by nightly enrollment process, but no longer listed in institutional classlist(s).').'<br />
+                      <fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.&mt('Drop unenrolled students').'</legend>
                       <label><input type="radio" name="updatedrops" value="1"'.$disabled.' /> '.&mt('Yes').' </label>
                       <label><input type="radio" name="updatedrops" value="0"'.$disabled.' /> '.&mt('No').' </label><br />
-                     </td>
-                    </tr>
-                    <tr>
-                     <td><span style="color: #888888;">'.
+                      </fieldset>
+                    </div>
+                    <div class="LC_autoenroll" style="color: #888888;">'.
 &mt("Note: Any students previously added manually by course coordinator(s) using either 'Upload classlist CSV file' or 'Enroll a single user' will be unaffected by the removal process.").'
-                      </span>
-                     </td>
-                    </tr>
-                    <tr>
-                     <td>
+                    </div>
       ');
       &print_accessdate_table($r,\%enrollvar,$tasktitleref,$action,$readonly);
       $r->print('
-                     </td>
-                    </tr>
-                    <tr>
-                     <td align="right">
+                    <div style="text-align: right;">
                       <input type="button" name="updatenow" value="'.&mt('Go').'" onclick="'."process('updatenow')".'"'.$disabled.' />
-                     </td>
-                    </tr>
-	           </table>
-                   <input type="hidden" name="action" value="'.$action.'" />
-                   <input type="hidden" name="state" value="process" />
+                    </div>
+                    <input type="hidden" name="state" value="process" />
                   </form>
       ');
   } elsif ($action eq 'updatephotos') {
-      $r->print('
-                   <table width="100%" border="0" cellpadding="2" cellspacing="2">
-                    <tr>
-                     <td align="left"><b>'.$tasktitleref->{$action}.'</b>
-                     </td>
-                    </tr><tr><td>');
+      $r->print('<br />
+                   <div class="LC_autoenroll_heading">
+                     <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>
+                   </div>
+		   <div class="LC_autoenroll">');
       if ($enrollvar{'showphoto'}) {
           my ($update,$commentary) = &Apache::lonnet::auto_photochoice($crs,
 								       $dom);
@@ -1388,31 +1243,19 @@
           $r->print(&mt('Update of photos is unavailable, as import of student photos is currently disabled.').'<br />'.
                     &mt('Enable this first via: [_1]','<a href="/adm/populate?action=photos">'.$tasktitleref->{'photos'}.'</a>'));
       }
-      $r->print('</td></tr>
-                 <tr><td> </td></tr>
-                </table>');
+      $r->print('</div>');
   } elsif ($action eq 'viewclass') {
       $r->print('
                    <form name="studentform" method="post" action=""><br />
-                   <table width="100%" border="0" cellpadding="2" cellspacing="2">
-                    <tr>
-                     <td align="left"><b>'.$tasktitleref->{$action}.'</b>
-                     </td>
-                    </tr>
-                    <tr>
-                     <td>'.
+                   <div class="LC_autoenroll_heading">
+                     <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>'.
                 &mt('Section changes, name changes, and class drops that can be set to occur either automatically or when using the [_1]Update roster now[_2] feature, will affect only those students with an enroll type of [_1]auto[_2].',"'<b>","'</b>").' '.
                 &mt("Students with an enroll type of [_1]manual[_2], will be converted automatically to the 'auto' type, when they first appear in the institutional classlist for the course - as long as nightly adds are enabled and active, or the update roster utility is used.","'<b>","'</b>").' '.
                 &mt("Use the 'Lock' checkbox for any manually enrolled students for whom you wish to prevent type conversion.").' '.
                 &mt("Use the 'Change' checkbox to switch the enroll type from auto to manual, and vice versa.").' '.
                 &mt("Use the 'Unlock' checkbox for any manually enrolled students for whom you no longer wish to lock the enroll type.").' '.
-                &mt("Click the 'Go' button at the end of the page to process your desired changes.").'</td>
-                    </tr>
-                    <tr><td> </td></tr> 
-                   </table>
-                   <table>
-                    <tr>
-                     <td>
+                &mt("Click the 'Go' button at the end of the page to process your desired changes.").'
+                   </div>
       ');
       if (! exists($env{'form.sortby'})) {
           $env{'form.sortby'} = 'username';
@@ -1420,7 +1263,7 @@
       if ($env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) {
           $env{'form.Status'} = 'Active';
       }
-      my $status_select = &Apache::lonhtmlcommon::StatusOptions($env{'form.Status'});
+      my $status_select = &Apache::lonhtmlcommon::StatusOptions($env{'form.Status'},'','','',undef,'Status');
 #  Get current classlist
       my %userlist;
       my ($indexhash,$keylist) = &Apache::lonuserutils::make_keylist_array();
@@ -1441,82 +1284,82 @@
       }
 
       if (! defined($classlist)) {
-          $r->print(&mt('There are no students either currently or previously enrolled.').'
-                      </td>
-                     </tr>'."\n");
+          $r->print('<div class="LC_autoenroll">
+		     '.&mt('There are no students either currently or previously enrolled.').'
+                     </div>'."\n");
       } else {
-          $r->print(&mt('Student Status: [_1]',$status_select)."\n");
+          $r->print('<div class="LC_autoenroll"><label for="Status">
+		    '.&mt('Student Status').'</label>: '.$status_select."\n");
           $r->print('<input type="submit" value="'.&mt('Update Display').'" />'.
-              "\n");
+                    '</div><div class="LC_autoenroll">'."\n");
           my $context = 'course';
           my $mode = 'autoenroll';
           my ($studentcount,$autocount,$manualcount,$lockcount,$unlockcount) = 
               &Apache::lonuserutils::show_users_list($r,$context,$mode,$permission,$env{'form.Status'},\%userlist,$keylist);
-          $r->print('
-                     </td>
-                    </tr>
-          ');
+          $r->print('</div>');
           if ($studentcount > 0) {
               $r->print('
-                    <tr><td><table border="0" cellpadding="5"><tr>
+                    <div class="LC_autoenroll">
+                    <div role="grid" class="LC_grid">
+                    <div role="row" class="LC_grid_row">
               ');
               my $cellcount = 0;
               if ($autocount > 0) {
                   $cellcount ++;
                   $r->print('
-                      <td><fieldset><legend>'.&mt('Change auto').'</legend><input type="button" value="'.&mt('check all').'" onclick="javascript:checkAll(document.studentform.chgauto)"'.$disabled.' />  
-                      <input type="button" value="'.&mt('uncheck all').'" onclick="javascript:uncheckAll(document.studentform.chgauto)"'.$disabled.' /></fieldset></td>
+                      <div role="gridcell" class="LC_grid_cell">
+                      <fieldset><legend>'.&mt('Change auto').'</legend><input type="button" value="'.&mt('check all').'" onclick="javascript:checkAll(document.studentform.chgauto)"'.$disabled.' />  
+                      <input type="button" value="'.&mt('uncheck all').'" onclick="javascript:uncheckAll(document.studentform.chgauto)"'.$disabled.' /></fieldset>
+                      </div>
                   ');
               }
               if ($manualcount > 0) {
                   $cellcount ++;
                   $r->print('
-                      <td><fieldset><legend>'.&mt('Change manual').'</legend><input type="button" value="'.&mt('check all').'" onclick="javascript:checkAll(document.studentform.chgmanual)"'.$disabled.' />  
-                      <input type="button" value="'.&mt('uncheck all').'" onclick="javascript:uncheckAll(document.studentform.chgmanual)"'.$disabled.' /></fieldset></td>
+                      <div role="gridcell" class="LC_grid_cell">
+                      <fieldset><legend>'.&mt('Change manual').'</legend><input type="button" value="'.&mt('check all').'" onclick="javascript:checkAll(document.studentform.chgmanual)"'.$disabled.' />  
+                      <input type="button" value="'.&mt('uncheck all').'" onclick="javascript:uncheckAll(document.studentform.chgmanual)"'.$disabled.' /></fieldset>
+                      </div>
                   ');
               }
               if ($lockcount > 0) {
                   if ($cellcount == 2) {
-                      $r->print('</tr><tr>');
+                      $r->print('</div><div role="row" class="LC_grid_row">');
                   }
                   $cellcount ++;
                   $r->print('
-                       <td><fieldset><legend>'.&mt('Lock manual').'</legend><input type="button" value="'.&mt('check all').'" onclick="javascript:checkAll(document.studentform.lockchg)"'.$disabled.' />  
-                       <input type="button" value="'.&mt('uncheck all').'" onclick="javascript:uncheckAll(document.studentform.lockchg)"'.$disabled.' /></fieldset></td>
+                       <div role="gridcell" class="LC_grid_cell">
+                       <fieldset><legend>'.&mt('Lock manual').'</legend><input type="button" value="'.&mt('check all').'" onclick="javascript:checkAll(document.studentform.lockchg)"'.$disabled.' />  
+                       <input type="button" value="'.&mt('uncheck all').'" onclick="javascript:uncheckAll(document.studentform.lockchg)"'.$disabled.' /></fieldset>
+                       </div>
                   ');
               }
               if ($unlockcount > 0) {
                   if ($cellcount == 2) {
-                      $r->print('</tr><tr>');
+                      $r->print('</div><div role="row" class="LC_grid_row">');
                   }
                   $cellcount ++;
                   $r->print('
-                       <td><fieldset><legend>'.&mt('Unlock manual').'
+                       <div role="gridcell" class="LC_grid_cell">
+                       <fieldset><legend>'.&mt('Unlock manual').'
                        </legend><input type="button" value="'.&mt('check all').'" onclick="javascript:checkAll(document.studentform.unlockchg)"'.$disabled.' />  
-                       <input type="button" value="'.&mt('uncheck all').'" onclick="javascript:uncheckAll(document.studentform.unlockchg)"'.$disabled.' /></fieldset></td>');
+                       <input type="button" value="'.&mt('uncheck all').'" onclick="javascript:uncheckAll(document.studentform.unlockchg)"'.$disabled.' /></fieldset></div>');
               }
               $r->print('
-                       </tr>
-                      </table>
-                     <td> </td>
-                    </tr>
-                    <tr>
-                     <td align="right">
+                       </div></div></div>
+                    <div style="text-align: right;">
                       <input type="button" name="viewclass" value="'.&mt('Go').'" onclick="'."process('viewclass','$autocount','$manualcount','$lockcount','$unlockcount')".'"'.$disabled.' />
-                     </td>
-                    </tr>
+                    </div>
               ');
           } else {
               $r->print('
-                    <tr>
-                     <td><br />
+                    <div class="LC_autoenroll">
+                     <br />
                       '.&mt('There are no students with the selected status.').'
-                     </td>
-                    </tr>
+                    </div>
               ');
           }
           $r->print('
-                   </table>
                    <input type="hidden" name="action" value="'.$action.'" />
                    <input type="hidden" name="state" value="choose" />
                   </form>
@@ -1544,7 +1387,8 @@
         $output .= &Apache::loncommon::start_data_table_row();
         $output .= '<td>'.$$pname{$$users[$i]}.'</td>'.
                    '<td><input type="hidden" name="notifyname_'.$$notifyshow.
-                   '" value="'.$$users[$i].'" />'.$$users[$i].'</td>';
+                   '" value="'.$$users[$i].'" />'.
+		   '<label for="note_'.$$notifyshow.'_'.$i.'">'.$$users[$i].'</label></td>';
         if ($role eq 'dc') {
             $output .= '<td>';
             if ((ref($olddomcoord) eq 'ARRAY') && (ref($futuredomcoord) eq 'ARRAY')) {
@@ -1566,7 +1410,7 @@
         } else {
             $output .= $$lt{ntin};
         }
-        $output .= '</td><td><input type="checkbox" name="note_'.$$notifyshow.'"'; 
+        $output .= '</td><td><input type="checkbox" name="note_'.$$notifyshow.'" id="note_'.$$notifyshow.'_'.$i.'"'; 
         if ($$notifystate{$$users[$i]} == 1) {
             $output .= ' checked="checked"';
         }
@@ -1605,7 +1449,7 @@
     $lt{'tcha'} = &mt('To change access dates for [_1]currently active[_2] students, use User Management -> "Manage Course Users" to display currently active students, then use the dropdown menu for "Action to take for selected users:" to choose "Change starting/ending dates", select the students to change, and click "Proceed".','<b>','</b>');
     my $dateshow;
     if ( ($oldendshow eq '') && ($oldstartshow eq '') ) {
-       $dateshow = '<br /><span class="LC_warning">'.
+       $dateshow = '<span class="LC_warning">'.
                    &mt('Warning.').' '.$lt{'cuno'}.' ';
        if ($action eq 'setaccess') {
            $dateshow .= $lt{'ifyo'}."\n";
@@ -1619,26 +1463,20 @@
     if ($action eq 'setaccess') {
         $r->print('
                 <form name="enter" method="post" action=""><br />
-                <table width="100%" border="0" cellpadding="2" cellspacing="2">
-                 <tr>
-                  <td align="left"><b>'.$tasktitleref->{$action}.'</b>
-                  <br /><br />'.
-                   $dateshow.'
-                  </td>
-                 </tr>
-                </table>
+                <div class="LC_autoenroll_heading">
+                  <h2 class="LC_heading_3">'.$tasktitleref->{$action}.'</h2>
+                </div>
+                <div class="LC_autoenroll">
+                  '.$dateshow.'
+                </div>
         ');
     } elsif ($action eq 'updatenow') {
-        $r->print('
-                <br /><br />'.$dateshow."\n");
+        $r->print('<div class="LC_autoenroll_heading">
+                  '.$dateshow.'</div>'."\n");
     }
     $r->print('
-                <table width="100%" border="0" cellpadding="3" cellspacing="3">
-                 <tr>
-                  <td align="left" colspan="2">
-                   <table border="0" cellspacing="0" cellpadding="2">
-                    <tr>
-                     <td colspan="3">
+               <div class="LC_autoenroll">
+               <br />
 ');
     if ($action eq 'setaccess') {
         $r->print("<i>$lt{'setf'} $lt{'freg'}</i>");
@@ -1646,20 +1484,12 @@
         $r->print("<i>$lt{'setf'} $lt{'fnew'}</i>");
     }
     $r->print(' 
-                       </td>
-                      </tr>
-                      <tr>
-                       <td>'.$start_table.'
-                       </td>
-                      </tr>
-                     </table>
-                    </td>
-                   </tr>
-                   <tr>
-                    <td align="left" colspan="2">
-                     <table border="0" cellspacing="0" cellpadding="2">
-                      <tr>
-                       <td colspan="3">
+               </div>
+               <div class="LC_autoenroll">
+                 '.$start_table.'
+               </div>
+               <div class="LC_autoenroll">
+               <br />
     ');
     if ($action eq 'setaccess') {
         $r->print("<i>$lt{'setl'} $lt{'freg'}</i>");
@@ -1667,32 +1497,24 @@
         $r->print("<i>$lt{'setl'} $lt{'fnew'}</i>");
     }
     $r->print('
-                       </td>
-                      </tr>
-                      <tr>
-                       <td>'.$end_table.'
-                       </td>
-                      </tr>
-                     </table>
-                    </td>
-                   </tr>
+                </div>
+                <div class="LC_autoenroll">
+                  '.$end_table.'
+                </div>
     ');
     if ($action eq 'setaccess') {
         $r->print('
-                   <tr>
-                    <td colspan="2"><span style="color: #888888">'.$lt{'ifad'}.'</span></td>
-                   </tr>
-                   <tr>
-                    <td colspan="2"> </td>
-                   </tr>
-                   <tr>
-                    <td colspan="2"><b>'.&mt('Note').':</b> '.$lt{'ncds'}.' '.$lt{'tcha'}.'</td>
-                   </tr>
-                  </table>
+                   <div class="LC_autoenroll" style="color: #888888">
+                    '.$lt{'ifad'}.'
+                   </div>
+                   <div class="LC_autoenroll">
+                     <br />
+                     <b>'.&mt('Note').':</b> '.$lt{'ncds'}.' '.$lt{'tcha'}.'
+                   </div>
         ');
     } elsif ($action eq 'updatenow') {
         $r->print('
-                  </table>
+                  </div>
         ');
     }
 }
@@ -1704,7 +1526,8 @@
   </td>
  </tr>
 </table>
-<br />'."\n".
+<br />
+</div>'."\n".
     &Apache::loncommon::end_page());
 }
  
@@ -2237,13 +2060,19 @@
                              '<th>'.&mt('LON-CAPA section').'</th>'."\n".
                              &Apache::loncommon::end_data_table_header_row()."\n";
                 for (my $i=0; $i<$numcross; $i++) {
+                    my $shownum = $i+1;
+                    
+                    my $crosstext = &mt('New crosslisting ([_1] of [_2]) -- [_3]',$shownum,$numcross,$lastitem);
+                    my $crosssectext = &mt('New crosslisting ([_1] of [_2]) -- section',$shownum,$numcross);
+                    my $secidtext = &mt('New (optional) section ID ([_1] of [_2])',$shownum,$numcross);
                     $response .=
                         &Apache::loncommon::start_data_table_row()."\n";
                     foreach my $title (@codetitles) {
                         if (ref($cat_order{$title}) eq 'ARRAY') {
                             if (@{$cat_order{$title}} > 0) {
+                                my $labeltext = &mt('New crosslisting ([_1] of [_2]) -- [_3]',$shownum,$numcross,$title);
                                 $response .= '<td align="center">'.
-                                             '<select name="newcross_'.$i.'_'.$title.'">'."\n".
+                                             '<select name="newcross_'.$i.'_'.$title.'" aria-label="'.$labeltext.'">'."\n".
                                              ' <option value="" selected="selected">'.
                                              &mt('Select').'</option>'."\n";
                                 foreach my $item (@{$cat_order{$title}}) {
@@ -2261,11 +2090,11 @@
                         }
                     }
                     $response .= '<td align="center">'.
-                                 '<input type="text" size="5" name="newcross_'.$i.'_'.$lastitem.'" />'.
+                                 '<input type="text" size="5" name="newcross_'.$i.'_'.$lastitem.'" aria-label="'.$crosstext.'" />'.
                                  '</td>'."\n".'<td align="center">'.
-                                 '<input type="text" size="10" name="newcross_'.$i.'_instsec" />'.
+                                 '<input type="text" size="10" name="newcross_'.$i.'_instsec" aria-label="'.$crosssectext.'" />'.
                                  '</td>'."\n".'<td align="center">'.
-                                 '<input type="text" size="10" name="newlcsec_'.$i.'" /></td>'.
+                                 '<input type="text" size="10" name="newlcsec_'.$i.'" aria-label="'.$secidtext.'" /></td>'.
                                  &Apache::loncommon::end_data_table_row()."\n";
                 }
                 $response .= &Apache::loncommon::end_data_table()."\n";
@@ -2282,23 +2111,21 @@
                     '<th>'.&mt('LON-CAPA section ID').'</th>'."\n".
                     &Apache::loncommon::end_data_table_row();
 	       for (my $i=0; $i<$numcross; $i++) {
+                   my $shownum = $i+1;
+                   my $crosstext = &mt('New crosslisting ([_1] of [_2])',$shownum,$numcross);
+                   my $sectext = &mt('New (optional) section ID ([_1] of [_2])',$shownum,$numcross);
                    $response .= 
                        &Apache::loncommon::start_data_table_row().'
-                       <td><input type="text" size="15" name="newcross_'.$i.'" /></td>
-                       <td align="right"><input type="text" size="10" name="newlcsec_'.$i.'" /></td>'.
+                       <td><input type="text" size="15" name="newcross_'.$i.'" aria-label="'.$crosstext.'" /></td>
+                       <td align="right"><input type="text" size="10" name="newlcsec_'.$i.'" aria-label="'.$sectext.'" /></td>'.
                        &Apache::loncommon::end_data_table_row();
 	        }
                 $response .= &Apache::loncommon::end_data_table();
             }
             $response .= '
-              </td>
-             </tr>
-             <tr>
-              <td align="right">
-               <input type="button" name="newcross" value="'.&mt('Go').'" onclick="'."process('newcross')".'" />
-              </td>
-             </tr>
-            </table>
+            <div style="text-align: right;">
+              <input type="button" name="newcross" value="'.&mt('Go').'" onclick="'."process('newcross')".'" />
+            </div>
             <input type="hidden" name="numcross" value="'.$numcross.'" />
             <input type="hidden" name="action" value="newcross" />
             <input type="hidden" name="state" value="process" />
@@ -2700,31 +2527,29 @@
                &mt("The institutional section code should only contain letters and/or numbers, and must be consistent with the scheme adopted by your Domain Coordinator to map course section numbers to your institution's student information system.").'
                <br /><br />
            <form name="enter" method="post" action="">
-           <table border="0" cellpadding="2" cellspacing="2" width="100%">
-             <tr>
-              <td>'.
+             <div class="LC_autoenroll">'.
             &Apache::loncommon::start_data_table().
             &Apache::loncommon::start_data_table_row().'
                  <th>'.&mt('Section number').'</th>
                  <th>'.&mt('LON-CAPA section ID').'</th>'.
             &Apache::loncommon::end_data_table_row();
+
 	    for (my $i=0; $i<$numsec; $i++) {
+                my $shownum = $i+1;
+                my $sectiontext = &mt("New crosslisting ([_1] of [_2])",$shownum,$numsec);
+                my $secidtext = &mt("New (optional) section ID ([_1] of [_2])",$shownum,$numsec);
                 $response .= &Apache::loncommon::start_data_table_row().'
-                 <td><input type="text" size="10" name="newsec_'.$i.'" /></td>
+                 <td><input type="text" size="10" name="newsec_'.$i.'" aria-label="'.$sectiontext.'" /></td>
                  <td align="right">
-                   <input type="text" size="10" name="newlcsec_'.$i.'" />
+                   <input type="text" size="10" name="newlcsec_'.$i.'" aria-label="'.$secidtext.'" />
                  </td>
                 '.&Apache::loncommon::end_data_table_row();
 	    }
             $response .= &Apache::loncommon::end_data_table().'
-              </td>
-             </tr>
-             <tr>
-              <td align="right">
-               <input type="button" name="newsections" value="'.&mt('Go').'" onclick="'."process('newsections')".'" />
-              </td>
-             </tr>
-            </table>
+              </div>
+              <div style="text-align: right;">
+                <input type="button" name="newsections" value="'.&mt('Go').'" onclick="'."process('newsections')".'" />
+              </div>
             <input type="hidden" name="numsec" value="'.$numsec.'" />
             <input type="hidden" name="action" value="newsections" />
             <input type="hidden" name="state" value="process" />
@@ -3375,7 +3200,7 @@
         $response = &mt('You requested a change in enrollment type for [quant,_1,student].',$chgtotal).'<br /><br />'."\n";
         $classlist = &Apache::loncoursedata::get_classlist($dom,$crs);
         if ($chgok > 0) {
-            $response .= &mt('The following [quant,_1,change was,changes were] successful;',$chgtotal).':<br /><br />';
+            $response .= &mt('The following [quant,_1,change was,changes were] successful',$chgtotal).':<br /><br />';
             $response .= &enrolltype_result(\%chg,$classlist,$endidx,$startidx,$ididx,$secidx,$typeidx);
         }
         if ($chgfail > 0) {
@@ -3511,12 +3336,10 @@
 sub print_reply {
   my ($r,$response,$caller) = @_;
   $r->print('
-            <br /><table width="100%" border="0" cellpadding="2" cellspacing="2">
-             <tr>
-              <td align="left"><b>'.$caller.'</b> - '.&mt('result').'
-              <br /><br />'.$response.'</td>
-             </tr>
-            </table>
+            <div class="LC_autoenroll_heading">
+              <h2 class="LC_heading_3">'.$caller.' - '.&mt('result').'</h2>
+              '.$response.'
+	    </div>
   ');
   return;
 }
@@ -3582,16 +3405,21 @@
         $perpetual .= ' checked="checked"';
     }
     $perpetual.= $disabled.' /> '.&mt('no end date').'</label></span>';
-    my $start_table = "<table>\n".
-                      '<tr><td align="right">'.&mt('Starting Date').'</td>'.
-                      '<td>'.$startform.'</td>'.
-                      '<td> </td>'."</tr>\n".
-                      "</table>";
-    my $end_table = "<table>\n".
-                    '<tr><td align="right">'.&mt('Ending Date').'</td>'.
-                    '<td>'.$endform.'</td>'.
-                    '<td>'.$perpetual.'</td>'."</tr>\n".
-                    "</table>\n";
+    my $start_table = '
+<div role="grid" class="LC_grid">
+<div role="row" class="LC_grid_row">
+<div role="gridcell" class="LC_grid_cell">'.&mt('Starting Date').'</div>
+<div role="gridcell" class="LC_grid_cell">'.$startform.'</div>
+</div></div>
+';
+    my $end_table = '
+<div role="grid" class="LC_grid">
+<div role="row" class="LC_grid_row">
+<div role="gridcell" class="LC_grid_cell">'.&mt('Ending Date').'</div>
+<div role="gridcell" class="LC_grid_cell">'.$endform.'</div>
+<div role="gridcell" class="LC_grid_cell">'.$perpetual.'</div>
+</div></div>
+';
     return ($start_table, $end_table);
 }
 
@@ -3791,6 +3619,7 @@
             }
         }
     }
+    $r->print("\n".'<div class="LC_landmark" role="main" id="LC_main_content">'."\n");
 
     my $reply = 0;
     unless ($state eq "choose") { $reply = 1; }
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.1496 loncom/interface/loncommon.pm:1.1497
--- loncom/interface/loncommon.pm:1.1496	Wed Dec 31 23:44:27 2025
+++ loncom/interface/loncommon.pm	Fri Jan  9 02:22:38 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.1496 2025/12/31 23:44:27 raeburn Exp $
+# $Id: loncommon.pm,v 1.1497 2026/01/09 02:22:38 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -7931,6 +7931,16 @@
   padding: 2px 4px 2px 4px;
 }
 
+div.LC_autoenroll_heading {
+  margin: 5px;
+  padding: 5px;
+}
+
+div.LC_autoenroll {
+  margin: 2px 2px 2px 5px;
+  padding: 2px 0px 0px 5px;
+}
+
 table.LC_data_table {
   border: 1px solid #000000;
   border-collapse: separate;
@@ -7967,6 +7977,14 @@
   font-size:90%;
 }
 
+table.LC_data_table tr.LC_odd_row th.LC_enrolltype {
+  background-color: $data_table_light;
+}
+
+table.LC_data_table tr.LC_even_row th.LC_enrolltype {
+  background-color: $data_table_dark;
+}
+
 table.LC_innerpickbox tr th,
 table.LC_innerpickbox tr td {
   vertical-align: top;
@@ -8993,6 +9011,7 @@
 }
 
 fieldset.LC_grace,
+fieldset.LC_autoaddsdrops,
 fieldset#LC_additionalrecips {
   display:inline;
 }
@@ -9005,6 +9024,7 @@
 }
 
 fieldset.LC_delete_slot > legend,
+fieldset.LC_autoaddsdrops > legend,
 fieldset.LC_grace > legend {
   font-weight: normal;
 }
@@ -19110,7 +19130,7 @@
     }
     if (exists($filter->{'ownerfilter'})) {
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cow'}).
-                   '<div role="grid" class="LC_grid" >'.
+                   '<div role="grid" class="LC_grid">'.
                    '<div role="row" class="LC_grid_row">'.
                    '<div role="gridcell" class="LC_grid_cell">'.
                    '<label>'.&mt('Username').'<br />'.
@@ -19124,7 +19144,7 @@
     }
     if (exists($filter->{'personfilter'})) {
         $output .= &Apache::lonhtmlcommon::row_title($lt{'cop'}).
-                   '<div role="grid" class="LC_grid" >'.
+                   '<div role="grid" class="LC_grid">'.
                    '<div role="row" class="LC_grid_row">'.
                    '<div role="gridcell" class="LC_grid_cell">'.
                    '<label>'.&mt('Username').'<br />'.
Index: loncom/interface/lonuserutils.pm
diff -u loncom/interface/lonuserutils.pm:1.227 loncom/interface/lonuserutils.pm:1.228
--- loncom/interface/lonuserutils.pm:1.227	Sat Dec 20 19:59:02 2025
+++ loncom/interface/lonuserutils.pm	Fri Jan  9 02:22:38 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.227 2025/12/20 19:59:02 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.228 2026/01/09 02:22:38 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -3442,7 +3442,7 @@
         foreach my $item (@cols) {
             $output .= '<th class="LC_nobreak" valign="top">';
             if ($is_sortable{$item}) {
-                $output .= "<a href=\"javascript:document.$formname.sortby.value='$item';document.$formname.submit();\" style=\"text-decoration:none;\">$lt{$item}<span class=\"LC_fontsize_small\"> ▼</span></a>";
+                $output .= "<a href=\"javascript:document.$formname.sortby.value='$item';document.$formname.submit();\" style=\"text-decoration:none;\">$lt{$item}<span style=\"font-size: 93%;\"> ▼</span></a>";
             } else {
                 $output .= $lt{$item};
             }
@@ -3810,10 +3810,24 @@
             if ($mode eq 'autoenroll') {
                 my $cellentry;
                 if ($in{'type'} eq 'auto') {
-                    $cellentry = '<b>'.&mt('auto').'</b> <label><input type="checkbox" name="chgauto" value="'.$in{'username'}.':'.$in{'domain'}.'"'.$disabled.' /> '.&mt('Change').'</label>';
+                    $cellentry = '<fieldset class="LC_borderless">'.
+                                 '<legend class="LC_borderless">'.&mt('').'</legend>'.
+                                 '<span class="LC_nobreak"><b>'.&mt('auto').'</b> '.
+                                 '<label><input type="checkbox" name="chgauto" value="'.
+                                 $in{'username'}.':'.$in{'domain'}.'"'.$disabled.' /> '.&mt('Change').
+                                 '</label></span></fieldset>';
                     $autocount ++;
                 } else {
-                    $cellentry = '<table border="0" cellspacing="0"><tr><td rowspan="2"><b>'.&mt('manual').'</b></td><td><span class="LC_nobreak"><label><input type="checkbox" name="chgmanual" value="'.$in{'username'}.':'.$in{'domain'}.'"'.$disabled.' /> '.&mt('Change').'</label></span></td></tr><tr><td><span class="LC_nobreak">';
+                    $cellentry =
+                        '<fieldset class="LC_borderless">'."\n".
+                        '<legend class="LC_visually_hidden">'.&mt('Enrollment eype action').'</legend>'."\n".
+                        '<table border="0" cellspacing="0">'."\n".
+                        '<tr><th class="LC_enrolltype" rowspan="2">'.&mt('manual').'</th>'.
+                        '<td><span class="LC_nobreak">'.
+                        '<label><input type="checkbox" name="chgmanual" '.
+                        'value="'.$in{'username'}.':'.$in{'domain'}.'"'.$disabled.' /> '.
+                        &mt('Change').'</label></span></td></tr>'."\n".
+                        '<tr><td><span class="LC_nobreak">';
                     $manualcount ++;
                     if ($in{'lockedtype'}) {
                         $cellentry .= '<label><input type="checkbox" name="unlockchg" value="'.$in{'username'}.':'.$in{'domain'}.'"'.$disabled.' /> '.&mt('Unlock').'</label>';
@@ -3822,7 +3836,7 @@
                         $cellentry .= '<label><input type="checkbox" name="lockchg" value="'.$in{'username'}.':'.$in{'domain'}.'"'.$disabled.' /> '.&mt('Lock').'</label>';
                         $lockcount ++;
                     }
-                    $cellentry .= '</span></td></tr></table>';
+                    $cellentry .= '</span></td></tr></table></fieldset>';
                 }
                 $r->print("<td>$cellentry</td>\n");
             } else {


More information about the LON-CAPA-cvs mailing list