diff --git a/lucid-foundation.cabal b/lucid-foundation.cabal
--- a/lucid-foundation.cabal
+++ b/lucid-foundation.cabal
@@ -1,5 +1,5 @@
 Name:                   lucid-foundation
-Version:                0.0.1
+Version:                0.0.2
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                BSD3
@@ -14,7 +14,52 @@
   HS-Source-Dirs:       src
   GHC-Options:          -Wall
   Exposed-Modules:      Lucid.Foundation
-  Other-Modules:        Lucid.Foundation.Internal
+                        Lucid.Foundation.Media
+                        Lucid.Foundation.Navigation
+                        Lucid.Foundation.Structure
+                        Lucid.Foundation.Typography
+                        Lucid.Foundation.Buttons
+                        Lucid.Foundation.Callouts
+                        Lucid.Foundation.Content
+                        Lucid.Foundation.Forms
+  Other-Modules:        Lucid.Foundation.Media.Clearing
+                        Lucid.Foundation.Media.Flex
+                        Lucid.Foundation.Media.Orbit
+                        Lucid.Foundation.Media.Thumbnails
+                        Lucid.Foundation.Navigation.Breadcrumbs
+                        Lucid.Foundation.Navigation.IconBar
+                        Lucid.Foundation.Navigation.Magellan
+                        Lucid.Foundation.Navigation.OffCanvas
+                        Lucid.Foundation.Navigation.Pagination
+                        Lucid.Foundation.Navigation.SideNav
+                        Lucid.Foundation.Navigation.SubNav
+                        Lucid.Foundation.Navigation.TopBar
+                        Lucid.Foundation.Structure.BlockGrid
+                        Lucid.Foundation.Structure.Grid
+                        Lucid.Foundation.Structure.Utils
+                        Lucid.Foundation.Structure.Visibility
+                        Lucid.Foundation.Typography.InlineList
+                        Lucid.Foundation.Typography.Labels
+                        Lucid.Foundation.Typography.Types
+                        Lucid.Foundation.Buttons.ButtonGroup
+                        Lucid.Foundation.Buttons.Buttons
+                        Lucid.Foundation.Buttons.SplitButtons
+                        Lucid.Foundation.Callouts.AlertBoxes
+                        Lucid.Foundation.Callouts.Joyride
+                        Lucid.Foundation.Callouts.Panels
+                        Lucid.Foundation.Callouts.Reveal
+                        Lucid.Foundation.Callouts.Tooltips
+                        Lucid.Foundation.Content.Accordion
+                        Lucid.Foundation.Content.Dropdown
+                        Lucid.Foundation.Content.Equalizer
+                        Lucid.Foundation.Content.PricingTables
+                        Lucid.Foundation.Content.ProgressBars
+                        Lucid.Foundation.Content.Tables
+                        Lucid.Foundation.Content.Tabs
+                        Lucid.Foundation.Forms.Abide
+                        Lucid.Foundation.Forms.Forms
+                        Lucid.Foundation.Forms.RangeSlider
+                        Lucid.Foundation.Forms.Switch
   Build-Depends:        base >= 4 && < 5
                       , lucid >= 2.9
                       , text
diff --git a/src/Lucid/Foundation/Buttons.hs b/src/Lucid/Foundation/Buttons.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Buttons.hs
@@ -0,0 +1,9 @@
+module Lucid.Foundation.Buttons
+  ( module Lucid.Foundation.Buttons.Buttons
+  , module Lucid.Foundation.Buttons.ButtonGroup
+  , module Lucid.Foundation.Buttons.SplitButtons
+  ) where
+
+import Lucid.Foundation.Buttons.Buttons
+import Lucid.Foundation.Buttons.ButtonGroup
+import Lucid.Foundation.Buttons.SplitButtons
diff --git a/src/Lucid/Foundation/Buttons/ButtonGroup.hs b/src/Lucid/Foundation/Buttons/ButtonGroup.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Buttons/ButtonGroup.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Lucid.Foundation.Buttons.ButtonGroup where
+
+import qualified Data.Text as T
+import Data.Monoid
+
+button_group_ :: T.Text
+button_group_ = " button-group "
+
+even_ :: Int -> T.Text
+even_ n = " even-" <> (T.pack $ show n) <> " "
+
+stack_ :: T.Text
+stack_ = " stack "
+
+stack_for_ :: T.Text -> T.Text
+stack_for_ size = " stack-for-" <> size <> " "
+
+button_bar_ :: T.Text
+button_bar_ = " button-bar "
diff --git a/src/Lucid/Foundation/Buttons/Buttons.hs b/src/Lucid/Foundation/Buttons/Buttons.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Buttons/Buttons.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Lucid.Foundation.Buttons.Buttons where
+
+import qualified Data.Text as T
+
+button__ :: T.Text
+button__ = " button "
+
+success_ :: T.Text
+success_ = " success "
+
+secondary_ :: T.Text
+secondary_ = " secondary "
+
+alert_ :: T.Text
+alert_ = " alert "
+
+info_ :: T.Text
+info_ = " info "
+
+disabled_ :: T.Text
+disabled_ = " disabled "
+
+
diff --git a/src/Lucid/Foundation/Buttons/SplitButtons.hs b/src/Lucid/Foundation/Buttons/SplitButtons.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Buttons/SplitButtons.hs
@@ -0,0 +1,12 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Lucid.Foundation.Buttons.SplitButtons where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+split_ :: T.Text
+split_ = " split "
diff --git a/src/Lucid/Foundation/Callouts.hs b/src/Lucid/Foundation/Callouts.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Callouts.hs
@@ -0,0 +1,13 @@
+module Lucid.Foundation.Callouts
+  ( module Lucid.Foundation.Callouts.Reveal
+  , module Lucid.Foundation.Callouts.AlertBoxes
+  , module Lucid.Foundation.Callouts.Panels
+  , module Lucid.Foundation.Callouts.Tooltips
+  , module Lucid.Foundation.Callouts.Joyride
+  ) where
+
+import Lucid.Foundation.Callouts.Reveal
+import Lucid.Foundation.Callouts.AlertBoxes
+import Lucid.Foundation.Callouts.Panels
+import Lucid.Foundation.Callouts.Tooltips
+import Lucid.Foundation.Callouts.Joyride
diff --git a/src/Lucid/Foundation/Callouts/AlertBoxes.hs b/src/Lucid/Foundation/Callouts/AlertBoxes.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Callouts/AlertBoxes.hs
@@ -0,0 +1,22 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Callouts.AlertBoxes where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+data_alert_ :: Attribute
+data_alert_ = data_ "alert" ""
+
+alert_box_ :: T.Text
+alert_box_ = " alert-box "
+
+close_ :: T.Text
+close_ = " close "
+
+
+
diff --git a/src/Lucid/Foundation/Callouts/Joyride.hs b/src/Lucid/Foundation/Callouts/Joyride.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Callouts/Joyride.hs
@@ -0,0 +1,29 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Callouts.Joyride where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+joyride_list_ :: T.Text
+joyride_list_ = " joyride-list "
+
+joyride_tip_guide_ :: T.Text
+joyride_tip_guide_ = " joyride-tip-guide "
+
+joyride_nub_ :: T.Text
+joyride_nub_ = " joyride-nub "
+
+joyride_content_wrapper_ :: T.Text
+joyride_content_wrapper_ = " joyride-content-wrapper "
+
+joyride_close_tip_ :: T.Text
+joyride_close_tip_ = " joyride-close-tip "
+
+joyride_next_tip_ :: T.Text
+joyride_next_tip_ = " joyride-next-tip "
+
diff --git a/src/Lucid/Foundation/Callouts/Panels.hs b/src/Lucid/Foundation/Callouts/Panels.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Callouts/Panels.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Callouts.Panels where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+panel_ :: T.Text
+panel_ = " panel "
+
+callout_ :: T.Text
+callout_ = " callout "
+
+
+
diff --git a/src/Lucid/Foundation/Callouts/Reveal.hs b/src/Lucid/Foundation/Callouts/Reveal.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Callouts/Reveal.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Callouts.Reveal where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+data_reveal_id_ :: T.Text -> Attribute
+data_reveal_id_ = data_ "reveal-id"
+
+reveal_modal_ :: T.Text
+reveal_modal_ = " reveal-modal "
+
+close_reveal_modal_ :: T.Text
+close_reveal_modal_ = " close-reveal-modal "
+
+data_reveal_ :: Attribute
+data_reveal_ = data_ "reveal" ""
+
+
diff --git a/src/Lucid/Foundation/Callouts/Tooltips.hs b/src/Lucid/Foundation/Callouts/Tooltips.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Callouts/Tooltips.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Callouts.Tooltips where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+data_tooltip_ :: Attribute
+data_tooltip_ = data_ "attribute" ""
+
+has_tip_ :: T.Text
+has_tip_ = " has-tip "
+
+
+
diff --git a/src/Lucid/Foundation/Content.hs b/src/Lucid/Foundation/Content.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Content.hs
@@ -0,0 +1,17 @@
+module Lucid.Foundation.Content
+  ( module Lucid.Foundation.Content.Dropdown
+  , module Lucid.Foundation.Content.PricingTables
+  , module Lucid.Foundation.Content.ProgressBars
+  , module Lucid.Foundation.Content.Tables
+  , module Lucid.Foundation.Content.Accordion
+  , module Lucid.Foundation.Content.Tabs
+  , module Lucid.Foundation.Content.Equalizer
+  ) where
+
+import Lucid.Foundation.Content.Dropdown
+import Lucid.Foundation.Content.PricingTables
+import Lucid.Foundation.Content.ProgressBars
+import Lucid.Foundation.Content.Tables
+import Lucid.Foundation.Content.Accordion
+import Lucid.Foundation.Content.Tabs
+import Lucid.Foundation.Content.Equalizer
diff --git a/src/Lucid/Foundation/Content/Accordion.hs b/src/Lucid/Foundation/Content/Accordion.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Content/Accordion.hs
@@ -0,0 +1,22 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Content.Accordion where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+data_accordion_ :: T.Text -> Attribute
+data_accordion_ = data_ "accordion"
+
+accordion_ :: T.Text
+accordion_ = " accordion "
+
+accordion_navigation_ :: T.Text
+accordion_navigation_ = " accordion-navigation "
+
+
+
diff --git a/src/Lucid/Foundation/Content/Dropdown.hs b/src/Lucid/Foundation/Content/Dropdown.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Content/Dropdown.hs
@@ -0,0 +1,22 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Content.Dropdown where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+data_dropdown_ :: T.Text -> Attribute
+data_dropdown_ = data_ "dropdown"
+
+f_dropdown_ :: T.Text
+f_dropdown_ = " f-dropdown "
+
+data_dropdown_content_ :: Attribute
+data_dropdown_content_ = data_ "dropdown-content" ""
+
+
+
diff --git a/src/Lucid/Foundation/Content/Equalizer.hs b/src/Lucid/Foundation/Content/Equalizer.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Content/Equalizer.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Content.Equalizer where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+data_equalizer_ :: Attribute
+data_equalizer_ = data_ "equalizer" ""
+
+data_equalizer_watch_ :: Attribute
+data_equalizer_watch_ = data_ "equalizer-watch" ""
+
+
+
diff --git a/src/Lucid/Foundation/Content/PricingTables.hs b/src/Lucid/Foundation/Content/PricingTables.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Content/PricingTables.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Content.PricingTables where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+pricing_table_ :: T.Text
+pricing_table_ = " pricing-table "
+
+price_ :: T.Text
+price_ = " price "
+
+
+
diff --git a/src/Lucid/Foundation/Content/ProgressBars.hs b/src/Lucid/Foundation/Content/ProgressBars.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Content/ProgressBars.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Content.ProgressBars where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+progress_ :: T.Text
+progress_ = " progress "
+
+meter_ :: T.Text
+meter_ = " meter "
+
+
+
diff --git a/src/Lucid/Foundation/Content/Tables.hs b/src/Lucid/Foundation/Content/Tables.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Content/Tables.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Content.Tables where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+summary_ = makeAttribute "summary"
+
+
+
diff --git a/src/Lucid/Foundation/Content/Tabs.hs b/src/Lucid/Foundation/Content/Tabs.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Content/Tabs.hs
@@ -0,0 +1,22 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Content.Tabs where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+tabs_ :: T.Text
+tabs_ = " tabs "
+
+tab_title_ :: T.Text
+tab_title_ = " tab-title "
+
+tabs_content_ :: T.Text
+tabs_content_ = " tabs-content "
+
+
+
diff --git a/src/Lucid/Foundation/Forms.hs b/src/Lucid/Foundation/Forms.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Forms.hs
@@ -0,0 +1,11 @@
+module Lucid.Foundation.Forms
+ ( module Lucid.Foundation.Forms.Forms
+ , module Lucid.Foundation.Forms.Switch
+ , module Lucid.Foundation.Forms.RangeSlider
+ , module Lucid.Foundation.Forms.Abide
+ ) where
+
+import Lucid.Foundation.Forms.Forms
+import Lucid.Foundation.Forms.Switch
+import Lucid.Foundation.Forms.RangeSlider
+import Lucid.Foundation.Forms.Abide
diff --git a/src/Lucid/Foundation/Forms/Abide.hs b/src/Lucid/Foundation/Forms/Abide.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Forms/Abide.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Forms.Abide where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+data_abide_ :: Attribute
+data_abide_ = data_ "abide" ""
+
diff --git a/src/Lucid/Foundation/Forms/Forms.hs b/src/Lucid/Foundation/Forms/Forms.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Forms/Forms.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Forms.Forms where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+
+inline_ :: T.Text
+inline_ = " inline "
+
+prefix_ :: T.Text
+prefix_ = " prefix "
+
+postfix_ :: T.Text
+postfix_ = " postfix "
+
+error_ :: T.Text
+error_ = " error "
+
+aria_label_ :: T.Text -> Attribute
+aria_label_ = makeAttribute "aria-label"
+
+aria_describedby_ :: T.Text -> Attribute
+aria_describedby_ = makeAttribute "aria-describedby"
diff --git a/src/Lucid/Foundation/Forms/RangeSlider.hs b/src/Lucid/Foundation/Forms/RangeSlider.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Forms/RangeSlider.hs
@@ -0,0 +1,31 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Forms.RangeSlider where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+range_slider_ :: T.Text
+range_slider_ = " range-slider "
+
+data_slider_ :: Attribute
+data_slider_ = data_ "slider" ""
+
+role_slider_ :: Attribute
+role_slider_ = makeAttribute "role" "slider"
+
+range_slider_handle_ :: T.Text
+range_slider_handle_ = " range-slider-handle "
+
+range_slider_active_segment_ :: T.Text
+range_slider_active_segment_ = " range-slider-active-segment "
+
+vertical_range_ :: T.Text
+vertical_range_ = " vertical-range "
+
+makeVertical_ :: Attribute
+makeVertical_ = data_ "options" "vertical: true;"
diff --git a/src/Lucid/Foundation/Forms/Switch.hs b/src/Lucid/Foundation/Forms/Switch.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Forms/Switch.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Forms.Switch where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+switch_ :: T.Text
+switch_ = " switch "
+
+tabindex_ :: Int -> Attribute
+tabindex_ = makeAttribute "tabindex" . T.pack . show
diff --git a/src/Lucid/Foundation/Internal.hs b/src/Lucid/Foundation/Internal.hs
deleted file mode 100644
--- a/src/Lucid/Foundation/Internal.hs
+++ /dev/null
@@ -1,3 +0,0 @@
-module Lucid.Foundation.Internal
-    (
-    ) where
diff --git a/src/Lucid/Foundation/Media.hs b/src/Lucid/Foundation/Media.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Media.hs
@@ -0,0 +1,11 @@
+module Lucid.Foundation.Media
+  ( module Lucid.Foundation.Media.Orbit
+  , module Lucid.Foundation.Media.Thumbnails
+  , module Lucid.Foundation.Media.Clearing
+  , module Lucid.Foundation.Media.Flex
+  ) where
+
+import Lucid.Foundation.Media.Orbit
+import Lucid.Foundation.Media.Thumbnails
+import Lucid.Foundation.Media.Clearing
+import Lucid.Foundation.Media.Flex
diff --git a/src/Lucid/Foundation/Media/Clearing.hs b/src/Lucid/Foundation/Media/Clearing.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Media/Clearing.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Media.Clearing where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+clearing_thumbs_ :: Term arg result => arg -> result
+clearing_thumbs_ =
+  termWith "ul" [class_ "clearing-thumbs"]
+
diff --git a/src/Lucid/Foundation/Media/Flex.hs b/src/Lucid/Foundation/Media/Flex.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Media/Flex.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Media.Flex where
+
+import qualified Data.Text as T
+
+flex_video_ :: T.Text
+flex_video_ = " flex-video "
+
diff --git a/src/Lucid/Foundation/Media/Orbit.hs b/src/Lucid/Foundation/Media/Orbit.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Media/Orbit.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Media.Orbit where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+data_orbit_ :: Attribute
+data_orbit_ = data_ "orbit" ""
+
+
+data_orbit_slide_ :: T.Text -> Attribute
+data_orbit_slide_ = data_ "orbit-slide"
+
+data_orbit_link_ :: T.Text -> Attribute
+data_orbit_link_ = data_ "orbit-slide"
+
diff --git a/src/Lucid/Foundation/Media/Thumbnails.hs b/src/Lucid/Foundation/Media/Thumbnails.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Media/Thumbnails.hs
@@ -0,0 +1,18 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Media.Thumbnails where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+-- | The first argument is the @href@ link, and the second is the @src@ to the thumbnail.
+tumb_ :: Monad m => T.Text -> T.Text -> HtmlT m ()
+tumb_ href src =
+  a_ [ class_ "th"
+     , makeAttribute "role" "button"
+     , makeAttribute "aria-label" "Thumbnail"
+     , href_ href
+     ] $ img_ [makeAttribute "aria-hidden" "true", src_ src]
diff --git a/src/Lucid/Foundation/Navigation.hs b/src/Lucid/Foundation/Navigation.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation.hs
@@ -0,0 +1,19 @@
+module Lucid.Foundation.Navigation
+  ( module Lucid.Foundation.Navigation.OffCanvas
+  , module Lucid.Foundation.Navigation.TopBar
+  , module Lucid.Foundation.Navigation.IconBar
+  , module Lucid.Foundation.Navigation.SideNav
+  , module Lucid.Foundation.Navigation.Magellan
+  , module Lucid.Foundation.Navigation.SubNav
+  , module Lucid.Foundation.Navigation.Breadcrumbs
+  , module Lucid.Foundation.Navigation.Pagination
+  ) where
+
+import Lucid.Foundation.Navigation.OffCanvas
+import Lucid.Foundation.Navigation.TopBar
+import Lucid.Foundation.Navigation.IconBar
+import Lucid.Foundation.Navigation.SideNav
+import Lucid.Foundation.Navigation.Magellan
+import Lucid.Foundation.Navigation.SubNav
+import Lucid.Foundation.Navigation.Breadcrumbs
+import Lucid.Foundation.Navigation.Pagination
diff --git a/src/Lucid/Foundation/Navigation/Breadcrumbs.hs b/src/Lucid/Foundation/Navigation/Breadcrumbs.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation/Breadcrumbs.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Navigation.Breadcrumbs where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+breadcrumbs_ :: T.Text
+breadcrumbs_ = " breadcrumbs "
+
+unavailable_ :: T.Text
+unavailable_ = " unavailable "
+
+current_ :: T.Text
+current_ = " current "
+
diff --git a/src/Lucid/Foundation/Navigation/IconBar.hs b/src/Lucid/Foundation/Navigation/IconBar.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation/IconBar.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Navigation.IconBar where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+item_ :: T.Text
+item_ = " item "
+
+icon_bar_ :: T.Text
+icon_bar_ = " icon-bar "
+
+vertical_ :: T.Text
+vertical_ = " vertical "
+
+vertical_size_ :: T.Text -> T.Text
+vertical_size_ size = " " <> size <> "-vertical "
+
+one_up_ :: T.Text
+one_up_ = " one-up "
+
+two_up_ :: T.Text
+two_up_ = " two-up "
+
+three_up_ :: T.Text
+three_up_ = " three-up "
+
+four_up_ :: T.Text
+four_up_ = " four-up "
+
+five_up_ :: T.Text
+five_up_ = " five-up "
+
+six_up_ :: T.Text
+six_up_ = " six-up "
+
+seven_up_ :: T.Text
+seven_up_ = " seven-up "
+
+eight_up_ :: T.Text
+eight_up_ = " eight-up "
diff --git a/src/Lucid/Foundation/Navigation/Magellan.hs b/src/Lucid/Foundation/Navigation/Magellan.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation/Magellan.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Navigation.Magellan where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+data_magellan_expedition_ :: Attribute
+data_magellan_expedition_ = data_ "magellan-expedition" "fixed"
+
+data_magellan_arrival_ :: T.Text -> Attribute
+data_magellan_arrival_ dest = data_ "magellan-arrival" dest
+
+data_magellan_destination_ :: T.Text -> Attribute
+data_magellan_destination_ dest = data_ "magellan-expedition" dest
diff --git a/src/Lucid/Foundation/Navigation/OffCanvas.hs b/src/Lucid/Foundation/Navigation/OffCanvas.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation/OffCanvas.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Navigation.OffCanvas where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+off_canvas_wrap_ :: Monad m => HtmlT m () -> HtmlT m ()
+off_canvas_wrap_ content =
+  termWith "div" [class_ "off-canvas-wrap"] $
+    termWith "main" [class_ "inner-wrap"] content
+
+data_offcanvas_ :: Attribute
+data_offcanvas_ = data_ "offcanvas" ""
+
+
+left_off_canvas_menu_ :: Term arg result => arg -> result
+left_off_canvas_menu_ =
+  termWith "nav" [class_ "left-off-canvas-menu"]
+
+right_off_canvas_menu_ :: Term arg result => arg -> result
+right_off_canvas_menu_ =
+  termWith "nav" [class_ "right-off-canvas-menu"]
+
+
+left_off_canvas_toggle_ :: T.Text
+left_off_canvas_toggle_ = " left-off-canvas-toggle "
+
+right_off_canvas_toggle_ :: T.Text
+right_off_canvas_toggle_ = " right-off-canvas-toggle "
+
+exit_off_canvas_ :: T.Text
+exit_off_canvas_ = " exit-off-canvas "
+
+
+left_small_ :: Term arg result => arg -> result
+left_small_ =
+  termWith "div" [class_ "left-small"]
+
+right_small_ :: Term arg result => arg -> result
+right_small_ =
+  termWith "div" [class_ "right-small"]
+
+off_canvas_list_ :: Term arg result => arg -> result
+off_canvas_list_ =
+  termWith "ul" [class_ "off-canvas-list"]
+
+
diff --git a/src/Lucid/Foundation/Navigation/Pagination.hs b/src/Lucid/Foundation/Navigation/Pagination.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation/Pagination.hs
@@ -0,0 +1,18 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Navigation.Pagination where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+pagination_ :: Term arg result => arg -> result
+pagination_ = termWith
+  "ul" [class_ "pagination"]
+
+arrow_ :: T.Text
+arrow_ = " arrow "
+
diff --git a/src/Lucid/Foundation/Navigation/SideNav.hs b/src/Lucid/Foundation/Navigation/SideNav.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation/SideNav.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Navigation.SideNav where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+side_nav_ :: Term arg result => arg -> result
+side_nav_ =
+  termWith "ul" [class_ "side-nav"]
diff --git a/src/Lucid/Foundation/Navigation/SubNav.hs b/src/Lucid/Foundation/Navigation/SubNav.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation/SubNav.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Navigation.SubNav where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+sub_nav_ :: Term arg result => arg -> result
+sub_nav_ =
+  termWith "dd" [class_ "sub-nav"]
diff --git a/src/Lucid/Foundation/Navigation/TopBar.hs b/src/Lucid/Foundation/Navigation/TopBar.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Navigation/TopBar.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LAnGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Navigation.TopBar where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+fixed_ :: Term arg result => arg -> result
+fixed_ =
+  termWith "div" [class_ "fixed"]
+
+contain_to_grid_ :: Term arg result => arg -> result
+contain_to_grid_ =
+  termWith "div" [class_ "contain-to-grid"]
+
+data_topbar_ :: Attribute
+data_topbar_ = data_ "topbar" ""
+
+top_bar_ :: T.Text
+top_bar_ = " top-bar "
+
+sticky_ :: T.Text
+sticky_ = " sticky "
+
+sticky_on_ :: T.Text -> Attribute
+sticky_on_ size =
+  data_ "options" ("sticky_on: " <> size)
+
+clickable_ :: Attribute
+clickable_ =
+  data_ "options" "is_hover: false"
+
+divider_ :: Monad m => HtmlT m ()
+divider_ =
+  li_ [class_ "divider"] mempty
+
+title_area_ :: Term arg result => arg -> result
+title_area_ =
+  termWith "ul" [class_ "title-area"]
+
+
+
+
diff --git a/src/Lucid/Foundation/Structure.hs b/src/Lucid/Foundation/Structure.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Structure.hs
@@ -0,0 +1,11 @@
+module Lucid.Foundation.Structure
+  ( module Lucid.Foundation.Structure.Utils
+  , module Lucid.Foundation.Structure.Visibility
+  , module Lucid.Foundation.Structure.Grid
+  , module Lucid.Foundation.Structure.BlockGrid
+  ) where
+
+import Lucid.Foundation.Structure.Utils
+import Lucid.Foundation.Structure.Visibility
+import Lucid.Foundation.Structure.Grid
+import Lucid.Foundation.Structure.BlockGrid
diff --git a/src/Lucid/Foundation/Structure/BlockGrid.hs b/src/Lucid/Foundation/Structure/BlockGrid.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Structure/BlockGrid.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Structure.BlockGrid where
+
+import qualified Data.Text as T
+import Data.Monoid
+
+
+small_block_grid_ :: Int -> T.Text
+small_block_grid_ n = " small-block-grid-" <> (T.pack $ show n) <> " "
+
+medium_block_grid_ :: Int -> T.Text
+medium_block_grid_ n = " medium-block-grid-" <> (T.pack $ show n) <> " "
+
+large_block_grid_ :: Int -> T.Text
+large_block_grid_ n = " large-block-grid-" <> (T.pack $ show n) <> " "
diff --git a/src/Lucid/Foundation/Structure/Grid.hs b/src/Lucid/Foundation/Structure/Grid.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Structure/Grid.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+-- | We can't lens into DOM on the server-side, yet, so we've made some auxilliary functions
+-- for creating @row_@ @<div>@ tags, and some class names for creating columns.
+-- .
+-- Use them like this:
+-- .
+-- >  div_ [class_ $ mconcat [ row_
+-- >                         , small_collapsed_
+-- >                         , large_uncollapsed_ ]] $
+-- >     div_ [class_ $ mconcat [ columns_
+-- >                            , small_ 6
+-- >                            , medium_ 4
+-- >                            , large_ 3
+-- >                            , small_centered_
+-- >                            , large_uncentered_
+-- >                            , small_push_ 6
+-- >                            , medium_pull_ 4
+-- >                            , large_reset_order_ ]] $
+-- >        -- rest of DOM...
+
+module Lucid.Foundation.Structure.Grid where
+
+import Lucid.Base
+import Lucid.Html5
+
+import qualified Data.Text as T
+import Data.Monoid
+
+row_ :: T.Text
+row_ = " row "
+
+small_collapsed_ :: T.Text
+small_collapsed_ = " small-collapsed "
+
+medium_collapsed_ :: T.Text
+medium_collapsed_ = " medium-collapsed "
+
+large_collapsed_ :: T.Text
+large_collapsed_ = " large-collapsed "
+
+medium_uncollapsed_ :: T.Text
+medium_uncollapsed_ = " medium-uncollapsed "
+
+large_uncollapsed_ :: T.Text
+large_uncollapsed_ = " large-uncollapsed "
+
+
+columns_ :: T.Text
+columns_ = " columns "
+
+small_ :: Int -> T.Text
+small_ n = " small-" <> (T.pack $ show n) <> " "
+
+medium_ :: Int -> T.Text
+medium_ n = " medium-" <> (T.pack $ show n) <> " "
+
+large_ :: Int -> T.Text
+large_ n = " large-" <> (T.pack $ show n) <> " "
+
+small_offset_ :: Int -> T.Text
+small_offset_ n = " small-offset-" <> (T.pack $ show n) <> " "
+
+medium_offset_ :: Int -> T.Text
+medium_offset_ n = " medium-offset-" <> (T.pack $ show n) <> " "
+
+large_offset_ :: Int -> T.Text
+large_offset_ n = " large-offset-" <> (T.pack $ show n) <> " "
+
+small_centered_ :: T.Text
+small_centered_ = " small-centered "
+
+medium_centered_ :: T.Text
+medium_centered_ = " medium-centered "
+
+large_centered_ :: T.Text
+large_centered_ = " large-centered "
+
+small_uncentered_ :: T.Text
+small_uncentered_ = " small-uncentered "
+
+medium_uncentered_ :: T.Text
+medium_uncentered_ = " medium-uncentered "
+
+large_uncentered_ :: T.Text
+large_uncentered_ = " large-uncentered "
+small_push_ :: Int -> T.Text
+small_push_ n = " small-push-" <> (T.pack $ show n) <> " "
+
+medium_push_ :: Int -> T.Text
+medium_push_ n = " medium-push-" <> (T.pack $ show n) <> " "
+
+large_push_ :: Int -> T.Text
+large_push_ n = " large-push-" <> (T.pack $ show n) <> " "
+
+small_pull_ :: Int -> T.Text
+small_pull_ n = " small-pull-" <> (T.pack $ show n) <> " "
+
+medium_pull_ :: Int -> T.Text
+medium_pull_ n = " medium-pull-" <> (T.pack $ show n) <> " "
+
+large_pull_ :: Int -> T.Text
+large_pull_ n = " large-pull-" <> (T.pack $ show n) <> " "
+
+small_reset_order_ :: T.Text
+small_reset_order_ = " small-reset-order "
+
+medium_reset_order_ :: T.Text
+medium_reset_order_ = " medium-reset-order "
+
+large_reset_order_ :: T.Text
+large_reset_order_ = " large-reset-order "
diff --git a/src/Lucid/Foundation/Structure/Utils.hs b/src/Lucid/Foundation/Structure/Utils.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Structure/Utils.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Structure.Utils where
+
+import qualified Data.Text as T
+import Data.Monoid
+
+
+clearfix_ :: T.Text
+clearfix_ = " clearfix "
+
+left_ :: T.Text
+left_ = " left "
+
+right_ :: T.Text
+right_ = " right "
+
+
+radius_ :: T.Text
+radius_ = " radius "
+
+round_ ::T.Text
+round_ = " round "
+
+
+text_left_ :: T.Text
+text_left_ = " text-left "
+
+text_right_ :: T.Text
+text_right_ = " text-right "
+
+text_center_ :: T.Text
+text_center_ = " text-center "
+
+text_justify_ :: T.Text
+text_justify_ = " text-justify "
+
+
+small_text_left_ :: T.Text
+small_text_left_ = " small-text-left "
+
+small_text_right_ :: T.Text
+small_text_right_ = " small-text-right "
+
+small_text_center_ :: T.Text
+small_text_center_ = " small-text-center "
+
+small_text_justify_ :: T.Text
+small_text_justify_ = " small-text-justify "
+
+
+medium_text_left_ :: T.Text
+medium_text_left_ = " medium-text-left "
+
+medium_text_right_ :: T.Text
+medium_text_right_ = " medium-text-right "
+
+medium_text_center_ :: T.Text
+medium_text_center_ = " medium-text-center "
+
+medium_text_justify_ :: T.Text
+medium_text_justify_ = " medium-text-justify "
+
+
+large_text_left_ :: T.Text
+large_text_left_ = " large-text-left "
+
+large_text_right_ :: T.Text
+large_text_right_ = " large-text-right "
+
+large_text_center_ :: T.Text
+large_text_center_ = " large-text-center "
+
+large_text_justify_ :: T.Text
+large_text_justify_ = " large-text-justify "
+
+
+xlarge_text_left_ :: T.Text
+xlarge_text_left_ = " xlarge-text-left "
+
+xlarge_text_right_ :: T.Text
+xlarge_text_right_ = " xlarge-text-right "
+
+xlarge_text_center_ :: T.Text
+xlarge_text_center_ = " xlarge-text-center "
+
+xlarge_text_justify_ :: T.Text
+xlarge_text_justify_ = " xlarge-text-justify "
+
+
+xxlarge_text_left_ :: T.Text
+xxlarge_text_left_ = " xxlarge-text-left "
+
+xxlarge_text_right_ :: T.Text
+xxlarge_text_right_ = " xxlarge-text-right "
+
+xxlarge_text_center_ :: T.Text
+xxlarge_text_center_ = " xxlarge-text-center "
+
+xxlarge_text_justify_ :: T.Text
+xxlarge_text_justify_ = " xxlarge-text-justify "
+
+
+hide_ :: T.Text
+hide_ = " hide "
diff --git a/src/Lucid/Foundation/Structure/Visibility.hs b/src/Lucid/Foundation/Structure/Visibility.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Structure/Visibility.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Structure.Visibility where
+
+import qualified Data.Text as T
+
+
+show_for_small_only_ :: T.Text
+show_for_small_only_ = " show-for-small-only "
+
+show_for_medium_up_ :: T.Text
+show_for_medium_up_ = " show-for-medium-up "
+
+show_for_medium_only_ :: T.Text
+show_for_medium_only_ = " show-for-medium-only "
+
+show_for_large_up_ :: T.Text
+show_for_large_up_ = " show-for-large-up "
+
+show_for_large_only_ :: T.Text
+show_for_large_only_ = " show-for-large-only "
+
+show_for_xlarge_up_ :: T.Text
+show_for_xlarge_up_ = " show-for-xlarge-up "
+
+show_for_xlarge_only_ :: T.Text
+show_for_xlarge_only_ = " show-for-xlarge-only "
+
+show_for_xxlarge_up_ :: T.Text
+show_for_xxlarge_up_ = " show-for-xxlarge-up "
+
+
+hide_for_small_only_ :: T.Text
+hide_for_small_only_ = " hide-for-small-only "
+
+hide_for_medium_up_ :: T.Text
+hide_for_medium_up_ = " hide-for-medium-up "
+
+hide_for_medium_only_ :: T.Text
+hide_for_medium_only_ = " hide-for-medium-only "
+
+hide_for_large_up_ :: T.Text
+hide_for_large_up_ = " hide-for-large-up "
+
+hide_for_large_only_ :: T.Text
+hide_for_large_only_ = " hide-for-large-only "
+
+hide_for_xlarge_up_ :: T.Text
+hide_for_xlarge_up_ = " hide-for-xlarge-up "
+
+hide_for_xlarge_only_ :: T.Text
+hide_for_xlarge_only_ = " hide-for-xlarge-only "
+
+hide_for_xxlarge_up_ :: T.Text
+hide_for_xxlarge_up_ = " hide-for-xxlarge-up "
+
+
+show_for_landscape_ :: T.Text
+show_for_landscape_ = " show-for-landscape "
+
+show_for_portrait_ :: T.Text
+show_for_portrait_ = " show-for-portrait "
+
+
+show_for_touch_ :: T.Text
+show_for_touch_ = " show-for-touch "
+
+hide_for_touch_ :: T.Text
+hide_for_touch_ = " hide-for-touch "
+
+
+hidden_for_small_only_ :: T.Text
+hidden_for_small_only_ = " hidden-for-small-only "
+
+hidden_for_medium_up_ :: T.Text
+hidden_for_medium_up_ = " hidden-for-medium-up "
+
+hidden_for_medium_only_ :: T.Text
+hidden_for_medium_only_ = " hidden-for-medium-only "
+
+hidden_for_large_up_ :: T.Text
+hidden_for_large_up_ = " hidden-for-large-up "
+
+hidden_for_large_only_ :: T.Text
+hidden_for_large_only_ = " hidden-for-large-only "
+
+hidden_for_xlarge_up_ :: T.Text
+hidden_for_xlarge_up_ = " hidden-for-xlarge-up "
+
+hidden_for_xlarge_only_ :: T.Text
+hidden_for_xlarge_only_ = " hidden-for-xlarge-only "
+
+hidden_for_xxlarge_up_ :: T.Text
+hidden_for_xxlarge_up_ = " hidden-for-xxlarge-up "
+
+
+visible_for_small_only_ :: T.Text
+visible_for_small_only_ = " visible-for-small-only "
+
+visible_for_medium_up_ :: T.Text
+visible_for_medium_up_ = " visible-for-medium-up "
+
+visible_for_medium_only_ :: T.Text
+visible_for_medium_only_ = " visible-for-medium-only "
+
+visible_for_large_up_ :: T.Text
+visible_for_large_up_ = " visible-for-large-up "
+
+visible_for_large_only_ :: T.Text
+visible_for_large_only_ = " visible-for-large-only "
+
+visible_for_xlarge_up_ :: T.Text
+visible_for_xlarge_up_ = " visible-for-xlarge-up "
+
+visible_for_xlarge_only_ :: T.Text
+visible_for_xlarge_only_ = " visible-for-xlarge-only "
+
+visible_for_xxlarge_up_ :: T.Text
+visible_for_xxlarge_up_ = " visible-for-xxlarge-up "
+
+
+show_for_print_ :: T.Text
+show_for_print_ = " show-for-print "
+
+hide_for_print_ :: T.Text
+hide_for_print_ = " hide-for-print "
+
+print_only_ :: T.Text
+print_only_ = " print-only "
+
+hide_on_print_ :: T.Text
+hide_on_print_ = " hide-on-print "
+
diff --git a/src/Lucid/Foundation/Typography.hs b/src/Lucid/Foundation/Typography.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Typography.hs
@@ -0,0 +1,9 @@
+module Lucid.Foundation.Typography
+  ( module Lucid.Foundation.Typography.Types
+  , module Lucid.Foundation.Typography.InlineList
+  , module Lucid.Foundation.Typography.Labels
+  ) where
+
+import Lucid.Foundation.Typography.Types
+import Lucid.Foundation.Typography.InlineList
+import Lucid.Foundation.Typography.Labels
diff --git a/src/Lucid/Foundation/Typography/InlineList.hs b/src/Lucid/Foundation/Typography/InlineList.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Typography/InlineList.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Typography.InlineList where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+inline_list_ :: T.Text
+inline_list_ = " inline-list "
+
diff --git a/src/Lucid/Foundation/Typography/Labels.hs b/src/Lucid/Foundation/Typography/Labels.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Typography/Labels.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Typography.Labels where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+label_ :: T.Text
+label_ = " label "
+
+
diff --git a/src/Lucid/Foundation/Typography/Types.hs b/src/Lucid/Foundation/Typography/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Lucid/Foundation/Typography/Types.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ExtendedDefaultRules #-}
+
+module Lucid.Foundation.Typography.Types where
+
+import Lucid.Base
+import Lucid.Html5
+import qualified Data.Text as T
+import Data.Monoid
+
+
+subheader_ :: T.Text
+subheader_ = " subheader "
+
+disc_ :: T.Text
+disc_ = " disc "
+
+circle_ :: T.Text
+circle_ = " circle "
+
+square_ :: T.Text
+square_ = " square "
+
+no_bullet_ :: T.Text
+no_bullet_ = " no-bullet "
+
+
